197fb5e8dSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
225fdd593SJeykumar Sankaran /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
353324b99SAbhinav Kumar  * Copyright (c) 2022. Qualcomm Innovation Center, Inc. All rights reserved.
425fdd593SJeykumar Sankaran  */
525fdd593SJeykumar Sankaran 
625fdd593SJeykumar Sankaran #define pr_fmt(fmt)	"[drm:%s:%d] " fmt, __func__, __LINE__
725fdd593SJeykumar Sankaran #include <linux/slab.h>
825fdd593SJeykumar Sankaran #include <linux/of_address.h>
925fdd593SJeykumar Sankaran #include <linux/platform_device.h>
1025fdd593SJeykumar Sankaran #include "dpu_hw_mdss.h"
11597762d5SDmitry Baryshkov #include "dpu_hw_interrupts.h"
1225fdd593SJeykumar Sankaran #include "dpu_hw_catalog.h"
1325fdd593SJeykumar Sankaran #include "dpu_kms.h"
1425fdd593SJeykumar Sankaran 
157bdc0c4bSKalyan Thota #define VIG_MASK \
167bdc0c4bSKalyan Thota 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
17b8dab65bSAngeloGioacchino Del Regno 	BIT(DPU_SSPP_CSC_10BIT) | BIT(DPU_SSPP_CDP) |\
1825fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_EXCL_RECT))
1925fdd593SJeykumar Sankaran 
2094391a14SAngeloGioacchino Del Regno #define VIG_MSM8998_MASK \
2194391a14SAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_SCALER_QSEED3))
2294391a14SAngeloGioacchino Del Regno 
237bdc0c4bSKalyan Thota #define VIG_SDM845_MASK \
24b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3))
257bdc0c4bSKalyan Thota 
267bdc0c4bSKalyan Thota #define VIG_SC7180_MASK \
27b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED4))
287bdc0c4bSKalyan Thota 
29d21fc5dfSDmitry Baryshkov #define VIG_SM8250_MASK \
30095eed89SDmitry Baryshkov 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3LITE))
31d21fc5dfSDmitry Baryshkov 
325334087eSLoic Poulain #define VIG_QCM2290_MASK (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL))
335334087eSLoic Poulain 
3494391a14SAngeloGioacchino Del Regno #define DMA_MSM8998_MASK \
3594391a14SAngeloGioacchino Del Regno 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
3694391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
3794391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
3894391a14SAngeloGioacchino Del Regno 
39dabfdd89SVinod Polimera #define VIG_SC7280_MASK \
40dabfdd89SVinod Polimera 	(VIG_SC7180_MASK | BIT(DPU_SSPP_INLINE_ROTATION))
41dabfdd89SVinod Polimera 
4225fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \
4325fdd593SJeykumar Sankaran 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\
4425fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
4525fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
4625fdd593SJeykumar Sankaran 
4707ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \
4807ca1fc0SSravanthi Kollukuduru 	(DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR))
4907ca1fc0SSravanthi Kollukuduru 
5094391a14SAngeloGioacchino Del Regno #define DMA_CURSOR_MSM8998_MASK \
5194391a14SAngeloGioacchino Del Regno 	(DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR))
5294391a14SAngeloGioacchino Del Regno 
532d8a4edbSDmitry Baryshkov #define MIXER_MSM8998_MASK \
5425fdd593SJeykumar Sankaran 	(BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER))
5525fdd593SJeykumar Sankaran 
562d8a4edbSDmitry Baryshkov #define MIXER_SDM845_MASK \
572d8a4edbSDmitry Baryshkov 	(BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER) | BIT(DPU_MIXER_COMBINED_ALPHA))
582d8a4edbSDmitry Baryshkov 
597bdc0c4bSKalyan Thota #define MIXER_SC7180_MASK \
602d8a4edbSDmitry Baryshkov 	(BIT(DPU_DIM_LAYER) | BIT(DPU_MIXER_COMBINED_ALPHA))
617bdc0c4bSKalyan Thota 
6225fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER)
6325fdd593SJeykumar Sankaran 
6425fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \
6525fdd593SJeykumar Sankaran 	(PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2))
6625fdd593SJeykumar Sankaran 
67591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \
6844bf8704SKalyan Thota 	(BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE) | BIT(DPU_CTL_VM_CFG))
69591e34a0SKrishna Manikandan 
704369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0)
714369c93cSDmitry Baryshkov 
7294391a14SAngeloGioacchino Del Regno #define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC)
7394391a14SAngeloGioacchino Del Regno 
744259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
75e47616dfSKalyan Thota 
76cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0)
77cace3ac4SJonathan Marek 
78cace3ac4SJonathan Marek #define INTF_SC7180_MASK BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE)
79cace3ac4SJonathan Marek 
80591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN)
81591e34a0SKrishna Manikandan 
82597762d5SDmitry Baryshkov #define IRQ_SDM845_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
83597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
84597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
85597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
86597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
87597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
88597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
89597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_0_INTR) | \
90597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_1_INTR))
91597762d5SDmitry Baryshkov 
92597762d5SDmitry Baryshkov #define IRQ_SC7180_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
93597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
94597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
95597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
96597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR))
97597762d5SDmitry Baryshkov 
98597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
99597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
100597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
101597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
102597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
103597762d5SDmitry Baryshkov 			 BIT(MDP_INTF5_7xxx_INTR))
104597762d5SDmitry Baryshkov 
105597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
106597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
107597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
108597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
109597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
110597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
111597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
112597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR))
113597762d5SDmitry Baryshkov 
114f3af2d6eSRob Clark #define IRQ_SC8180X_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
115f3af2d6eSRob Clark 			  BIT(MDP_SSPP_TOP0_INTR2) | \
116f3af2d6eSRob Clark 			  BIT(MDP_SSPP_TOP0_HIST_INTR) | \
117f3af2d6eSRob Clark 			  BIT(MDP_INTF0_INTR) | \
118f3af2d6eSRob Clark 			  BIT(MDP_INTF1_INTR) | \
119f3af2d6eSRob Clark 			  BIT(MDP_INTF2_INTR) | \
120f3af2d6eSRob Clark 			  BIT(MDP_INTF3_INTR) | \
121f3af2d6eSRob Clark 			  BIT(MDP_INTF4_INTR) | \
122f3af2d6eSRob Clark 			  BIT(MDP_INTF5_INTR) | \
123f3af2d6eSRob Clark 			  BIT(MDP_AD4_0_INTR) | \
124f3af2d6eSRob Clark 			  BIT(MDP_AD4_1_INTR))
125597762d5SDmitry Baryshkov 
126*100d7ef6SDmitry Baryshkov #define IRQ_SM8450_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
127*100d7ef6SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
128*100d7ef6SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
129*100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
130*100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
131*100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF2_7xxx_INTR) | \
132*100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF3_7xxx_INTR))
133*100d7ef6SDmitry Baryshkov 
13453324b99SAbhinav Kumar #define WB_SM8250_MASK (BIT(DPU_WB_LINE_MODE) | \
13553324b99SAbhinav Kumar 			 BIT(DPU_WB_UBWC) | \
13653324b99SAbhinav Kumar 			 BIT(DPU_WB_YUV_CONFIG) | \
13753324b99SAbhinav Kumar 			 BIT(DPU_WB_PIPE_ALPHA) | \
13853324b99SAbhinav Kumar 			 BIT(DPU_WB_XY_ROI_OFFSET) | \
13953324b99SAbhinav Kumar 			 BIT(DPU_WB_QOS) | \
14053324b99SAbhinav Kumar 			 BIT(DPU_WB_QOS_8LVL) | \
14153324b99SAbhinav Kumar 			 BIT(DPU_WB_CDP) | \
14253324b99SAbhinav Kumar 			 BIT(DPU_WB_INPUT_CTRL))
14353324b99SAbhinav Kumar 
14425fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE		(50 * 1024)
14525fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH		2048
14625fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH	2560
14725fdd593SJeykumar Sankaran 
14825fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION	4
14925fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION	4
15025fdd593SJeykumar Sankaran 
15125fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO	20
15225fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO	4
15325fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE	1
15425fdd593SJeykumar Sankaran 
15525fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y)
15625fdd593SJeykumar Sankaran 
15709c7e370SLee Jones static const uint32_t plane_formats[] = {
15809c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
15909c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
16009c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
16109c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
16209c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
16309c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
16409c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
16509c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
166da7716a2SJessica Zhang 	DRM_FORMAT_XRGB2101010,
16709c7e370SLee Jones 	DRM_FORMAT_RGB888,
16809c7e370SLee Jones 	DRM_FORMAT_BGR888,
16909c7e370SLee Jones 	DRM_FORMAT_RGB565,
17009c7e370SLee Jones 	DRM_FORMAT_BGR565,
17109c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
17209c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
17309c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
17409c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
17509c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
17609c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
17709c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
17809c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
17909c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
18009c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
18109c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
18209c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
18309c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
18409c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
18509c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
18609c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
18709c7e370SLee Jones };
18809c7e370SLee Jones 
18909c7e370SLee Jones static const uint32_t plane_formats_yuv[] = {
19009c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
19109c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
19209c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
19309c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
19409c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
195da7716a2SJessica Zhang 	DRM_FORMAT_XRGB2101010,
19609c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
19709c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
19809c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
19909c7e370SLee Jones 	DRM_FORMAT_RGB888,
20009c7e370SLee Jones 	DRM_FORMAT_BGR888,
20109c7e370SLee Jones 	DRM_FORMAT_RGB565,
20209c7e370SLee Jones 	DRM_FORMAT_BGR565,
20309c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
20409c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
20509c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
20609c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
20709c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
20809c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
20909c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
21009c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
21109c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
21209c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
21309c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
21409c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
21509c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
21609c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
21709c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
21809c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
21909c7e370SLee Jones 
220f07c9946SJessica Zhang 	DRM_FORMAT_P010,
22109c7e370SLee Jones 	DRM_FORMAT_NV12,
22209c7e370SLee Jones 	DRM_FORMAT_NV21,
22309c7e370SLee Jones 	DRM_FORMAT_NV16,
22409c7e370SLee Jones 	DRM_FORMAT_NV61,
22509c7e370SLee Jones 	DRM_FORMAT_VYUY,
22609c7e370SLee Jones 	DRM_FORMAT_UYVY,
22709c7e370SLee Jones 	DRM_FORMAT_YUYV,
22809c7e370SLee Jones 	DRM_FORMAT_YVYU,
22909c7e370SLee Jones 	DRM_FORMAT_YUV420,
23009c7e370SLee Jones 	DRM_FORMAT_YVU420,
23109c7e370SLee Jones };
23209c7e370SLee Jones 
233dabfdd89SVinod Polimera static const u32 rotation_v2_formats[] = {
234dabfdd89SVinod Polimera 	DRM_FORMAT_NV12,
235dabfdd89SVinod Polimera 	/* TODO add formats after validation */
236dabfdd89SVinod Polimera };
237dabfdd89SVinod Polimera 
23853324b99SAbhinav Kumar static const uint32_t wb2_formats[] = {
23953324b99SAbhinav Kumar 	DRM_FORMAT_RGB565,
24053324b99SAbhinav Kumar 	DRM_FORMAT_BGR565,
24153324b99SAbhinav Kumar 	DRM_FORMAT_RGB888,
24253324b99SAbhinav Kumar 	DRM_FORMAT_ARGB8888,
24353324b99SAbhinav Kumar 	DRM_FORMAT_RGBA8888,
24453324b99SAbhinav Kumar 	DRM_FORMAT_ABGR8888,
24553324b99SAbhinav Kumar 	DRM_FORMAT_XRGB8888,
24653324b99SAbhinav Kumar 	DRM_FORMAT_RGBX8888,
24753324b99SAbhinav Kumar 	DRM_FORMAT_XBGR8888,
24853324b99SAbhinav Kumar 	DRM_FORMAT_ARGB1555,
24953324b99SAbhinav Kumar 	DRM_FORMAT_RGBA5551,
25053324b99SAbhinav Kumar 	DRM_FORMAT_XRGB1555,
25153324b99SAbhinav Kumar 	DRM_FORMAT_RGBX5551,
25253324b99SAbhinav Kumar 	DRM_FORMAT_ARGB4444,
25353324b99SAbhinav Kumar 	DRM_FORMAT_RGBA4444,
25453324b99SAbhinav Kumar 	DRM_FORMAT_RGBX4444,
25553324b99SAbhinav Kumar 	DRM_FORMAT_XRGB4444,
25653324b99SAbhinav Kumar 	DRM_FORMAT_BGR565,
25753324b99SAbhinav Kumar 	DRM_FORMAT_BGR888,
25853324b99SAbhinav Kumar 	DRM_FORMAT_ABGR8888,
25953324b99SAbhinav Kumar 	DRM_FORMAT_BGRA8888,
26053324b99SAbhinav Kumar 	DRM_FORMAT_BGRX8888,
26153324b99SAbhinav Kumar 	DRM_FORMAT_XBGR8888,
26253324b99SAbhinav Kumar 	DRM_FORMAT_ABGR1555,
26353324b99SAbhinav Kumar 	DRM_FORMAT_BGRA5551,
26453324b99SAbhinav Kumar 	DRM_FORMAT_XBGR1555,
26553324b99SAbhinav Kumar 	DRM_FORMAT_BGRX5551,
26653324b99SAbhinav Kumar 	DRM_FORMAT_ABGR4444,
26753324b99SAbhinav Kumar 	DRM_FORMAT_BGRA4444,
26853324b99SAbhinav Kumar 	DRM_FORMAT_BGRX4444,
26953324b99SAbhinav Kumar 	DRM_FORMAT_XBGR4444,
27053324b99SAbhinav Kumar };
27153324b99SAbhinav Kumar 
27225fdd593SJeykumar Sankaran /*************************************************************
27325fdd593SJeykumar Sankaran  * DPU sub blocks config
27425fdd593SJeykumar Sankaran  *************************************************************/
27525fdd593SJeykumar Sankaran /* DPU top level caps */
27694391a14SAngeloGioacchino Del Regno static const struct dpu_caps msm8998_dpu_caps = {
27794391a14SAngeloGioacchino Del Regno 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
27894391a14SAngeloGioacchino Del Regno 	.max_mixer_blendstages = 0x7,
27994391a14SAngeloGioacchino Del Regno 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
28094391a14SAngeloGioacchino Del Regno 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V1,
28194391a14SAngeloGioacchino Del Regno 	.ubwc_version = DPU_HW_UBWC_VER_10,
28294391a14SAngeloGioacchino Del Regno 	.has_src_split = true,
28394391a14SAngeloGioacchino Del Regno 	.has_dim_layer = true,
28494391a14SAngeloGioacchino Del Regno 	.has_idle_pc = true,
28594391a14SAngeloGioacchino Del Regno 	.has_3d_merge = true,
28694391a14SAngeloGioacchino Del Regno 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
28794391a14SAngeloGioacchino Del Regno 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
28894391a14SAngeloGioacchino Del Regno 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
28994391a14SAngeloGioacchino Del Regno 	.max_vdeci_exp = MAX_VERT_DECIMATION,
29094391a14SAngeloGioacchino Del Regno };
29194391a14SAngeloGioacchino Del Regno 
292c162352eSKonrad Dybcio static const struct dpu_caps qcm2290_dpu_caps = {
293c162352eSKonrad Dybcio 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
294c162352eSKonrad Dybcio 	.max_mixer_blendstages = 0x4,
295c162352eSKonrad Dybcio 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
296c162352eSKonrad Dybcio 	.ubwc_version = DPU_HW_UBWC_VER_20,
297c162352eSKonrad Dybcio 	.has_dim_layer = true,
298c162352eSKonrad Dybcio 	.has_idle_pc = true,
299c162352eSKonrad Dybcio 	.max_linewidth = 2160,
300c162352eSKonrad Dybcio 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
301c162352eSKonrad Dybcio };
302c162352eSKonrad Dybcio 
30325fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = {
30425fdd593SJeykumar Sankaran 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
30525fdd593SJeykumar Sankaran 	.max_mixer_blendstages = 0xb,
30625fdd593SJeykumar Sankaran 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
30725fdd593SJeykumar Sankaran 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
30825fdd593SJeykumar Sankaran 	.ubwc_version = DPU_HW_UBWC_VER_20,
30925fdd593SJeykumar Sankaran 	.has_src_split = true,
31025fdd593SJeykumar Sankaran 	.has_dim_layer = true,
31125fdd593SJeykumar Sankaran 	.has_idle_pc = true,
31242a558b7SKalyan Thota 	.has_3d_merge = true,
3137e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3147e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3157e9d4cddSJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
3167e9d4cddSJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
31725fdd593SJeykumar Sankaran };
31825fdd593SJeykumar Sankaran 
3197bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = {
3207bdc0c4bSKalyan Thota 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3217bdc0c4bSKalyan Thota 	.max_mixer_blendstages = 0x9,
3227bdc0c4bSKalyan Thota 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
3237bdc0c4bSKalyan Thota 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
3247bdc0c4bSKalyan Thota 	.ubwc_version = DPU_HW_UBWC_VER_20,
3257bdc0c4bSKalyan Thota 	.has_dim_layer = true,
3267bdc0c4bSKalyan Thota 	.has_idle_pc = true,
3277e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3287e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3297bdc0c4bSKalyan Thota };
3307bdc0c4bSKalyan Thota 
3313581b706SAdam Skladowski static const struct dpu_caps sm6115_dpu_caps = {
3323581b706SAdam Skladowski 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3333581b706SAdam Skladowski 	.max_mixer_blendstages = 0x4,
3343581b706SAdam Skladowski 	.qseed_type = DPU_SSPP_SCALER_QSEED3LITE,
3353581b706SAdam Skladowski 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
3363581b706SAdam Skladowski 	.ubwc_version = DPU_HW_UBWC_VER_20,
3373581b706SAdam Skladowski 	.has_dim_layer = true,
3383581b706SAdam Skladowski 	.has_idle_pc = true,
3393581b706SAdam Skladowski 	.max_linewidth = 2160,
3403581b706SAdam Skladowski 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3413581b706SAdam Skladowski };
3423581b706SAdam Skladowski 
343386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = {
344386fced3SJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
345386fced3SJonathan Marek 	.max_mixer_blendstages = 0xb,
346386fced3SJonathan Marek 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
347386fced3SJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
348386fced3SJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_30,
349386fced3SJonathan Marek 	.has_src_split = true,
350386fced3SJonathan Marek 	.has_dim_layer = true,
351386fced3SJonathan Marek 	.has_idle_pc = true,
352386fced3SJonathan Marek 	.has_3d_merge = true,
353386fced3SJonathan Marek 	.max_linewidth = 4096,
354386fced3SJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
355386fced3SJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
356386fced3SJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
357386fced3SJonathan Marek };
358386fced3SJonathan Marek 
359f3af2d6eSRob Clark static const struct dpu_caps sc8180x_dpu_caps = {
360f3af2d6eSRob Clark 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
361f3af2d6eSRob Clark 	.max_mixer_blendstages = 0xb,
362f3af2d6eSRob Clark 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
363f3af2d6eSRob Clark 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
364f3af2d6eSRob Clark 	.ubwc_version = DPU_HW_UBWC_VER_30,
365f3af2d6eSRob Clark 	.has_src_split = true,
366f3af2d6eSRob Clark 	.has_dim_layer = true,
367f3af2d6eSRob Clark 	.has_idle_pc = true,
368f3af2d6eSRob Clark 	.has_3d_merge = true,
369f3af2d6eSRob Clark 	.max_linewidth = 4096,
370f3af2d6eSRob Clark 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
371f3af2d6eSRob Clark 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
372f3af2d6eSRob Clark 	.max_vdeci_exp = MAX_VERT_DECIMATION,
373f3af2d6eSRob Clark };
374f3af2d6eSRob Clark 
375af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = {
376af776a3eSJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
377af776a3eSJonathan Marek 	.max_mixer_blendstages = 0xb,
378d21fc5dfSDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED3LITE,
379af776a3eSJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
380af776a3eSJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_40,
381af776a3eSJonathan Marek 	.has_src_split = true,
382af776a3eSJonathan Marek 	.has_dim_layer = true,
383af776a3eSJonathan Marek 	.has_idle_pc = true,
384af776a3eSJonathan Marek 	.has_3d_merge = true,
385af776a3eSJonathan Marek 	.max_linewidth = 4096,
386af776a3eSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
387af776a3eSJonathan Marek };
388af776a3eSJonathan Marek 
389*100d7ef6SDmitry Baryshkov static const struct dpu_caps sm8450_dpu_caps = {
390*100d7ef6SDmitry Baryshkov 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
391*100d7ef6SDmitry Baryshkov 	.max_mixer_blendstages = 0xb,
392*100d7ef6SDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
393*100d7ef6SDmitry Baryshkov 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
394*100d7ef6SDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_40,
395*100d7ef6SDmitry Baryshkov 	.has_src_split = true,
396*100d7ef6SDmitry Baryshkov 	.has_dim_layer = true,
397*100d7ef6SDmitry Baryshkov 	.has_idle_pc = true,
398*100d7ef6SDmitry Baryshkov 	.has_3d_merge = true,
399*100d7ef6SDmitry Baryshkov 	.max_linewidth = 5120,
400*100d7ef6SDmitry Baryshkov 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
401*100d7ef6SDmitry Baryshkov };
402*100d7ef6SDmitry Baryshkov 
403591e34a0SKrishna Manikandan static const struct dpu_caps sc7280_dpu_caps = {
404591e34a0SKrishna Manikandan 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
405591e34a0SKrishna Manikandan 	.max_mixer_blendstages = 0x7,
406591e34a0SKrishna Manikandan 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
407591e34a0SKrishna Manikandan 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
408591e34a0SKrishna Manikandan 	.ubwc_version = DPU_HW_UBWC_VER_30,
409591e34a0SKrishna Manikandan 	.has_dim_layer = true,
410591e34a0SKrishna Manikandan 	.has_idle_pc = true,
411591e34a0SKrishna Manikandan 	.max_linewidth = 2400,
412591e34a0SKrishna Manikandan 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
413591e34a0SKrishna Manikandan };
414591e34a0SKrishna Manikandan 
41594391a14SAngeloGioacchino Del Regno static const struct dpu_mdp_cfg msm8998_mdp[] = {
41694391a14SAngeloGioacchino Del Regno 	{
41794391a14SAngeloGioacchino Del Regno 	.name = "top_0", .id = MDP_TOP,
41894391a14SAngeloGioacchino Del Regno 	.base = 0x0, .len = 0x458,
41994391a14SAngeloGioacchino Del Regno 	.features = 0,
42094391a14SAngeloGioacchino Del Regno 	.highest_bank_bit = 0x2,
42194391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
42294391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 0},
42394391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
42494391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 0},
42594391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
42694391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2BC, .bit_off = 0},
42794391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
42894391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 0},
42994391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
43094391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 8},
43194391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
43294391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 8},
43394391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
43494391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 8},
43594391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA3] = {
43694391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 12},
43794391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
43894391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3A8, .bit_off = 15},
43994391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
44094391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3B0, .bit_off = 15},
44194391a14SAngeloGioacchino Del Regno 	},
44294391a14SAngeloGioacchino Del Regno };
44394391a14SAngeloGioacchino Del Regno 
444abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = {
44525fdd593SJeykumar Sankaran 	{
44625fdd593SJeykumar Sankaran 	.name = "top_0", .id = MDP_TOP,
44725fdd593SJeykumar Sankaran 	.base = 0x0, .len = 0x45C,
44803490e11SKuogee Hsieh 	.features = BIT(DPU_MDP_AUDIO_SELECT),
44925fdd593SJeykumar Sankaran 	.highest_bank_bit = 0x2,
45025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
45125fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 0},
45225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
45325fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 0},
45425fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
45525fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 0},
45625fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
45725fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 0},
45825fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
45925fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 8},
46025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
46125fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 8},
46225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
46325fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 8},
46425fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
46525fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 8},
46625fdd593SJeykumar Sankaran 	},
46725fdd593SJeykumar Sankaran };
46825fdd593SJeykumar Sankaran 
4697bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = {
4707bdc0c4bSKalyan Thota 	{
4717bdc0c4bSKalyan Thota 	.name = "top_0", .id = MDP_TOP,
4727bdc0c4bSKalyan Thota 	.base = 0x0, .len = 0x494,
4737bdc0c4bSKalyan Thota 	.features = 0,
4747bdc0c4bSKalyan Thota 	.highest_bank_bit = 0x3,
4757bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
4767bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 0},
4777bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
4787bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 8},
4797bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
4807b149f2bSKalyan Thota 		.reg_off = 0x2B4, .bit_off = 8},
4817b149f2bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
4827b149f2bSKalyan Thota 		.reg_off = 0x2C4, .bit_off = 8},
4837bdc0c4bSKalyan Thota 	},
4847bdc0c4bSKalyan Thota };
4857bdc0c4bSKalyan Thota 
486f3af2d6eSRob Clark static const struct dpu_mdp_cfg sc8180x_mdp[] = {
487f3af2d6eSRob Clark 	{
488f3af2d6eSRob Clark 	.name = "top_0", .id = MDP_TOP,
489f3af2d6eSRob Clark 	.base = 0x0, .len = 0x45C,
490f3af2d6eSRob Clark 	.features = 0,
491f3af2d6eSRob Clark 	.highest_bank_bit = 0x3,
492f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
493f3af2d6eSRob Clark 			.reg_off = 0x2AC, .bit_off = 0},
494f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
495f3af2d6eSRob Clark 			.reg_off = 0x2B4, .bit_off = 0},
496f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
497f3af2d6eSRob Clark 			.reg_off = 0x2BC, .bit_off = 0},
498f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
499f3af2d6eSRob Clark 			.reg_off = 0x2C4, .bit_off = 0},
500f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
501f3af2d6eSRob Clark 			.reg_off = 0x2AC, .bit_off = 8},
502f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
503f3af2d6eSRob Clark 			.reg_off = 0x2B4, .bit_off = 8},
504f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
505f3af2d6eSRob Clark 			.reg_off = 0x2BC, .bit_off = 8},
506f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
507f3af2d6eSRob Clark 			.reg_off = 0x2C4, .bit_off = 8},
508f3af2d6eSRob Clark 	},
509f3af2d6eSRob Clark };
510f3af2d6eSRob Clark 
5113581b706SAdam Skladowski static const struct dpu_mdp_cfg sm6115_mdp[] = {
5123581b706SAdam Skladowski 	{
5133581b706SAdam Skladowski 	.name = "top_0", .id = MDP_TOP,
5143581b706SAdam Skladowski 	.base = 0x0, .len = 0x494,
5153581b706SAdam Skladowski 	.features = 0,
5163581b706SAdam Skladowski 	.highest_bank_bit = 0x1,
5173581b706SAdam Skladowski 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
5183581b706SAdam Skladowski 		.reg_off = 0x2ac, .bit_off = 0},
5193581b706SAdam Skladowski 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
5203581b706SAdam Skladowski 		.reg_off = 0x2ac, .bit_off = 8},
5213581b706SAdam Skladowski 	},
5223581b706SAdam Skladowski };
5233581b706SAdam Skladowski 
524af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = {
525af776a3eSJonathan Marek 	{
526af776a3eSJonathan Marek 	.name = "top_0", .id = MDP_TOP,
527b910a020SRobert Foss 	.base = 0x0, .len = 0x494,
528af776a3eSJonathan Marek 	.features = 0,
529af776a3eSJonathan Marek 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
530af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
531af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 0},
532af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
533af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 0},
534af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
535af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 0},
536af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
537af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 0},
538af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
539af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 8},
540af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
541af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 8},
542af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
543af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 8},
544af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
545af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 8},
546af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
547af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 20},
54853324b99SAbhinav Kumar 	.clk_ctrls[DPU_CLK_CTRL_WB2] = {
54953324b99SAbhinav Kumar 			.reg_off = 0x3B8, .bit_off = 24},
550af776a3eSJonathan Marek 	},
551af776a3eSJonathan Marek };
552af776a3eSJonathan Marek 
553*100d7ef6SDmitry Baryshkov static const struct dpu_mdp_cfg sm8450_mdp[] = {
554*100d7ef6SDmitry Baryshkov 	{
555*100d7ef6SDmitry Baryshkov 	.name = "top_0", .id = MDP_TOP,
556*100d7ef6SDmitry Baryshkov 	.base = 0x0, .len = 0x494,
557*100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_MDP_PERIPH_0_REMOVED),
558*100d7ef6SDmitry Baryshkov 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
559*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
560*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2AC, .bit_off = 0},
561*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
562*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2B4, .bit_off = 0},
563*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
564*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2BC, .bit_off = 0},
565*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
566*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2C4, .bit_off = 0},
567*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
568*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2AC, .bit_off = 8},
569*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
570*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2B4, .bit_off = 8},
571*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
572*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2BC, .bit_off = 8},
573*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
574*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2C4, .bit_off = 8},
575*100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
576*100d7ef6SDmitry Baryshkov 			.reg_off = 0x2BC, .bit_off = 20},
577*100d7ef6SDmitry Baryshkov 	},
578*100d7ef6SDmitry Baryshkov };
579*100d7ef6SDmitry Baryshkov 
580591e34a0SKrishna Manikandan static const struct dpu_mdp_cfg sc7280_mdp[] = {
581591e34a0SKrishna Manikandan 	{
582591e34a0SKrishna Manikandan 	.name = "top_0", .id = MDP_TOP,
583591e34a0SKrishna Manikandan 	.base = 0x0, .len = 0x2014,
584591e34a0SKrishna Manikandan 	.highest_bank_bit = 0x1,
585591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
586591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 0},
587591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
588591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 8},
589591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
590591e34a0SKrishna Manikandan 		.reg_off = 0x2B4, .bit_off = 8},
591591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
592591e34a0SKrishna Manikandan 		.reg_off = 0x2C4, .bit_off = 8},
593591e34a0SKrishna Manikandan 	},
594591e34a0SKrishna Manikandan };
595591e34a0SKrishna Manikandan 
5965334087eSLoic Poulain static const struct dpu_mdp_cfg qcm2290_mdp[] = {
5975334087eSLoic Poulain 	{
5985334087eSLoic Poulain 	.name = "top_0", .id = MDP_TOP,
5995334087eSLoic Poulain 	.base = 0x0, .len = 0x494,
6005334087eSLoic Poulain 	.features = 0,
6015334087eSLoic Poulain 	.highest_bank_bit = 0x2,
6025334087eSLoic Poulain 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
6035334087eSLoic Poulain 		.reg_off = 0x2AC, .bit_off = 0},
6045334087eSLoic Poulain 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
6055334087eSLoic Poulain 		.reg_off = 0x2AC, .bit_off = 8},
6065334087eSLoic Poulain 	},
6075334087eSLoic Poulain };
6085334087eSLoic Poulain 
60925fdd593SJeykumar Sankaran /*************************************************************
61025fdd593SJeykumar Sankaran  * CTL sub blocks config
61125fdd593SJeykumar Sankaran  *************************************************************/
61294391a14SAngeloGioacchino Del Regno static const struct dpu_ctl_cfg msm8998_ctl[] = {
61394391a14SAngeloGioacchino Del Regno 	{
61494391a14SAngeloGioacchino Del Regno 	.name = "ctl_0", .id = CTL_0,
61594391a14SAngeloGioacchino Del Regno 	.base = 0x1000, .len = 0x94,
61694391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
61794391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
61894391a14SAngeloGioacchino Del Regno 	},
61994391a14SAngeloGioacchino Del Regno 	{
62094391a14SAngeloGioacchino Del Regno 	.name = "ctl_1", .id = CTL_1,
62194391a14SAngeloGioacchino Del Regno 	.base = 0x1200, .len = 0x94,
62294391a14SAngeloGioacchino Del Regno 	.features = 0,
62394391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
62494391a14SAngeloGioacchino Del Regno 	},
62594391a14SAngeloGioacchino Del Regno 	{
62694391a14SAngeloGioacchino Del Regno 	.name = "ctl_2", .id = CTL_2,
62794391a14SAngeloGioacchino Del Regno 	.base = 0x1400, .len = 0x94,
62894391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
62994391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
63094391a14SAngeloGioacchino Del Regno 	},
63194391a14SAngeloGioacchino Del Regno 	{
63294391a14SAngeloGioacchino Del Regno 	.name = "ctl_3", .id = CTL_3,
63394391a14SAngeloGioacchino Del Regno 	.base = 0x1600, .len = 0x94,
63494391a14SAngeloGioacchino Del Regno 	.features = 0,
63594391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
63694391a14SAngeloGioacchino Del Regno 	},
63794391a14SAngeloGioacchino Del Regno 	{
63894391a14SAngeloGioacchino Del Regno 	.name = "ctl_4", .id = CTL_4,
63994391a14SAngeloGioacchino Del Regno 	.base = 0x1800, .len = 0x94,
64094391a14SAngeloGioacchino Del Regno 	.features = 0,
64194391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
64294391a14SAngeloGioacchino Del Regno 	},
64394391a14SAngeloGioacchino Del Regno };
64494391a14SAngeloGioacchino Del Regno 
645abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = {
64625fdd593SJeykumar Sankaran 	{
64725fdd593SJeykumar Sankaran 	.name = "ctl_0", .id = CTL_0,
64825fdd593SJeykumar Sankaran 	.base = 0x1000, .len = 0xE4,
649667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
650667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
65125fdd593SJeykumar Sankaran 	},
65225fdd593SJeykumar Sankaran 	{
65325fdd593SJeykumar Sankaran 	.name = "ctl_1", .id = CTL_1,
65425fdd593SJeykumar Sankaran 	.base = 0x1200, .len = 0xE4,
655667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
656667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
65725fdd593SJeykumar Sankaran 	},
65825fdd593SJeykumar Sankaran 	{
65925fdd593SJeykumar Sankaran 	.name = "ctl_2", .id = CTL_2,
66025fdd593SJeykumar Sankaran 	.base = 0x1400, .len = 0xE4,
661667e9985SDmitry Baryshkov 	.features = 0,
662667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
66325fdd593SJeykumar Sankaran 	},
66425fdd593SJeykumar Sankaran 	{
66525fdd593SJeykumar Sankaran 	.name = "ctl_3", .id = CTL_3,
66625fdd593SJeykumar Sankaran 	.base = 0x1600, .len = 0xE4,
667667e9985SDmitry Baryshkov 	.features = 0,
668667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
66925fdd593SJeykumar Sankaran 	},
67025fdd593SJeykumar Sankaran 	{
67125fdd593SJeykumar Sankaran 	.name = "ctl_4", .id = CTL_4,
67225fdd593SJeykumar Sankaran 	.base = 0x1800, .len = 0xE4,
673667e9985SDmitry Baryshkov 	.features = 0,
674667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
67525fdd593SJeykumar Sankaran 	},
67625fdd593SJeykumar Sankaran };
67725fdd593SJeykumar Sankaran 
6787bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = {
6797bdc0c4bSKalyan Thota 	{
6807bdc0c4bSKalyan Thota 	.name = "ctl_0", .id = CTL_0,
6817bdc0c4bSKalyan Thota 	.base = 0x1000, .len = 0xE4,
682667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
683667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
6847bdc0c4bSKalyan Thota 	},
6857bdc0c4bSKalyan Thota 	{
6867bdc0c4bSKalyan Thota 	.name = "ctl_1", .id = CTL_1,
6877bdc0c4bSKalyan Thota 	.base = 0x1200, .len = 0xE4,
688667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
689667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
6907bdc0c4bSKalyan Thota 	},
6917bdc0c4bSKalyan Thota 	{
6927bdc0c4bSKalyan Thota 	.name = "ctl_2", .id = CTL_2,
6937bdc0c4bSKalyan Thota 	.base = 0x1400, .len = 0xE4,
694667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
695667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
6967bdc0c4bSKalyan Thota 	},
6977bdc0c4bSKalyan Thota };
6987bdc0c4bSKalyan Thota 
699386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = {
700386fced3SJonathan Marek 	{
701386fced3SJonathan Marek 	.name = "ctl_0", .id = CTL_0,
702386fced3SJonathan Marek 	.base = 0x1000, .len = 0x1e0,
703667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
704667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
705386fced3SJonathan Marek 	},
706386fced3SJonathan Marek 	{
707386fced3SJonathan Marek 	.name = "ctl_1", .id = CTL_1,
708386fced3SJonathan Marek 	.base = 0x1200, .len = 0x1e0,
709667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
710667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
711386fced3SJonathan Marek 	},
712386fced3SJonathan Marek 	{
713386fced3SJonathan Marek 	.name = "ctl_2", .id = CTL_2,
714386fced3SJonathan Marek 	.base = 0x1400, .len = 0x1e0,
715667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
716667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
717386fced3SJonathan Marek 	},
718386fced3SJonathan Marek 	{
719386fced3SJonathan Marek 	.name = "ctl_3", .id = CTL_3,
720386fced3SJonathan Marek 	.base = 0x1600, .len = 0x1e0,
721667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
722667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
723386fced3SJonathan Marek 	},
724386fced3SJonathan Marek 	{
725386fced3SJonathan Marek 	.name = "ctl_4", .id = CTL_4,
726386fced3SJonathan Marek 	.base = 0x1800, .len = 0x1e0,
727667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
728667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
729386fced3SJonathan Marek 	},
730386fced3SJonathan Marek 	{
731386fced3SJonathan Marek 	.name = "ctl_5", .id = CTL_5,
732386fced3SJonathan Marek 	.base = 0x1a00, .len = 0x1e0,
733667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
734667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
735386fced3SJonathan Marek 	},
736386fced3SJonathan Marek };
737386fced3SJonathan Marek 
738*100d7ef6SDmitry Baryshkov static const struct dpu_ctl_cfg sm8450_ctl[] = {
739*100d7ef6SDmitry Baryshkov 	{
740*100d7ef6SDmitry Baryshkov 	.name = "ctl_0", .id = CTL_0,
741*100d7ef6SDmitry Baryshkov 	.base = 0x15000, .len = 0x204,
742*100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY) | BIT(DPU_CTL_FETCH_ACTIVE),
743*100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
744*100d7ef6SDmitry Baryshkov 	},
745*100d7ef6SDmitry Baryshkov 	{
746*100d7ef6SDmitry Baryshkov 	.name = "ctl_1", .id = CTL_1,
747*100d7ef6SDmitry Baryshkov 	.base = 0x16000, .len = 0x204,
748*100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY) | BIT(DPU_CTL_FETCH_ACTIVE),
749*100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
750*100d7ef6SDmitry Baryshkov 	},
751*100d7ef6SDmitry Baryshkov 	{
752*100d7ef6SDmitry Baryshkov 	.name = "ctl_2", .id = CTL_2,
753*100d7ef6SDmitry Baryshkov 	.base = 0x17000, .len = 0x204,
754*100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE),
755*100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
756*100d7ef6SDmitry Baryshkov 	},
757*100d7ef6SDmitry Baryshkov 	{
758*100d7ef6SDmitry Baryshkov 	.name = "ctl_3", .id = CTL_3,
759*100d7ef6SDmitry Baryshkov 	.base = 0x18000, .len = 0x204,
760*100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE),
761*100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
762*100d7ef6SDmitry Baryshkov 	},
763*100d7ef6SDmitry Baryshkov 	{
764*100d7ef6SDmitry Baryshkov 	.name = "ctl_4", .id = CTL_4,
765*100d7ef6SDmitry Baryshkov 	.base = 0x19000, .len = 0x204,
766*100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE),
767*100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
768*100d7ef6SDmitry Baryshkov 	},
769*100d7ef6SDmitry Baryshkov 	{
770*100d7ef6SDmitry Baryshkov 	.name = "ctl_5", .id = CTL_5,
771*100d7ef6SDmitry Baryshkov 	.base = 0x1a000, .len = 0x204,
772*100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE),
773*100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
774*100d7ef6SDmitry Baryshkov 	},
775*100d7ef6SDmitry Baryshkov };
776*100d7ef6SDmitry Baryshkov 
777591e34a0SKrishna Manikandan static const struct dpu_ctl_cfg sc7280_ctl[] = {
778591e34a0SKrishna Manikandan 	{
779591e34a0SKrishna Manikandan 	.name = "ctl_0", .id = CTL_0,
780591e34a0SKrishna Manikandan 	.base = 0x15000, .len = 0x1E8,
781667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
782667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
783591e34a0SKrishna Manikandan 	},
784591e34a0SKrishna Manikandan 	{
785591e34a0SKrishna Manikandan 	.name = "ctl_1", .id = CTL_1,
786591e34a0SKrishna Manikandan 	.base = 0x16000, .len = 0x1E8,
787667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
788667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
789591e34a0SKrishna Manikandan 	},
790591e34a0SKrishna Manikandan 	{
791591e34a0SKrishna Manikandan 	.name = "ctl_2", .id = CTL_2,
792591e34a0SKrishna Manikandan 	.base = 0x17000, .len = 0x1E8,
793667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
794667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
795591e34a0SKrishna Manikandan 	},
796591e34a0SKrishna Manikandan 	{
797591e34a0SKrishna Manikandan 	.name = "ctl_3", .id = CTL_3,
798591e34a0SKrishna Manikandan 	.base = 0x18000, .len = 0x1E8,
799667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
800667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
801591e34a0SKrishna Manikandan 	},
802591e34a0SKrishna Manikandan };
803591e34a0SKrishna Manikandan 
8045334087eSLoic Poulain static const struct dpu_ctl_cfg qcm2290_ctl[] = {
8055334087eSLoic Poulain 	{
8065334087eSLoic Poulain 	.name = "ctl_0", .id = CTL_0,
8075334087eSLoic Poulain 	.base = 0x1000, .len = 0x1dc,
8085334087eSLoic Poulain 	.features = BIT(DPU_CTL_ACTIVE_CFG),
8095334087eSLoic Poulain 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
8105334087eSLoic Poulain 	},
8115334087eSLoic Poulain };
8125334087eSLoic Poulain 
81325fdd593SJeykumar Sankaran /*************************************************************
81425fdd593SJeykumar Sankaran  * SSPP sub blocks config
81525fdd593SJeykumar Sankaran  *************************************************************/
81625fdd593SJeykumar Sankaran 
81725fdd593SJeykumar Sankaran /* SSPP common configuration */
818b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \
81925fdd593SJeykumar Sankaran 	{ \
82025fdd593SJeykumar Sankaran 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
82125fdd593SJeykumar Sankaran 	.maxupscale = MAX_UPSCALE_RATIO, \
82225fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
82325fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
82425fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
82525fdd593SJeykumar Sankaran 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
826b75ab05aSShubhashree Dhar 		.id = qseed_ver, \
82725fdd593SJeykumar Sankaran 		.base = 0xa00, .len = 0xa0,}, \
82825fdd593SJeykumar Sankaran 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
82925fdd593SJeykumar Sankaran 		.id = DPU_SSPP_CSC_10BIT, \
83025fdd593SJeykumar Sankaran 		.base = 0x1a00, .len = 0x100,}, \
83125fdd593SJeykumar Sankaran 	.format_list = plane_formats_yuv, \
832e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
83325fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
834e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
835dabfdd89SVinod Polimera 	.rotation_cfg = NULL, \
836dabfdd89SVinod Polimera 	}
837dabfdd89SVinod Polimera 
838dabfdd89SVinod Polimera #define _VIG_SBLK_ROT(num, sdma_pri, qseed_ver, rot_cfg) \
839dabfdd89SVinod Polimera 	{ \
840dabfdd89SVinod Polimera 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
841dabfdd89SVinod Polimera 	.maxupscale = MAX_UPSCALE_RATIO, \
842dabfdd89SVinod Polimera 	.smart_dma_priority = sdma_pri, \
843dabfdd89SVinod Polimera 	.src_blk = {.name = STRCAT("sspp_src_", num), \
844dabfdd89SVinod Polimera 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
845dabfdd89SVinod Polimera 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
846dabfdd89SVinod Polimera 		.id = qseed_ver, \
847dabfdd89SVinod Polimera 		.base = 0xa00, .len = 0xa0,}, \
848dabfdd89SVinod Polimera 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
849dabfdd89SVinod Polimera 		.id = DPU_SSPP_CSC_10BIT, \
850dabfdd89SVinod Polimera 		.base = 0x1a00, .len = 0x100,}, \
851dabfdd89SVinod Polimera 	.format_list = plane_formats_yuv, \
852dabfdd89SVinod Polimera 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
853dabfdd89SVinod Polimera 	.virt_format_list = plane_formats, \
854dabfdd89SVinod Polimera 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
855dabfdd89SVinod Polimera 	.rotation_cfg = rot_cfg, \
85625fdd593SJeykumar Sankaran 	}
85725fdd593SJeykumar Sankaran 
85825fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \
85925fdd593SJeykumar Sankaran 	{ \
86025fdd593SJeykumar Sankaran 	.maxdwnscale = SSPP_UNITY_SCALE, \
86125fdd593SJeykumar Sankaran 	.maxupscale = SSPP_UNITY_SCALE, \
86225fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
86325fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
86425fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
86525fdd593SJeykumar Sankaran 	.format_list = plane_formats, \
866e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats), \
86725fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
868e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
86925fdd593SJeykumar Sankaran 	}
87025fdd593SJeykumar Sankaran 
87194391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_0 =
87294391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("0", 0, DPU_SSPP_SCALER_QSEED3);
87394391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_1 =
87494391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("1", 0, DPU_SSPP_SCALER_QSEED3);
87594391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_2 =
87694391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("2", 0, DPU_SSPP_SCALER_QSEED3);
87794391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_3 =
87894391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("3", 0, DPU_SSPP_SCALER_QSEED3);
87994391a14SAngeloGioacchino Del Regno 
880dabfdd89SVinod Polimera static const struct dpu_rotation_cfg dpu_rot_sc7280_cfg_v2 = {
881dabfdd89SVinod Polimera 	.rot_maxheight = 1088,
882dabfdd89SVinod Polimera 	.rot_num_formats = ARRAY_SIZE(rotation_v2_formats),
883dabfdd89SVinod Polimera 	.rot_format_list = rotation_v2_formats,
884dabfdd89SVinod Polimera };
885dabfdd89SVinod Polimera 
886b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 =
887b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3);
888b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 =
889b75ab05aSShubhashree Dhar 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3);
890b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 =
891b75ab05aSShubhashree Dhar 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3);
892b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 =
893b75ab05aSShubhashree Dhar 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3);
89425fdd593SJeykumar Sankaran 
89525fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1);
89625fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2);
89725fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3);
89825fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4);
89925fdd593SJeykumar Sankaran 
90007ca1fc0SSravanthi Kollukuduru #define SSPP_BLK(_name, _id, _base, _features, \
90107ca1fc0SSravanthi Kollukuduru 		_sblk, _xinid, _type, _clkctrl) \
90225fdd593SJeykumar Sankaran 	{ \
90325fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
90425fdd593SJeykumar Sankaran 	.base = _base, .len = 0x1c8, \
90507ca1fc0SSravanthi Kollukuduru 	.features = _features, \
90625fdd593SJeykumar Sankaran 	.sblk = &_sblk, \
90725fdd593SJeykumar Sankaran 	.xin_id = _xinid, \
90807ca1fc0SSravanthi Kollukuduru 	.type = _type, \
90925fdd593SJeykumar Sankaran 	.clk_ctrl = _clkctrl \
91025fdd593SJeykumar Sankaran 	}
91125fdd593SJeykumar Sankaran 
91294391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_cfg msm8998_sspp[] = {
91394391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_MSM8998_MASK,
91494391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
91594391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_MSM8998_MASK,
91694391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
91794391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_MSM8998_MASK,
91894391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
91994391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_MSM8998_MASK,
92094391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
92194391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_MSM8998_MASK,
92294391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
92394391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_MSM8998_MASK,
92494391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
92594391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_MSM8998_MASK,
92694391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
92794391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_MSM8998_MASK,
92894391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
92994391a14SAngeloGioacchino Del Regno };
93094391a14SAngeloGioacchino Del Regno 
931abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = {
93207ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SDM845_MASK,
93307ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
93407ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SDM845_MASK,
93507ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
93607ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SDM845_MASK,
93707ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
93807ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SDM845_MASK,
93907ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
94007ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
94107ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
94207ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
94307ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
94407ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
94507ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
94607ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
94707ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
94825fdd593SJeykumar Sankaran };
94925fdd593SJeykumar Sankaran 
950b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 =
951b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4);
952b75ab05aSShubhashree Dhar 
953dabfdd89SVinod Polimera static const struct dpu_sspp_sub_blks sc7280_vig_sblk_0 =
954dabfdd89SVinod Polimera 			_VIG_SBLK_ROT("0", 4, DPU_SSPP_SCALER_QSEED4, &dpu_rot_sc7280_cfg_v2);
955dabfdd89SVinod Polimera 
9567bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = {
9577bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
958b75ab05aSShubhashree Dhar 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
9597bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
9607bdc0c4bSKalyan Thota 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
9617b149f2bSKalyan Thota 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
9627b149f2bSKalyan Thota 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
9637bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
9647b149f2bSKalyan Thota 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
9657bdc0c4bSKalyan Thota };
9667bdc0c4bSKalyan Thota 
9673581b706SAdam Skladowski static const struct dpu_sspp_sub_blks sm6115_vig_sblk_0 =
9683581b706SAdam Skladowski 				_VIG_SBLK("0", 2, DPU_SSPP_SCALER_QSEED3LITE);
9693581b706SAdam Skladowski 
9703581b706SAdam Skladowski static const struct dpu_sspp_cfg sm6115_sspp[] = {
9713581b706SAdam Skladowski 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK,
9723581b706SAdam Skladowski 		sm6115_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
9733581b706SAdam Skladowski 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
9743581b706SAdam Skladowski 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
9753581b706SAdam Skladowski };
9763581b706SAdam Skladowski 
977d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 =
978d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE);
979d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 =
980d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE);
981d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 =
982d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE);
983d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 =
984d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE);
985d21fc5dfSDmitry Baryshkov 
986d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = {
987d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK,
988d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
989d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SM8250_MASK,
990d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
991d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SM8250_MASK,
992d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
993d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SM8250_MASK,
994d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
995d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
996d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
997d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
998d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
999d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
1000d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
1001d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
1002d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
1003d21fc5dfSDmitry Baryshkov };
1004d21fc5dfSDmitry Baryshkov 
1005*100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_0 =
1006*100d7ef6SDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE);
1007*100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_1 =
1008*100d7ef6SDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE);
1009*100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_2 =
1010*100d7ef6SDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE);
1011*100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_3 =
1012*100d7ef6SDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE);
1013*100d7ef6SDmitry Baryshkov 
1014*100d7ef6SDmitry Baryshkov static const struct dpu_sspp_cfg sm8450_sspp[] = {
1015*100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
1016*100d7ef6SDmitry Baryshkov 		sm8450_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
1017*100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SC7180_MASK,
1018*100d7ef6SDmitry Baryshkov 		sm8450_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
1019*100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SC7180_MASK,
1020*100d7ef6SDmitry Baryshkov 		sm8450_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
1021*100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SC7180_MASK,
1022*100d7ef6SDmitry Baryshkov 		sm8450_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
1023*100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
1024*100d7ef6SDmitry Baryshkov 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
1025*100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
1026*100d7ef6SDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
1027*100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
1028*100d7ef6SDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
1029*100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
1030*100d7ef6SDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
1031*100d7ef6SDmitry Baryshkov };
1032*100d7ef6SDmitry Baryshkov 
1033591e34a0SKrishna Manikandan static const struct dpu_sspp_cfg sc7280_sspp[] = {
1034dabfdd89SVinod Polimera 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7280_MASK,
1035dabfdd89SVinod Polimera 		sc7280_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
1036591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
1037591e34a0SKrishna Manikandan 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
1038591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
1039591e34a0SKrishna Manikandan 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
1040591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
1041591e34a0SKrishna Manikandan 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
1042591e34a0SKrishna Manikandan };
1043591e34a0SKrishna Manikandan 
10445334087eSLoic Poulain 
10455334087eSLoic Poulain #define _VIG_SBLK_NOSCALE(num, sdma_pri) \
10465334087eSLoic Poulain 	{ \
10475334087eSLoic Poulain 	.maxdwnscale = SSPP_UNITY_SCALE, \
10485334087eSLoic Poulain 	.maxupscale = SSPP_UNITY_SCALE, \
10495334087eSLoic Poulain 	.smart_dma_priority = sdma_pri, \
10505334087eSLoic Poulain 	.src_blk = {.name = STRCAT("sspp_src_", num), \
10515334087eSLoic Poulain 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
10525334087eSLoic Poulain 	.format_list = plane_formats_yuv, \
10535334087eSLoic Poulain 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
10545334087eSLoic Poulain 	.virt_format_list = plane_formats, \
10555334087eSLoic Poulain 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
10565334087eSLoic Poulain 	}
10575334087eSLoic Poulain 
10585334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_vig_sblk_0 = _VIG_SBLK_NOSCALE("0", 2);
10595334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_dma_sblk_0 = _DMA_SBLK("8", 1);
10605334087eSLoic Poulain 
10615334087eSLoic Poulain static const struct dpu_sspp_cfg qcm2290_sspp[] = {
10625334087eSLoic Poulain 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_QCM2290_MASK,
10635334087eSLoic Poulain 		 qcm2290_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
10645334087eSLoic Poulain 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
10655334087eSLoic Poulain 		 qcm2290_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
10665334087eSLoic Poulain };
10675334087eSLoic Poulain 
106825fdd593SJeykumar Sankaran /*************************************************************
106925fdd593SJeykumar Sankaran  * MIXER sub blocks config
107025fdd593SJeykumar Sankaran  *************************************************************/
10717bdc0c4bSKalyan Thota 
1072e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \
107325fdd593SJeykumar Sankaran 	{ \
107425fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
107525fdd593SJeykumar Sankaran 	.base = _base, .len = 0x320, \
10767bdc0c4bSKalyan Thota 	.features = _fmask, \
10777bdc0c4bSKalyan Thota 	.sblk = _sblk, \
107825fdd593SJeykumar Sankaran 	.pingpong = _pp, \
1079e47616dfSKalyan Thota 	.lm_pair_mask = (1 << _lmpair), \
1080e47616dfSKalyan Thota 	.dspp = _dspp \
108125fdd593SJeykumar Sankaran 	}
108225fdd593SJeykumar Sankaran 
108394391a14SAngeloGioacchino Del Regno /* MSM8998 */
108494391a14SAngeloGioacchino Del Regno 
108594391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks msm8998_lm_sblk = {
108694391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
108794391a14SAngeloGioacchino Del Regno 	.maxblendstages = 7, /* excluding base layer */
108894391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
108994391a14SAngeloGioacchino Del Regno 		0x20, 0x50, 0x80, 0xb0, 0x230,
109094391a14SAngeloGioacchino Del Regno 		0x260, 0x290
109194391a14SAngeloGioacchino Del Regno 	},
109294391a14SAngeloGioacchino Del Regno };
109394391a14SAngeloGioacchino Del Regno 
109494391a14SAngeloGioacchino Del Regno static const struct dpu_lm_cfg msm8998_lm[] = {
10952d8a4edbSDmitry Baryshkov 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_MSM8998_MASK,
109694391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_0, LM_2, DSPP_0),
10972d8a4edbSDmitry Baryshkov 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_MSM8998_MASK,
109894391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_1, LM_5, DSPP_1),
10992d8a4edbSDmitry Baryshkov 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_MSM8998_MASK,
110094391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_2, LM_0, 0),
11012d8a4edbSDmitry Baryshkov 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_MSM8998_MASK,
110294391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
11032d8a4edbSDmitry Baryshkov 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_MSM8998_MASK,
110494391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
11052d8a4edbSDmitry Baryshkov 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_MSM8998_MASK,
110694391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_3, LM_1, 0),
110794391a14SAngeloGioacchino Del Regno };
110894391a14SAngeloGioacchino Del Regno 
110994391a14SAngeloGioacchino Del Regno /* SDM845 */
111094391a14SAngeloGioacchino Del Regno 
111194391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks sdm845_lm_sblk = {
111294391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
111394391a14SAngeloGioacchino Del Regno 	.maxblendstages = 11, /* excluding base layer */
111494391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
111594391a14SAngeloGioacchino Del Regno 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98,
111694391a14SAngeloGioacchino Del Regno 		0xb0, 0xc8, 0xe0, 0xf8, 0x110
111794391a14SAngeloGioacchino Del Regno 	},
111894391a14SAngeloGioacchino Del Regno };
111994391a14SAngeloGioacchino Del Regno 
1120abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = {
11217bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
1122e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_0, LM_1, 0),
11237bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
1124e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_1, LM_0, 0),
11257bdc0c4bSKalyan Thota 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
1126e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_2, LM_5, 0),
11277bdc0c4bSKalyan Thota 	LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK,
1128e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
11297bdc0c4bSKalyan Thota 	LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK,
1130e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
11317bdc0c4bSKalyan Thota 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
1132e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
11337bdc0c4bSKalyan Thota };
11347bdc0c4bSKalyan Thota 
11357bdc0c4bSKalyan Thota /* SC7180 */
11367bdc0c4bSKalyan Thota 
11377bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = {
11387bdc0c4bSKalyan Thota 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
11397bdc0c4bSKalyan Thota 	.maxblendstages = 7, /* excluding base layer */
11407bdc0c4bSKalyan Thota 	.blendstage_base = { /* offsets relative to mixer base */
11417bdc0c4bSKalyan Thota 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0
11427bdc0c4bSKalyan Thota 	},
11437bdc0c4bSKalyan Thota };
11447bdc0c4bSKalyan Thota 
11457bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = {
11467bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
1147e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
11487bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SC7180_MASK,
1149e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_1, LM_0, 0),
115025fdd593SJeykumar Sankaran };
115125fdd593SJeykumar Sankaran 
1152386fced3SJonathan Marek /* SM8150 */
1153386fced3SJonathan Marek 
1154386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = {
1155386fced3SJonathan Marek 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
115605ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
1157386fced3SJonathan Marek 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
115805ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1),
1159386fced3SJonathan Marek 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
1160386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_2, LM_3, 0),
1161386fced3SJonathan Marek 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK,
1162386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
1163386fced3SJonathan Marek 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK,
1164386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_4, LM_5, 0),
1165386fced3SJonathan Marek 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
1166386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_5, LM_4, 0),
1167386fced3SJonathan Marek };
1168386fced3SJonathan Marek 
1169591e34a0SKrishna Manikandan static const struct dpu_lm_cfg sc7280_lm[] = {
1170591e34a0SKrishna Manikandan 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
1171fca5ad26SKalyan Thota 		&sc7180_lm_sblk, PINGPONG_0, 0, DSPP_0),
1172591e34a0SKrishna Manikandan 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SC7180_MASK,
1173591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_2, LM_3, 0),
1174591e34a0SKrishna Manikandan 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SC7180_MASK,
1175591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_3, LM_2, 0),
1176591e34a0SKrishna Manikandan };
1177591e34a0SKrishna Manikandan 
11785334087eSLoic Poulain /* QCM2290 */
11795334087eSLoic Poulain 
11805334087eSLoic Poulain static const struct dpu_lm_sub_blks qcm2290_lm_sblk = {
11815334087eSLoic Poulain 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
11825334087eSLoic Poulain 	.maxblendstages = 4, /* excluding base layer */
11835334087eSLoic Poulain 	.blendstage_base = { /* offsets relative to mixer base */
11845334087eSLoic Poulain 		0x20, 0x38, 0x50, 0x68
11855334087eSLoic Poulain 	},
11865334087eSLoic Poulain };
11875334087eSLoic Poulain 
11885334087eSLoic Poulain static const struct dpu_lm_cfg qcm2290_lm[] = {
11895334087eSLoic Poulain 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
11905334087eSLoic Poulain 		&qcm2290_lm_sblk, PINGPONG_0, 0, DSPP_0),
11915334087eSLoic Poulain };
11925334087eSLoic Poulain 
119325fdd593SJeykumar Sankaran /*************************************************************
1194e47616dfSKalyan Thota  * DSPP sub blocks config
1195e47616dfSKalyan Thota  *************************************************************/
119694391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
119794391a14SAngeloGioacchino Del Regno 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
119894391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
119994391a14SAngeloGioacchino Del Regno 	.gc = { .id = DPU_DSPP_GC, .base = 0x17c0,
120094391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
120194391a14SAngeloGioacchino Del Regno };
120294391a14SAngeloGioacchino Del Regno 
12034259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
12044259ff7aSKalyan Thota 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
12054259ff7aSKalyan Thota 		.len = 0x90, .version = 0x10000},
12064259ff7aSKalyan Thota };
12074259ff7aSKalyan Thota 
120805ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = {
120905ae91d9SDmitry Baryshkov 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
121005ae91d9SDmitry Baryshkov 		.len = 0x90, .version = 0x40000},
121105ae91d9SDmitry Baryshkov };
121205ae91d9SDmitry Baryshkov 
1213862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \
1214e47616dfSKalyan Thota 		{\
1215e47616dfSKalyan Thota 		.name = _name, .id = _id, \
1216e47616dfSKalyan Thota 		.base = _base, .len = 0x1800, \
1217862314bcSAngeloGioacchino Del Regno 		.features = _mask, \
121805ae91d9SDmitry Baryshkov 		.sblk = _sblk \
1219e47616dfSKalyan Thota 		}
1220e47616dfSKalyan Thota 
122194391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_cfg msm8998_dspp[] = {
122294391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK,
122394391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
122494391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK,
122594391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
122694391a14SAngeloGioacchino Del Regno };
122794391a14SAngeloGioacchino Del Regno 
1228e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = {
1229862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
1230862314bcSAngeloGioacchino Del Regno 		 &sc7180_dspp_sblk),
123105ae91d9SDmitry Baryshkov };
123205ae91d9SDmitry Baryshkov 
123305ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = {
1234862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
1235862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1236862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
1237862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1238862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK,
1239862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1240862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK,
1241862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1242e47616dfSKalyan Thota };
1243386fced3SJonathan Marek 
12445334087eSLoic Poulain static const struct dpu_dspp_cfg qcm2290_dspp[] = {
12455334087eSLoic Poulain 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
12465334087eSLoic Poulain 		 &sm8150_dspp_sblk),
12475334087eSLoic Poulain };
12485334087eSLoic Poulain 
1249e47616dfSKalyan Thota /*************************************************************
125025fdd593SJeykumar Sankaran  * PINGPONG sub blocks config
125125fdd593SJeykumar Sankaran  *************************************************************/
125225fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = {
125325fdd593SJeykumar Sankaran 	.te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0,
125425fdd593SJeykumar Sankaran 		.version = 0x1},
125525fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
125625fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
125725fdd593SJeykumar Sankaran };
125825fdd593SJeykumar Sankaran 
125925fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = {
126025fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
126125fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
126225fdd593SJeykumar Sankaran };
126325fdd593SJeykumar Sankaran 
1264591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
1265591e34a0SKrishna Manikandan 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0,
1266591e34a0SKrishna Manikandan 	.len = 0x20, .version = 0x20000},
1267591e34a0SKrishna Manikandan };
1268591e34a0SKrishna Manikandan 
1269667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
127025fdd593SJeykumar Sankaran 	{\
127125fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
127225fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
127325fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_SPLIT_MASK, \
12744369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
1275667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
1276667e9985SDmitry Baryshkov 	.intr_done = _done, \
1277667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
127825fdd593SJeykumar Sankaran 	}
1279667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
128025fdd593SJeykumar Sankaran 	{\
128125fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
128225fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
128325fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_MASK, \
12844369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
1285667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
1286667e9985SDmitry Baryshkov 	.intr_done = _done, \
1287667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
128825fdd593SJeykumar Sankaran 	}
128925fdd593SJeykumar Sankaran 
1290abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = {
1291667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te,
1292667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1293667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1294667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te,
1295667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1296667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1297667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk,
1298667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1299667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1300667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk,
1301667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1302667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
130325fdd593SJeykumar Sankaran };
130425fdd593SJeykumar Sankaran 
13057bdc0c4bSKalyan Thota static struct dpu_pingpong_cfg sc7180_pp[] = {
1306667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1),
1307667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1),
13087bdc0c4bSKalyan Thota };
13097bdc0c4bSKalyan Thota 
1310386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = {
1311667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te,
1312667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1313667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1314667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te,
1315667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1316667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1317667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk,
1318667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1319667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1320667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk,
1321667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1322667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
1323667e9985SDmitry Baryshkov 	PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk,
1324667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
1325667e9985SDmitry Baryshkov 			-1),
1326667e9985SDmitry Baryshkov 	PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk,
13273431c17bSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
1328667e9985SDmitry Baryshkov 			-1),
13294369c93cSDmitry Baryshkov };
13304369c93cSDmitry Baryshkov 
13311a5b5372SRobert Foss static const struct dpu_pingpong_cfg sc7280_pp[] = {
13321a5b5372SRobert Foss 	PP_BLK("pingpong_0", PINGPONG_0, 0x59000, 0, sc7280_pp_sblk, -1, -1),
13331a5b5372SRobert Foss 	PP_BLK("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1),
13341a5b5372SRobert Foss 	PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1),
13351a5b5372SRobert Foss 	PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1),
13361a5b5372SRobert Foss };
13371a5b5372SRobert Foss 
13385334087eSLoic Poulain static struct dpu_pingpong_cfg qcm2290_pp[] = {
13395334087eSLoic Poulain 	PP_BLK("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk,
13405334087eSLoic Poulain 		DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
13415334087eSLoic Poulain 		DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
13425334087eSLoic Poulain };
13435334087eSLoic Poulain 
1344*100d7ef6SDmitry Baryshkov /* FIXME: interrupts */
1345*100d7ef6SDmitry Baryshkov static const struct dpu_pingpong_cfg sm8450_pp[] = {
1346*100d7ef6SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x69000, MERGE_3D_0, sdm845_pp_sblk_te,
1347*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1348*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1349*100d7ef6SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x6a000, MERGE_3D_0, sdm845_pp_sblk_te,
1350*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1351*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1352*100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, MERGE_3D_1, sdm845_pp_sblk,
1353*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1354*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1355*100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, MERGE_3D_1, sdm845_pp_sblk,
1356*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1357*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
1358*100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_4", PINGPONG_4, 0x6d000, MERGE_3D_2, sdm845_pp_sblk,
1359*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
1360*100d7ef6SDmitry Baryshkov 			-1),
1361*100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_5", PINGPONG_5, 0x6e000, MERGE_3D_2, sdm845_pp_sblk,
1362*100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
1363*100d7ef6SDmitry Baryshkov 			-1),
1364*100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_6", PINGPONG_6, 0x65800, MERGE_3D_3, sdm845_pp_sblk,
1365*100d7ef6SDmitry Baryshkov 			-1,
1366*100d7ef6SDmitry Baryshkov 			-1),
1367*100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_7", PINGPONG_7, 0x65c00, MERGE_3D_3, sdm845_pp_sblk,
1368*100d7ef6SDmitry Baryshkov 			-1,
1369*100d7ef6SDmitry Baryshkov 			-1),
1370*100d7ef6SDmitry Baryshkov };
1371*100d7ef6SDmitry Baryshkov 
13724369c93cSDmitry Baryshkov /*************************************************************
13734369c93cSDmitry Baryshkov  * MERGE_3D sub blocks config
13744369c93cSDmitry Baryshkov  *************************************************************/
13754369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \
13764369c93cSDmitry Baryshkov 	{\
13774369c93cSDmitry Baryshkov 	.name = _name, .id = _id, \
13784369c93cSDmitry Baryshkov 	.base = _base, .len = 0x100, \
13794369c93cSDmitry Baryshkov 	.features = MERGE_3D_SM8150_MASK, \
13804369c93cSDmitry Baryshkov 	.sblk = NULL \
13814369c93cSDmitry Baryshkov 	}
13824369c93cSDmitry Baryshkov 
13834369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = {
13844369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000),
13854369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100),
13864369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200),
1387386fced3SJonathan Marek };
1388386fced3SJonathan Marek 
1389*100d7ef6SDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8450_merge_3d[] = {
1390*100d7ef6SDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x4e000),
1391*100d7ef6SDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x4f000),
1392*100d7ef6SDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x50000),
1393*100d7ef6SDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_3", MERGE_3D_3, 0x65f00),
1394*100d7ef6SDmitry Baryshkov };
1395*100d7ef6SDmitry Baryshkov 
13967c5ab05eSVinod Koul /*************************************************************
13977c5ab05eSVinod Koul  * DSC sub blocks config
13987c5ab05eSVinod Koul  *************************************************************/
13997c5ab05eSVinod Koul #define DSC_BLK(_name, _id, _base) \
14007c5ab05eSVinod Koul 	{\
14017c5ab05eSVinod Koul 	.name = _name, .id = _id, \
14027c5ab05eSVinod Koul 	.base = _base, .len = 0x140, \
14037c5ab05eSVinod Koul 	.features = 0, \
14047c5ab05eSVinod Koul 	}
14057c5ab05eSVinod Koul 
14067c5ab05eSVinod Koul static struct dpu_dsc_cfg sdm845_dsc[] = {
14077c5ab05eSVinod Koul 	DSC_BLK("dsc_0", DSC_0, 0x80000),
14087c5ab05eSVinod Koul 	DSC_BLK("dsc_1", DSC_1, 0x80400),
14097c5ab05eSVinod Koul 	DSC_BLK("dsc_2", DSC_2, 0x80800),
14107c5ab05eSVinod Koul 	DSC_BLK("dsc_3", DSC_3, 0x80c00),
14117c5ab05eSVinod Koul };
14127c5ab05eSVinod Koul 
141325fdd593SJeykumar Sankaran /*************************************************************
141425fdd593SJeykumar Sankaran  * INTF sub blocks config
141525fdd593SJeykumar Sankaran  *************************************************************/
1416667e9985SDmitry Baryshkov #define INTF_BLK(_name, _id, _base, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \
141725fdd593SJeykumar Sankaran 	{\
141825fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
141925fdd593SJeykumar Sankaran 	.base = _base, .len = 0x280, \
1420cace3ac4SJonathan Marek 	.features = _features, \
142125fdd593SJeykumar Sankaran 	.type = _type, \
142225fdd593SJeykumar Sankaran 	.controller_id = _ctrl_id, \
1423667e9985SDmitry Baryshkov 	.prog_fetch_lines_worst_case = _progfetch, \
1424667e9985SDmitry Baryshkov 	.intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \
1425667e9985SDmitry Baryshkov 	.intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \
142625fdd593SJeykumar Sankaran 	}
142725fdd593SJeykumar Sankaran 
142894391a14SAngeloGioacchino Del Regno static const struct dpu_intf_cfg msm8998_intf[] = {
142994391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
143094391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
143194391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
143294391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_HDMI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
143394391a14SAngeloGioacchino Del Regno };
143494391a14SAngeloGioacchino Del Regno 
1435abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = {
1436667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1437667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1438667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1439667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
144025fdd593SJeykumar Sankaran };
144125fdd593SJeykumar Sankaran 
14427bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = {
1443bb3de286SBjorn Andersson 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1444667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
14457bdc0c4bSKalyan Thota };
14467bdc0c4bSKalyan Thota 
1447386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = {
1448667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1449667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1450667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1451667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1452386fced3SJonathan Marek };
1453386fced3SJonathan Marek 
1454591e34a0SKrishna Manikandan static const struct dpu_intf_cfg sc7280_intf[] = {
1455ef7837ffSSankeerth Billakanti 	INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1456667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1457ef7837ffSSankeerth Billakanti 	INTF_BLK("intf_5", INTF_5, 0x39000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
1458591e34a0SKrishna Manikandan };
1459591e34a0SKrishna Manikandan 
1460f3af2d6eSRob Clark static const struct dpu_intf_cfg sc8180x_intf[] = {
1461f3af2d6eSRob Clark 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1462f3af2d6eSRob Clark 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1463f3af2d6eSRob Clark 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1464f3af2d6eSRob Clark 	/* INTF_3 is for MST, wired to INTF_DP 0 and 1, use dummy index until this is supported */
1465f3af2d6eSRob Clark 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 999, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1466f3af2d6eSRob Clark 	INTF_BLK("intf_4", INTF_4, 0x6C000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 20, 21),
1467f3af2d6eSRob Clark 	INTF_BLK("intf_5", INTF_5, 0x6C800, INTF_DP, MSM_DP_CONTROLLER_2, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
1468f3af2d6eSRob Clark };
1469f3af2d6eSRob Clark 
14705334087eSLoic Poulain static const struct dpu_intf_cfg qcm2290_intf[] = {
14715334087eSLoic Poulain 	INTF_BLK("intf_0", INTF_0, 0x00000, INTF_NONE, 0, 0, 0, 0, 0, 0),
14725334087eSLoic Poulain 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
14735334087eSLoic Poulain };
14745334087eSLoic Poulain 
1475*100d7ef6SDmitry Baryshkov static const struct dpu_intf_cfg sm8450_intf[] = {
1476*100d7ef6SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1477*100d7ef6SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1478*100d7ef6SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x36000, INTF_DSI, 1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1479*100d7ef6SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x37000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1480*100d7ef6SDmitry Baryshkov };
1481*100d7ef6SDmitry Baryshkov 
148225fdd593SJeykumar Sankaran /*************************************************************
148353324b99SAbhinav Kumar  * Writeback blocks config
148453324b99SAbhinav Kumar  *************************************************************/
148553324b99SAbhinav Kumar #define WB_BLK(_name, _id, _base, _features, _clk_ctrl, \
1486a370cc39SAbhinav Kumar 		__xin_id, vbif_id, _reg, _max_linewidth, _wb_done_bit) \
148753324b99SAbhinav Kumar 	{ \
148853324b99SAbhinav Kumar 	.name = _name, .id = _id, \
148953324b99SAbhinav Kumar 	.base = _base, .len = 0x2c8, \
149053324b99SAbhinav Kumar 	.features = _features, \
149153324b99SAbhinav Kumar 	.format_list = wb2_formats, \
149253324b99SAbhinav Kumar 	.num_formats = ARRAY_SIZE(wb2_formats), \
149353324b99SAbhinav Kumar 	.clk_ctrl = _clk_ctrl, \
149453324b99SAbhinav Kumar 	.xin_id = __xin_id, \
149553324b99SAbhinav Kumar 	.vbif_idx = vbif_id, \
1496a370cc39SAbhinav Kumar 	.maxlinewidth = _max_linewidth, \
149753324b99SAbhinav Kumar 	.intr_wb_done = DPU_IRQ_IDX(_reg, _wb_done_bit) \
149853324b99SAbhinav Kumar 	}
149953324b99SAbhinav Kumar 
150053324b99SAbhinav Kumar static const struct dpu_wb_cfg sm8250_wb[] = {
150153324b99SAbhinav Kumar 	WB_BLK("wb_2", WB_2, 0x65000, WB_SM8250_MASK, DPU_CLK_CTRL_WB2, 6,
1502a370cc39SAbhinav Kumar 			VBIF_RT, MDP_SSPP_TOP0_INTR, 4096, 4),
150353324b99SAbhinav Kumar };
150453324b99SAbhinav Kumar 
150553324b99SAbhinav Kumar /*************************************************************
150625fdd593SJeykumar Sankaran  * VBIF sub blocks config
150725fdd593SJeykumar Sankaran  *************************************************************/
150825fdd593SJeykumar Sankaran /* VBIF QOS remap */
150994391a14SAngeloGioacchino Del Regno static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2};
151094391a14SAngeloGioacchino Del Regno static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1};
1511abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6};
1512abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3};
151325fdd593SJeykumar Sankaran 
151494391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
151594391a14SAngeloGioacchino Del Regno 	{
151694391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 30,
151794391a14SAngeloGioacchino Del Regno 		.ot_limit = 2,
151894391a14SAngeloGioacchino Del Regno 	},
151994391a14SAngeloGioacchino Del Regno 	{
152094391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 60,
152194391a14SAngeloGioacchino Del Regno 		.ot_limit = 6,
152294391a14SAngeloGioacchino Del Regno 	},
152394391a14SAngeloGioacchino Del Regno 	{
152494391a14SAngeloGioacchino Del Regno 		.pps = 3840 * 2160 * 30,
152594391a14SAngeloGioacchino Del Regno 		.ot_limit = 16,
152694391a14SAngeloGioacchino Del Regno 	},
152794391a14SAngeloGioacchino Del Regno };
152894391a14SAngeloGioacchino Del Regno 
152994391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_cfg msm8998_vbif[] = {
153094391a14SAngeloGioacchino Del Regno 	{
1531606f015bSDmitry Baryshkov 	.name = "vbif_rt", .id = VBIF_RT,
153294391a14SAngeloGioacchino Del Regno 	.base = 0, .len = 0x1040,
153394391a14SAngeloGioacchino Del Regno 	.default_ot_rd_limit = 32,
153494391a14SAngeloGioacchino Del Regno 	.default_ot_wr_limit = 32,
153594391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM),
153694391a14SAngeloGioacchino Del Regno 	.xin_halt_timeout = 0x4000,
1537c8744315SDmitry Baryshkov 	.qos_rp_remap_size = 0x20,
153894391a14SAngeloGioacchino Del Regno 	.dynamic_ot_rd_tbl = {
153994391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
154094391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
154194391a14SAngeloGioacchino Del Regno 		},
154294391a14SAngeloGioacchino Del Regno 	.dynamic_ot_wr_tbl = {
154394391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
154494391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
154594391a14SAngeloGioacchino Del Regno 		},
154694391a14SAngeloGioacchino Del Regno 	.qos_rt_tbl = {
154794391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl),
154894391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_rt_pri_lvl,
154994391a14SAngeloGioacchino Del Regno 		},
155094391a14SAngeloGioacchino Del Regno 	.qos_nrt_tbl = {
155194391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl),
155294391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_nrt_pri_lvl,
155394391a14SAngeloGioacchino Del Regno 		},
155494391a14SAngeloGioacchino Del Regno 	.memtype_count = 14,
155594391a14SAngeloGioacchino Del Regno 	.memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
155694391a14SAngeloGioacchino Del Regno 	},
155794391a14SAngeloGioacchino Del Regno };
155894391a14SAngeloGioacchino Del Regno 
1559abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = {
156025fdd593SJeykumar Sankaran 	{
1561606f015bSDmitry Baryshkov 	.name = "vbif_rt", .id = VBIF_RT,
156225fdd593SJeykumar Sankaran 	.base = 0, .len = 0x1040,
156325fdd593SJeykumar Sankaran 	.features = BIT(DPU_VBIF_QOS_REMAP),
156425fdd593SJeykumar Sankaran 	.xin_halt_timeout = 0x4000,
1565c8744315SDmitry Baryshkov 	.qos_rp_remap_size = 0x40,
156625fdd593SJeykumar Sankaran 	.qos_rt_tbl = {
156725fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
156825fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_rt_pri_lvl,
156925fdd593SJeykumar Sankaran 		},
157025fdd593SJeykumar Sankaran 	.qos_nrt_tbl = {
157125fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
157225fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_nrt_pri_lvl,
157325fdd593SJeykumar Sankaran 		},
157425fdd593SJeykumar Sankaran 	.memtype_count = 14,
157525fdd593SJeykumar Sankaran 	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
157625fdd593SJeykumar Sankaran 	},
157725fdd593SJeykumar Sankaran };
157825fdd593SJeykumar Sankaran 
1579abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = {
158025fdd593SJeykumar Sankaran 	.base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c
158125fdd593SJeykumar Sankaran };
158225fdd593SJeykumar Sankaran 
1583386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = {
1584386fced3SJonathan Marek 	.base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c
1585386fced3SJonathan Marek };
1586386fced3SJonathan Marek 
1587af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = {
1588af776a3eSJonathan Marek 	.base = 0x0,
1589af776a3eSJonathan Marek 	.version = 0x00010002,
1590af776a3eSJonathan Marek 	.trigger_sel_off = 0x119c,
1591af776a3eSJonathan Marek 	.xin_id = 7,
1592af776a3eSJonathan Marek 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
1593af776a3eSJonathan Marek };
1594af776a3eSJonathan Marek 
1595*100d7ef6SDmitry Baryshkov static const struct dpu_reg_dma_cfg sm8450_regdma = {
1596*100d7ef6SDmitry Baryshkov 	.base = 0x0,
1597*100d7ef6SDmitry Baryshkov 	.version = 0x00020000,
1598*100d7ef6SDmitry Baryshkov 	.trigger_sel_off = 0x119c,
1599*100d7ef6SDmitry Baryshkov 	.xin_id = 7,
1600*100d7ef6SDmitry Baryshkov 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
1601*100d7ef6SDmitry Baryshkov };
1602*100d7ef6SDmitry Baryshkov 
160325fdd593SJeykumar Sankaran /*************************************************************
160425fdd593SJeykumar Sankaran  * PERF data config
160525fdd593SJeykumar Sankaran  *************************************************************/
160625fdd593SJeykumar Sankaran 
160725fdd593SJeykumar Sankaran /* SSPP QOS LUTs */
160894391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_linear[] = {
160994391a14SAngeloGioacchino Del Regno 	{.fl = 4,  .lut = 0x1b},
161094391a14SAngeloGioacchino Del Regno 	{.fl = 5,  .lut = 0x5b},
161194391a14SAngeloGioacchino Del Regno 	{.fl = 6,  .lut = 0x15b},
161294391a14SAngeloGioacchino Del Regno 	{.fl = 7,  .lut = 0x55b},
161394391a14SAngeloGioacchino Del Regno 	{.fl = 8,  .lut = 0x155b},
161494391a14SAngeloGioacchino Del Regno 	{.fl = 9,  .lut = 0x555b},
161594391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1555b},
161694391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5555b},
161794391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15555b},
161894391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55555b},
161994391a14SAngeloGioacchino Del Regno 	{.fl = 14, .lut = 0},
162094391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1b},
162194391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0}
162294391a14SAngeloGioacchino Del Regno };
162394391a14SAngeloGioacchino Del Regno 
1624abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = {
162525fdd593SJeykumar Sankaran 	{.fl = 4, .lut = 0x357},
162625fdd593SJeykumar Sankaran 	{.fl = 5, .lut = 0x3357},
162725fdd593SJeykumar Sankaran 	{.fl = 6, .lut = 0x23357},
162825fdd593SJeykumar Sankaran 	{.fl = 7, .lut = 0x223357},
162925fdd593SJeykumar Sankaran 	{.fl = 8, .lut = 0x2223357},
163025fdd593SJeykumar Sankaran 	{.fl = 9, .lut = 0x22223357},
163125fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x222223357},
163225fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x2222223357},
163325fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x22222223357},
163425fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x222222223357},
163525fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1222222223357},
163625fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x11222222223357}
163725fdd593SJeykumar Sankaran };
163825fdd593SJeykumar Sankaran 
163994391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = {
164094391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1aaff},
164194391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5aaff},
164294391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15aaff},
164394391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55aaff},
164494391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1aaff},
164594391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0},
164694391a14SAngeloGioacchino Del Regno };
164794391a14SAngeloGioacchino Del Regno 
16487bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
16497bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011222222335777},
16507bdc0c4bSKalyan Thota };
16517bdc0c4bSKalyan Thota 
1652386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = {
1653386fced3SJonathan Marek 	{.fl = 0, .lut = 0x0011222222223357 },
1654386fced3SJonathan Marek };
1655386fced3SJonathan Marek 
1656f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_linear[] = {
1657f3af2d6eSRob Clark 	{.fl = 4, .lut = 0x0000000000000357 },
1658f3af2d6eSRob Clark };
1659f3af2d6eSRob Clark 
16605334087eSLoic Poulain static const struct dpu_qos_lut_entry qcm2290_qos_linear[] = {
16615334087eSLoic Poulain 	{.fl = 0, .lut = 0x0011222222335777},
16625334087eSLoic Poulain };
16635334087eSLoic Poulain 
1664abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = {
166525fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x344556677},
166625fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x3344556677},
166725fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x23344556677},
166825fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x223344556677},
166925fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1223344556677},
167025fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x112233344556677},
167125fdd593SJeykumar Sankaran };
167225fdd593SJeykumar Sankaran 
16737bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
16747bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011223344556677},
16757bdc0c4bSKalyan Thota };
16767bdc0c4bSKalyan Thota 
1677f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
1678f3af2d6eSRob Clark 	{.fl = 10, .lut = 0x0000000344556677},
1679f3af2d6eSRob Clark };
1680f3af2d6eSRob Clark 
168194391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = {
168294391a14SAngeloGioacchino Del Regno 	{.fl = 0, .lut = 0x0},
168394391a14SAngeloGioacchino Del Regno };
168494391a14SAngeloGioacchino Del Regno 
1685abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = {
168625fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x0},
168725fdd593SJeykumar Sankaran };
168825fdd593SJeykumar Sankaran 
16897bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
16907bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0},
16917bdc0c4bSKalyan Thota };
16927bdc0c4bSKalyan Thota 
169394391a14SAngeloGioacchino Del Regno static const struct dpu_perf_cfg msm8998_perf_data = {
169494391a14SAngeloGioacchino Del Regno 	.max_bw_low = 6700000,
169594391a14SAngeloGioacchino Del Regno 	.max_bw_high = 6700000,
169694391a14SAngeloGioacchino Del Regno 	.min_core_ib = 2400000,
169794391a14SAngeloGioacchino Del Regno 	.min_llcc_ib = 800000,
169894391a14SAngeloGioacchino Del Regno 	.min_dram_ib = 800000,
169994391a14SAngeloGioacchino Del Regno 	.undersized_prefill_lines = 2,
170094391a14SAngeloGioacchino Del Regno 	.xtra_prefill_lines = 2,
170194391a14SAngeloGioacchino Del Regno 	.dest_scale_prefill_lines = 3,
170294391a14SAngeloGioacchino Del Regno 	.macrotile_prefill_lines = 4,
170394391a14SAngeloGioacchino Del Regno 	.yuv_nv12_prefill_lines = 8,
170494391a14SAngeloGioacchino Del Regno 	.linear_prefill_lines = 1,
170594391a14SAngeloGioacchino Del Regno 	.downscaling_prefill_lines = 1,
170694391a14SAngeloGioacchino Del Regno 	.amortizable_threshold = 25,
170794391a14SAngeloGioacchino Del Regno 	.min_prefill_lines = 25,
170894391a14SAngeloGioacchino Del Regno 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
170994391a14SAngeloGioacchino Del Regno 	.safe_lut_tbl = {0xfffc, 0xff00, 0xffff},
171094391a14SAngeloGioacchino Del Regno 	.qos_lut_tbl = {
171194391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_linear),
171294391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_linear
171394391a14SAngeloGioacchino Del Regno 		},
171494391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_macrotile),
171594391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_macrotile
171694391a14SAngeloGioacchino Del Regno 		},
171794391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_nrt),
171894391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_nrt
171994391a14SAngeloGioacchino Del Regno 		},
172094391a14SAngeloGioacchino Del Regno 	},
172194391a14SAngeloGioacchino Del Regno 	.cdp_cfg = {
172294391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 1},
172394391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 0}
172494391a14SAngeloGioacchino Del Regno 	},
172594391a14SAngeloGioacchino Del Regno 	.clk_inefficiency_factor = 200,
172694391a14SAngeloGioacchino Del Regno 	.bw_inefficiency_factor = 120,
172794391a14SAngeloGioacchino Del Regno };
172894391a14SAngeloGioacchino Del Regno 
1729abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = {
173025fdd593SJeykumar Sankaran 	.max_bw_low = 6800000,
173125fdd593SJeykumar Sankaran 	.max_bw_high = 6800000,
173225fdd593SJeykumar Sankaran 	.min_core_ib = 2400000,
173325fdd593SJeykumar Sankaran 	.min_llcc_ib = 800000,
173425fdd593SJeykumar Sankaran 	.min_dram_ib = 800000,
173525fdd593SJeykumar Sankaran 	.undersized_prefill_lines = 2,
173625fdd593SJeykumar Sankaran 	.xtra_prefill_lines = 2,
173725fdd593SJeykumar Sankaran 	.dest_scale_prefill_lines = 3,
173825fdd593SJeykumar Sankaran 	.macrotile_prefill_lines = 4,
173925fdd593SJeykumar Sankaran 	.yuv_nv12_prefill_lines = 8,
174025fdd593SJeykumar Sankaran 	.linear_prefill_lines = 1,
174125fdd593SJeykumar Sankaran 	.downscaling_prefill_lines = 1,
174225fdd593SJeykumar Sankaran 	.amortizable_threshold = 25,
174325fdd593SJeykumar Sankaran 	.min_prefill_lines = 24,
174425fdd593SJeykumar Sankaran 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
17455bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xf000, 0xffff},
174625fdd593SJeykumar Sankaran 	.qos_lut_tbl = {
174725fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_linear),
174825fdd593SJeykumar Sankaran 		.entries = sdm845_qos_linear
174925fdd593SJeykumar Sankaran 		},
175025fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_macrotile),
175125fdd593SJeykumar Sankaran 		.entries = sdm845_qos_macrotile
175225fdd593SJeykumar Sankaran 		},
175325fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_nrt),
175425fdd593SJeykumar Sankaran 		.entries = sdm845_qos_nrt
175525fdd593SJeykumar Sankaran 		},
175625fdd593SJeykumar Sankaran 	},
175725fdd593SJeykumar Sankaran 	.cdp_cfg = {
175825fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 1},
175925fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 0}
176025fdd593SJeykumar Sankaran 	},
17614f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
17624f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
176325fdd593SJeykumar Sankaran };
176425fdd593SJeykumar Sankaran 
17657bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = {
176671dc6c08SKrishna Manikandan 	.max_bw_low = 6800000,
176771dc6c08SKrishna Manikandan 	.max_bw_high = 6800000,
17687bdc0c4bSKalyan Thota 	.min_core_ib = 2400000,
17697bdc0c4bSKalyan Thota 	.min_llcc_ib = 800000,
1770c33b7c03SKalyan Thota 	.min_dram_ib = 1600000,
1771c33b7c03SKalyan Thota 	.min_prefill_lines = 24,
17727bdc0c4bSKalyan Thota 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
17735bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
17747bdc0c4bSKalyan Thota 	.qos_lut_tbl = {
17757bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
17767bdc0c4bSKalyan Thota 		.entries = sc7180_qos_linear
17777bdc0c4bSKalyan Thota 		},
17787bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
17797bdc0c4bSKalyan Thota 		.entries = sc7180_qos_macrotile
17807bdc0c4bSKalyan Thota 		},
17817bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
17827bdc0c4bSKalyan Thota 		.entries = sc7180_qos_nrt
17837bdc0c4bSKalyan Thota 		},
17847bdc0c4bSKalyan Thota 	},
17857bdc0c4bSKalyan Thota 	.cdp_cfg = {
17867bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 1},
17877bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 0}
17887bdc0c4bSKalyan Thota 	},
1789c33b7c03SKalyan Thota 	.clk_inefficiency_factor = 105,
1790c33b7c03SKalyan Thota 	.bw_inefficiency_factor = 120,
17917bdc0c4bSKalyan Thota };
17927bdc0c4bSKalyan Thota 
17933581b706SAdam Skladowski static const struct dpu_perf_cfg sm6115_perf_data = {
17943581b706SAdam Skladowski 	.max_bw_low = 3100000,
17953581b706SAdam Skladowski 	.max_bw_high = 4000000,
17963581b706SAdam Skladowski 	.min_core_ib = 2400000,
17973581b706SAdam Skladowski 	.min_llcc_ib = 800000,
17983581b706SAdam Skladowski 	.min_dram_ib = 800000,
17993581b706SAdam Skladowski 	.min_prefill_lines = 24,
18003581b706SAdam Skladowski 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
18013581b706SAdam Skladowski 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
18023581b706SAdam Skladowski 	.qos_lut_tbl = {
18033581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
18043581b706SAdam Skladowski 		.entries = sc7180_qos_linear
18053581b706SAdam Skladowski 		},
18063581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
18073581b706SAdam Skladowski 		.entries = sc7180_qos_macrotile
18083581b706SAdam Skladowski 		},
18093581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
18103581b706SAdam Skladowski 		.entries = sc7180_qos_nrt
18113581b706SAdam Skladowski 		},
18123581b706SAdam Skladowski 		/* TODO: macrotile-qseed is different from macrotile */
18133581b706SAdam Skladowski 	},
18143581b706SAdam Skladowski 	.cdp_cfg = {
18153581b706SAdam Skladowski 		{.rd_enable = 1, .wr_enable = 1},
18163581b706SAdam Skladowski 		{.rd_enable = 1, .wr_enable = 0}
18173581b706SAdam Skladowski 	},
18183581b706SAdam Skladowski 	.clk_inefficiency_factor = 105,
18193581b706SAdam Skladowski 	.bw_inefficiency_factor = 120,
18203581b706SAdam Skladowski };
18213581b706SAdam Skladowski 
1822386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = {
1823386fced3SJonathan Marek 	.max_bw_low = 12800000,
1824386fced3SJonathan Marek 	.max_bw_high = 12800000,
1825386fced3SJonathan Marek 	.min_core_ib = 2400000,
1826386fced3SJonathan Marek 	.min_llcc_ib = 800000,
1827386fced3SJonathan Marek 	.min_dram_ib = 800000,
18284f2c9838SDmitry Baryshkov 	.min_prefill_lines = 24,
1829386fced3SJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
18305bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff8, 0xf000, 0xffff},
1831386fced3SJonathan Marek 	.qos_lut_tbl = {
1832386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sm8150_qos_linear),
1833386fced3SJonathan Marek 		.entries = sm8150_qos_linear
1834386fced3SJonathan Marek 		},
1835386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1836386fced3SJonathan Marek 		.entries = sc7180_qos_macrotile
1837386fced3SJonathan Marek 		},
1838386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1839386fced3SJonathan Marek 		.entries = sc7180_qos_nrt
1840386fced3SJonathan Marek 		},
1841386fced3SJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1842386fced3SJonathan Marek 	},
1843386fced3SJonathan Marek 	.cdp_cfg = {
1844386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1845386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1846386fced3SJonathan Marek 	},
18474f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
18484f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1849386fced3SJonathan Marek };
1850386fced3SJonathan Marek 
1851f3af2d6eSRob Clark static const struct dpu_perf_cfg sc8180x_perf_data = {
1852f3af2d6eSRob Clark 	.max_bw_low = 9600000,
1853f3af2d6eSRob Clark 	.max_bw_high = 9600000,
1854f3af2d6eSRob Clark 	.min_core_ib = 2400000,
1855f3af2d6eSRob Clark 	.min_llcc_ib = 800000,
1856f3af2d6eSRob Clark 	.min_dram_ib = 800000,
1857f3af2d6eSRob Clark 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
1858f3af2d6eSRob Clark 	.qos_lut_tbl = {
1859f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc8180x_qos_linear),
1860f3af2d6eSRob Clark 		.entries = sc8180x_qos_linear
1861f3af2d6eSRob Clark 		},
1862f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc8180x_qos_macrotile),
1863f3af2d6eSRob Clark 		.entries = sc8180x_qos_macrotile
1864f3af2d6eSRob Clark 		},
1865f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1866f3af2d6eSRob Clark 		.entries = sc7180_qos_nrt
1867f3af2d6eSRob Clark 		},
1868f3af2d6eSRob Clark 		/* TODO: macrotile-qseed is different from macrotile */
1869f3af2d6eSRob Clark 	},
1870f3af2d6eSRob Clark 	.cdp_cfg = {
1871f3af2d6eSRob Clark 		{.rd_enable = 1, .wr_enable = 1},
1872f3af2d6eSRob Clark 		{.rd_enable = 1, .wr_enable = 0}
1873f3af2d6eSRob Clark 	},
1874f3af2d6eSRob Clark 	.clk_inefficiency_factor = 105,
1875f3af2d6eSRob Clark 	.bw_inefficiency_factor = 120,
1876f3af2d6eSRob Clark };
1877f3af2d6eSRob Clark 
1878af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = {
1879af776a3eSJonathan Marek 	.max_bw_low = 13700000,
1880af776a3eSJonathan Marek 	.max_bw_high = 16600000,
1881af776a3eSJonathan Marek 	.min_core_ib = 4800000,
1882af776a3eSJonathan Marek 	.min_llcc_ib = 0,
1883af776a3eSJonathan Marek 	.min_dram_ib = 800000,
18844f2c9838SDmitry Baryshkov 	.min_prefill_lines = 35,
1885af776a3eSJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
18865bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
1887af776a3eSJonathan Marek 	.qos_lut_tbl = {
1888af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
1889af776a3eSJonathan Marek 		.entries = sc7180_qos_linear
1890af776a3eSJonathan Marek 		},
1891af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1892af776a3eSJonathan Marek 		.entries = sc7180_qos_macrotile
1893af776a3eSJonathan Marek 		},
1894af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1895af776a3eSJonathan Marek 		.entries = sc7180_qos_nrt
1896af776a3eSJonathan Marek 		},
1897af776a3eSJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1898af776a3eSJonathan Marek 	},
1899af776a3eSJonathan Marek 	.cdp_cfg = {
1900af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1901af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1902af776a3eSJonathan Marek 	},
19034f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
19044f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1905af776a3eSJonathan Marek };
1906af776a3eSJonathan Marek 
1907*100d7ef6SDmitry Baryshkov static const struct dpu_perf_cfg sm8450_perf_data = {
1908*100d7ef6SDmitry Baryshkov 	.max_bw_low = 13600000,
1909*100d7ef6SDmitry Baryshkov 	.max_bw_high = 18200000,
1910*100d7ef6SDmitry Baryshkov 	.min_core_ib = 2500000,
1911*100d7ef6SDmitry Baryshkov 	.min_llcc_ib = 0,
1912*100d7ef6SDmitry Baryshkov 	.min_dram_ib = 800000,
1913*100d7ef6SDmitry Baryshkov 	.min_prefill_lines = 35,
1914*100d7ef6SDmitry Baryshkov 	/* FIXME: lut tables */
1915*100d7ef6SDmitry Baryshkov 	.danger_lut_tbl = {0x3ffff, 0x3ffff, 0x0},
1916*100d7ef6SDmitry Baryshkov 	.safe_lut_tbl = {0xfe00, 0xfe00, 0xffff},
1917*100d7ef6SDmitry Baryshkov 	.qos_lut_tbl = {
1918*100d7ef6SDmitry Baryshkov 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
1919*100d7ef6SDmitry Baryshkov 		.entries = sc7180_qos_linear
1920*100d7ef6SDmitry Baryshkov 		},
1921*100d7ef6SDmitry Baryshkov 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1922*100d7ef6SDmitry Baryshkov 		.entries = sc7180_qos_macrotile
1923*100d7ef6SDmitry Baryshkov 		},
1924*100d7ef6SDmitry Baryshkov 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1925*100d7ef6SDmitry Baryshkov 		.entries = sc7180_qos_nrt
1926*100d7ef6SDmitry Baryshkov 		},
1927*100d7ef6SDmitry Baryshkov 		/* TODO: macrotile-qseed is different from macrotile */
1928*100d7ef6SDmitry Baryshkov 	},
1929*100d7ef6SDmitry Baryshkov 	.cdp_cfg = {
1930*100d7ef6SDmitry Baryshkov 		{.rd_enable = 1, .wr_enable = 1},
1931*100d7ef6SDmitry Baryshkov 		{.rd_enable = 1, .wr_enable = 0}
1932*100d7ef6SDmitry Baryshkov 	},
1933*100d7ef6SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
1934*100d7ef6SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1935*100d7ef6SDmitry Baryshkov };
1936*100d7ef6SDmitry Baryshkov 
1937591e34a0SKrishna Manikandan static const struct dpu_perf_cfg sc7280_perf_data = {
1938591e34a0SKrishna Manikandan 	.max_bw_low = 4700000,
1939591e34a0SKrishna Manikandan 	.max_bw_high = 8800000,
1940591e34a0SKrishna Manikandan 	.min_core_ib = 2500000,
1941591e34a0SKrishna Manikandan 	.min_llcc_ib = 0,
1942591e34a0SKrishna Manikandan 	.min_dram_ib = 1600000,
1943591e34a0SKrishna Manikandan 	.min_prefill_lines = 24,
1944591e34a0SKrishna Manikandan 	.danger_lut_tbl = {0xffff, 0xffff, 0x0},
19455bccb945SKalyan Thota 	.safe_lut_tbl = {0xff00, 0xff00, 0xffff},
1946591e34a0SKrishna Manikandan 	.qos_lut_tbl = {
1947591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1948591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
1949591e34a0SKrishna Manikandan 		},
1950591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1951591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
1952591e34a0SKrishna Manikandan 		},
1953591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1954591e34a0SKrishna Manikandan 		.entries = sc7180_qos_nrt
1955591e34a0SKrishna Manikandan 		},
1956591e34a0SKrishna Manikandan 	},
1957591e34a0SKrishna Manikandan 	.cdp_cfg = {
1958591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 1},
1959591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 0}
1960591e34a0SKrishna Manikandan 	},
1961591e34a0SKrishna Manikandan 	.clk_inefficiency_factor = 105,
1962591e34a0SKrishna Manikandan 	.bw_inefficiency_factor = 120,
1963591e34a0SKrishna Manikandan };
1964591e34a0SKrishna Manikandan 
19655334087eSLoic Poulain static const struct dpu_perf_cfg qcm2290_perf_data = {
19665334087eSLoic Poulain 	.max_bw_low = 2700000,
19675334087eSLoic Poulain 	.max_bw_high = 2700000,
19685334087eSLoic Poulain 	.min_core_ib = 1300000,
19695334087eSLoic Poulain 	.min_llcc_ib = 0,
19705334087eSLoic Poulain 	.min_dram_ib = 1600000,
19715334087eSLoic Poulain 	.min_prefill_lines = 24,
19725334087eSLoic Poulain 	.danger_lut_tbl = {0xff, 0x0, 0x0},
19735334087eSLoic Poulain 	.safe_lut_tbl = {0xfff0, 0x0, 0x0},
19745334087eSLoic Poulain 	.qos_lut_tbl = {
19755334087eSLoic Poulain 		{.nentry = ARRAY_SIZE(qcm2290_qos_linear),
19765334087eSLoic Poulain 		.entries = qcm2290_qos_linear
19775334087eSLoic Poulain 		},
19785334087eSLoic Poulain 	},
19795334087eSLoic Poulain 	.cdp_cfg = {
19805334087eSLoic Poulain 		{.rd_enable = 1, .wr_enable = 1},
19815334087eSLoic Poulain 		{.rd_enable = 1, .wr_enable = 0}
19825334087eSLoic Poulain 	},
19835334087eSLoic Poulain 	.clk_inefficiency_factor = 105,
19845334087eSLoic Poulain 	.bw_inefficiency_factor = 120,
19855334087eSLoic Poulain };
198625fdd593SJeykumar Sankaran /*************************************************************
1987de7d480fSDmitry Baryshkov  * Hardware catalog
198825fdd593SJeykumar Sankaran  *************************************************************/
198925fdd593SJeykumar Sankaran 
1990de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg msm8998_dpu_cfg = {
199194391a14SAngeloGioacchino Del Regno 	.caps = &msm8998_dpu_caps,
199294391a14SAngeloGioacchino Del Regno 	.mdp_count = ARRAY_SIZE(msm8998_mdp),
199394391a14SAngeloGioacchino Del Regno 	.mdp = msm8998_mdp,
199494391a14SAngeloGioacchino Del Regno 	.ctl_count = ARRAY_SIZE(msm8998_ctl),
199594391a14SAngeloGioacchino Del Regno 	.ctl = msm8998_ctl,
199694391a14SAngeloGioacchino Del Regno 	.sspp_count = ARRAY_SIZE(msm8998_sspp),
199794391a14SAngeloGioacchino Del Regno 	.sspp = msm8998_sspp,
199894391a14SAngeloGioacchino Del Regno 	.mixer_count = ARRAY_SIZE(msm8998_lm),
199994391a14SAngeloGioacchino Del Regno 	.mixer = msm8998_lm,
20006452cbd6SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(msm8998_dspp),
20016452cbd6SDmitry Baryshkov 	.dspp = msm8998_dspp,
200294391a14SAngeloGioacchino Del Regno 	.pingpong_count = ARRAY_SIZE(sdm845_pp),
200394391a14SAngeloGioacchino Del Regno 	.pingpong = sdm845_pp,
200494391a14SAngeloGioacchino Del Regno 	.intf_count = ARRAY_SIZE(msm8998_intf),
200594391a14SAngeloGioacchino Del Regno 	.intf = msm8998_intf,
200694391a14SAngeloGioacchino Del Regno 	.vbif_count = ARRAY_SIZE(msm8998_vbif),
200794391a14SAngeloGioacchino Del Regno 	.vbif = msm8998_vbif,
200894391a14SAngeloGioacchino Del Regno 	.reg_dma_count = 0,
2009477db4feSDmitry Baryshkov 	.perf = &msm8998_perf_data,
201094391a14SAngeloGioacchino Del Regno 	.mdss_irqs = IRQ_SM8250_MASK,
201194391a14SAngeloGioacchino Del Regno };
201294391a14SAngeloGioacchino Del Regno 
2013de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sdm845_dpu_cfg = {
201425fdd593SJeykumar Sankaran 	.caps = &sdm845_dpu_caps,
201525fdd593SJeykumar Sankaran 	.mdp_count = ARRAY_SIZE(sdm845_mdp),
201625fdd593SJeykumar Sankaran 	.mdp = sdm845_mdp,
201725fdd593SJeykumar Sankaran 	.ctl_count = ARRAY_SIZE(sdm845_ctl),
201825fdd593SJeykumar Sankaran 	.ctl = sdm845_ctl,
201925fdd593SJeykumar Sankaran 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
202025fdd593SJeykumar Sankaran 	.sspp = sdm845_sspp,
202125fdd593SJeykumar Sankaran 	.mixer_count = ARRAY_SIZE(sdm845_lm),
202225fdd593SJeykumar Sankaran 	.mixer = sdm845_lm,
202325fdd593SJeykumar Sankaran 	.pingpong_count = ARRAY_SIZE(sdm845_pp),
202425fdd593SJeykumar Sankaran 	.pingpong = sdm845_pp,
20257c5ab05eSVinod Koul 	.dsc_count = ARRAY_SIZE(sdm845_dsc),
20267c5ab05eSVinod Koul 	.dsc = sdm845_dsc,
202725fdd593SJeykumar Sankaran 	.intf_count = ARRAY_SIZE(sdm845_intf),
202825fdd593SJeykumar Sankaran 	.intf = sdm845_intf,
202925fdd593SJeykumar Sankaran 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
203025fdd593SJeykumar Sankaran 	.vbif = sdm845_vbif,
203125fdd593SJeykumar Sankaran 	.reg_dma_count = 1,
2032481d5dbbSDmitry Baryshkov 	.dma_cfg = &sdm845_regdma,
2033477db4feSDmitry Baryshkov 	.perf = &sdm845_perf_data,
2034597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SDM845_MASK,
203525fdd593SJeykumar Sankaran };
203625fdd593SJeykumar Sankaran 
2037de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sc7180_dpu_cfg = {
20387bdc0c4bSKalyan Thota 	.caps = &sc7180_dpu_caps,
20397bdc0c4bSKalyan Thota 	.mdp_count = ARRAY_SIZE(sc7180_mdp),
20407bdc0c4bSKalyan Thota 	.mdp = sc7180_mdp,
20417bdc0c4bSKalyan Thota 	.ctl_count = ARRAY_SIZE(sc7180_ctl),
20427bdc0c4bSKalyan Thota 	.ctl = sc7180_ctl,
20437bdc0c4bSKalyan Thota 	.sspp_count = ARRAY_SIZE(sc7180_sspp),
20447bdc0c4bSKalyan Thota 	.sspp = sc7180_sspp,
20457bdc0c4bSKalyan Thota 	.mixer_count = ARRAY_SIZE(sc7180_lm),
20467bdc0c4bSKalyan Thota 	.mixer = sc7180_lm,
2047e47616dfSKalyan Thota 	.dspp_count = ARRAY_SIZE(sc7180_dspp),
2048e47616dfSKalyan Thota 	.dspp = sc7180_dspp,
20497bdc0c4bSKalyan Thota 	.pingpong_count = ARRAY_SIZE(sc7180_pp),
20507bdc0c4bSKalyan Thota 	.pingpong = sc7180_pp,
20517bdc0c4bSKalyan Thota 	.intf_count = ARRAY_SIZE(sc7180_intf),
20527bdc0c4bSKalyan Thota 	.intf = sc7180_intf,
205351e4d60eSAbhinav Kumar 	.wb_count = ARRAY_SIZE(sm8250_wb),
205451e4d60eSAbhinav Kumar 	.wb = sm8250_wb,
20557bdc0c4bSKalyan Thota 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
20567bdc0c4bSKalyan Thota 	.vbif = sdm845_vbif,
20577bdc0c4bSKalyan Thota 	.reg_dma_count = 1,
2058481d5dbbSDmitry Baryshkov 	.dma_cfg = &sdm845_regdma,
2059477db4feSDmitry Baryshkov 	.perf = &sc7180_perf_data,
2060597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SC7180_MASK,
20617bdc0c4bSKalyan Thota };
20627bdc0c4bSKalyan Thota 
20633581b706SAdam Skladowski static const struct dpu_mdss_cfg sm6115_dpu_cfg = {
20643581b706SAdam Skladowski 	.caps = &sm6115_dpu_caps,
20653581b706SAdam Skladowski 	.mdp_count = ARRAY_SIZE(sm6115_mdp),
20663581b706SAdam Skladowski 	.mdp = sm6115_mdp,
20673581b706SAdam Skladowski 	.ctl_count = ARRAY_SIZE(qcm2290_ctl),
20683581b706SAdam Skladowski 	.ctl = qcm2290_ctl,
20693581b706SAdam Skladowski 	.sspp_count = ARRAY_SIZE(sm6115_sspp),
20703581b706SAdam Skladowski 	.sspp = sm6115_sspp,
20713581b706SAdam Skladowski 	.mixer_count = ARRAY_SIZE(qcm2290_lm),
20723581b706SAdam Skladowski 	.mixer = qcm2290_lm,
20733581b706SAdam Skladowski 	.dspp_count = ARRAY_SIZE(qcm2290_dspp),
20743581b706SAdam Skladowski 	.dspp = qcm2290_dspp,
20753581b706SAdam Skladowski 	.pingpong_count = ARRAY_SIZE(qcm2290_pp),
20763581b706SAdam Skladowski 	.pingpong = qcm2290_pp,
20773581b706SAdam Skladowski 	.intf_count = ARRAY_SIZE(qcm2290_intf),
20783581b706SAdam Skladowski 	.intf = qcm2290_intf,
20793581b706SAdam Skladowski 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
20803581b706SAdam Skladowski 	.vbif = sdm845_vbif,
20813581b706SAdam Skladowski 	.perf = &sm6115_perf_data,
20823581b706SAdam Skladowski 	.mdss_irqs = IRQ_SC7180_MASK,
20833581b706SAdam Skladowski };
20843581b706SAdam Skladowski 
2085de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sm8150_dpu_cfg = {
2086386fced3SJonathan Marek 	.caps = &sm8150_dpu_caps,
2087386fced3SJonathan Marek 	.mdp_count = ARRAY_SIZE(sdm845_mdp),
2088386fced3SJonathan Marek 	.mdp = sdm845_mdp,
2089386fced3SJonathan Marek 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
2090386fced3SJonathan Marek 	.ctl = sm8150_ctl,
2091386fced3SJonathan Marek 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
2092386fced3SJonathan Marek 	.sspp = sdm845_sspp,
2093386fced3SJonathan Marek 	.mixer_count = ARRAY_SIZE(sm8150_lm),
2094386fced3SJonathan Marek 	.mixer = sm8150_lm,
209505ae91d9SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
209605ae91d9SDmitry Baryshkov 	.dspp = sm8150_dspp,
2097386fced3SJonathan Marek 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
2098386fced3SJonathan Marek 	.pingpong = sm8150_pp,
20994369c93cSDmitry Baryshkov 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
21004369c93cSDmitry Baryshkov 	.merge_3d = sm8150_merge_3d,
2101386fced3SJonathan Marek 	.intf_count = ARRAY_SIZE(sm8150_intf),
2102386fced3SJonathan Marek 	.intf = sm8150_intf,
2103386fced3SJonathan Marek 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2104386fced3SJonathan Marek 	.vbif = sdm845_vbif,
2105386fced3SJonathan Marek 	.reg_dma_count = 1,
2106481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8150_regdma,
2107477db4feSDmitry Baryshkov 	.perf = &sm8150_perf_data,
2108597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SDM845_MASK,
2109386fced3SJonathan Marek };
2110386fced3SJonathan Marek 
2111de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sc8180x_dpu_cfg = {
2112f3af2d6eSRob Clark 	.caps = &sc8180x_dpu_caps,
2113f3af2d6eSRob Clark 	.mdp_count = ARRAY_SIZE(sc8180x_mdp),
2114f3af2d6eSRob Clark 	.mdp = sc8180x_mdp,
2115f3af2d6eSRob Clark 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
2116f3af2d6eSRob Clark 	.ctl = sm8150_ctl,
2117f3af2d6eSRob Clark 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
2118f3af2d6eSRob Clark 	.sspp = sdm845_sspp,
2119f3af2d6eSRob Clark 	.mixer_count = ARRAY_SIZE(sm8150_lm),
2120f3af2d6eSRob Clark 	.mixer = sm8150_lm,
2121f3af2d6eSRob Clark 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
2122f3af2d6eSRob Clark 	.pingpong = sm8150_pp,
2123f3af2d6eSRob Clark 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
2124f3af2d6eSRob Clark 	.merge_3d = sm8150_merge_3d,
2125f3af2d6eSRob Clark 	.intf_count = ARRAY_SIZE(sc8180x_intf),
2126f3af2d6eSRob Clark 	.intf = sc8180x_intf,
2127f3af2d6eSRob Clark 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2128f3af2d6eSRob Clark 	.vbif = sdm845_vbif,
2129f3af2d6eSRob Clark 	.reg_dma_count = 1,
2130481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8150_regdma,
2131477db4feSDmitry Baryshkov 	.perf = &sc8180x_perf_data,
2132f3af2d6eSRob Clark 	.mdss_irqs = IRQ_SC8180X_MASK,
2133f3af2d6eSRob Clark };
2134f3af2d6eSRob Clark 
2135de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sm8250_dpu_cfg = {
2136af776a3eSJonathan Marek 	.caps = &sm8250_dpu_caps,
2137af776a3eSJonathan Marek 	.mdp_count = ARRAY_SIZE(sm8250_mdp),
2138af776a3eSJonathan Marek 	.mdp = sm8250_mdp,
2139af776a3eSJonathan Marek 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
2140af776a3eSJonathan Marek 	.ctl = sm8150_ctl,
2141d21fc5dfSDmitry Baryshkov 	.sspp_count = ARRAY_SIZE(sm8250_sspp),
2142d21fc5dfSDmitry Baryshkov 	.sspp = sm8250_sspp,
2143af776a3eSJonathan Marek 	.mixer_count = ARRAY_SIZE(sm8150_lm),
2144af776a3eSJonathan Marek 	.mixer = sm8150_lm,
214505ae91d9SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
214605ae91d9SDmitry Baryshkov 	.dspp = sm8150_dspp,
2147af776a3eSJonathan Marek 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
2148af776a3eSJonathan Marek 	.pingpong = sm8150_pp,
21494369c93cSDmitry Baryshkov 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
21504369c93cSDmitry Baryshkov 	.merge_3d = sm8150_merge_3d,
2151af776a3eSJonathan Marek 	.intf_count = ARRAY_SIZE(sm8150_intf),
2152af776a3eSJonathan Marek 	.intf = sm8150_intf,
2153af776a3eSJonathan Marek 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2154af776a3eSJonathan Marek 	.vbif = sdm845_vbif,
215553324b99SAbhinav Kumar 	.wb_count = ARRAY_SIZE(sm8250_wb),
215653324b99SAbhinav Kumar 	.wb = sm8250_wb,
2157af776a3eSJonathan Marek 	.reg_dma_count = 1,
2158481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8250_regdma,
2159477db4feSDmitry Baryshkov 	.perf = &sm8250_perf_data,
2160597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SM8250_MASK,
2161af776a3eSJonathan Marek };
2162af776a3eSJonathan Marek 
2163*100d7ef6SDmitry Baryshkov static const struct dpu_mdss_cfg sm8450_dpu_cfg = {
2164*100d7ef6SDmitry Baryshkov 	.caps = &sm8450_dpu_caps,
2165*100d7ef6SDmitry Baryshkov 	.mdp_count = ARRAY_SIZE(sm8450_mdp),
2166*100d7ef6SDmitry Baryshkov 	.mdp = sm8450_mdp,
2167*100d7ef6SDmitry Baryshkov 	.ctl_count = ARRAY_SIZE(sm8450_ctl),
2168*100d7ef6SDmitry Baryshkov 	.ctl = sm8450_ctl,
2169*100d7ef6SDmitry Baryshkov 	.sspp_count = ARRAY_SIZE(sm8450_sspp),
2170*100d7ef6SDmitry Baryshkov 	.sspp = sm8450_sspp,
2171*100d7ef6SDmitry Baryshkov 	.mixer_count = ARRAY_SIZE(sm8150_lm),
2172*100d7ef6SDmitry Baryshkov 	.mixer = sm8150_lm,
2173*100d7ef6SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
2174*100d7ef6SDmitry Baryshkov 	.dspp = sm8150_dspp,
2175*100d7ef6SDmitry Baryshkov 	.pingpong_count = ARRAY_SIZE(sm8450_pp),
2176*100d7ef6SDmitry Baryshkov 	.pingpong = sm8450_pp,
2177*100d7ef6SDmitry Baryshkov 	.merge_3d_count = ARRAY_SIZE(sm8450_merge_3d),
2178*100d7ef6SDmitry Baryshkov 	.merge_3d = sm8450_merge_3d,
2179*100d7ef6SDmitry Baryshkov 	.intf_count = ARRAY_SIZE(sm8450_intf),
2180*100d7ef6SDmitry Baryshkov 	.intf = sm8450_intf,
2181*100d7ef6SDmitry Baryshkov 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2182*100d7ef6SDmitry Baryshkov 	.vbif = sdm845_vbif,
2183*100d7ef6SDmitry Baryshkov 	.reg_dma_count = 1,
2184*100d7ef6SDmitry Baryshkov 	.dma_cfg = &sm8450_regdma,
2185*100d7ef6SDmitry Baryshkov 	.perf = &sm8450_perf_data,
2186*100d7ef6SDmitry Baryshkov 	.mdss_irqs = IRQ_SM8450_MASK,
2187*100d7ef6SDmitry Baryshkov };
2188*100d7ef6SDmitry Baryshkov 
2189de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sc7280_dpu_cfg = {
2190591e34a0SKrishna Manikandan 	.caps = &sc7280_dpu_caps,
2191591e34a0SKrishna Manikandan 	.mdp_count = ARRAY_SIZE(sc7280_mdp),
2192591e34a0SKrishna Manikandan 	.mdp = sc7280_mdp,
2193591e34a0SKrishna Manikandan 	.ctl_count = ARRAY_SIZE(sc7280_ctl),
2194591e34a0SKrishna Manikandan 	.ctl = sc7280_ctl,
2195591e34a0SKrishna Manikandan 	.sspp_count = ARRAY_SIZE(sc7280_sspp),
2196591e34a0SKrishna Manikandan 	.sspp = sc7280_sspp,
2197fca5ad26SKalyan Thota 	.dspp_count = ARRAY_SIZE(sc7180_dspp),
2198fca5ad26SKalyan Thota 	.dspp = sc7180_dspp,
2199591e34a0SKrishna Manikandan 	.mixer_count = ARRAY_SIZE(sc7280_lm),
2200591e34a0SKrishna Manikandan 	.mixer = sc7280_lm,
2201591e34a0SKrishna Manikandan 	.pingpong_count = ARRAY_SIZE(sc7280_pp),
2202591e34a0SKrishna Manikandan 	.pingpong = sc7280_pp,
2203591e34a0SKrishna Manikandan 	.intf_count = ARRAY_SIZE(sc7280_intf),
2204591e34a0SKrishna Manikandan 	.intf = sc7280_intf,
2205591e34a0SKrishna Manikandan 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2206591e34a0SKrishna Manikandan 	.vbif = sdm845_vbif,
2207477db4feSDmitry Baryshkov 	.perf = &sc7280_perf_data,
2208597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SC7280_MASK,
2209591e34a0SKrishna Manikandan };
2210591e34a0SKrishna Manikandan 
2211de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg qcm2290_dpu_cfg = {
22125334087eSLoic Poulain 	.caps = &qcm2290_dpu_caps,
22135334087eSLoic Poulain 	.mdp_count = ARRAY_SIZE(qcm2290_mdp),
22145334087eSLoic Poulain 	.mdp = qcm2290_mdp,
22155334087eSLoic Poulain 	.ctl_count = ARRAY_SIZE(qcm2290_ctl),
22165334087eSLoic Poulain 	.ctl = qcm2290_ctl,
22175334087eSLoic Poulain 	.sspp_count = ARRAY_SIZE(qcm2290_sspp),
22185334087eSLoic Poulain 	.sspp = qcm2290_sspp,
22195334087eSLoic Poulain 	.mixer_count = ARRAY_SIZE(qcm2290_lm),
22205334087eSLoic Poulain 	.mixer = qcm2290_lm,
22215334087eSLoic Poulain 	.dspp_count = ARRAY_SIZE(qcm2290_dspp),
22225334087eSLoic Poulain 	.dspp = qcm2290_dspp,
22235334087eSLoic Poulain 	.pingpong_count = ARRAY_SIZE(qcm2290_pp),
22245334087eSLoic Poulain 	.pingpong = qcm2290_pp,
22255334087eSLoic Poulain 	.intf_count = ARRAY_SIZE(qcm2290_intf),
22265334087eSLoic Poulain 	.intf = qcm2290_intf,
22275334087eSLoic Poulain 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
22285334087eSLoic Poulain 	.vbif = sdm845_vbif,
22295334087eSLoic Poulain 	.reg_dma_count = 1,
2230481d5dbbSDmitry Baryshkov 	.dma_cfg = &sdm845_regdma,
2231477db4feSDmitry Baryshkov 	.perf = &qcm2290_perf_data,
22325334087eSLoic Poulain 	.mdss_irqs = IRQ_SC7180_MASK,
22335334087eSLoic Poulain };
22345334087eSLoic Poulain 
2235abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = {
2236de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_300, .dpu_cfg = &msm8998_dpu_cfg},
2237de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_301, .dpu_cfg = &msm8998_dpu_cfg},
2238de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_400, .dpu_cfg = &sdm845_dpu_cfg},
2239de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_401, .dpu_cfg = &sdm845_dpu_cfg},
2240de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_500, .dpu_cfg = &sm8150_dpu_cfg},
2241de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_501, .dpu_cfg = &sm8150_dpu_cfg},
2242de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_510, .dpu_cfg = &sc8180x_dpu_cfg},
2243de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_600, .dpu_cfg = &sm8250_dpu_cfg},
2244de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_620, .dpu_cfg = &sc7180_dpu_cfg},
22453581b706SAdam Skladowski 	{ .hw_rev = DPU_HW_VER_630, .dpu_cfg = &sm6115_dpu_cfg},
2246de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_650, .dpu_cfg = &qcm2290_dpu_cfg},
2247de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_720, .dpu_cfg = &sc7280_dpu_cfg},
2248*100d7ef6SDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_810, .dpu_cfg = &sm8450_dpu_cfg},
224925fdd593SJeykumar Sankaran };
225025fdd593SJeykumar Sankaran 
2251de7d480fSDmitry Baryshkov const struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev)
225225fdd593SJeykumar Sankaran {
225325fdd593SJeykumar Sankaran 	int i;
225425fdd593SJeykumar Sankaran 
225525fdd593SJeykumar Sankaran 	for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) {
2256de7d480fSDmitry Baryshkov 		if (cfg_handler[i].hw_rev == hw_rev)
2257de7d480fSDmitry Baryshkov 			return cfg_handler[i].dpu_cfg;
225825fdd593SJeykumar Sankaran 	}
225925fdd593SJeykumar Sankaran 
226025fdd593SJeykumar Sankaran 	DPU_ERROR("unsupported chipset id:%X\n", hw_rev);
226132084967SDmitry Baryshkov 
226225fdd593SJeykumar Sankaran 	return ERR_PTR(-ENODEV);
226325fdd593SJeykumar Sankaran }
226425fdd593SJeykumar Sankaran 
2265