197fb5e8dSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
225fdd593SJeykumar Sankaran /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
325fdd593SJeykumar Sankaran  */
425fdd593SJeykumar Sankaran 
525fdd593SJeykumar Sankaran #define pr_fmt(fmt)	"[drm:%s:%d] " fmt, __func__, __LINE__
625fdd593SJeykumar Sankaran #include <linux/slab.h>
725fdd593SJeykumar Sankaran #include <linux/of_address.h>
825fdd593SJeykumar Sankaran #include <linux/platform_device.h>
925fdd593SJeykumar Sankaran #include "dpu_hw_mdss.h"
10597762d5SDmitry Baryshkov #include "dpu_hw_interrupts.h"
1125fdd593SJeykumar Sankaran #include "dpu_hw_catalog.h"
1225fdd593SJeykumar Sankaran #include "dpu_kms.h"
1325fdd593SJeykumar Sankaran 
147bdc0c4bSKalyan Thota #define VIG_MASK \
157bdc0c4bSKalyan Thota 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
16b8dab65bSAngeloGioacchino Del Regno 	BIT(DPU_SSPP_CSC_10BIT) | BIT(DPU_SSPP_CDP) |\
1725fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_EXCL_RECT))
1825fdd593SJeykumar Sankaran 
1994391a14SAngeloGioacchino Del Regno #define VIG_MSM8998_MASK \
2094391a14SAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_SCALER_QSEED3))
2194391a14SAngeloGioacchino Del Regno 
227bdc0c4bSKalyan Thota #define VIG_SDM845_MASK \
23b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3))
247bdc0c4bSKalyan Thota 
257bdc0c4bSKalyan Thota #define VIG_SC7180_MASK \
26b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED4))
277bdc0c4bSKalyan Thota 
28d21fc5dfSDmitry Baryshkov #define VIG_SM8250_MASK \
29095eed89SDmitry Baryshkov 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3LITE))
30d21fc5dfSDmitry Baryshkov 
3194391a14SAngeloGioacchino Del Regno #define DMA_MSM8998_MASK \
3294391a14SAngeloGioacchino Del Regno 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
3394391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
3494391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
3594391a14SAngeloGioacchino Del Regno 
3625fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \
3725fdd593SJeykumar Sankaran 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\
3825fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
3925fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
4025fdd593SJeykumar Sankaran 
4107ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \
4207ca1fc0SSravanthi Kollukuduru 	(DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR))
4307ca1fc0SSravanthi Kollukuduru 
4494391a14SAngeloGioacchino Del Regno #define DMA_CURSOR_MSM8998_MASK \
4594391a14SAngeloGioacchino Del Regno 	(DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR))
4694391a14SAngeloGioacchino Del Regno 
4725fdd593SJeykumar Sankaran #define MIXER_SDM845_MASK \
4825fdd593SJeykumar Sankaran 	(BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER))
4925fdd593SJeykumar Sankaran 
507bdc0c4bSKalyan Thota #define MIXER_SC7180_MASK \
517bdc0c4bSKalyan Thota 	(BIT(DPU_DIM_LAYER))
527bdc0c4bSKalyan Thota 
5325fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER)
5425fdd593SJeykumar Sankaran 
5525fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \
5625fdd593SJeykumar Sankaran 	(PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2))
5725fdd593SJeykumar Sankaran 
58591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \
5944bf8704SKalyan Thota 	(BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE) | BIT(DPU_CTL_VM_CFG))
60591e34a0SKrishna Manikandan 
614369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0)
624369c93cSDmitry Baryshkov 
6394391a14SAngeloGioacchino Del Regno #define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC)
6494391a14SAngeloGioacchino Del Regno 
654259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
66e47616dfSKalyan Thota 
67cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0)
68cace3ac4SJonathan Marek 
69cace3ac4SJonathan Marek #define INTF_SC7180_MASK BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE)
70cace3ac4SJonathan Marek 
71591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN)
72591e34a0SKrishna Manikandan 
73597762d5SDmitry Baryshkov #define IRQ_SDM845_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
74597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
75597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
76597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
77597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
78597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
79597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
80597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR) | \
81597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_0_INTR) | \
82597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_1_INTR))
83597762d5SDmitry Baryshkov 
84597762d5SDmitry Baryshkov #define IRQ_SC7180_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
85597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
86597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
87597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
88597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR))
89597762d5SDmitry Baryshkov 
90597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
91597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
92597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
93597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
94597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
95597762d5SDmitry Baryshkov 			 BIT(MDP_INTF5_7xxx_INTR))
96597762d5SDmitry Baryshkov 
97597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
98597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
99597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
100597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
101597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
102597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
103597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
104597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR))
105597762d5SDmitry Baryshkov 
106597762d5SDmitry Baryshkov 
10725fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE		(50 * 1024)
10825fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH		2048
10925fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH	2560
11025fdd593SJeykumar Sankaran 
11125fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION	4
11225fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION	4
11325fdd593SJeykumar Sankaran 
11425fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO	20
11525fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO	4
11625fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE	1
11725fdd593SJeykumar Sankaran 
11825fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y)
11925fdd593SJeykumar Sankaran 
12009c7e370SLee Jones static const uint32_t plane_formats[] = {
12109c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
12209c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
12309c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
12409c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
12509c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
12609c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
12709c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
12809c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
12909c7e370SLee Jones 	DRM_FORMAT_RGB888,
13009c7e370SLee Jones 	DRM_FORMAT_BGR888,
13109c7e370SLee Jones 	DRM_FORMAT_RGB565,
13209c7e370SLee Jones 	DRM_FORMAT_BGR565,
13309c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
13409c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
13509c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
13609c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
13709c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
13809c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
13909c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
14009c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
14109c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
14209c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
14309c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
14409c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
14509c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
14609c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
14709c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
14809c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
14909c7e370SLee Jones };
15009c7e370SLee Jones 
15109c7e370SLee Jones static const uint32_t plane_formats_yuv[] = {
15209c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
15309c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
15409c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
15509c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
15609c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
15709c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
15809c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
15909c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
16009c7e370SLee Jones 	DRM_FORMAT_RGB888,
16109c7e370SLee Jones 	DRM_FORMAT_BGR888,
16209c7e370SLee Jones 	DRM_FORMAT_RGB565,
16309c7e370SLee Jones 	DRM_FORMAT_BGR565,
16409c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
16509c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
16609c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
16709c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
16809c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
16909c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
17009c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
17109c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
17209c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
17309c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
17409c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
17509c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
17609c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
17709c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
17809c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
17909c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
18009c7e370SLee Jones 
18109c7e370SLee Jones 	DRM_FORMAT_NV12,
18209c7e370SLee Jones 	DRM_FORMAT_NV21,
18309c7e370SLee Jones 	DRM_FORMAT_NV16,
18409c7e370SLee Jones 	DRM_FORMAT_NV61,
18509c7e370SLee Jones 	DRM_FORMAT_VYUY,
18609c7e370SLee Jones 	DRM_FORMAT_UYVY,
18709c7e370SLee Jones 	DRM_FORMAT_YUYV,
18809c7e370SLee Jones 	DRM_FORMAT_YVYU,
18909c7e370SLee Jones 	DRM_FORMAT_YUV420,
19009c7e370SLee Jones 	DRM_FORMAT_YVU420,
19109c7e370SLee Jones };
19209c7e370SLee Jones 
19325fdd593SJeykumar Sankaran /*************************************************************
19425fdd593SJeykumar Sankaran  * DPU sub blocks config
19525fdd593SJeykumar Sankaran  *************************************************************/
19625fdd593SJeykumar Sankaran /* DPU top level caps */
19794391a14SAngeloGioacchino Del Regno static const struct dpu_caps msm8998_dpu_caps = {
19894391a14SAngeloGioacchino Del Regno 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
19994391a14SAngeloGioacchino Del Regno 	.max_mixer_blendstages = 0x7,
20094391a14SAngeloGioacchino Del Regno 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
20194391a14SAngeloGioacchino Del Regno 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V1,
20294391a14SAngeloGioacchino Del Regno 	.ubwc_version = DPU_HW_UBWC_VER_10,
20394391a14SAngeloGioacchino Del Regno 	.has_src_split = true,
20494391a14SAngeloGioacchino Del Regno 	.has_dim_layer = true,
20594391a14SAngeloGioacchino Del Regno 	.has_idle_pc = true,
20694391a14SAngeloGioacchino Del Regno 	.has_3d_merge = true,
20794391a14SAngeloGioacchino Del Regno 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
20894391a14SAngeloGioacchino Del Regno 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
20994391a14SAngeloGioacchino Del Regno 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
21094391a14SAngeloGioacchino Del Regno 	.max_vdeci_exp = MAX_VERT_DECIMATION,
21194391a14SAngeloGioacchino Del Regno };
21294391a14SAngeloGioacchino Del Regno 
21325fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = {
21425fdd593SJeykumar Sankaran 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
21525fdd593SJeykumar Sankaran 	.max_mixer_blendstages = 0xb,
21625fdd593SJeykumar Sankaran 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
21725fdd593SJeykumar Sankaran 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
21825fdd593SJeykumar Sankaran 	.ubwc_version = DPU_HW_UBWC_VER_20,
21925fdd593SJeykumar Sankaran 	.has_src_split = true,
22025fdd593SJeykumar Sankaran 	.has_dim_layer = true,
22125fdd593SJeykumar Sankaran 	.has_idle_pc = true,
22242a558b7SKalyan Thota 	.has_3d_merge = true,
2237e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
2247e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
2257e9d4cddSJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
2267e9d4cddSJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
22725fdd593SJeykumar Sankaran };
22825fdd593SJeykumar Sankaran 
2297bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = {
2307bdc0c4bSKalyan Thota 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
2317bdc0c4bSKalyan Thota 	.max_mixer_blendstages = 0x9,
2327bdc0c4bSKalyan Thota 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
2337bdc0c4bSKalyan Thota 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
2347bdc0c4bSKalyan Thota 	.ubwc_version = DPU_HW_UBWC_VER_20,
2357bdc0c4bSKalyan Thota 	.has_dim_layer = true,
2367bdc0c4bSKalyan Thota 	.has_idle_pc = true,
2377e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
2387e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
2397bdc0c4bSKalyan Thota };
2407bdc0c4bSKalyan Thota 
241386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = {
242386fced3SJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
243386fced3SJonathan Marek 	.max_mixer_blendstages = 0xb,
244386fced3SJonathan Marek 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
245386fced3SJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
246386fced3SJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_30,
247386fced3SJonathan Marek 	.has_src_split = true,
248386fced3SJonathan Marek 	.has_dim_layer = true,
249386fced3SJonathan Marek 	.has_idle_pc = true,
250386fced3SJonathan Marek 	.has_3d_merge = true,
251386fced3SJonathan Marek 	.max_linewidth = 4096,
252386fced3SJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
253386fced3SJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
254386fced3SJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
255386fced3SJonathan Marek };
256386fced3SJonathan Marek 
257af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = {
258af776a3eSJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
259af776a3eSJonathan Marek 	.max_mixer_blendstages = 0xb,
260d21fc5dfSDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED3LITE,
261af776a3eSJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
262af776a3eSJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_40,
263af776a3eSJonathan Marek 	.has_src_split = true,
264af776a3eSJonathan Marek 	.has_dim_layer = true,
265af776a3eSJonathan Marek 	.has_idle_pc = true,
266af776a3eSJonathan Marek 	.has_3d_merge = true,
267af776a3eSJonathan Marek 	.max_linewidth = 4096,
268af776a3eSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
269af776a3eSJonathan Marek };
270af776a3eSJonathan Marek 
271591e34a0SKrishna Manikandan static const struct dpu_caps sc7280_dpu_caps = {
272591e34a0SKrishna Manikandan 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
273591e34a0SKrishna Manikandan 	.max_mixer_blendstages = 0x7,
274591e34a0SKrishna Manikandan 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
275591e34a0SKrishna Manikandan 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
276591e34a0SKrishna Manikandan 	.ubwc_version = DPU_HW_UBWC_VER_30,
277591e34a0SKrishna Manikandan 	.has_dim_layer = true,
278591e34a0SKrishna Manikandan 	.has_idle_pc = true,
279591e34a0SKrishna Manikandan 	.max_linewidth = 2400,
280591e34a0SKrishna Manikandan 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
281591e34a0SKrishna Manikandan };
282591e34a0SKrishna Manikandan 
28394391a14SAngeloGioacchino Del Regno static const struct dpu_mdp_cfg msm8998_mdp[] = {
28494391a14SAngeloGioacchino Del Regno 	{
28594391a14SAngeloGioacchino Del Regno 	.name = "top_0", .id = MDP_TOP,
28694391a14SAngeloGioacchino Del Regno 	.base = 0x0, .len = 0x458,
28794391a14SAngeloGioacchino Del Regno 	.features = 0,
28894391a14SAngeloGioacchino Del Regno 	.highest_bank_bit = 0x2,
28994391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
29094391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 0},
29194391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
29294391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 0},
29394391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
29494391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2BC, .bit_off = 0},
29594391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
29694391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 0},
29794391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
29894391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 8},
29994391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
30094391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 8},
30194391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
30294391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 8},
30394391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA3] = {
30494391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 12},
30594391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
30694391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3A8, .bit_off = 15},
30794391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
30894391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3B0, .bit_off = 15},
30994391a14SAngeloGioacchino Del Regno 	},
31094391a14SAngeloGioacchino Del Regno };
31194391a14SAngeloGioacchino Del Regno 
312abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = {
31325fdd593SJeykumar Sankaran 	{
31425fdd593SJeykumar Sankaran 	.name = "top_0", .id = MDP_TOP,
31525fdd593SJeykumar Sankaran 	.base = 0x0, .len = 0x45C,
316*03490e11SKuogee Hsieh 	.features = BIT(DPU_MDP_AUDIO_SELECT),
31725fdd593SJeykumar Sankaran 	.highest_bank_bit = 0x2,
31825fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
31925fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 0},
32025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
32125fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 0},
32225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
32325fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 0},
32425fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
32525fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 0},
32625fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
32725fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 8},
32825fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
32925fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 8},
33025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
33125fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 8},
33225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
33325fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 8},
33425fdd593SJeykumar Sankaran 	},
33525fdd593SJeykumar Sankaran };
33625fdd593SJeykumar Sankaran 
3377bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = {
3387bdc0c4bSKalyan Thota 	{
3397bdc0c4bSKalyan Thota 	.name = "top_0", .id = MDP_TOP,
3407bdc0c4bSKalyan Thota 	.base = 0x0, .len = 0x494,
3417bdc0c4bSKalyan Thota 	.features = 0,
3427bdc0c4bSKalyan Thota 	.highest_bank_bit = 0x3,
3437bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
3447bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 0},
3457bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
3467bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 8},
3477bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
3487b149f2bSKalyan Thota 		.reg_off = 0x2B4, .bit_off = 8},
3497b149f2bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
3507b149f2bSKalyan Thota 		.reg_off = 0x2C4, .bit_off = 8},
3517bdc0c4bSKalyan Thota 	},
3527bdc0c4bSKalyan Thota };
3537bdc0c4bSKalyan Thota 
354af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = {
355af776a3eSJonathan Marek 	{
356af776a3eSJonathan Marek 	.name = "top_0", .id = MDP_TOP,
357b910a020SRobert Foss 	.base = 0x0, .len = 0x494,
358af776a3eSJonathan Marek 	.features = 0,
359af776a3eSJonathan Marek 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
360af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
361af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 0},
362af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
363af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 0},
364af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
365af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 0},
366af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
367af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 0},
368af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
369af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 8},
370af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
371af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 8},
372af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
373af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 8},
374af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
375af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 8},
376af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
377af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 20},
378af776a3eSJonathan Marek 	},
379af776a3eSJonathan Marek };
380af776a3eSJonathan Marek 
381591e34a0SKrishna Manikandan static const struct dpu_mdp_cfg sc7280_mdp[] = {
382591e34a0SKrishna Manikandan 	{
383591e34a0SKrishna Manikandan 	.name = "top_0", .id = MDP_TOP,
384591e34a0SKrishna Manikandan 	.base = 0x0, .len = 0x2014,
385591e34a0SKrishna Manikandan 	.highest_bank_bit = 0x1,
386591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
387591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 0},
388591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
389591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 8},
390591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
391591e34a0SKrishna Manikandan 		.reg_off = 0x2B4, .bit_off = 8},
392591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
393591e34a0SKrishna Manikandan 		.reg_off = 0x2C4, .bit_off = 8},
394591e34a0SKrishna Manikandan 	},
395591e34a0SKrishna Manikandan };
396591e34a0SKrishna Manikandan 
39725fdd593SJeykumar Sankaran /*************************************************************
39825fdd593SJeykumar Sankaran  * CTL sub blocks config
39925fdd593SJeykumar Sankaran  *************************************************************/
40094391a14SAngeloGioacchino Del Regno static const struct dpu_ctl_cfg msm8998_ctl[] = {
40194391a14SAngeloGioacchino Del Regno 	{
40294391a14SAngeloGioacchino Del Regno 	.name = "ctl_0", .id = CTL_0,
40394391a14SAngeloGioacchino Del Regno 	.base = 0x1000, .len = 0x94,
40494391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
40594391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
40694391a14SAngeloGioacchino Del Regno 	},
40794391a14SAngeloGioacchino Del Regno 	{
40894391a14SAngeloGioacchino Del Regno 	.name = "ctl_1", .id = CTL_1,
40994391a14SAngeloGioacchino Del Regno 	.base = 0x1200, .len = 0x94,
41094391a14SAngeloGioacchino Del Regno 	.features = 0,
41194391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
41294391a14SAngeloGioacchino Del Regno 	},
41394391a14SAngeloGioacchino Del Regno 	{
41494391a14SAngeloGioacchino Del Regno 	.name = "ctl_2", .id = CTL_2,
41594391a14SAngeloGioacchino Del Regno 	.base = 0x1400, .len = 0x94,
41694391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
41794391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
41894391a14SAngeloGioacchino Del Regno 	},
41994391a14SAngeloGioacchino Del Regno 	{
42094391a14SAngeloGioacchino Del Regno 	.name = "ctl_3", .id = CTL_3,
42194391a14SAngeloGioacchino Del Regno 	.base = 0x1600, .len = 0x94,
42294391a14SAngeloGioacchino Del Regno 	.features = 0,
42394391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
42494391a14SAngeloGioacchino Del Regno 	},
42594391a14SAngeloGioacchino Del Regno 	{
42694391a14SAngeloGioacchino Del Regno 	.name = "ctl_4", .id = CTL_4,
42794391a14SAngeloGioacchino Del Regno 	.base = 0x1800, .len = 0x94,
42894391a14SAngeloGioacchino Del Regno 	.features = 0,
42994391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
43094391a14SAngeloGioacchino Del Regno 	},
43194391a14SAngeloGioacchino Del Regno };
43294391a14SAngeloGioacchino Del Regno 
433abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = {
43425fdd593SJeykumar Sankaran 	{
43525fdd593SJeykumar Sankaran 	.name = "ctl_0", .id = CTL_0,
43625fdd593SJeykumar Sankaran 	.base = 0x1000, .len = 0xE4,
437667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
438667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
43925fdd593SJeykumar Sankaran 	},
44025fdd593SJeykumar Sankaran 	{
44125fdd593SJeykumar Sankaran 	.name = "ctl_1", .id = CTL_1,
44225fdd593SJeykumar Sankaran 	.base = 0x1200, .len = 0xE4,
443667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
444667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
44525fdd593SJeykumar Sankaran 	},
44625fdd593SJeykumar Sankaran 	{
44725fdd593SJeykumar Sankaran 	.name = "ctl_2", .id = CTL_2,
44825fdd593SJeykumar Sankaran 	.base = 0x1400, .len = 0xE4,
449667e9985SDmitry Baryshkov 	.features = 0,
450667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
45125fdd593SJeykumar Sankaran 	},
45225fdd593SJeykumar Sankaran 	{
45325fdd593SJeykumar Sankaran 	.name = "ctl_3", .id = CTL_3,
45425fdd593SJeykumar Sankaran 	.base = 0x1600, .len = 0xE4,
455667e9985SDmitry Baryshkov 	.features = 0,
456667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
45725fdd593SJeykumar Sankaran 	},
45825fdd593SJeykumar Sankaran 	{
45925fdd593SJeykumar Sankaran 	.name = "ctl_4", .id = CTL_4,
46025fdd593SJeykumar Sankaran 	.base = 0x1800, .len = 0xE4,
461667e9985SDmitry Baryshkov 	.features = 0,
462667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
46325fdd593SJeykumar Sankaran 	},
46425fdd593SJeykumar Sankaran };
46525fdd593SJeykumar Sankaran 
4667bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = {
4677bdc0c4bSKalyan Thota 	{
4687bdc0c4bSKalyan Thota 	.name = "ctl_0", .id = CTL_0,
4697bdc0c4bSKalyan Thota 	.base = 0x1000, .len = 0xE4,
470667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
471667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
4727bdc0c4bSKalyan Thota 	},
4737bdc0c4bSKalyan Thota 	{
4747bdc0c4bSKalyan Thota 	.name = "ctl_1", .id = CTL_1,
4757bdc0c4bSKalyan Thota 	.base = 0x1200, .len = 0xE4,
476667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
477667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
4787bdc0c4bSKalyan Thota 	},
4797bdc0c4bSKalyan Thota 	{
4807bdc0c4bSKalyan Thota 	.name = "ctl_2", .id = CTL_2,
4817bdc0c4bSKalyan Thota 	.base = 0x1400, .len = 0xE4,
482667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
483667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
4847bdc0c4bSKalyan Thota 	},
4857bdc0c4bSKalyan Thota };
4867bdc0c4bSKalyan Thota 
487386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = {
488386fced3SJonathan Marek 	{
489386fced3SJonathan Marek 	.name = "ctl_0", .id = CTL_0,
490386fced3SJonathan Marek 	.base = 0x1000, .len = 0x1e0,
491667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
492667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
493386fced3SJonathan Marek 	},
494386fced3SJonathan Marek 	{
495386fced3SJonathan Marek 	.name = "ctl_1", .id = CTL_1,
496386fced3SJonathan Marek 	.base = 0x1200, .len = 0x1e0,
497667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
498667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
499386fced3SJonathan Marek 	},
500386fced3SJonathan Marek 	{
501386fced3SJonathan Marek 	.name = "ctl_2", .id = CTL_2,
502386fced3SJonathan Marek 	.base = 0x1400, .len = 0x1e0,
503667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
504667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
505386fced3SJonathan Marek 	},
506386fced3SJonathan Marek 	{
507386fced3SJonathan Marek 	.name = "ctl_3", .id = CTL_3,
508386fced3SJonathan Marek 	.base = 0x1600, .len = 0x1e0,
509667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
510667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
511386fced3SJonathan Marek 	},
512386fced3SJonathan Marek 	{
513386fced3SJonathan Marek 	.name = "ctl_4", .id = CTL_4,
514386fced3SJonathan Marek 	.base = 0x1800, .len = 0x1e0,
515667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
516667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
517386fced3SJonathan Marek 	},
518386fced3SJonathan Marek 	{
519386fced3SJonathan Marek 	.name = "ctl_5", .id = CTL_5,
520386fced3SJonathan Marek 	.base = 0x1a00, .len = 0x1e0,
521667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
522667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
523386fced3SJonathan Marek 	},
524386fced3SJonathan Marek };
525386fced3SJonathan Marek 
526591e34a0SKrishna Manikandan static const struct dpu_ctl_cfg sc7280_ctl[] = {
527591e34a0SKrishna Manikandan 	{
528591e34a0SKrishna Manikandan 	.name = "ctl_0", .id = CTL_0,
529591e34a0SKrishna Manikandan 	.base = 0x15000, .len = 0x1E8,
530667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
531667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
532591e34a0SKrishna Manikandan 	},
533591e34a0SKrishna Manikandan 	{
534591e34a0SKrishna Manikandan 	.name = "ctl_1", .id = CTL_1,
535591e34a0SKrishna Manikandan 	.base = 0x16000, .len = 0x1E8,
536667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
537667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
538591e34a0SKrishna Manikandan 	},
539591e34a0SKrishna Manikandan 	{
540591e34a0SKrishna Manikandan 	.name = "ctl_2", .id = CTL_2,
541591e34a0SKrishna Manikandan 	.base = 0x17000, .len = 0x1E8,
542667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
543667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
544591e34a0SKrishna Manikandan 	},
545591e34a0SKrishna Manikandan 	{
546591e34a0SKrishna Manikandan 	.name = "ctl_3", .id = CTL_3,
547591e34a0SKrishna Manikandan 	.base = 0x18000, .len = 0x1E8,
548667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
549667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
550591e34a0SKrishna Manikandan 	},
551591e34a0SKrishna Manikandan };
552591e34a0SKrishna Manikandan 
55325fdd593SJeykumar Sankaran /*************************************************************
55425fdd593SJeykumar Sankaran  * SSPP sub blocks config
55525fdd593SJeykumar Sankaran  *************************************************************/
55625fdd593SJeykumar Sankaran 
55725fdd593SJeykumar Sankaran /* SSPP common configuration */
55825fdd593SJeykumar Sankaran 
559b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \
56025fdd593SJeykumar Sankaran 	{ \
56125fdd593SJeykumar Sankaran 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
56225fdd593SJeykumar Sankaran 	.maxupscale = MAX_UPSCALE_RATIO, \
56325fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
56425fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
56525fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
56625fdd593SJeykumar Sankaran 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
567b75ab05aSShubhashree Dhar 		.id = qseed_ver, \
56825fdd593SJeykumar Sankaran 		.base = 0xa00, .len = 0xa0,}, \
56925fdd593SJeykumar Sankaran 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
57025fdd593SJeykumar Sankaran 		.id = DPU_SSPP_CSC_10BIT, \
57125fdd593SJeykumar Sankaran 		.base = 0x1a00, .len = 0x100,}, \
57225fdd593SJeykumar Sankaran 	.format_list = plane_formats_yuv, \
573e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
57425fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
575e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
57625fdd593SJeykumar Sankaran 	}
57725fdd593SJeykumar Sankaran 
57825fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \
57925fdd593SJeykumar Sankaran 	{ \
58025fdd593SJeykumar Sankaran 	.maxdwnscale = SSPP_UNITY_SCALE, \
58125fdd593SJeykumar Sankaran 	.maxupscale = SSPP_UNITY_SCALE, \
58225fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
58325fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
58425fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
58525fdd593SJeykumar Sankaran 	.format_list = plane_formats, \
586e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats), \
58725fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
588e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
58925fdd593SJeykumar Sankaran 	}
59025fdd593SJeykumar Sankaran 
59194391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_0 =
59294391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("0", 0, DPU_SSPP_SCALER_QSEED3);
59394391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_1 =
59494391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("1", 0, DPU_SSPP_SCALER_QSEED3);
59594391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_2 =
59694391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("2", 0, DPU_SSPP_SCALER_QSEED3);
59794391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_3 =
59894391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("3", 0, DPU_SSPP_SCALER_QSEED3);
59994391a14SAngeloGioacchino Del Regno 
600b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 =
601b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3);
602b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 =
603b75ab05aSShubhashree Dhar 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3);
604b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 =
605b75ab05aSShubhashree Dhar 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3);
606b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 =
607b75ab05aSShubhashree Dhar 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3);
60825fdd593SJeykumar Sankaran 
60925fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1);
61025fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2);
61125fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3);
61225fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4);
61325fdd593SJeykumar Sankaran 
61407ca1fc0SSravanthi Kollukuduru #define SSPP_BLK(_name, _id, _base, _features, \
61507ca1fc0SSravanthi Kollukuduru 		_sblk, _xinid, _type, _clkctrl) \
61625fdd593SJeykumar Sankaran 	{ \
61725fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
61825fdd593SJeykumar Sankaran 	.base = _base, .len = 0x1c8, \
61907ca1fc0SSravanthi Kollukuduru 	.features = _features, \
62025fdd593SJeykumar Sankaran 	.sblk = &_sblk, \
62125fdd593SJeykumar Sankaran 	.xin_id = _xinid, \
62207ca1fc0SSravanthi Kollukuduru 	.type = _type, \
62325fdd593SJeykumar Sankaran 	.clk_ctrl = _clkctrl \
62425fdd593SJeykumar Sankaran 	}
62525fdd593SJeykumar Sankaran 
62694391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_cfg msm8998_sspp[] = {
62794391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_MSM8998_MASK,
62894391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
62994391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_MSM8998_MASK,
63094391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
63194391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_MSM8998_MASK,
63294391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
63394391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_MSM8998_MASK,
63494391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
63594391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_MSM8998_MASK,
63694391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
63794391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_MSM8998_MASK,
63894391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
63994391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_MSM8998_MASK,
64094391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
64194391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_MSM8998_MASK,
64294391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
64394391a14SAngeloGioacchino Del Regno };
64494391a14SAngeloGioacchino Del Regno 
645abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = {
64607ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SDM845_MASK,
64707ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
64807ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SDM845_MASK,
64907ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
65007ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SDM845_MASK,
65107ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
65207ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SDM845_MASK,
65307ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
65407ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
65507ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
65607ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
65707ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
65807ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
65907ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
66007ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
66107ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
66225fdd593SJeykumar Sankaran };
66325fdd593SJeykumar Sankaran 
664b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 =
665b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4);
666b75ab05aSShubhashree Dhar 
6677bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = {
6687bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
669b75ab05aSShubhashree Dhar 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
6707bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
6717bdc0c4bSKalyan Thota 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
6727b149f2bSKalyan Thota 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
6737b149f2bSKalyan Thota 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
6747bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
6757b149f2bSKalyan Thota 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
6767bdc0c4bSKalyan Thota };
6777bdc0c4bSKalyan Thota 
678d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 =
679d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE);
680d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 =
681d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE);
682d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 =
683d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE);
684d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 =
685d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE);
686d21fc5dfSDmitry Baryshkov 
687d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = {
688d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK,
689d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
690d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SM8250_MASK,
691d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
692d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SM8250_MASK,
693d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
694d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SM8250_MASK,
695d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
696d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
697d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
698d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
699d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
700d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
701d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
702d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
703d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
704d21fc5dfSDmitry Baryshkov };
705d21fc5dfSDmitry Baryshkov 
706591e34a0SKrishna Manikandan static const struct dpu_sspp_cfg sc7280_sspp[] = {
707591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
708591e34a0SKrishna Manikandan 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
709591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
710591e34a0SKrishna Manikandan 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
711591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
712591e34a0SKrishna Manikandan 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
713591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
714591e34a0SKrishna Manikandan 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
715591e34a0SKrishna Manikandan };
716591e34a0SKrishna Manikandan 
71725fdd593SJeykumar Sankaran /*************************************************************
71825fdd593SJeykumar Sankaran  * MIXER sub blocks config
71925fdd593SJeykumar Sankaran  *************************************************************/
7207bdc0c4bSKalyan Thota 
721e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \
72225fdd593SJeykumar Sankaran 	{ \
72325fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
72425fdd593SJeykumar Sankaran 	.base = _base, .len = 0x320, \
7257bdc0c4bSKalyan Thota 	.features = _fmask, \
7267bdc0c4bSKalyan Thota 	.sblk = _sblk, \
72725fdd593SJeykumar Sankaran 	.pingpong = _pp, \
728e47616dfSKalyan Thota 	.lm_pair_mask = (1 << _lmpair), \
729e47616dfSKalyan Thota 	.dspp = _dspp \
73025fdd593SJeykumar Sankaran 	}
73125fdd593SJeykumar Sankaran 
73294391a14SAngeloGioacchino Del Regno /* MSM8998 */
73394391a14SAngeloGioacchino Del Regno 
73494391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks msm8998_lm_sblk = {
73594391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
73694391a14SAngeloGioacchino Del Regno 	.maxblendstages = 7, /* excluding base layer */
73794391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
73894391a14SAngeloGioacchino Del Regno 		0x20, 0x50, 0x80, 0xb0, 0x230,
73994391a14SAngeloGioacchino Del Regno 		0x260, 0x290
74094391a14SAngeloGioacchino Del Regno 	},
74194391a14SAngeloGioacchino Del Regno };
74294391a14SAngeloGioacchino Del Regno 
74394391a14SAngeloGioacchino Del Regno static const struct dpu_lm_cfg msm8998_lm[] = {
74494391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
74594391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_0, LM_2, DSPP_0),
74694391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
74794391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_1, LM_5, DSPP_1),
74894391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
74994391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_2, LM_0, 0),
75094391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK,
75194391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
75294391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK,
75394391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
75494391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
75594391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_3, LM_1, 0),
75694391a14SAngeloGioacchino Del Regno };
75794391a14SAngeloGioacchino Del Regno 
75894391a14SAngeloGioacchino Del Regno /* SDM845 */
75994391a14SAngeloGioacchino Del Regno 
76094391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks sdm845_lm_sblk = {
76194391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
76294391a14SAngeloGioacchino Del Regno 	.maxblendstages = 11, /* excluding base layer */
76394391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
76494391a14SAngeloGioacchino Del Regno 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98,
76594391a14SAngeloGioacchino Del Regno 		0xb0, 0xc8, 0xe0, 0xf8, 0x110
76694391a14SAngeloGioacchino Del Regno 	},
76794391a14SAngeloGioacchino Del Regno };
76894391a14SAngeloGioacchino Del Regno 
769abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = {
7707bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
771e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_0, LM_1, 0),
7727bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
773e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_1, LM_0, 0),
7747bdc0c4bSKalyan Thota 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
775e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_2, LM_5, 0),
7767bdc0c4bSKalyan Thota 	LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK,
777e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
7787bdc0c4bSKalyan Thota 	LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK,
779e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
7807bdc0c4bSKalyan Thota 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
781e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
7827bdc0c4bSKalyan Thota };
7837bdc0c4bSKalyan Thota 
7847bdc0c4bSKalyan Thota /* SC7180 */
7857bdc0c4bSKalyan Thota 
7867bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = {
7877bdc0c4bSKalyan Thota 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
7887bdc0c4bSKalyan Thota 	.maxblendstages = 7, /* excluding base layer */
7897bdc0c4bSKalyan Thota 	.blendstage_base = { /* offsets relative to mixer base */
7907bdc0c4bSKalyan Thota 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0
7917bdc0c4bSKalyan Thota 	},
7927bdc0c4bSKalyan Thota };
7937bdc0c4bSKalyan Thota 
7947bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = {
7957bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
796e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
7977bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SC7180_MASK,
798e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_1, LM_0, 0),
79925fdd593SJeykumar Sankaran };
80025fdd593SJeykumar Sankaran 
801386fced3SJonathan Marek /* SM8150 */
802386fced3SJonathan Marek 
803386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = {
804386fced3SJonathan Marek 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
80505ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
806386fced3SJonathan Marek 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
80705ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1),
808386fced3SJonathan Marek 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
809386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_2, LM_3, 0),
810386fced3SJonathan Marek 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK,
811386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
812386fced3SJonathan Marek 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK,
813386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_4, LM_5, 0),
814386fced3SJonathan Marek 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
815386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_5, LM_4, 0),
816386fced3SJonathan Marek };
817386fced3SJonathan Marek 
818591e34a0SKrishna Manikandan static const struct dpu_lm_cfg sc7280_lm[] = {
819591e34a0SKrishna Manikandan 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
820591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_0, 0, 0),
821591e34a0SKrishna Manikandan 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SC7180_MASK,
822591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_2, LM_3, 0),
823591e34a0SKrishna Manikandan 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SC7180_MASK,
824591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_3, LM_2, 0),
825591e34a0SKrishna Manikandan };
826591e34a0SKrishna Manikandan 
82725fdd593SJeykumar Sankaran /*************************************************************
828e47616dfSKalyan Thota  * DSPP sub blocks config
829e47616dfSKalyan Thota  *************************************************************/
83094391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
83194391a14SAngeloGioacchino Del Regno 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
83294391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
83394391a14SAngeloGioacchino Del Regno 	.gc = { .id = DPU_DSPP_GC, .base = 0x17c0,
83494391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
83594391a14SAngeloGioacchino Del Regno };
83694391a14SAngeloGioacchino Del Regno 
8374259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
8384259ff7aSKalyan Thota 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
8394259ff7aSKalyan Thota 		.len = 0x90, .version = 0x10000},
8404259ff7aSKalyan Thota };
8414259ff7aSKalyan Thota 
84205ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = {
84305ae91d9SDmitry Baryshkov 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
84405ae91d9SDmitry Baryshkov 		.len = 0x90, .version = 0x40000},
84505ae91d9SDmitry Baryshkov };
84605ae91d9SDmitry Baryshkov 
847862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \
848e47616dfSKalyan Thota 		{\
849e47616dfSKalyan Thota 		.name = _name, .id = _id, \
850e47616dfSKalyan Thota 		.base = _base, .len = 0x1800, \
851862314bcSAngeloGioacchino Del Regno 		.features = _mask, \
85205ae91d9SDmitry Baryshkov 		.sblk = _sblk \
853e47616dfSKalyan Thota 		}
854e47616dfSKalyan Thota 
85594391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_cfg msm8998_dspp[] = {
85694391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK,
85794391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
85894391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK,
85994391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
86094391a14SAngeloGioacchino Del Regno };
86194391a14SAngeloGioacchino Del Regno 
862e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = {
863862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
864862314bcSAngeloGioacchino Del Regno 		 &sc7180_dspp_sblk),
86505ae91d9SDmitry Baryshkov };
86605ae91d9SDmitry Baryshkov 
86705ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = {
868862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
869862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
870862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
871862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
872862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK,
873862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
874862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK,
875862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
876e47616dfSKalyan Thota };
877386fced3SJonathan Marek 
878e47616dfSKalyan Thota /*************************************************************
87925fdd593SJeykumar Sankaran  * PINGPONG sub blocks config
88025fdd593SJeykumar Sankaran  *************************************************************/
88125fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = {
88225fdd593SJeykumar Sankaran 	.te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0,
88325fdd593SJeykumar Sankaran 		.version = 0x1},
88425fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
88525fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
88625fdd593SJeykumar Sankaran };
88725fdd593SJeykumar Sankaran 
88825fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = {
88925fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
89025fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
89125fdd593SJeykumar Sankaran };
89225fdd593SJeykumar Sankaran 
893591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
894591e34a0SKrishna Manikandan 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0,
895591e34a0SKrishna Manikandan 	.len = 0x20, .version = 0x20000},
896591e34a0SKrishna Manikandan };
897591e34a0SKrishna Manikandan 
898667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
89925fdd593SJeykumar Sankaran 	{\
90025fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
90125fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
90225fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_SPLIT_MASK, \
9034369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
904667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
905667e9985SDmitry Baryshkov 	.intr_done = _done, \
906667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
90725fdd593SJeykumar Sankaran 	}
908667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
90925fdd593SJeykumar Sankaran 	{\
91025fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
91125fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
91225fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_MASK, \
9134369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
914667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
915667e9985SDmitry Baryshkov 	.intr_done = _done, \
916667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
91725fdd593SJeykumar Sankaran 	}
91825fdd593SJeykumar Sankaran 
919abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = {
920667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te,
921667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
922667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
923667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te,
924667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
925667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
926667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk,
927667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
928667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
929667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk,
930667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
931667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
93225fdd593SJeykumar Sankaran };
93325fdd593SJeykumar Sankaran 
9347bdc0c4bSKalyan Thota static struct dpu_pingpong_cfg sc7180_pp[] = {
935667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1),
936667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1),
9377bdc0c4bSKalyan Thota };
9387bdc0c4bSKalyan Thota 
939386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = {
940667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te,
941667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
942667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
943667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te,
944667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
945667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
946667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk,
947667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
948667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
949667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk,
950667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
951667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
952667e9985SDmitry Baryshkov 	PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk,
953667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
954667e9985SDmitry Baryshkov 			-1),
955667e9985SDmitry Baryshkov 	PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk,
9563431c17bSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
957667e9985SDmitry Baryshkov 			-1),
9584369c93cSDmitry Baryshkov };
9594369c93cSDmitry Baryshkov 
9604369c93cSDmitry Baryshkov /*************************************************************
9614369c93cSDmitry Baryshkov  * MERGE_3D sub blocks config
9624369c93cSDmitry Baryshkov  *************************************************************/
9634369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \
9644369c93cSDmitry Baryshkov 	{\
9654369c93cSDmitry Baryshkov 	.name = _name, .id = _id, \
9664369c93cSDmitry Baryshkov 	.base = _base, .len = 0x100, \
9674369c93cSDmitry Baryshkov 	.features = MERGE_3D_SM8150_MASK, \
9684369c93cSDmitry Baryshkov 	.sblk = NULL \
9694369c93cSDmitry Baryshkov 	}
9704369c93cSDmitry Baryshkov 
9714369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = {
9724369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000),
9734369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100),
9744369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200),
975386fced3SJonathan Marek };
976386fced3SJonathan Marek 
977591e34a0SKrishna Manikandan static const struct dpu_pingpong_cfg sc7280_pp[] = {
978667e9985SDmitry Baryshkov 	PP_BLK("pingpong_0", PINGPONG_0, 0x59000, 0, sc7280_pp_sblk, -1, -1),
979667e9985SDmitry Baryshkov 	PP_BLK("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1),
980667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1),
981667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1),
982591e34a0SKrishna Manikandan };
98325fdd593SJeykumar Sankaran /*************************************************************
98425fdd593SJeykumar Sankaran  * INTF sub blocks config
98525fdd593SJeykumar Sankaran  *************************************************************/
986667e9985SDmitry Baryshkov #define INTF_BLK(_name, _id, _base, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \
98725fdd593SJeykumar Sankaran 	{\
98825fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
98925fdd593SJeykumar Sankaran 	.base = _base, .len = 0x280, \
990cace3ac4SJonathan Marek 	.features = _features, \
99125fdd593SJeykumar Sankaran 	.type = _type, \
99225fdd593SJeykumar Sankaran 	.controller_id = _ctrl_id, \
993667e9985SDmitry Baryshkov 	.prog_fetch_lines_worst_case = _progfetch, \
994667e9985SDmitry Baryshkov 	.intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \
995667e9985SDmitry Baryshkov 	.intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \
99625fdd593SJeykumar Sankaran 	}
99725fdd593SJeykumar Sankaran 
99894391a14SAngeloGioacchino Del Regno static const struct dpu_intf_cfg msm8998_intf[] = {
99994391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
100094391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
100194391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
100294391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_HDMI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
100394391a14SAngeloGioacchino Del Regno };
100494391a14SAngeloGioacchino Del Regno 
1005abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = {
1006667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1007667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1008667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1009667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
101025fdd593SJeykumar Sankaran };
101125fdd593SJeykumar Sankaran 
10127bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = {
1013bb3de286SBjorn Andersson 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1014667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
10157bdc0c4bSKalyan Thota };
10167bdc0c4bSKalyan Thota 
1017386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = {
1018667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1019667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1020667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1021667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1022386fced3SJonathan Marek };
1023386fced3SJonathan Marek 
1024591e34a0SKrishna Manikandan static const struct dpu_intf_cfg sc7280_intf[] = {
1025ef7837ffSSankeerth Billakanti 	INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1026667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1027ef7837ffSSankeerth Billakanti 	INTF_BLK("intf_5", INTF_5, 0x39000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
1028591e34a0SKrishna Manikandan };
1029591e34a0SKrishna Manikandan 
103025fdd593SJeykumar Sankaran /*************************************************************
103125fdd593SJeykumar Sankaran  * VBIF sub blocks config
103225fdd593SJeykumar Sankaran  *************************************************************/
103325fdd593SJeykumar Sankaran /* VBIF QOS remap */
103494391a14SAngeloGioacchino Del Regno static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2};
103594391a14SAngeloGioacchino Del Regno static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1};
1036abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6};
1037abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3};
103825fdd593SJeykumar Sankaran 
103994391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
104094391a14SAngeloGioacchino Del Regno 	{
104194391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 30,
104294391a14SAngeloGioacchino Del Regno 		.ot_limit = 2,
104394391a14SAngeloGioacchino Del Regno 	},
104494391a14SAngeloGioacchino Del Regno 	{
104594391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 60,
104694391a14SAngeloGioacchino Del Regno 		.ot_limit = 6,
104794391a14SAngeloGioacchino Del Regno 	},
104894391a14SAngeloGioacchino Del Regno 	{
104994391a14SAngeloGioacchino Del Regno 		.pps = 3840 * 2160 * 30,
105094391a14SAngeloGioacchino Del Regno 		.ot_limit = 16,
105194391a14SAngeloGioacchino Del Regno 	},
105294391a14SAngeloGioacchino Del Regno };
105394391a14SAngeloGioacchino Del Regno 
105494391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_cfg msm8998_vbif[] = {
105594391a14SAngeloGioacchino Del Regno 	{
105694391a14SAngeloGioacchino Del Regno 	.name = "vbif_0", .id = VBIF_0,
105794391a14SAngeloGioacchino Del Regno 	.base = 0, .len = 0x1040,
105894391a14SAngeloGioacchino Del Regno 	.default_ot_rd_limit = 32,
105994391a14SAngeloGioacchino Del Regno 	.default_ot_wr_limit = 32,
106094391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM),
106194391a14SAngeloGioacchino Del Regno 	.xin_halt_timeout = 0x4000,
106294391a14SAngeloGioacchino Del Regno 	.dynamic_ot_rd_tbl = {
106394391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
106494391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
106594391a14SAngeloGioacchino Del Regno 		},
106694391a14SAngeloGioacchino Del Regno 	.dynamic_ot_wr_tbl = {
106794391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
106894391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
106994391a14SAngeloGioacchino Del Regno 		},
107094391a14SAngeloGioacchino Del Regno 	.qos_rt_tbl = {
107194391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl),
107294391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_rt_pri_lvl,
107394391a14SAngeloGioacchino Del Regno 		},
107494391a14SAngeloGioacchino Del Regno 	.qos_nrt_tbl = {
107594391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl),
107694391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_nrt_pri_lvl,
107794391a14SAngeloGioacchino Del Regno 		},
107894391a14SAngeloGioacchino Del Regno 	.memtype_count = 14,
107994391a14SAngeloGioacchino Del Regno 	.memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
108094391a14SAngeloGioacchino Del Regno 	},
108194391a14SAngeloGioacchino Del Regno };
108294391a14SAngeloGioacchino Del Regno 
1083abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = {
108425fdd593SJeykumar Sankaran 	{
108525fdd593SJeykumar Sankaran 	.name = "vbif_0", .id = VBIF_0,
108625fdd593SJeykumar Sankaran 	.base = 0, .len = 0x1040,
108725fdd593SJeykumar Sankaran 	.features = BIT(DPU_VBIF_QOS_REMAP),
108825fdd593SJeykumar Sankaran 	.xin_halt_timeout = 0x4000,
108925fdd593SJeykumar Sankaran 	.qos_rt_tbl = {
109025fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
109125fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_rt_pri_lvl,
109225fdd593SJeykumar Sankaran 		},
109325fdd593SJeykumar Sankaran 	.qos_nrt_tbl = {
109425fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
109525fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_nrt_pri_lvl,
109625fdd593SJeykumar Sankaran 		},
109725fdd593SJeykumar Sankaran 	.memtype_count = 14,
109825fdd593SJeykumar Sankaran 	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
109925fdd593SJeykumar Sankaran 	},
110025fdd593SJeykumar Sankaran };
110125fdd593SJeykumar Sankaran 
1102abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = {
110325fdd593SJeykumar Sankaran 	.base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c
110425fdd593SJeykumar Sankaran };
110525fdd593SJeykumar Sankaran 
1106386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = {
1107386fced3SJonathan Marek 	.base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c
1108386fced3SJonathan Marek };
1109386fced3SJonathan Marek 
1110af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = {
1111af776a3eSJonathan Marek 	.base = 0x0,
1112af776a3eSJonathan Marek 	.version = 0x00010002,
1113af776a3eSJonathan Marek 	.trigger_sel_off = 0x119c,
1114af776a3eSJonathan Marek 	.xin_id = 7,
1115af776a3eSJonathan Marek 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
1116af776a3eSJonathan Marek };
1117af776a3eSJonathan Marek 
111825fdd593SJeykumar Sankaran /*************************************************************
111925fdd593SJeykumar Sankaran  * PERF data config
112025fdd593SJeykumar Sankaran  *************************************************************/
112125fdd593SJeykumar Sankaran 
112225fdd593SJeykumar Sankaran /* SSPP QOS LUTs */
112394391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_linear[] = {
112494391a14SAngeloGioacchino Del Regno 	{.fl = 4,  .lut = 0x1b},
112594391a14SAngeloGioacchino Del Regno 	{.fl = 5,  .lut = 0x5b},
112694391a14SAngeloGioacchino Del Regno 	{.fl = 6,  .lut = 0x15b},
112794391a14SAngeloGioacchino Del Regno 	{.fl = 7,  .lut = 0x55b},
112894391a14SAngeloGioacchino Del Regno 	{.fl = 8,  .lut = 0x155b},
112994391a14SAngeloGioacchino Del Regno 	{.fl = 9,  .lut = 0x555b},
113094391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1555b},
113194391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5555b},
113294391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15555b},
113394391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55555b},
113494391a14SAngeloGioacchino Del Regno 	{.fl = 14, .lut = 0},
113594391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1b},
113694391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0}
113794391a14SAngeloGioacchino Del Regno };
113894391a14SAngeloGioacchino Del Regno 
1139abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = {
114025fdd593SJeykumar Sankaran 	{.fl = 4, .lut = 0x357},
114125fdd593SJeykumar Sankaran 	{.fl = 5, .lut = 0x3357},
114225fdd593SJeykumar Sankaran 	{.fl = 6, .lut = 0x23357},
114325fdd593SJeykumar Sankaran 	{.fl = 7, .lut = 0x223357},
114425fdd593SJeykumar Sankaran 	{.fl = 8, .lut = 0x2223357},
114525fdd593SJeykumar Sankaran 	{.fl = 9, .lut = 0x22223357},
114625fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x222223357},
114725fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x2222223357},
114825fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x22222223357},
114925fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x222222223357},
115025fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1222222223357},
115125fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x11222222223357}
115225fdd593SJeykumar Sankaran };
115325fdd593SJeykumar Sankaran 
115494391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = {
115594391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1aaff},
115694391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5aaff},
115794391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15aaff},
115894391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55aaff},
115994391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1aaff},
116094391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0},
116194391a14SAngeloGioacchino Del Regno };
116294391a14SAngeloGioacchino Del Regno 
11637bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
11647bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011222222335777},
11657bdc0c4bSKalyan Thota };
11667bdc0c4bSKalyan Thota 
1167386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = {
1168386fced3SJonathan Marek 	{.fl = 0, .lut = 0x0011222222223357 },
1169386fced3SJonathan Marek };
1170386fced3SJonathan Marek 
1171abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = {
117225fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x344556677},
117325fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x3344556677},
117425fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x23344556677},
117525fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x223344556677},
117625fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1223344556677},
117725fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x112233344556677},
117825fdd593SJeykumar Sankaran };
117925fdd593SJeykumar Sankaran 
11807bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
11817bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011223344556677},
11827bdc0c4bSKalyan Thota };
11837bdc0c4bSKalyan Thota 
118494391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = {
118594391a14SAngeloGioacchino Del Regno 	{.fl = 0, .lut = 0x0},
118694391a14SAngeloGioacchino Del Regno };
118794391a14SAngeloGioacchino Del Regno 
1188abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = {
118925fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x0},
119025fdd593SJeykumar Sankaran };
119125fdd593SJeykumar Sankaran 
11927bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
11937bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0},
11947bdc0c4bSKalyan Thota };
11957bdc0c4bSKalyan Thota 
119694391a14SAngeloGioacchino Del Regno static const struct dpu_perf_cfg msm8998_perf_data = {
119794391a14SAngeloGioacchino Del Regno 	.max_bw_low = 6700000,
119894391a14SAngeloGioacchino Del Regno 	.max_bw_high = 6700000,
119994391a14SAngeloGioacchino Del Regno 	.min_core_ib = 2400000,
120094391a14SAngeloGioacchino Del Regno 	.min_llcc_ib = 800000,
120194391a14SAngeloGioacchino Del Regno 	.min_dram_ib = 800000,
120294391a14SAngeloGioacchino Del Regno 	.undersized_prefill_lines = 2,
120394391a14SAngeloGioacchino Del Regno 	.xtra_prefill_lines = 2,
120494391a14SAngeloGioacchino Del Regno 	.dest_scale_prefill_lines = 3,
120594391a14SAngeloGioacchino Del Regno 	.macrotile_prefill_lines = 4,
120694391a14SAngeloGioacchino Del Regno 	.yuv_nv12_prefill_lines = 8,
120794391a14SAngeloGioacchino Del Regno 	.linear_prefill_lines = 1,
120894391a14SAngeloGioacchino Del Regno 	.downscaling_prefill_lines = 1,
120994391a14SAngeloGioacchino Del Regno 	.amortizable_threshold = 25,
121094391a14SAngeloGioacchino Del Regno 	.min_prefill_lines = 25,
121194391a14SAngeloGioacchino Del Regno 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
121294391a14SAngeloGioacchino Del Regno 	.safe_lut_tbl = {0xfffc, 0xff00, 0xffff},
121394391a14SAngeloGioacchino Del Regno 	.qos_lut_tbl = {
121494391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_linear),
121594391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_linear
121694391a14SAngeloGioacchino Del Regno 		},
121794391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_macrotile),
121894391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_macrotile
121994391a14SAngeloGioacchino Del Regno 		},
122094391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_nrt),
122194391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_nrt
122294391a14SAngeloGioacchino Del Regno 		},
122394391a14SAngeloGioacchino Del Regno 	},
122494391a14SAngeloGioacchino Del Regno 	.cdp_cfg = {
122594391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 1},
122694391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 0}
122794391a14SAngeloGioacchino Del Regno 	},
122894391a14SAngeloGioacchino Del Regno 	.clk_inefficiency_factor = 200,
122994391a14SAngeloGioacchino Del Regno 	.bw_inefficiency_factor = 120,
123094391a14SAngeloGioacchino Del Regno };
123194391a14SAngeloGioacchino Del Regno 
1232abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = {
123325fdd593SJeykumar Sankaran 	.max_bw_low = 6800000,
123425fdd593SJeykumar Sankaran 	.max_bw_high = 6800000,
123525fdd593SJeykumar Sankaran 	.min_core_ib = 2400000,
123625fdd593SJeykumar Sankaran 	.min_llcc_ib = 800000,
123725fdd593SJeykumar Sankaran 	.min_dram_ib = 800000,
123825fdd593SJeykumar Sankaran 	.undersized_prefill_lines = 2,
123925fdd593SJeykumar Sankaran 	.xtra_prefill_lines = 2,
124025fdd593SJeykumar Sankaran 	.dest_scale_prefill_lines = 3,
124125fdd593SJeykumar Sankaran 	.macrotile_prefill_lines = 4,
124225fdd593SJeykumar Sankaran 	.yuv_nv12_prefill_lines = 8,
124325fdd593SJeykumar Sankaran 	.linear_prefill_lines = 1,
124425fdd593SJeykumar Sankaran 	.downscaling_prefill_lines = 1,
124525fdd593SJeykumar Sankaran 	.amortizable_threshold = 25,
124625fdd593SJeykumar Sankaran 	.min_prefill_lines = 24,
124725fdd593SJeykumar Sankaran 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
12485bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xf000, 0xffff},
124925fdd593SJeykumar Sankaran 	.qos_lut_tbl = {
125025fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_linear),
125125fdd593SJeykumar Sankaran 		.entries = sdm845_qos_linear
125225fdd593SJeykumar Sankaran 		},
125325fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_macrotile),
125425fdd593SJeykumar Sankaran 		.entries = sdm845_qos_macrotile
125525fdd593SJeykumar Sankaran 		},
125625fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_nrt),
125725fdd593SJeykumar Sankaran 		.entries = sdm845_qos_nrt
125825fdd593SJeykumar Sankaran 		},
125925fdd593SJeykumar Sankaran 	},
126025fdd593SJeykumar Sankaran 	.cdp_cfg = {
126125fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 1},
126225fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 0}
126325fdd593SJeykumar Sankaran 	},
12644f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
12654f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
126625fdd593SJeykumar Sankaran };
126725fdd593SJeykumar Sankaran 
12687bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = {
126971dc6c08SKrishna Manikandan 	.max_bw_low = 6800000,
127071dc6c08SKrishna Manikandan 	.max_bw_high = 6800000,
12717bdc0c4bSKalyan Thota 	.min_core_ib = 2400000,
12727bdc0c4bSKalyan Thota 	.min_llcc_ib = 800000,
1273c33b7c03SKalyan Thota 	.min_dram_ib = 1600000,
1274c33b7c03SKalyan Thota 	.min_prefill_lines = 24,
12757bdc0c4bSKalyan Thota 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
12765bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
12777bdc0c4bSKalyan Thota 	.qos_lut_tbl = {
12787bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
12797bdc0c4bSKalyan Thota 		.entries = sc7180_qos_linear
12807bdc0c4bSKalyan Thota 		},
12817bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
12827bdc0c4bSKalyan Thota 		.entries = sc7180_qos_macrotile
12837bdc0c4bSKalyan Thota 		},
12847bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
12857bdc0c4bSKalyan Thota 		.entries = sc7180_qos_nrt
12867bdc0c4bSKalyan Thota 		},
12877bdc0c4bSKalyan Thota 	},
12887bdc0c4bSKalyan Thota 	.cdp_cfg = {
12897bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 1},
12907bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 0}
12917bdc0c4bSKalyan Thota 	},
1292c33b7c03SKalyan Thota 	.clk_inefficiency_factor = 105,
1293c33b7c03SKalyan Thota 	.bw_inefficiency_factor = 120,
12947bdc0c4bSKalyan Thota };
12957bdc0c4bSKalyan Thota 
1296386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = {
1297386fced3SJonathan Marek 	.max_bw_low = 12800000,
1298386fced3SJonathan Marek 	.max_bw_high = 12800000,
1299386fced3SJonathan Marek 	.min_core_ib = 2400000,
1300386fced3SJonathan Marek 	.min_llcc_ib = 800000,
1301386fced3SJonathan Marek 	.min_dram_ib = 800000,
13024f2c9838SDmitry Baryshkov 	.min_prefill_lines = 24,
1303386fced3SJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
13045bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff8, 0xf000, 0xffff},
1305386fced3SJonathan Marek 	.qos_lut_tbl = {
1306386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sm8150_qos_linear),
1307386fced3SJonathan Marek 		.entries = sm8150_qos_linear
1308386fced3SJonathan Marek 		},
1309386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1310386fced3SJonathan Marek 		.entries = sc7180_qos_macrotile
1311386fced3SJonathan Marek 		},
1312386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1313386fced3SJonathan Marek 		.entries = sc7180_qos_nrt
1314386fced3SJonathan Marek 		},
1315386fced3SJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1316386fced3SJonathan Marek 	},
1317386fced3SJonathan Marek 	.cdp_cfg = {
1318386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1319386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1320386fced3SJonathan Marek 	},
13214f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
13224f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1323386fced3SJonathan Marek };
1324386fced3SJonathan Marek 
1325af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = {
1326af776a3eSJonathan Marek 	.max_bw_low = 13700000,
1327af776a3eSJonathan Marek 	.max_bw_high = 16600000,
1328af776a3eSJonathan Marek 	.min_core_ib = 4800000,
1329af776a3eSJonathan Marek 	.min_llcc_ib = 0,
1330af776a3eSJonathan Marek 	.min_dram_ib = 800000,
13314f2c9838SDmitry Baryshkov 	.min_prefill_lines = 35,
1332af776a3eSJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
13335bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
1334af776a3eSJonathan Marek 	.qos_lut_tbl = {
1335af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
1336af776a3eSJonathan Marek 		.entries = sc7180_qos_linear
1337af776a3eSJonathan Marek 		},
1338af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1339af776a3eSJonathan Marek 		.entries = sc7180_qos_macrotile
1340af776a3eSJonathan Marek 		},
1341af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1342af776a3eSJonathan Marek 		.entries = sc7180_qos_nrt
1343af776a3eSJonathan Marek 		},
1344af776a3eSJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1345af776a3eSJonathan Marek 	},
1346af776a3eSJonathan Marek 	.cdp_cfg = {
1347af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1348af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1349af776a3eSJonathan Marek 	},
13504f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
13514f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1352af776a3eSJonathan Marek };
1353af776a3eSJonathan Marek 
1354591e34a0SKrishna Manikandan static const struct dpu_perf_cfg sc7280_perf_data = {
1355591e34a0SKrishna Manikandan 	.max_bw_low = 4700000,
1356591e34a0SKrishna Manikandan 	.max_bw_high = 8800000,
1357591e34a0SKrishna Manikandan 	.min_core_ib = 2500000,
1358591e34a0SKrishna Manikandan 	.min_llcc_ib = 0,
1359591e34a0SKrishna Manikandan 	.min_dram_ib = 1600000,
1360591e34a0SKrishna Manikandan 	.min_prefill_lines = 24,
1361591e34a0SKrishna Manikandan 	.danger_lut_tbl = {0xffff, 0xffff, 0x0},
13625bccb945SKalyan Thota 	.safe_lut_tbl = {0xff00, 0xff00, 0xffff},
1363591e34a0SKrishna Manikandan 	.qos_lut_tbl = {
1364591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1365591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
1366591e34a0SKrishna Manikandan 		},
1367591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1368591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
1369591e34a0SKrishna Manikandan 		},
1370591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1371591e34a0SKrishna Manikandan 		.entries = sc7180_qos_nrt
1372591e34a0SKrishna Manikandan 		},
1373591e34a0SKrishna Manikandan 	},
1374591e34a0SKrishna Manikandan 	.cdp_cfg = {
1375591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 1},
1376591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 0}
1377591e34a0SKrishna Manikandan 	},
1378591e34a0SKrishna Manikandan 	.clk_inefficiency_factor = 105,
1379591e34a0SKrishna Manikandan 	.bw_inefficiency_factor = 120,
1380591e34a0SKrishna Manikandan };
1381591e34a0SKrishna Manikandan 
138225fdd593SJeykumar Sankaran /*************************************************************
138325fdd593SJeykumar Sankaran  * Hardware catalog init
138425fdd593SJeykumar Sankaran  *************************************************************/
138525fdd593SJeykumar Sankaran 
138625fdd593SJeykumar Sankaran /*
138794391a14SAngeloGioacchino Del Regno  * msm8998_cfg_init(): populate sdm845 dpu sub-blocks reg offsets
138894391a14SAngeloGioacchino Del Regno  * and instance counts.
138994391a14SAngeloGioacchino Del Regno  */
139094391a14SAngeloGioacchino Del Regno static void msm8998_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
139194391a14SAngeloGioacchino Del Regno {
139294391a14SAngeloGioacchino Del Regno 	*dpu_cfg = (struct dpu_mdss_cfg){
139394391a14SAngeloGioacchino Del Regno 		.caps = &msm8998_dpu_caps,
139494391a14SAngeloGioacchino Del Regno 		.mdp_count = ARRAY_SIZE(msm8998_mdp),
139594391a14SAngeloGioacchino Del Regno 		.mdp = msm8998_mdp,
139694391a14SAngeloGioacchino Del Regno 		.ctl_count = ARRAY_SIZE(msm8998_ctl),
139794391a14SAngeloGioacchino Del Regno 		.ctl = msm8998_ctl,
139894391a14SAngeloGioacchino Del Regno 		.sspp_count = ARRAY_SIZE(msm8998_sspp),
139994391a14SAngeloGioacchino Del Regno 		.sspp = msm8998_sspp,
140094391a14SAngeloGioacchino Del Regno 		.mixer_count = ARRAY_SIZE(msm8998_lm),
140194391a14SAngeloGioacchino Del Regno 		.mixer = msm8998_lm,
140294391a14SAngeloGioacchino Del Regno 		.pingpong_count = ARRAY_SIZE(sdm845_pp),
140394391a14SAngeloGioacchino Del Regno 		.pingpong = sdm845_pp,
140494391a14SAngeloGioacchino Del Regno 		.intf_count = ARRAY_SIZE(msm8998_intf),
140594391a14SAngeloGioacchino Del Regno 		.intf = msm8998_intf,
140694391a14SAngeloGioacchino Del Regno 		.vbif_count = ARRAY_SIZE(msm8998_vbif),
140794391a14SAngeloGioacchino Del Regno 		.vbif = msm8998_vbif,
140894391a14SAngeloGioacchino Del Regno 		.reg_dma_count = 0,
140994391a14SAngeloGioacchino Del Regno 		.perf = msm8998_perf_data,
141094391a14SAngeloGioacchino Del Regno 		.mdss_irqs = IRQ_SM8250_MASK,
141194391a14SAngeloGioacchino Del Regno 	};
141294391a14SAngeloGioacchino Del Regno }
141394391a14SAngeloGioacchino Del Regno 
141494391a14SAngeloGioacchino Del Regno /*
141525fdd593SJeykumar Sankaran  * sdm845_cfg_init(): populate sdm845 dpu sub-blocks reg offsets
141625fdd593SJeykumar Sankaran  * and instance counts.
141725fdd593SJeykumar Sankaran  */
1418fba33caeSJordan Crouse static void sdm845_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
141925fdd593SJeykumar Sankaran {
142025fdd593SJeykumar Sankaran 	*dpu_cfg = (struct dpu_mdss_cfg){
142125fdd593SJeykumar Sankaran 		.caps = &sdm845_dpu_caps,
142225fdd593SJeykumar Sankaran 		.mdp_count = ARRAY_SIZE(sdm845_mdp),
142325fdd593SJeykumar Sankaran 		.mdp = sdm845_mdp,
142425fdd593SJeykumar Sankaran 		.ctl_count = ARRAY_SIZE(sdm845_ctl),
142525fdd593SJeykumar Sankaran 		.ctl = sdm845_ctl,
142625fdd593SJeykumar Sankaran 		.sspp_count = ARRAY_SIZE(sdm845_sspp),
142725fdd593SJeykumar Sankaran 		.sspp = sdm845_sspp,
142825fdd593SJeykumar Sankaran 		.mixer_count = ARRAY_SIZE(sdm845_lm),
142925fdd593SJeykumar Sankaran 		.mixer = sdm845_lm,
143025fdd593SJeykumar Sankaran 		.pingpong_count = ARRAY_SIZE(sdm845_pp),
143125fdd593SJeykumar Sankaran 		.pingpong = sdm845_pp,
143225fdd593SJeykumar Sankaran 		.intf_count = ARRAY_SIZE(sdm845_intf),
143325fdd593SJeykumar Sankaran 		.intf = sdm845_intf,
143425fdd593SJeykumar Sankaran 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
143525fdd593SJeykumar Sankaran 		.vbif = sdm845_vbif,
143625fdd593SJeykumar Sankaran 		.reg_dma_count = 1,
143725fdd593SJeykumar Sankaran 		.dma_cfg = sdm845_regdma,
143825fdd593SJeykumar Sankaran 		.perf = sdm845_perf_data,
1439597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SDM845_MASK,
144025fdd593SJeykumar Sankaran 	};
144125fdd593SJeykumar Sankaran }
144225fdd593SJeykumar Sankaran 
14437bdc0c4bSKalyan Thota /*
14447bdc0c4bSKalyan Thota  * sc7180_cfg_init(): populate sc7180 dpu sub-blocks reg offsets
14457bdc0c4bSKalyan Thota  * and instance counts.
14467bdc0c4bSKalyan Thota  */
14477bdc0c4bSKalyan Thota static void sc7180_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
14487bdc0c4bSKalyan Thota {
14497bdc0c4bSKalyan Thota 	*dpu_cfg = (struct dpu_mdss_cfg){
14507bdc0c4bSKalyan Thota 		.caps = &sc7180_dpu_caps,
14517bdc0c4bSKalyan Thota 		.mdp_count = ARRAY_SIZE(sc7180_mdp),
14527bdc0c4bSKalyan Thota 		.mdp = sc7180_mdp,
14537bdc0c4bSKalyan Thota 		.ctl_count = ARRAY_SIZE(sc7180_ctl),
14547bdc0c4bSKalyan Thota 		.ctl = sc7180_ctl,
14557bdc0c4bSKalyan Thota 		.sspp_count = ARRAY_SIZE(sc7180_sspp),
14567bdc0c4bSKalyan Thota 		.sspp = sc7180_sspp,
14577bdc0c4bSKalyan Thota 		.mixer_count = ARRAY_SIZE(sc7180_lm),
14587bdc0c4bSKalyan Thota 		.mixer = sc7180_lm,
1459e47616dfSKalyan Thota 		.dspp_count = ARRAY_SIZE(sc7180_dspp),
1460e47616dfSKalyan Thota 		.dspp = sc7180_dspp,
14617bdc0c4bSKalyan Thota 		.pingpong_count = ARRAY_SIZE(sc7180_pp),
14627bdc0c4bSKalyan Thota 		.pingpong = sc7180_pp,
14637bdc0c4bSKalyan Thota 		.intf_count = ARRAY_SIZE(sc7180_intf),
14647bdc0c4bSKalyan Thota 		.intf = sc7180_intf,
14657bdc0c4bSKalyan Thota 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
14667bdc0c4bSKalyan Thota 		.vbif = sdm845_vbif,
14677bdc0c4bSKalyan Thota 		.reg_dma_count = 1,
14687bdc0c4bSKalyan Thota 		.dma_cfg = sdm845_regdma,
14697bdc0c4bSKalyan Thota 		.perf = sc7180_perf_data,
1470597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SC7180_MASK,
14717bdc0c4bSKalyan Thota 	};
14727bdc0c4bSKalyan Thota }
14737bdc0c4bSKalyan Thota 
1474386fced3SJonathan Marek /*
1475386fced3SJonathan Marek  * sm8150_cfg_init(): populate sm8150 dpu sub-blocks reg offsets
1476386fced3SJonathan Marek  * and instance counts.
1477386fced3SJonathan Marek  */
1478386fced3SJonathan Marek static void sm8150_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1479386fced3SJonathan Marek {
1480386fced3SJonathan Marek 	*dpu_cfg = (struct dpu_mdss_cfg){
1481386fced3SJonathan Marek 		.caps = &sm8150_dpu_caps,
1482386fced3SJonathan Marek 		.mdp_count = ARRAY_SIZE(sdm845_mdp),
1483386fced3SJonathan Marek 		.mdp = sdm845_mdp,
1484386fced3SJonathan Marek 		.ctl_count = ARRAY_SIZE(sm8150_ctl),
1485386fced3SJonathan Marek 		.ctl = sm8150_ctl,
1486386fced3SJonathan Marek 		.sspp_count = ARRAY_SIZE(sdm845_sspp),
1487386fced3SJonathan Marek 		.sspp = sdm845_sspp,
1488386fced3SJonathan Marek 		.mixer_count = ARRAY_SIZE(sm8150_lm),
1489386fced3SJonathan Marek 		.mixer = sm8150_lm,
149005ae91d9SDmitry Baryshkov 		.dspp_count = ARRAY_SIZE(sm8150_dspp),
149105ae91d9SDmitry Baryshkov 		.dspp = sm8150_dspp,
1492386fced3SJonathan Marek 		.pingpong_count = ARRAY_SIZE(sm8150_pp),
1493386fced3SJonathan Marek 		.pingpong = sm8150_pp,
14944369c93cSDmitry Baryshkov 		.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
14954369c93cSDmitry Baryshkov 		.merge_3d = sm8150_merge_3d,
1496386fced3SJonathan Marek 		.intf_count = ARRAY_SIZE(sm8150_intf),
1497386fced3SJonathan Marek 		.intf = sm8150_intf,
1498386fced3SJonathan Marek 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1499386fced3SJonathan Marek 		.vbif = sdm845_vbif,
1500386fced3SJonathan Marek 		.reg_dma_count = 1,
1501386fced3SJonathan Marek 		.dma_cfg = sm8150_regdma,
1502386fced3SJonathan Marek 		.perf = sm8150_perf_data,
1503597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SDM845_MASK,
1504386fced3SJonathan Marek 	};
1505386fced3SJonathan Marek }
1506386fced3SJonathan Marek 
1507af776a3eSJonathan Marek /*
1508af776a3eSJonathan Marek  * sm8250_cfg_init(): populate sm8250 dpu sub-blocks reg offsets
1509af776a3eSJonathan Marek  * and instance counts.
1510af776a3eSJonathan Marek  */
1511af776a3eSJonathan Marek static void sm8250_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1512af776a3eSJonathan Marek {
1513af776a3eSJonathan Marek 	*dpu_cfg = (struct dpu_mdss_cfg){
1514af776a3eSJonathan Marek 		.caps = &sm8250_dpu_caps,
1515af776a3eSJonathan Marek 		.mdp_count = ARRAY_SIZE(sm8250_mdp),
1516af776a3eSJonathan Marek 		.mdp = sm8250_mdp,
1517af776a3eSJonathan Marek 		.ctl_count = ARRAY_SIZE(sm8150_ctl),
1518af776a3eSJonathan Marek 		.ctl = sm8150_ctl,
1519d21fc5dfSDmitry Baryshkov 		.sspp_count = ARRAY_SIZE(sm8250_sspp),
1520d21fc5dfSDmitry Baryshkov 		.sspp = sm8250_sspp,
1521af776a3eSJonathan Marek 		.mixer_count = ARRAY_SIZE(sm8150_lm),
1522af776a3eSJonathan Marek 		.mixer = sm8150_lm,
152305ae91d9SDmitry Baryshkov 		.dspp_count = ARRAY_SIZE(sm8150_dspp),
152405ae91d9SDmitry Baryshkov 		.dspp = sm8150_dspp,
1525af776a3eSJonathan Marek 		.pingpong_count = ARRAY_SIZE(sm8150_pp),
1526af776a3eSJonathan Marek 		.pingpong = sm8150_pp,
15274369c93cSDmitry Baryshkov 		.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
15284369c93cSDmitry Baryshkov 		.merge_3d = sm8150_merge_3d,
1529af776a3eSJonathan Marek 		.intf_count = ARRAY_SIZE(sm8150_intf),
1530af776a3eSJonathan Marek 		.intf = sm8150_intf,
1531af776a3eSJonathan Marek 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1532af776a3eSJonathan Marek 		.vbif = sdm845_vbif,
1533af776a3eSJonathan Marek 		.reg_dma_count = 1,
1534af776a3eSJonathan Marek 		.dma_cfg = sm8250_regdma,
1535af776a3eSJonathan Marek 		.perf = sm8250_perf_data,
1536597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SM8250_MASK,
1537af776a3eSJonathan Marek 	};
1538af776a3eSJonathan Marek }
1539af776a3eSJonathan Marek 
1540591e34a0SKrishna Manikandan static void sc7280_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1541591e34a0SKrishna Manikandan {
1542591e34a0SKrishna Manikandan 	*dpu_cfg = (struct dpu_mdss_cfg){
1543591e34a0SKrishna Manikandan 		.caps = &sc7280_dpu_caps,
1544591e34a0SKrishna Manikandan 		.mdp_count = ARRAY_SIZE(sc7280_mdp),
1545591e34a0SKrishna Manikandan 		.mdp = sc7280_mdp,
1546591e34a0SKrishna Manikandan 		.ctl_count = ARRAY_SIZE(sc7280_ctl),
1547591e34a0SKrishna Manikandan 		.ctl = sc7280_ctl,
1548591e34a0SKrishna Manikandan 		.sspp_count = ARRAY_SIZE(sc7280_sspp),
1549591e34a0SKrishna Manikandan 		.sspp = sc7280_sspp,
1550591e34a0SKrishna Manikandan 		.mixer_count = ARRAY_SIZE(sc7280_lm),
1551591e34a0SKrishna Manikandan 		.mixer = sc7280_lm,
1552591e34a0SKrishna Manikandan 		.pingpong_count = ARRAY_SIZE(sc7280_pp),
1553591e34a0SKrishna Manikandan 		.pingpong = sc7280_pp,
1554591e34a0SKrishna Manikandan 		.intf_count = ARRAY_SIZE(sc7280_intf),
1555591e34a0SKrishna Manikandan 		.intf = sc7280_intf,
1556591e34a0SKrishna Manikandan 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1557591e34a0SKrishna Manikandan 		.vbif = sdm845_vbif,
1558591e34a0SKrishna Manikandan 		.perf = sc7280_perf_data,
1559597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SC7280_MASK,
1560591e34a0SKrishna Manikandan 	};
1561591e34a0SKrishna Manikandan }
1562591e34a0SKrishna Manikandan 
1563abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = {
156494391a14SAngeloGioacchino Del Regno 	{ .hw_rev = DPU_HW_VER_300, .cfg_init = msm8998_cfg_init},
156594391a14SAngeloGioacchino Del Regno 	{ .hw_rev = DPU_HW_VER_301, .cfg_init = msm8998_cfg_init},
156625fdd593SJeykumar Sankaran 	{ .hw_rev = DPU_HW_VER_400, .cfg_init = sdm845_cfg_init},
156725fdd593SJeykumar Sankaran 	{ .hw_rev = DPU_HW_VER_401, .cfg_init = sdm845_cfg_init},
1568386fced3SJonathan Marek 	{ .hw_rev = DPU_HW_VER_500, .cfg_init = sm8150_cfg_init},
1569386fced3SJonathan Marek 	{ .hw_rev = DPU_HW_VER_501, .cfg_init = sm8150_cfg_init},
1570af776a3eSJonathan Marek 	{ .hw_rev = DPU_HW_VER_600, .cfg_init = sm8250_cfg_init},
15717bdc0c4bSKalyan Thota 	{ .hw_rev = DPU_HW_VER_620, .cfg_init = sc7180_cfg_init},
1572591e34a0SKrishna Manikandan 	{ .hw_rev = DPU_HW_VER_720, .cfg_init = sc7280_cfg_init},
157325fdd593SJeykumar Sankaran };
157425fdd593SJeykumar Sankaran 
157525fdd593SJeykumar Sankaran void dpu_hw_catalog_deinit(struct dpu_mdss_cfg *dpu_cfg)
157625fdd593SJeykumar Sankaran {
157725fdd593SJeykumar Sankaran 	kfree(dpu_cfg);
157825fdd593SJeykumar Sankaran }
157925fdd593SJeykumar Sankaran 
158025fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev)
158125fdd593SJeykumar Sankaran {
158225fdd593SJeykumar Sankaran 	int i;
158325fdd593SJeykumar Sankaran 	struct dpu_mdss_cfg *dpu_cfg;
158425fdd593SJeykumar Sankaran 
158525fdd593SJeykumar Sankaran 	dpu_cfg = kzalloc(sizeof(*dpu_cfg), GFP_KERNEL);
158625fdd593SJeykumar Sankaran 	if (!dpu_cfg)
158725fdd593SJeykumar Sankaran 		return ERR_PTR(-ENOMEM);
158825fdd593SJeykumar Sankaran 
158925fdd593SJeykumar Sankaran 	for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) {
159025fdd593SJeykumar Sankaran 		if (cfg_handler[i].hw_rev == hw_rev) {
159125fdd593SJeykumar Sankaran 			cfg_handler[i].cfg_init(dpu_cfg);
159225fdd593SJeykumar Sankaran 			dpu_cfg->hwversion = hw_rev;
159325fdd593SJeykumar Sankaran 			return dpu_cfg;
159425fdd593SJeykumar Sankaran 		}
159525fdd593SJeykumar Sankaran 	}
159625fdd593SJeykumar Sankaran 
159725fdd593SJeykumar Sankaran 	DPU_ERROR("unsupported chipset id:%X\n", hw_rev);
159825fdd593SJeykumar Sankaran 	dpu_hw_catalog_deinit(dpu_cfg);
159925fdd593SJeykumar Sankaran 	return ERR_PTR(-ENODEV);
160025fdd593SJeykumar Sankaran }
160125fdd593SJeykumar Sankaran 
1602