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 
315334087eSLoic Poulain #define VIG_QCM2290_MASK (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL))
325334087eSLoic Poulain 
3394391a14SAngeloGioacchino Del Regno #define DMA_MSM8998_MASK \
3494391a14SAngeloGioacchino Del Regno 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
3594391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
3694391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
3794391a14SAngeloGioacchino Del Regno 
3825fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \
3925fdd593SJeykumar Sankaran 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\
4025fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
4125fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
4225fdd593SJeykumar Sankaran 
4307ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \
4407ca1fc0SSravanthi Kollukuduru 	(DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR))
4507ca1fc0SSravanthi Kollukuduru 
4694391a14SAngeloGioacchino Del Regno #define DMA_CURSOR_MSM8998_MASK \
4794391a14SAngeloGioacchino Del Regno 	(DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR))
4894391a14SAngeloGioacchino Del Regno 
4925fdd593SJeykumar Sankaran #define MIXER_SDM845_MASK \
5025fdd593SJeykumar Sankaran 	(BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER))
5125fdd593SJeykumar Sankaran 
527bdc0c4bSKalyan Thota #define MIXER_SC7180_MASK \
537bdc0c4bSKalyan Thota 	(BIT(DPU_DIM_LAYER))
547bdc0c4bSKalyan Thota 
5525fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER)
5625fdd593SJeykumar Sankaran 
5725fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \
5825fdd593SJeykumar Sankaran 	(PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2))
5925fdd593SJeykumar Sankaran 
60591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \
6144bf8704SKalyan Thota 	(BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE) | BIT(DPU_CTL_VM_CFG))
62591e34a0SKrishna Manikandan 
634369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0)
644369c93cSDmitry Baryshkov 
6594391a14SAngeloGioacchino Del Regno #define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC)
6694391a14SAngeloGioacchino Del Regno 
674259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
68e47616dfSKalyan Thota 
69cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0)
70cace3ac4SJonathan Marek 
71cace3ac4SJonathan Marek #define INTF_SC7180_MASK BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE)
72cace3ac4SJonathan Marek 
73591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN)
74591e34a0SKrishna Manikandan 
75597762d5SDmitry Baryshkov #define IRQ_SDM845_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
76597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
77597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
78597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
79597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
80597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
81597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
82597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR) | \
83597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_0_INTR) | \
84597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_1_INTR))
85597762d5SDmitry Baryshkov 
86597762d5SDmitry Baryshkov #define IRQ_SC7180_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
87597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
88597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
89597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
90597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR))
91597762d5SDmitry Baryshkov 
92597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
93597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
94597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
95597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
96597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
97597762d5SDmitry Baryshkov 			 BIT(MDP_INTF5_7xxx_INTR))
98597762d5SDmitry Baryshkov 
99597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
100597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
101597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
102597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
103597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
104597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
105597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
106597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR))
107597762d5SDmitry Baryshkov 
108f3af2d6eSRob Clark #define IRQ_SC8180X_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
109f3af2d6eSRob Clark 			  BIT(MDP_SSPP_TOP0_INTR2) | \
110f3af2d6eSRob Clark 			  BIT(MDP_SSPP_TOP0_HIST_INTR) | \
111f3af2d6eSRob Clark 			  BIT(MDP_INTF0_INTR) | \
112f3af2d6eSRob Clark 			  BIT(MDP_INTF1_INTR) | \
113f3af2d6eSRob Clark 			  BIT(MDP_INTF2_INTR) | \
114f3af2d6eSRob Clark 			  BIT(MDP_INTF3_INTR) | \
115f3af2d6eSRob Clark 			  BIT(MDP_INTF4_INTR) | \
116f3af2d6eSRob Clark 			  BIT(MDP_INTF5_INTR) | \
117f3af2d6eSRob Clark 			  BIT(MDP_AD4_0_INTR) | \
118f3af2d6eSRob Clark 			  BIT(MDP_AD4_1_INTR))
119597762d5SDmitry Baryshkov 
12025fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE		(50 * 1024)
12125fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH		2048
12225fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH	2560
12325fdd593SJeykumar Sankaran 
12425fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION	4
12525fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION	4
12625fdd593SJeykumar Sankaran 
12725fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO	20
12825fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO	4
12925fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE	1
13025fdd593SJeykumar Sankaran 
13125fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y)
13225fdd593SJeykumar Sankaran 
13309c7e370SLee Jones static const uint32_t plane_formats[] = {
13409c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
13509c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
13609c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
13709c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
13809c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
13909c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
14009c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
14109c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
14209c7e370SLee Jones 	DRM_FORMAT_RGB888,
14309c7e370SLee Jones 	DRM_FORMAT_BGR888,
14409c7e370SLee Jones 	DRM_FORMAT_RGB565,
14509c7e370SLee Jones 	DRM_FORMAT_BGR565,
14609c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
14709c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
14809c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
14909c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
15009c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
15109c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
15209c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
15309c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
15409c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
15509c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
15609c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
15709c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
15809c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
15909c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
16009c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
16109c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
16209c7e370SLee Jones };
16309c7e370SLee Jones 
16409c7e370SLee Jones static const uint32_t plane_formats_yuv[] = {
16509c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
16609c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
16709c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
16809c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
16909c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
17009c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
17109c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
17209c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
17309c7e370SLee Jones 	DRM_FORMAT_RGB888,
17409c7e370SLee Jones 	DRM_FORMAT_BGR888,
17509c7e370SLee Jones 	DRM_FORMAT_RGB565,
17609c7e370SLee Jones 	DRM_FORMAT_BGR565,
17709c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
17809c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
17909c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
18009c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
18109c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
18209c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
18309c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
18409c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
18509c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
18609c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
18709c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
18809c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
18909c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
19009c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
19109c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
19209c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
19309c7e370SLee Jones 
19409c7e370SLee Jones 	DRM_FORMAT_NV12,
19509c7e370SLee Jones 	DRM_FORMAT_NV21,
19609c7e370SLee Jones 	DRM_FORMAT_NV16,
19709c7e370SLee Jones 	DRM_FORMAT_NV61,
19809c7e370SLee Jones 	DRM_FORMAT_VYUY,
19909c7e370SLee Jones 	DRM_FORMAT_UYVY,
20009c7e370SLee Jones 	DRM_FORMAT_YUYV,
20109c7e370SLee Jones 	DRM_FORMAT_YVYU,
20209c7e370SLee Jones 	DRM_FORMAT_YUV420,
20309c7e370SLee Jones 	DRM_FORMAT_YVU420,
20409c7e370SLee Jones };
20509c7e370SLee Jones 
20625fdd593SJeykumar Sankaran /*************************************************************
20725fdd593SJeykumar Sankaran  * DPU sub blocks config
20825fdd593SJeykumar Sankaran  *************************************************************/
20925fdd593SJeykumar Sankaran /* DPU top level caps */
21094391a14SAngeloGioacchino Del Regno static const struct dpu_caps msm8998_dpu_caps = {
21194391a14SAngeloGioacchino Del Regno 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
21294391a14SAngeloGioacchino Del Regno 	.max_mixer_blendstages = 0x7,
21394391a14SAngeloGioacchino Del Regno 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
21494391a14SAngeloGioacchino Del Regno 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V1,
21594391a14SAngeloGioacchino Del Regno 	.ubwc_version = DPU_HW_UBWC_VER_10,
21694391a14SAngeloGioacchino Del Regno 	.has_src_split = true,
21794391a14SAngeloGioacchino Del Regno 	.has_dim_layer = true,
21894391a14SAngeloGioacchino Del Regno 	.has_idle_pc = true,
21994391a14SAngeloGioacchino Del Regno 	.has_3d_merge = true,
22094391a14SAngeloGioacchino Del Regno 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
22194391a14SAngeloGioacchino Del Regno 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
22294391a14SAngeloGioacchino Del Regno 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
22394391a14SAngeloGioacchino Del Regno 	.max_vdeci_exp = MAX_VERT_DECIMATION,
22494391a14SAngeloGioacchino Del Regno };
22594391a14SAngeloGioacchino Del Regno 
22625fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = {
22725fdd593SJeykumar Sankaran 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
22825fdd593SJeykumar Sankaran 	.max_mixer_blendstages = 0xb,
22925fdd593SJeykumar Sankaran 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
23025fdd593SJeykumar Sankaran 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
23125fdd593SJeykumar Sankaran 	.ubwc_version = DPU_HW_UBWC_VER_20,
23225fdd593SJeykumar Sankaran 	.has_src_split = true,
23325fdd593SJeykumar Sankaran 	.has_dim_layer = true,
23425fdd593SJeykumar Sankaran 	.has_idle_pc = true,
23542a558b7SKalyan Thota 	.has_3d_merge = true,
2367e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
2377e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
2387e9d4cddSJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
2397e9d4cddSJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
24025fdd593SJeykumar Sankaran };
24125fdd593SJeykumar Sankaran 
2427bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = {
2437bdc0c4bSKalyan Thota 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
2447bdc0c4bSKalyan Thota 	.max_mixer_blendstages = 0x9,
2457bdc0c4bSKalyan Thota 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
2467bdc0c4bSKalyan Thota 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
2477bdc0c4bSKalyan Thota 	.ubwc_version = DPU_HW_UBWC_VER_20,
2487bdc0c4bSKalyan Thota 	.has_dim_layer = true,
2497bdc0c4bSKalyan Thota 	.has_idle_pc = true,
2507e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
2517e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
2527bdc0c4bSKalyan Thota };
2537bdc0c4bSKalyan Thota 
254386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = {
255386fced3SJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
256386fced3SJonathan Marek 	.max_mixer_blendstages = 0xb,
257386fced3SJonathan Marek 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
258386fced3SJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
259386fced3SJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_30,
260386fced3SJonathan Marek 	.has_src_split = true,
261386fced3SJonathan Marek 	.has_dim_layer = true,
262386fced3SJonathan Marek 	.has_idle_pc = true,
263386fced3SJonathan Marek 	.has_3d_merge = true,
264386fced3SJonathan Marek 	.max_linewidth = 4096,
265386fced3SJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
266386fced3SJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
267386fced3SJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
268386fced3SJonathan Marek };
269386fced3SJonathan Marek 
270f3af2d6eSRob Clark static const struct dpu_caps sc8180x_dpu_caps = {
271f3af2d6eSRob Clark 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
272f3af2d6eSRob Clark 	.max_mixer_blendstages = 0xb,
273f3af2d6eSRob Clark 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
274f3af2d6eSRob Clark 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
275f3af2d6eSRob Clark 	.ubwc_version = DPU_HW_UBWC_VER_30,
276f3af2d6eSRob Clark 	.has_src_split = true,
277f3af2d6eSRob Clark 	.has_dim_layer = true,
278f3af2d6eSRob Clark 	.has_idle_pc = true,
279f3af2d6eSRob Clark 	.has_3d_merge = true,
280f3af2d6eSRob Clark 	.max_linewidth = 4096,
281f3af2d6eSRob Clark 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
282f3af2d6eSRob Clark 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
283f3af2d6eSRob Clark 	.max_vdeci_exp = MAX_VERT_DECIMATION,
284f3af2d6eSRob Clark };
285f3af2d6eSRob Clark 
286af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = {
287af776a3eSJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
288af776a3eSJonathan Marek 	.max_mixer_blendstages = 0xb,
289d21fc5dfSDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED3LITE,
290af776a3eSJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
291af776a3eSJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_40,
292af776a3eSJonathan Marek 	.has_src_split = true,
293af776a3eSJonathan Marek 	.has_dim_layer = true,
294af776a3eSJonathan Marek 	.has_idle_pc = true,
295af776a3eSJonathan Marek 	.has_3d_merge = true,
296af776a3eSJonathan Marek 	.max_linewidth = 4096,
297af776a3eSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
298af776a3eSJonathan Marek };
299af776a3eSJonathan Marek 
300591e34a0SKrishna Manikandan static const struct dpu_caps sc7280_dpu_caps = {
301591e34a0SKrishna Manikandan 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
302591e34a0SKrishna Manikandan 	.max_mixer_blendstages = 0x7,
303591e34a0SKrishna Manikandan 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
304591e34a0SKrishna Manikandan 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
305591e34a0SKrishna Manikandan 	.ubwc_version = DPU_HW_UBWC_VER_30,
306591e34a0SKrishna Manikandan 	.has_dim_layer = true,
307591e34a0SKrishna Manikandan 	.has_idle_pc = true,
308591e34a0SKrishna Manikandan 	.max_linewidth = 2400,
309591e34a0SKrishna Manikandan 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
310591e34a0SKrishna Manikandan };
311591e34a0SKrishna Manikandan 
31294391a14SAngeloGioacchino Del Regno static const struct dpu_mdp_cfg msm8998_mdp[] = {
31394391a14SAngeloGioacchino Del Regno 	{
31494391a14SAngeloGioacchino Del Regno 	.name = "top_0", .id = MDP_TOP,
31594391a14SAngeloGioacchino Del Regno 	.base = 0x0, .len = 0x458,
31694391a14SAngeloGioacchino Del Regno 	.features = 0,
31794391a14SAngeloGioacchino Del Regno 	.highest_bank_bit = 0x2,
31894391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
31994391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 0},
32094391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
32194391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 0},
32294391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
32394391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2BC, .bit_off = 0},
32494391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
32594391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 0},
32694391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
32794391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 8},
32894391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
32994391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 8},
33094391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
33194391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 8},
33294391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA3] = {
33394391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 12},
33494391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
33594391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3A8, .bit_off = 15},
33694391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
33794391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3B0, .bit_off = 15},
33894391a14SAngeloGioacchino Del Regno 	},
33994391a14SAngeloGioacchino Del Regno };
34094391a14SAngeloGioacchino Del Regno 
3415334087eSLoic Poulain static const struct dpu_caps qcm2290_dpu_caps = {
3425334087eSLoic Poulain 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3435334087eSLoic Poulain 	.max_mixer_blendstages = 0x4,
3445334087eSLoic Poulain 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
3455334087eSLoic Poulain 	.ubwc_version = DPU_HW_UBWC_VER_20,
3465334087eSLoic Poulain 	.has_dim_layer = true,
3475334087eSLoic Poulain 	.has_idle_pc = true,
3485334087eSLoic Poulain 	.max_linewidth = 2160,
3495334087eSLoic Poulain 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3505334087eSLoic Poulain };
3515334087eSLoic Poulain 
352abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = {
35325fdd593SJeykumar Sankaran 	{
35425fdd593SJeykumar Sankaran 	.name = "top_0", .id = MDP_TOP,
35525fdd593SJeykumar Sankaran 	.base = 0x0, .len = 0x45C,
35603490e11SKuogee Hsieh 	.features = BIT(DPU_MDP_AUDIO_SELECT),
35725fdd593SJeykumar Sankaran 	.highest_bank_bit = 0x2,
35825fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
35925fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 0},
36025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
36125fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 0},
36225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
36325fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 0},
36425fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
36525fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 0},
36625fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
36725fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 8},
36825fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
36925fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 8},
37025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
37125fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 8},
37225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
37325fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 8},
37425fdd593SJeykumar Sankaran 	},
37525fdd593SJeykumar Sankaran };
37625fdd593SJeykumar Sankaran 
3777bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = {
3787bdc0c4bSKalyan Thota 	{
3797bdc0c4bSKalyan Thota 	.name = "top_0", .id = MDP_TOP,
3807bdc0c4bSKalyan Thota 	.base = 0x0, .len = 0x494,
3817bdc0c4bSKalyan Thota 	.features = 0,
3827bdc0c4bSKalyan Thota 	.highest_bank_bit = 0x3,
3837bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
3847bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 0},
3857bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
3867bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 8},
3877bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
3887b149f2bSKalyan Thota 		.reg_off = 0x2B4, .bit_off = 8},
3897b149f2bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
3907b149f2bSKalyan Thota 		.reg_off = 0x2C4, .bit_off = 8},
3917bdc0c4bSKalyan Thota 	},
3927bdc0c4bSKalyan Thota };
3937bdc0c4bSKalyan Thota 
394f3af2d6eSRob Clark static const struct dpu_mdp_cfg sc8180x_mdp[] = {
395f3af2d6eSRob Clark 	{
396f3af2d6eSRob Clark 	.name = "top_0", .id = MDP_TOP,
397f3af2d6eSRob Clark 	.base = 0x0, .len = 0x45C,
398f3af2d6eSRob Clark 	.features = 0,
399f3af2d6eSRob Clark 	.highest_bank_bit = 0x3,
400f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
401f3af2d6eSRob Clark 			.reg_off = 0x2AC, .bit_off = 0},
402f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
403f3af2d6eSRob Clark 			.reg_off = 0x2B4, .bit_off = 0},
404f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
405f3af2d6eSRob Clark 			.reg_off = 0x2BC, .bit_off = 0},
406f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
407f3af2d6eSRob Clark 			.reg_off = 0x2C4, .bit_off = 0},
408f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
409f3af2d6eSRob Clark 			.reg_off = 0x2AC, .bit_off = 8},
410f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
411f3af2d6eSRob Clark 			.reg_off = 0x2B4, .bit_off = 8},
412f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
413f3af2d6eSRob Clark 			.reg_off = 0x2BC, .bit_off = 8},
414f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
415f3af2d6eSRob Clark 			.reg_off = 0x2C4, .bit_off = 8},
416f3af2d6eSRob Clark 	},
417f3af2d6eSRob Clark };
418f3af2d6eSRob Clark 
419af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = {
420af776a3eSJonathan Marek 	{
421af776a3eSJonathan Marek 	.name = "top_0", .id = MDP_TOP,
422b910a020SRobert Foss 	.base = 0x0, .len = 0x494,
423af776a3eSJonathan Marek 	.features = 0,
424af776a3eSJonathan Marek 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
425af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
426af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 0},
427af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
428af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 0},
429af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
430af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 0},
431af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
432af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 0},
433af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
434af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 8},
435af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
436af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 8},
437af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
438af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 8},
439af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
440af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 8},
441af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
442af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 20},
443af776a3eSJonathan Marek 	},
444af776a3eSJonathan Marek };
445af776a3eSJonathan Marek 
446591e34a0SKrishna Manikandan static const struct dpu_mdp_cfg sc7280_mdp[] = {
447591e34a0SKrishna Manikandan 	{
448591e34a0SKrishna Manikandan 	.name = "top_0", .id = MDP_TOP,
449591e34a0SKrishna Manikandan 	.base = 0x0, .len = 0x2014,
450591e34a0SKrishna Manikandan 	.highest_bank_bit = 0x1,
451591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
452591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 0},
453591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
454591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 8},
455591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
456591e34a0SKrishna Manikandan 		.reg_off = 0x2B4, .bit_off = 8},
457591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
458591e34a0SKrishna Manikandan 		.reg_off = 0x2C4, .bit_off = 8},
459591e34a0SKrishna Manikandan 	},
460591e34a0SKrishna Manikandan };
461591e34a0SKrishna Manikandan 
4625334087eSLoic Poulain static const struct dpu_mdp_cfg qcm2290_mdp[] = {
4635334087eSLoic Poulain 	{
4645334087eSLoic Poulain 	.name = "top_0", .id = MDP_TOP,
4655334087eSLoic Poulain 	.base = 0x0, .len = 0x494,
4665334087eSLoic Poulain 	.features = 0,
4675334087eSLoic Poulain 	.highest_bank_bit = 0x2,
4685334087eSLoic Poulain 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
4695334087eSLoic Poulain 		.reg_off = 0x2AC, .bit_off = 0},
4705334087eSLoic Poulain 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
4715334087eSLoic Poulain 		.reg_off = 0x2AC, .bit_off = 8},
4725334087eSLoic Poulain 	},
4735334087eSLoic Poulain };
4745334087eSLoic Poulain 
47525fdd593SJeykumar Sankaran /*************************************************************
47625fdd593SJeykumar Sankaran  * CTL sub blocks config
47725fdd593SJeykumar Sankaran  *************************************************************/
47894391a14SAngeloGioacchino Del Regno static const struct dpu_ctl_cfg msm8998_ctl[] = {
47994391a14SAngeloGioacchino Del Regno 	{
48094391a14SAngeloGioacchino Del Regno 	.name = "ctl_0", .id = CTL_0,
48194391a14SAngeloGioacchino Del Regno 	.base = 0x1000, .len = 0x94,
48294391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
48394391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
48494391a14SAngeloGioacchino Del Regno 	},
48594391a14SAngeloGioacchino Del Regno 	{
48694391a14SAngeloGioacchino Del Regno 	.name = "ctl_1", .id = CTL_1,
48794391a14SAngeloGioacchino Del Regno 	.base = 0x1200, .len = 0x94,
48894391a14SAngeloGioacchino Del Regno 	.features = 0,
48994391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
49094391a14SAngeloGioacchino Del Regno 	},
49194391a14SAngeloGioacchino Del Regno 	{
49294391a14SAngeloGioacchino Del Regno 	.name = "ctl_2", .id = CTL_2,
49394391a14SAngeloGioacchino Del Regno 	.base = 0x1400, .len = 0x94,
49494391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
49594391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
49694391a14SAngeloGioacchino Del Regno 	},
49794391a14SAngeloGioacchino Del Regno 	{
49894391a14SAngeloGioacchino Del Regno 	.name = "ctl_3", .id = CTL_3,
49994391a14SAngeloGioacchino Del Regno 	.base = 0x1600, .len = 0x94,
50094391a14SAngeloGioacchino Del Regno 	.features = 0,
50194391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
50294391a14SAngeloGioacchino Del Regno 	},
50394391a14SAngeloGioacchino Del Regno 	{
50494391a14SAngeloGioacchino Del Regno 	.name = "ctl_4", .id = CTL_4,
50594391a14SAngeloGioacchino Del Regno 	.base = 0x1800, .len = 0x94,
50694391a14SAngeloGioacchino Del Regno 	.features = 0,
50794391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
50894391a14SAngeloGioacchino Del Regno 	},
50994391a14SAngeloGioacchino Del Regno };
51094391a14SAngeloGioacchino Del Regno 
511abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = {
51225fdd593SJeykumar Sankaran 	{
51325fdd593SJeykumar Sankaran 	.name = "ctl_0", .id = CTL_0,
51425fdd593SJeykumar Sankaran 	.base = 0x1000, .len = 0xE4,
515667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
516667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
51725fdd593SJeykumar Sankaran 	},
51825fdd593SJeykumar Sankaran 	{
51925fdd593SJeykumar Sankaran 	.name = "ctl_1", .id = CTL_1,
52025fdd593SJeykumar Sankaran 	.base = 0x1200, .len = 0xE4,
521667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
522667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
52325fdd593SJeykumar Sankaran 	},
52425fdd593SJeykumar Sankaran 	{
52525fdd593SJeykumar Sankaran 	.name = "ctl_2", .id = CTL_2,
52625fdd593SJeykumar Sankaran 	.base = 0x1400, .len = 0xE4,
527667e9985SDmitry Baryshkov 	.features = 0,
528667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
52925fdd593SJeykumar Sankaran 	},
53025fdd593SJeykumar Sankaran 	{
53125fdd593SJeykumar Sankaran 	.name = "ctl_3", .id = CTL_3,
53225fdd593SJeykumar Sankaran 	.base = 0x1600, .len = 0xE4,
533667e9985SDmitry Baryshkov 	.features = 0,
534667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
53525fdd593SJeykumar Sankaran 	},
53625fdd593SJeykumar Sankaran 	{
53725fdd593SJeykumar Sankaran 	.name = "ctl_4", .id = CTL_4,
53825fdd593SJeykumar Sankaran 	.base = 0x1800, .len = 0xE4,
539667e9985SDmitry Baryshkov 	.features = 0,
540667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
54125fdd593SJeykumar Sankaran 	},
54225fdd593SJeykumar Sankaran };
54325fdd593SJeykumar Sankaran 
5447bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = {
5457bdc0c4bSKalyan Thota 	{
5467bdc0c4bSKalyan Thota 	.name = "ctl_0", .id = CTL_0,
5477bdc0c4bSKalyan Thota 	.base = 0x1000, .len = 0xE4,
548667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
549667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
5507bdc0c4bSKalyan Thota 	},
5517bdc0c4bSKalyan Thota 	{
5527bdc0c4bSKalyan Thota 	.name = "ctl_1", .id = CTL_1,
5537bdc0c4bSKalyan Thota 	.base = 0x1200, .len = 0xE4,
554667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
555667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
5567bdc0c4bSKalyan Thota 	},
5577bdc0c4bSKalyan Thota 	{
5587bdc0c4bSKalyan Thota 	.name = "ctl_2", .id = CTL_2,
5597bdc0c4bSKalyan Thota 	.base = 0x1400, .len = 0xE4,
560667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
561667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
5627bdc0c4bSKalyan Thota 	},
5637bdc0c4bSKalyan Thota };
5647bdc0c4bSKalyan Thota 
565386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = {
566386fced3SJonathan Marek 	{
567386fced3SJonathan Marek 	.name = "ctl_0", .id = CTL_0,
568386fced3SJonathan Marek 	.base = 0x1000, .len = 0x1e0,
569667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
570667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
571386fced3SJonathan Marek 	},
572386fced3SJonathan Marek 	{
573386fced3SJonathan Marek 	.name = "ctl_1", .id = CTL_1,
574386fced3SJonathan Marek 	.base = 0x1200, .len = 0x1e0,
575667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
576667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
577386fced3SJonathan Marek 	},
578386fced3SJonathan Marek 	{
579386fced3SJonathan Marek 	.name = "ctl_2", .id = CTL_2,
580386fced3SJonathan Marek 	.base = 0x1400, .len = 0x1e0,
581667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
582667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
583386fced3SJonathan Marek 	},
584386fced3SJonathan Marek 	{
585386fced3SJonathan Marek 	.name = "ctl_3", .id = CTL_3,
586386fced3SJonathan Marek 	.base = 0x1600, .len = 0x1e0,
587667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
588667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
589386fced3SJonathan Marek 	},
590386fced3SJonathan Marek 	{
591386fced3SJonathan Marek 	.name = "ctl_4", .id = CTL_4,
592386fced3SJonathan Marek 	.base = 0x1800, .len = 0x1e0,
593667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
594667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
595386fced3SJonathan Marek 	},
596386fced3SJonathan Marek 	{
597386fced3SJonathan Marek 	.name = "ctl_5", .id = CTL_5,
598386fced3SJonathan Marek 	.base = 0x1a00, .len = 0x1e0,
599667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
600667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
601386fced3SJonathan Marek 	},
602386fced3SJonathan Marek };
603386fced3SJonathan Marek 
604591e34a0SKrishna Manikandan static const struct dpu_ctl_cfg sc7280_ctl[] = {
605591e34a0SKrishna Manikandan 	{
606591e34a0SKrishna Manikandan 	.name = "ctl_0", .id = CTL_0,
607591e34a0SKrishna Manikandan 	.base = 0x15000, .len = 0x1E8,
608667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
609667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
610591e34a0SKrishna Manikandan 	},
611591e34a0SKrishna Manikandan 	{
612591e34a0SKrishna Manikandan 	.name = "ctl_1", .id = CTL_1,
613591e34a0SKrishna Manikandan 	.base = 0x16000, .len = 0x1E8,
614667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
615667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
616591e34a0SKrishna Manikandan 	},
617591e34a0SKrishna Manikandan 	{
618591e34a0SKrishna Manikandan 	.name = "ctl_2", .id = CTL_2,
619591e34a0SKrishna Manikandan 	.base = 0x17000, .len = 0x1E8,
620667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
621667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
622591e34a0SKrishna Manikandan 	},
623591e34a0SKrishna Manikandan 	{
624591e34a0SKrishna Manikandan 	.name = "ctl_3", .id = CTL_3,
625591e34a0SKrishna Manikandan 	.base = 0x18000, .len = 0x1E8,
626667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
627667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
628591e34a0SKrishna Manikandan 	},
629591e34a0SKrishna Manikandan };
630591e34a0SKrishna Manikandan 
6315334087eSLoic Poulain static const struct dpu_ctl_cfg qcm2290_ctl[] = {
6325334087eSLoic Poulain 	{
6335334087eSLoic Poulain 	.name = "ctl_0", .id = CTL_0,
6345334087eSLoic Poulain 	.base = 0x1000, .len = 0x1dc,
6355334087eSLoic Poulain 	.features = BIT(DPU_CTL_ACTIVE_CFG),
6365334087eSLoic Poulain 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
6375334087eSLoic Poulain 	},
6385334087eSLoic Poulain };
6395334087eSLoic Poulain 
64025fdd593SJeykumar Sankaran /*************************************************************
64125fdd593SJeykumar Sankaran  * SSPP sub blocks config
64225fdd593SJeykumar Sankaran  *************************************************************/
64325fdd593SJeykumar Sankaran 
64425fdd593SJeykumar Sankaran /* SSPP common configuration */
64525fdd593SJeykumar Sankaran 
646b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \
64725fdd593SJeykumar Sankaran 	{ \
64825fdd593SJeykumar Sankaran 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
64925fdd593SJeykumar Sankaran 	.maxupscale = MAX_UPSCALE_RATIO, \
65025fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
65125fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
65225fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
65325fdd593SJeykumar Sankaran 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
654b75ab05aSShubhashree Dhar 		.id = qseed_ver, \
65525fdd593SJeykumar Sankaran 		.base = 0xa00, .len = 0xa0,}, \
65625fdd593SJeykumar Sankaran 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
65725fdd593SJeykumar Sankaran 		.id = DPU_SSPP_CSC_10BIT, \
65825fdd593SJeykumar Sankaran 		.base = 0x1a00, .len = 0x100,}, \
65925fdd593SJeykumar Sankaran 	.format_list = plane_formats_yuv, \
660e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
66125fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
662e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
66325fdd593SJeykumar Sankaran 	}
66425fdd593SJeykumar Sankaran 
66525fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \
66625fdd593SJeykumar Sankaran 	{ \
66725fdd593SJeykumar Sankaran 	.maxdwnscale = SSPP_UNITY_SCALE, \
66825fdd593SJeykumar Sankaran 	.maxupscale = SSPP_UNITY_SCALE, \
66925fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
67025fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
67125fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
67225fdd593SJeykumar Sankaran 	.format_list = plane_formats, \
673e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats), \
67425fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
675e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
67625fdd593SJeykumar Sankaran 	}
67725fdd593SJeykumar Sankaran 
67894391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_0 =
67994391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("0", 0, DPU_SSPP_SCALER_QSEED3);
68094391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_1 =
68194391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("1", 0, DPU_SSPP_SCALER_QSEED3);
68294391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_2 =
68394391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("2", 0, DPU_SSPP_SCALER_QSEED3);
68494391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_3 =
68594391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("3", 0, DPU_SSPP_SCALER_QSEED3);
68694391a14SAngeloGioacchino Del Regno 
687b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 =
688b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3);
689b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 =
690b75ab05aSShubhashree Dhar 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3);
691b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 =
692b75ab05aSShubhashree Dhar 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3);
693b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 =
694b75ab05aSShubhashree Dhar 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3);
69525fdd593SJeykumar Sankaran 
69625fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1);
69725fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2);
69825fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3);
69925fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4);
70025fdd593SJeykumar Sankaran 
70107ca1fc0SSravanthi Kollukuduru #define SSPP_BLK(_name, _id, _base, _features, \
70207ca1fc0SSravanthi Kollukuduru 		_sblk, _xinid, _type, _clkctrl) \
70325fdd593SJeykumar Sankaran 	{ \
70425fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
70525fdd593SJeykumar Sankaran 	.base = _base, .len = 0x1c8, \
70607ca1fc0SSravanthi Kollukuduru 	.features = _features, \
70725fdd593SJeykumar Sankaran 	.sblk = &_sblk, \
70825fdd593SJeykumar Sankaran 	.xin_id = _xinid, \
70907ca1fc0SSravanthi Kollukuduru 	.type = _type, \
71025fdd593SJeykumar Sankaran 	.clk_ctrl = _clkctrl \
71125fdd593SJeykumar Sankaran 	}
71225fdd593SJeykumar Sankaran 
71394391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_cfg msm8998_sspp[] = {
71494391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_MSM8998_MASK,
71594391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
71694391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_MSM8998_MASK,
71794391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
71894391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_MSM8998_MASK,
71994391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
72094391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_MSM8998_MASK,
72194391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
72294391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_MSM8998_MASK,
72394391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
72494391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_MSM8998_MASK,
72594391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
72694391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_MSM8998_MASK,
72794391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
72894391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_MSM8998_MASK,
72994391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
73094391a14SAngeloGioacchino Del Regno };
73194391a14SAngeloGioacchino Del Regno 
732abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = {
73307ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SDM845_MASK,
73407ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
73507ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SDM845_MASK,
73607ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
73707ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SDM845_MASK,
73807ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
73907ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SDM845_MASK,
74007ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
74107ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
74207ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
74307ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
74407ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
74507ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
74607ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
74707ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
74807ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
74925fdd593SJeykumar Sankaran };
75025fdd593SJeykumar Sankaran 
751b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 =
752b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4);
753b75ab05aSShubhashree Dhar 
7547bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = {
7557bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
756b75ab05aSShubhashree Dhar 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
7577bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
7587bdc0c4bSKalyan Thota 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
7597b149f2bSKalyan Thota 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
7607b149f2bSKalyan Thota 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
7617bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
7627b149f2bSKalyan Thota 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
7637bdc0c4bSKalyan Thota };
7647bdc0c4bSKalyan Thota 
765d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 =
766d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE);
767d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 =
768d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE);
769d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 =
770d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE);
771d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 =
772d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE);
773d21fc5dfSDmitry Baryshkov 
774d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = {
775d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK,
776d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
777d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SM8250_MASK,
778d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
779d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SM8250_MASK,
780d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
781d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SM8250_MASK,
782d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
783d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
784d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
785d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
786d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
787d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
788d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
789d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
790d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
791d21fc5dfSDmitry Baryshkov };
792d21fc5dfSDmitry Baryshkov 
793591e34a0SKrishna Manikandan static const struct dpu_sspp_cfg sc7280_sspp[] = {
794591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
795591e34a0SKrishna Manikandan 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
796591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
797591e34a0SKrishna Manikandan 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
798591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
799591e34a0SKrishna Manikandan 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
800591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
801591e34a0SKrishna Manikandan 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
802591e34a0SKrishna Manikandan };
803591e34a0SKrishna Manikandan 
8045334087eSLoic Poulain 
8055334087eSLoic Poulain #define _VIG_SBLK_NOSCALE(num, sdma_pri) \
8065334087eSLoic Poulain 	{ \
8075334087eSLoic Poulain 	.maxdwnscale = SSPP_UNITY_SCALE, \
8085334087eSLoic Poulain 	.maxupscale = SSPP_UNITY_SCALE, \
8095334087eSLoic Poulain 	.smart_dma_priority = sdma_pri, \
8105334087eSLoic Poulain 	.src_blk = {.name = STRCAT("sspp_src_", num), \
8115334087eSLoic Poulain 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
8125334087eSLoic Poulain 	.format_list = plane_formats_yuv, \
8135334087eSLoic Poulain 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
8145334087eSLoic Poulain 	.virt_format_list = plane_formats, \
8155334087eSLoic Poulain 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
8165334087eSLoic Poulain 	}
8175334087eSLoic Poulain 
8185334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_vig_sblk_0 = _VIG_SBLK_NOSCALE("0", 2);
8195334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_dma_sblk_0 = _DMA_SBLK("8", 1);
8205334087eSLoic Poulain 
8215334087eSLoic Poulain static const struct dpu_sspp_cfg qcm2290_sspp[] = {
8225334087eSLoic Poulain 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_QCM2290_MASK,
8235334087eSLoic Poulain 		 qcm2290_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
8245334087eSLoic Poulain 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
8255334087eSLoic Poulain 		 qcm2290_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
8265334087eSLoic Poulain };
8275334087eSLoic Poulain 
82825fdd593SJeykumar Sankaran /*************************************************************
82925fdd593SJeykumar Sankaran  * MIXER sub blocks config
83025fdd593SJeykumar Sankaran  *************************************************************/
8317bdc0c4bSKalyan Thota 
832e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \
83325fdd593SJeykumar Sankaran 	{ \
83425fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
83525fdd593SJeykumar Sankaran 	.base = _base, .len = 0x320, \
8367bdc0c4bSKalyan Thota 	.features = _fmask, \
8377bdc0c4bSKalyan Thota 	.sblk = _sblk, \
83825fdd593SJeykumar Sankaran 	.pingpong = _pp, \
839e47616dfSKalyan Thota 	.lm_pair_mask = (1 << _lmpair), \
840e47616dfSKalyan Thota 	.dspp = _dspp \
84125fdd593SJeykumar Sankaran 	}
84225fdd593SJeykumar Sankaran 
84394391a14SAngeloGioacchino Del Regno /* MSM8998 */
84494391a14SAngeloGioacchino Del Regno 
84594391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks msm8998_lm_sblk = {
84694391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
84794391a14SAngeloGioacchino Del Regno 	.maxblendstages = 7, /* excluding base layer */
84894391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
84994391a14SAngeloGioacchino Del Regno 		0x20, 0x50, 0x80, 0xb0, 0x230,
85094391a14SAngeloGioacchino Del Regno 		0x260, 0x290
85194391a14SAngeloGioacchino Del Regno 	},
85294391a14SAngeloGioacchino Del Regno };
85394391a14SAngeloGioacchino Del Regno 
85494391a14SAngeloGioacchino Del Regno static const struct dpu_lm_cfg msm8998_lm[] = {
85594391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
85694391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_0, LM_2, DSPP_0),
85794391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
85894391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_1, LM_5, DSPP_1),
85994391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
86094391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_2, LM_0, 0),
86194391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK,
86294391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
86394391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK,
86494391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
86594391a14SAngeloGioacchino Del Regno 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
86694391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_3, LM_1, 0),
86794391a14SAngeloGioacchino Del Regno };
86894391a14SAngeloGioacchino Del Regno 
86994391a14SAngeloGioacchino Del Regno /* SDM845 */
87094391a14SAngeloGioacchino Del Regno 
87194391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks sdm845_lm_sblk = {
87294391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
87394391a14SAngeloGioacchino Del Regno 	.maxblendstages = 11, /* excluding base layer */
87494391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
87594391a14SAngeloGioacchino Del Regno 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98,
87694391a14SAngeloGioacchino Del Regno 		0xb0, 0xc8, 0xe0, 0xf8, 0x110
87794391a14SAngeloGioacchino Del Regno 	},
87894391a14SAngeloGioacchino Del Regno };
87994391a14SAngeloGioacchino Del Regno 
880abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = {
8817bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
882e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_0, LM_1, 0),
8837bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
884e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_1, LM_0, 0),
8857bdc0c4bSKalyan Thota 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
886e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_2, LM_5, 0),
8877bdc0c4bSKalyan Thota 	LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK,
888e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
8897bdc0c4bSKalyan Thota 	LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK,
890e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
8917bdc0c4bSKalyan Thota 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
892e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
8937bdc0c4bSKalyan Thota };
8947bdc0c4bSKalyan Thota 
8957bdc0c4bSKalyan Thota /* SC7180 */
8967bdc0c4bSKalyan Thota 
8977bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = {
8987bdc0c4bSKalyan Thota 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
8997bdc0c4bSKalyan Thota 	.maxblendstages = 7, /* excluding base layer */
9007bdc0c4bSKalyan Thota 	.blendstage_base = { /* offsets relative to mixer base */
9017bdc0c4bSKalyan Thota 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0
9027bdc0c4bSKalyan Thota 	},
9037bdc0c4bSKalyan Thota };
9047bdc0c4bSKalyan Thota 
9057bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = {
9067bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
907e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
9087bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SC7180_MASK,
909e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_1, LM_0, 0),
91025fdd593SJeykumar Sankaran };
91125fdd593SJeykumar Sankaran 
912386fced3SJonathan Marek /* SM8150 */
913386fced3SJonathan Marek 
914386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = {
915386fced3SJonathan Marek 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
91605ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
917386fced3SJonathan Marek 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
91805ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1),
919386fced3SJonathan Marek 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
920386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_2, LM_3, 0),
921386fced3SJonathan Marek 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK,
922386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
923386fced3SJonathan Marek 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK,
924386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_4, LM_5, 0),
925386fced3SJonathan Marek 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
926386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_5, LM_4, 0),
927386fced3SJonathan Marek };
928386fced3SJonathan Marek 
929591e34a0SKrishna Manikandan static const struct dpu_lm_cfg sc7280_lm[] = {
930591e34a0SKrishna Manikandan 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
931591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_0, 0, 0),
932591e34a0SKrishna Manikandan 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SC7180_MASK,
933591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_2, LM_3, 0),
934591e34a0SKrishna Manikandan 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SC7180_MASK,
935591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_3, LM_2, 0),
936591e34a0SKrishna Manikandan };
937591e34a0SKrishna Manikandan 
9385334087eSLoic Poulain /* QCM2290 */
9395334087eSLoic Poulain 
9405334087eSLoic Poulain static const struct dpu_lm_sub_blks qcm2290_lm_sblk = {
9415334087eSLoic Poulain 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
9425334087eSLoic Poulain 	.maxblendstages = 4, /* excluding base layer */
9435334087eSLoic Poulain 	.blendstage_base = { /* offsets relative to mixer base */
9445334087eSLoic Poulain 		0x20, 0x38, 0x50, 0x68
9455334087eSLoic Poulain 	},
9465334087eSLoic Poulain };
9475334087eSLoic Poulain 
9485334087eSLoic Poulain static const struct dpu_lm_cfg qcm2290_lm[] = {
9495334087eSLoic Poulain 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
9505334087eSLoic Poulain 		&qcm2290_lm_sblk, PINGPONG_0, 0, DSPP_0),
9515334087eSLoic Poulain };
9525334087eSLoic Poulain 
95325fdd593SJeykumar Sankaran /*************************************************************
954e47616dfSKalyan Thota  * DSPP sub blocks config
955e47616dfSKalyan Thota  *************************************************************/
95694391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
95794391a14SAngeloGioacchino Del Regno 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
95894391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
95994391a14SAngeloGioacchino Del Regno 	.gc = { .id = DPU_DSPP_GC, .base = 0x17c0,
96094391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
96194391a14SAngeloGioacchino Del Regno };
96294391a14SAngeloGioacchino Del Regno 
9634259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
9644259ff7aSKalyan Thota 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
9654259ff7aSKalyan Thota 		.len = 0x90, .version = 0x10000},
9664259ff7aSKalyan Thota };
9674259ff7aSKalyan Thota 
96805ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = {
96905ae91d9SDmitry Baryshkov 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
97005ae91d9SDmitry Baryshkov 		.len = 0x90, .version = 0x40000},
97105ae91d9SDmitry Baryshkov };
97205ae91d9SDmitry Baryshkov 
973862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \
974e47616dfSKalyan Thota 		{\
975e47616dfSKalyan Thota 		.name = _name, .id = _id, \
976e47616dfSKalyan Thota 		.base = _base, .len = 0x1800, \
977862314bcSAngeloGioacchino Del Regno 		.features = _mask, \
97805ae91d9SDmitry Baryshkov 		.sblk = _sblk \
979e47616dfSKalyan Thota 		}
980e47616dfSKalyan Thota 
98194391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_cfg msm8998_dspp[] = {
98294391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK,
98394391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
98494391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK,
98594391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
98694391a14SAngeloGioacchino Del Regno };
98794391a14SAngeloGioacchino Del Regno 
988e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = {
989862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
990862314bcSAngeloGioacchino Del Regno 		 &sc7180_dspp_sblk),
99105ae91d9SDmitry Baryshkov };
99205ae91d9SDmitry Baryshkov 
99305ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = {
994862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
995862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
996862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
997862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
998862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK,
999862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1000862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK,
1001862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1002e47616dfSKalyan Thota };
1003386fced3SJonathan Marek 
10045334087eSLoic Poulain static const struct dpu_dspp_cfg qcm2290_dspp[] = {
10055334087eSLoic Poulain 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
10065334087eSLoic Poulain 		 &sm8150_dspp_sblk),
10075334087eSLoic Poulain };
10085334087eSLoic Poulain 
1009e47616dfSKalyan Thota /*************************************************************
101025fdd593SJeykumar Sankaran  * PINGPONG sub blocks config
101125fdd593SJeykumar Sankaran  *************************************************************/
101225fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = {
101325fdd593SJeykumar Sankaran 	.te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0,
101425fdd593SJeykumar Sankaran 		.version = 0x1},
101525fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
101625fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
101725fdd593SJeykumar Sankaran };
101825fdd593SJeykumar Sankaran 
101925fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = {
102025fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
102125fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
102225fdd593SJeykumar Sankaran };
102325fdd593SJeykumar Sankaran 
1024591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
1025591e34a0SKrishna Manikandan 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0,
1026591e34a0SKrishna Manikandan 	.len = 0x20, .version = 0x20000},
1027591e34a0SKrishna Manikandan };
1028591e34a0SKrishna Manikandan 
1029667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
103025fdd593SJeykumar Sankaran 	{\
103125fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
103225fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
103325fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_SPLIT_MASK, \
10344369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
1035667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
1036667e9985SDmitry Baryshkov 	.intr_done = _done, \
1037667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
103825fdd593SJeykumar Sankaran 	}
1039667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
104025fdd593SJeykumar Sankaran 	{\
104125fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
104225fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
104325fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_MASK, \
10444369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
1045667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
1046667e9985SDmitry Baryshkov 	.intr_done = _done, \
1047667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
104825fdd593SJeykumar Sankaran 	}
104925fdd593SJeykumar Sankaran 
1050abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = {
1051667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te,
1052667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1053667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1054667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te,
1055667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1056667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1057667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk,
1058667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1059667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1060667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk,
1061667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1062667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
106325fdd593SJeykumar Sankaran };
106425fdd593SJeykumar Sankaran 
10657bdc0c4bSKalyan Thota static struct dpu_pingpong_cfg sc7180_pp[] = {
1066667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1),
1067667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1),
10687bdc0c4bSKalyan Thota };
10697bdc0c4bSKalyan Thota 
1070386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = {
1071667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te,
1072667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1073667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1074667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te,
1075667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1076667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1077667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk,
1078667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1079667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1080667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk,
1081667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1082667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
1083667e9985SDmitry Baryshkov 	PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk,
1084667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
1085667e9985SDmitry Baryshkov 			-1),
1086667e9985SDmitry Baryshkov 	PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk,
10873431c17bSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
1088667e9985SDmitry Baryshkov 			-1),
10894369c93cSDmitry Baryshkov };
10904369c93cSDmitry Baryshkov 
10915334087eSLoic Poulain static struct dpu_pingpong_cfg qcm2290_pp[] = {
10925334087eSLoic Poulain 	PP_BLK("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk,
10935334087eSLoic Poulain 		DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
10945334087eSLoic Poulain 		DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
10955334087eSLoic Poulain };
10965334087eSLoic Poulain 
10974369c93cSDmitry Baryshkov /*************************************************************
10984369c93cSDmitry Baryshkov  * MERGE_3D sub blocks config
10994369c93cSDmitry Baryshkov  *************************************************************/
11004369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \
11014369c93cSDmitry Baryshkov 	{\
11024369c93cSDmitry Baryshkov 	.name = _name, .id = _id, \
11034369c93cSDmitry Baryshkov 	.base = _base, .len = 0x100, \
11044369c93cSDmitry Baryshkov 	.features = MERGE_3D_SM8150_MASK, \
11054369c93cSDmitry Baryshkov 	.sblk = NULL \
11064369c93cSDmitry Baryshkov 	}
11074369c93cSDmitry Baryshkov 
11084369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = {
11094369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000),
11104369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100),
11114369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200),
1112386fced3SJonathan Marek };
1113386fced3SJonathan Marek 
1114591e34a0SKrishna Manikandan static const struct dpu_pingpong_cfg sc7280_pp[] = {
1115667e9985SDmitry Baryshkov 	PP_BLK("pingpong_0", PINGPONG_0, 0x59000, 0, sc7280_pp_sblk, -1, -1),
1116667e9985SDmitry Baryshkov 	PP_BLK("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1),
1117667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1),
1118667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1),
1119591e34a0SKrishna Manikandan };
112025fdd593SJeykumar Sankaran /*************************************************************
112125fdd593SJeykumar Sankaran  * INTF sub blocks config
112225fdd593SJeykumar Sankaran  *************************************************************/
1123667e9985SDmitry Baryshkov #define INTF_BLK(_name, _id, _base, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \
112425fdd593SJeykumar Sankaran 	{\
112525fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
112625fdd593SJeykumar Sankaran 	.base = _base, .len = 0x280, \
1127cace3ac4SJonathan Marek 	.features = _features, \
112825fdd593SJeykumar Sankaran 	.type = _type, \
112925fdd593SJeykumar Sankaran 	.controller_id = _ctrl_id, \
1130667e9985SDmitry Baryshkov 	.prog_fetch_lines_worst_case = _progfetch, \
1131667e9985SDmitry Baryshkov 	.intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \
1132667e9985SDmitry Baryshkov 	.intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \
113325fdd593SJeykumar Sankaran 	}
113425fdd593SJeykumar Sankaran 
113594391a14SAngeloGioacchino Del Regno static const struct dpu_intf_cfg msm8998_intf[] = {
113694391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
113794391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
113894391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
113994391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_HDMI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
114094391a14SAngeloGioacchino Del Regno };
114194391a14SAngeloGioacchino Del Regno 
1142abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = {
1143667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1144667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1145667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1146667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
114725fdd593SJeykumar Sankaran };
114825fdd593SJeykumar Sankaran 
11497bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = {
1150bb3de286SBjorn Andersson 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1151667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
11527bdc0c4bSKalyan Thota };
11537bdc0c4bSKalyan Thota 
1154386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = {
1155667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1156667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1157667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1158667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1159386fced3SJonathan Marek };
1160386fced3SJonathan Marek 
1161591e34a0SKrishna Manikandan static const struct dpu_intf_cfg sc7280_intf[] = {
1162ef7837ffSSankeerth Billakanti 	INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1163667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1164ef7837ffSSankeerth Billakanti 	INTF_BLK("intf_5", INTF_5, 0x39000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
1165591e34a0SKrishna Manikandan };
1166591e34a0SKrishna Manikandan 
1167f3af2d6eSRob Clark static const struct dpu_intf_cfg sc8180x_intf[] = {
1168f3af2d6eSRob Clark 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1169f3af2d6eSRob Clark 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1170f3af2d6eSRob Clark 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1171f3af2d6eSRob Clark 	/* INTF_3 is for MST, wired to INTF_DP 0 and 1, use dummy index until this is supported */
1172f3af2d6eSRob Clark 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 999, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1173f3af2d6eSRob Clark 	INTF_BLK("intf_4", INTF_4, 0x6C000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 20, 21),
1174f3af2d6eSRob Clark 	INTF_BLK("intf_5", INTF_5, 0x6C800, INTF_DP, MSM_DP_CONTROLLER_2, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
1175f3af2d6eSRob Clark };
1176f3af2d6eSRob Clark 
11775334087eSLoic Poulain static const struct dpu_intf_cfg qcm2290_intf[] = {
11785334087eSLoic Poulain 	INTF_BLK("intf_0", INTF_0, 0x00000, INTF_NONE, 0, 0, 0, 0, 0, 0),
11795334087eSLoic Poulain 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
11805334087eSLoic Poulain };
11815334087eSLoic Poulain 
118225fdd593SJeykumar Sankaran /*************************************************************
118325fdd593SJeykumar Sankaran  * VBIF sub blocks config
118425fdd593SJeykumar Sankaran  *************************************************************/
118525fdd593SJeykumar Sankaran /* VBIF QOS remap */
118694391a14SAngeloGioacchino Del Regno static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2};
118794391a14SAngeloGioacchino Del Regno static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1};
1188abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6};
1189abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3};
119025fdd593SJeykumar Sankaran 
119194391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
119294391a14SAngeloGioacchino Del Regno 	{
119394391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 30,
119494391a14SAngeloGioacchino Del Regno 		.ot_limit = 2,
119594391a14SAngeloGioacchino Del Regno 	},
119694391a14SAngeloGioacchino Del Regno 	{
119794391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 60,
119894391a14SAngeloGioacchino Del Regno 		.ot_limit = 6,
119994391a14SAngeloGioacchino Del Regno 	},
120094391a14SAngeloGioacchino Del Regno 	{
120194391a14SAngeloGioacchino Del Regno 		.pps = 3840 * 2160 * 30,
120294391a14SAngeloGioacchino Del Regno 		.ot_limit = 16,
120394391a14SAngeloGioacchino Del Regno 	},
120494391a14SAngeloGioacchino Del Regno };
120594391a14SAngeloGioacchino Del Regno 
120694391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_cfg msm8998_vbif[] = {
120794391a14SAngeloGioacchino Del Regno 	{
120894391a14SAngeloGioacchino Del Regno 	.name = "vbif_0", .id = VBIF_0,
120994391a14SAngeloGioacchino Del Regno 	.base = 0, .len = 0x1040,
121094391a14SAngeloGioacchino Del Regno 	.default_ot_rd_limit = 32,
121194391a14SAngeloGioacchino Del Regno 	.default_ot_wr_limit = 32,
121294391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM),
121394391a14SAngeloGioacchino Del Regno 	.xin_halt_timeout = 0x4000,
121494391a14SAngeloGioacchino Del Regno 	.dynamic_ot_rd_tbl = {
121594391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
121694391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
121794391a14SAngeloGioacchino Del Regno 		},
121894391a14SAngeloGioacchino Del Regno 	.dynamic_ot_wr_tbl = {
121994391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
122094391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
122194391a14SAngeloGioacchino Del Regno 		},
122294391a14SAngeloGioacchino Del Regno 	.qos_rt_tbl = {
122394391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl),
122494391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_rt_pri_lvl,
122594391a14SAngeloGioacchino Del Regno 		},
122694391a14SAngeloGioacchino Del Regno 	.qos_nrt_tbl = {
122794391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl),
122894391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_nrt_pri_lvl,
122994391a14SAngeloGioacchino Del Regno 		},
123094391a14SAngeloGioacchino Del Regno 	.memtype_count = 14,
123194391a14SAngeloGioacchino Del Regno 	.memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
123294391a14SAngeloGioacchino Del Regno 	},
123394391a14SAngeloGioacchino Del Regno };
123494391a14SAngeloGioacchino Del Regno 
1235abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = {
123625fdd593SJeykumar Sankaran 	{
123725fdd593SJeykumar Sankaran 	.name = "vbif_0", .id = VBIF_0,
123825fdd593SJeykumar Sankaran 	.base = 0, .len = 0x1040,
123925fdd593SJeykumar Sankaran 	.features = BIT(DPU_VBIF_QOS_REMAP),
124025fdd593SJeykumar Sankaran 	.xin_halt_timeout = 0x4000,
124125fdd593SJeykumar Sankaran 	.qos_rt_tbl = {
124225fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
124325fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_rt_pri_lvl,
124425fdd593SJeykumar Sankaran 		},
124525fdd593SJeykumar Sankaran 	.qos_nrt_tbl = {
124625fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
124725fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_nrt_pri_lvl,
124825fdd593SJeykumar Sankaran 		},
124925fdd593SJeykumar Sankaran 	.memtype_count = 14,
125025fdd593SJeykumar Sankaran 	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
125125fdd593SJeykumar Sankaran 	},
125225fdd593SJeykumar Sankaran };
125325fdd593SJeykumar Sankaran 
1254abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = {
125525fdd593SJeykumar Sankaran 	.base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c
125625fdd593SJeykumar Sankaran };
125725fdd593SJeykumar Sankaran 
1258386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = {
1259386fced3SJonathan Marek 	.base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c
1260386fced3SJonathan Marek };
1261386fced3SJonathan Marek 
1262af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = {
1263af776a3eSJonathan Marek 	.base = 0x0,
1264af776a3eSJonathan Marek 	.version = 0x00010002,
1265af776a3eSJonathan Marek 	.trigger_sel_off = 0x119c,
1266af776a3eSJonathan Marek 	.xin_id = 7,
1267af776a3eSJonathan Marek 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
1268af776a3eSJonathan Marek };
1269af776a3eSJonathan Marek 
127025fdd593SJeykumar Sankaran /*************************************************************
127125fdd593SJeykumar Sankaran  * PERF data config
127225fdd593SJeykumar Sankaran  *************************************************************/
127325fdd593SJeykumar Sankaran 
127425fdd593SJeykumar Sankaran /* SSPP QOS LUTs */
127594391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_linear[] = {
127694391a14SAngeloGioacchino Del Regno 	{.fl = 4,  .lut = 0x1b},
127794391a14SAngeloGioacchino Del Regno 	{.fl = 5,  .lut = 0x5b},
127894391a14SAngeloGioacchino Del Regno 	{.fl = 6,  .lut = 0x15b},
127994391a14SAngeloGioacchino Del Regno 	{.fl = 7,  .lut = 0x55b},
128094391a14SAngeloGioacchino Del Regno 	{.fl = 8,  .lut = 0x155b},
128194391a14SAngeloGioacchino Del Regno 	{.fl = 9,  .lut = 0x555b},
128294391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1555b},
128394391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5555b},
128494391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15555b},
128594391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55555b},
128694391a14SAngeloGioacchino Del Regno 	{.fl = 14, .lut = 0},
128794391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1b},
128894391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0}
128994391a14SAngeloGioacchino Del Regno };
129094391a14SAngeloGioacchino Del Regno 
1291abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = {
129225fdd593SJeykumar Sankaran 	{.fl = 4, .lut = 0x357},
129325fdd593SJeykumar Sankaran 	{.fl = 5, .lut = 0x3357},
129425fdd593SJeykumar Sankaran 	{.fl = 6, .lut = 0x23357},
129525fdd593SJeykumar Sankaran 	{.fl = 7, .lut = 0x223357},
129625fdd593SJeykumar Sankaran 	{.fl = 8, .lut = 0x2223357},
129725fdd593SJeykumar Sankaran 	{.fl = 9, .lut = 0x22223357},
129825fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x222223357},
129925fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x2222223357},
130025fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x22222223357},
130125fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x222222223357},
130225fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1222222223357},
130325fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x11222222223357}
130425fdd593SJeykumar Sankaran };
130525fdd593SJeykumar Sankaran 
130694391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = {
130794391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1aaff},
130894391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5aaff},
130994391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15aaff},
131094391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55aaff},
131194391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1aaff},
131294391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0},
131394391a14SAngeloGioacchino Del Regno };
131494391a14SAngeloGioacchino Del Regno 
13157bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
13167bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011222222335777},
13177bdc0c4bSKalyan Thota };
13187bdc0c4bSKalyan Thota 
1319386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = {
1320386fced3SJonathan Marek 	{.fl = 0, .lut = 0x0011222222223357 },
1321386fced3SJonathan Marek };
1322386fced3SJonathan Marek 
1323f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_linear[] = {
1324f3af2d6eSRob Clark 	{.fl = 4, .lut = 0x0000000000000357 },
1325f3af2d6eSRob Clark };
1326f3af2d6eSRob Clark 
13275334087eSLoic Poulain static const struct dpu_qos_lut_entry qcm2290_qos_linear[] = {
13285334087eSLoic Poulain 	{.fl = 0, .lut = 0x0011222222335777},
13295334087eSLoic Poulain };
13305334087eSLoic Poulain 
1331abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = {
133225fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x344556677},
133325fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x3344556677},
133425fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x23344556677},
133525fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x223344556677},
133625fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1223344556677},
133725fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x112233344556677},
133825fdd593SJeykumar Sankaran };
133925fdd593SJeykumar Sankaran 
13407bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
13417bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011223344556677},
13427bdc0c4bSKalyan Thota };
13437bdc0c4bSKalyan Thota 
1344f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
1345f3af2d6eSRob Clark 	{.fl = 10, .lut = 0x0000000344556677},
1346f3af2d6eSRob Clark };
1347f3af2d6eSRob Clark 
134894391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = {
134994391a14SAngeloGioacchino Del Regno 	{.fl = 0, .lut = 0x0},
135094391a14SAngeloGioacchino Del Regno };
135194391a14SAngeloGioacchino Del Regno 
1352abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = {
135325fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x0},
135425fdd593SJeykumar Sankaran };
135525fdd593SJeykumar Sankaran 
13567bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
13577bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0},
13587bdc0c4bSKalyan Thota };
13597bdc0c4bSKalyan Thota 
136094391a14SAngeloGioacchino Del Regno static const struct dpu_perf_cfg msm8998_perf_data = {
136194391a14SAngeloGioacchino Del Regno 	.max_bw_low = 6700000,
136294391a14SAngeloGioacchino Del Regno 	.max_bw_high = 6700000,
136394391a14SAngeloGioacchino Del Regno 	.min_core_ib = 2400000,
136494391a14SAngeloGioacchino Del Regno 	.min_llcc_ib = 800000,
136594391a14SAngeloGioacchino Del Regno 	.min_dram_ib = 800000,
136694391a14SAngeloGioacchino Del Regno 	.undersized_prefill_lines = 2,
136794391a14SAngeloGioacchino Del Regno 	.xtra_prefill_lines = 2,
136894391a14SAngeloGioacchino Del Regno 	.dest_scale_prefill_lines = 3,
136994391a14SAngeloGioacchino Del Regno 	.macrotile_prefill_lines = 4,
137094391a14SAngeloGioacchino Del Regno 	.yuv_nv12_prefill_lines = 8,
137194391a14SAngeloGioacchino Del Regno 	.linear_prefill_lines = 1,
137294391a14SAngeloGioacchino Del Regno 	.downscaling_prefill_lines = 1,
137394391a14SAngeloGioacchino Del Regno 	.amortizable_threshold = 25,
137494391a14SAngeloGioacchino Del Regno 	.min_prefill_lines = 25,
137594391a14SAngeloGioacchino Del Regno 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
137694391a14SAngeloGioacchino Del Regno 	.safe_lut_tbl = {0xfffc, 0xff00, 0xffff},
137794391a14SAngeloGioacchino Del Regno 	.qos_lut_tbl = {
137894391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_linear),
137994391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_linear
138094391a14SAngeloGioacchino Del Regno 		},
138194391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_macrotile),
138294391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_macrotile
138394391a14SAngeloGioacchino Del Regno 		},
138494391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_nrt),
138594391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_nrt
138694391a14SAngeloGioacchino Del Regno 		},
138794391a14SAngeloGioacchino Del Regno 	},
138894391a14SAngeloGioacchino Del Regno 	.cdp_cfg = {
138994391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 1},
139094391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 0}
139194391a14SAngeloGioacchino Del Regno 	},
139294391a14SAngeloGioacchino Del Regno 	.clk_inefficiency_factor = 200,
139394391a14SAngeloGioacchino Del Regno 	.bw_inefficiency_factor = 120,
139494391a14SAngeloGioacchino Del Regno };
139594391a14SAngeloGioacchino Del Regno 
1396abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = {
139725fdd593SJeykumar Sankaran 	.max_bw_low = 6800000,
139825fdd593SJeykumar Sankaran 	.max_bw_high = 6800000,
139925fdd593SJeykumar Sankaran 	.min_core_ib = 2400000,
140025fdd593SJeykumar Sankaran 	.min_llcc_ib = 800000,
140125fdd593SJeykumar Sankaran 	.min_dram_ib = 800000,
140225fdd593SJeykumar Sankaran 	.undersized_prefill_lines = 2,
140325fdd593SJeykumar Sankaran 	.xtra_prefill_lines = 2,
140425fdd593SJeykumar Sankaran 	.dest_scale_prefill_lines = 3,
140525fdd593SJeykumar Sankaran 	.macrotile_prefill_lines = 4,
140625fdd593SJeykumar Sankaran 	.yuv_nv12_prefill_lines = 8,
140725fdd593SJeykumar Sankaran 	.linear_prefill_lines = 1,
140825fdd593SJeykumar Sankaran 	.downscaling_prefill_lines = 1,
140925fdd593SJeykumar Sankaran 	.amortizable_threshold = 25,
141025fdd593SJeykumar Sankaran 	.min_prefill_lines = 24,
141125fdd593SJeykumar Sankaran 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
14125bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xf000, 0xffff},
141325fdd593SJeykumar Sankaran 	.qos_lut_tbl = {
141425fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_linear),
141525fdd593SJeykumar Sankaran 		.entries = sdm845_qos_linear
141625fdd593SJeykumar Sankaran 		},
141725fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_macrotile),
141825fdd593SJeykumar Sankaran 		.entries = sdm845_qos_macrotile
141925fdd593SJeykumar Sankaran 		},
142025fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_nrt),
142125fdd593SJeykumar Sankaran 		.entries = sdm845_qos_nrt
142225fdd593SJeykumar Sankaran 		},
142325fdd593SJeykumar Sankaran 	},
142425fdd593SJeykumar Sankaran 	.cdp_cfg = {
142525fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 1},
142625fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 0}
142725fdd593SJeykumar Sankaran 	},
14284f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
14294f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
143025fdd593SJeykumar Sankaran };
143125fdd593SJeykumar Sankaran 
14327bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = {
143371dc6c08SKrishna Manikandan 	.max_bw_low = 6800000,
143471dc6c08SKrishna Manikandan 	.max_bw_high = 6800000,
14357bdc0c4bSKalyan Thota 	.min_core_ib = 2400000,
14367bdc0c4bSKalyan Thota 	.min_llcc_ib = 800000,
1437c33b7c03SKalyan Thota 	.min_dram_ib = 1600000,
1438c33b7c03SKalyan Thota 	.min_prefill_lines = 24,
14397bdc0c4bSKalyan Thota 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
14405bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
14417bdc0c4bSKalyan Thota 	.qos_lut_tbl = {
14427bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
14437bdc0c4bSKalyan Thota 		.entries = sc7180_qos_linear
14447bdc0c4bSKalyan Thota 		},
14457bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
14467bdc0c4bSKalyan Thota 		.entries = sc7180_qos_macrotile
14477bdc0c4bSKalyan Thota 		},
14487bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
14497bdc0c4bSKalyan Thota 		.entries = sc7180_qos_nrt
14507bdc0c4bSKalyan Thota 		},
14517bdc0c4bSKalyan Thota 	},
14527bdc0c4bSKalyan Thota 	.cdp_cfg = {
14537bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 1},
14547bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 0}
14557bdc0c4bSKalyan Thota 	},
1456c33b7c03SKalyan Thota 	.clk_inefficiency_factor = 105,
1457c33b7c03SKalyan Thota 	.bw_inefficiency_factor = 120,
14587bdc0c4bSKalyan Thota };
14597bdc0c4bSKalyan Thota 
1460386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = {
1461386fced3SJonathan Marek 	.max_bw_low = 12800000,
1462386fced3SJonathan Marek 	.max_bw_high = 12800000,
1463386fced3SJonathan Marek 	.min_core_ib = 2400000,
1464386fced3SJonathan Marek 	.min_llcc_ib = 800000,
1465386fced3SJonathan Marek 	.min_dram_ib = 800000,
14664f2c9838SDmitry Baryshkov 	.min_prefill_lines = 24,
1467386fced3SJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
14685bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff8, 0xf000, 0xffff},
1469386fced3SJonathan Marek 	.qos_lut_tbl = {
1470386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sm8150_qos_linear),
1471386fced3SJonathan Marek 		.entries = sm8150_qos_linear
1472386fced3SJonathan Marek 		},
1473386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1474386fced3SJonathan Marek 		.entries = sc7180_qos_macrotile
1475386fced3SJonathan Marek 		},
1476386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1477386fced3SJonathan Marek 		.entries = sc7180_qos_nrt
1478386fced3SJonathan Marek 		},
1479386fced3SJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1480386fced3SJonathan Marek 	},
1481386fced3SJonathan Marek 	.cdp_cfg = {
1482386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1483386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1484386fced3SJonathan Marek 	},
14854f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
14864f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1487386fced3SJonathan Marek };
1488386fced3SJonathan Marek 
1489f3af2d6eSRob Clark static const struct dpu_perf_cfg sc8180x_perf_data = {
1490f3af2d6eSRob Clark 	.max_bw_low = 9600000,
1491f3af2d6eSRob Clark 	.max_bw_high = 9600000,
1492f3af2d6eSRob Clark 	.min_core_ib = 2400000,
1493f3af2d6eSRob Clark 	.min_llcc_ib = 800000,
1494f3af2d6eSRob Clark 	.min_dram_ib = 800000,
1495f3af2d6eSRob Clark 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
1496f3af2d6eSRob Clark 	.qos_lut_tbl = {
1497f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc8180x_qos_linear),
1498f3af2d6eSRob Clark 		.entries = sc8180x_qos_linear
1499f3af2d6eSRob Clark 		},
1500f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc8180x_qos_macrotile),
1501f3af2d6eSRob Clark 		.entries = sc8180x_qos_macrotile
1502f3af2d6eSRob Clark 		},
1503f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1504f3af2d6eSRob Clark 		.entries = sc7180_qos_nrt
1505f3af2d6eSRob Clark 		},
1506f3af2d6eSRob Clark 		/* TODO: macrotile-qseed is different from macrotile */
1507f3af2d6eSRob Clark 	},
1508f3af2d6eSRob Clark 	.cdp_cfg = {
1509f3af2d6eSRob Clark 		{.rd_enable = 1, .wr_enable = 1},
1510f3af2d6eSRob Clark 		{.rd_enable = 1, .wr_enable = 0}
1511f3af2d6eSRob Clark 	},
1512f3af2d6eSRob Clark 	.clk_inefficiency_factor = 105,
1513f3af2d6eSRob Clark 	.bw_inefficiency_factor = 120,
1514f3af2d6eSRob Clark };
1515f3af2d6eSRob Clark 
1516af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = {
1517af776a3eSJonathan Marek 	.max_bw_low = 13700000,
1518af776a3eSJonathan Marek 	.max_bw_high = 16600000,
1519af776a3eSJonathan Marek 	.min_core_ib = 4800000,
1520af776a3eSJonathan Marek 	.min_llcc_ib = 0,
1521af776a3eSJonathan Marek 	.min_dram_ib = 800000,
15224f2c9838SDmitry Baryshkov 	.min_prefill_lines = 35,
1523af776a3eSJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
15245bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
1525af776a3eSJonathan Marek 	.qos_lut_tbl = {
1526af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
1527af776a3eSJonathan Marek 		.entries = sc7180_qos_linear
1528af776a3eSJonathan Marek 		},
1529af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1530af776a3eSJonathan Marek 		.entries = sc7180_qos_macrotile
1531af776a3eSJonathan Marek 		},
1532af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1533af776a3eSJonathan Marek 		.entries = sc7180_qos_nrt
1534af776a3eSJonathan Marek 		},
1535af776a3eSJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1536af776a3eSJonathan Marek 	},
1537af776a3eSJonathan Marek 	.cdp_cfg = {
1538af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1539af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1540af776a3eSJonathan Marek 	},
15414f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
15424f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1543af776a3eSJonathan Marek };
1544af776a3eSJonathan Marek 
1545591e34a0SKrishna Manikandan static const struct dpu_perf_cfg sc7280_perf_data = {
1546591e34a0SKrishna Manikandan 	.max_bw_low = 4700000,
1547591e34a0SKrishna Manikandan 	.max_bw_high = 8800000,
1548591e34a0SKrishna Manikandan 	.min_core_ib = 2500000,
1549591e34a0SKrishna Manikandan 	.min_llcc_ib = 0,
1550591e34a0SKrishna Manikandan 	.min_dram_ib = 1600000,
1551591e34a0SKrishna Manikandan 	.min_prefill_lines = 24,
1552591e34a0SKrishna Manikandan 	.danger_lut_tbl = {0xffff, 0xffff, 0x0},
15535bccb945SKalyan Thota 	.safe_lut_tbl = {0xff00, 0xff00, 0xffff},
1554591e34a0SKrishna Manikandan 	.qos_lut_tbl = {
1555591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1556591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
1557591e34a0SKrishna Manikandan 		},
1558591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1559591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
1560591e34a0SKrishna Manikandan 		},
1561591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1562591e34a0SKrishna Manikandan 		.entries = sc7180_qos_nrt
1563591e34a0SKrishna Manikandan 		},
1564591e34a0SKrishna Manikandan 	},
1565591e34a0SKrishna Manikandan 	.cdp_cfg = {
1566591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 1},
1567591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 0}
1568591e34a0SKrishna Manikandan 	},
1569591e34a0SKrishna Manikandan 	.clk_inefficiency_factor = 105,
1570591e34a0SKrishna Manikandan 	.bw_inefficiency_factor = 120,
1571591e34a0SKrishna Manikandan };
1572591e34a0SKrishna Manikandan 
15735334087eSLoic Poulain static const struct dpu_perf_cfg qcm2290_perf_data = {
15745334087eSLoic Poulain 	.max_bw_low = 2700000,
15755334087eSLoic Poulain 	.max_bw_high = 2700000,
15765334087eSLoic Poulain 	.min_core_ib = 1300000,
15775334087eSLoic Poulain 	.min_llcc_ib = 0,
15785334087eSLoic Poulain 	.min_dram_ib = 1600000,
15795334087eSLoic Poulain 	.min_prefill_lines = 24,
15805334087eSLoic Poulain 	.danger_lut_tbl = {0xff, 0x0, 0x0},
15815334087eSLoic Poulain 	.safe_lut_tbl = {0xfff0, 0x0, 0x0},
15825334087eSLoic Poulain 	.qos_lut_tbl = {
15835334087eSLoic Poulain 		{.nentry = ARRAY_SIZE(qcm2290_qos_linear),
15845334087eSLoic Poulain 		.entries = qcm2290_qos_linear
15855334087eSLoic Poulain 		},
15865334087eSLoic Poulain 	},
15875334087eSLoic Poulain 	.cdp_cfg = {
15885334087eSLoic Poulain 		{.rd_enable = 1, .wr_enable = 1},
15895334087eSLoic Poulain 		{.rd_enable = 1, .wr_enable = 0}
15905334087eSLoic Poulain 	},
15915334087eSLoic Poulain 	.clk_inefficiency_factor = 105,
15925334087eSLoic Poulain 	.bw_inefficiency_factor = 120,
15935334087eSLoic Poulain };
159425fdd593SJeykumar Sankaran /*************************************************************
159525fdd593SJeykumar Sankaran  * Hardware catalog init
159625fdd593SJeykumar Sankaran  *************************************************************/
159725fdd593SJeykumar Sankaran 
159825fdd593SJeykumar Sankaran /*
159994391a14SAngeloGioacchino Del Regno  * msm8998_cfg_init(): populate sdm845 dpu sub-blocks reg offsets
160094391a14SAngeloGioacchino Del Regno  * and instance counts.
160194391a14SAngeloGioacchino Del Regno  */
160294391a14SAngeloGioacchino Del Regno static void msm8998_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
160394391a14SAngeloGioacchino Del Regno {
160494391a14SAngeloGioacchino Del Regno 	*dpu_cfg = (struct dpu_mdss_cfg){
160594391a14SAngeloGioacchino Del Regno 		.caps = &msm8998_dpu_caps,
160694391a14SAngeloGioacchino Del Regno 		.mdp_count = ARRAY_SIZE(msm8998_mdp),
160794391a14SAngeloGioacchino Del Regno 		.mdp = msm8998_mdp,
160894391a14SAngeloGioacchino Del Regno 		.ctl_count = ARRAY_SIZE(msm8998_ctl),
160994391a14SAngeloGioacchino Del Regno 		.ctl = msm8998_ctl,
161094391a14SAngeloGioacchino Del Regno 		.sspp_count = ARRAY_SIZE(msm8998_sspp),
161194391a14SAngeloGioacchino Del Regno 		.sspp = msm8998_sspp,
161294391a14SAngeloGioacchino Del Regno 		.mixer_count = ARRAY_SIZE(msm8998_lm),
161394391a14SAngeloGioacchino Del Regno 		.mixer = msm8998_lm,
1614*6452cbd6SDmitry Baryshkov 		.dspp_count = ARRAY_SIZE(msm8998_dspp),
1615*6452cbd6SDmitry Baryshkov 		.dspp = msm8998_dspp,
161694391a14SAngeloGioacchino Del Regno 		.pingpong_count = ARRAY_SIZE(sdm845_pp),
161794391a14SAngeloGioacchino Del Regno 		.pingpong = sdm845_pp,
161894391a14SAngeloGioacchino Del Regno 		.intf_count = ARRAY_SIZE(msm8998_intf),
161994391a14SAngeloGioacchino Del Regno 		.intf = msm8998_intf,
162094391a14SAngeloGioacchino Del Regno 		.vbif_count = ARRAY_SIZE(msm8998_vbif),
162194391a14SAngeloGioacchino Del Regno 		.vbif = msm8998_vbif,
162294391a14SAngeloGioacchino Del Regno 		.reg_dma_count = 0,
162394391a14SAngeloGioacchino Del Regno 		.perf = msm8998_perf_data,
162494391a14SAngeloGioacchino Del Regno 		.mdss_irqs = IRQ_SM8250_MASK,
162594391a14SAngeloGioacchino Del Regno 	};
162694391a14SAngeloGioacchino Del Regno }
162794391a14SAngeloGioacchino Del Regno 
162894391a14SAngeloGioacchino Del Regno /*
162925fdd593SJeykumar Sankaran  * sdm845_cfg_init(): populate sdm845 dpu sub-blocks reg offsets
163025fdd593SJeykumar Sankaran  * and instance counts.
163125fdd593SJeykumar Sankaran  */
1632fba33caeSJordan Crouse static void sdm845_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
163325fdd593SJeykumar Sankaran {
163425fdd593SJeykumar Sankaran 	*dpu_cfg = (struct dpu_mdss_cfg){
163525fdd593SJeykumar Sankaran 		.caps = &sdm845_dpu_caps,
163625fdd593SJeykumar Sankaran 		.mdp_count = ARRAY_SIZE(sdm845_mdp),
163725fdd593SJeykumar Sankaran 		.mdp = sdm845_mdp,
163825fdd593SJeykumar Sankaran 		.ctl_count = ARRAY_SIZE(sdm845_ctl),
163925fdd593SJeykumar Sankaran 		.ctl = sdm845_ctl,
164025fdd593SJeykumar Sankaran 		.sspp_count = ARRAY_SIZE(sdm845_sspp),
164125fdd593SJeykumar Sankaran 		.sspp = sdm845_sspp,
164225fdd593SJeykumar Sankaran 		.mixer_count = ARRAY_SIZE(sdm845_lm),
164325fdd593SJeykumar Sankaran 		.mixer = sdm845_lm,
164425fdd593SJeykumar Sankaran 		.pingpong_count = ARRAY_SIZE(sdm845_pp),
164525fdd593SJeykumar Sankaran 		.pingpong = sdm845_pp,
164625fdd593SJeykumar Sankaran 		.intf_count = ARRAY_SIZE(sdm845_intf),
164725fdd593SJeykumar Sankaran 		.intf = sdm845_intf,
164825fdd593SJeykumar Sankaran 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
164925fdd593SJeykumar Sankaran 		.vbif = sdm845_vbif,
165025fdd593SJeykumar Sankaran 		.reg_dma_count = 1,
165125fdd593SJeykumar Sankaran 		.dma_cfg = sdm845_regdma,
165225fdd593SJeykumar Sankaran 		.perf = sdm845_perf_data,
1653597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SDM845_MASK,
165425fdd593SJeykumar Sankaran 	};
165525fdd593SJeykumar Sankaran }
165625fdd593SJeykumar Sankaran 
16577bdc0c4bSKalyan Thota /*
16587bdc0c4bSKalyan Thota  * sc7180_cfg_init(): populate sc7180 dpu sub-blocks reg offsets
16597bdc0c4bSKalyan Thota  * and instance counts.
16607bdc0c4bSKalyan Thota  */
16617bdc0c4bSKalyan Thota static void sc7180_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
16627bdc0c4bSKalyan Thota {
16637bdc0c4bSKalyan Thota 	*dpu_cfg = (struct dpu_mdss_cfg){
16647bdc0c4bSKalyan Thota 		.caps = &sc7180_dpu_caps,
16657bdc0c4bSKalyan Thota 		.mdp_count = ARRAY_SIZE(sc7180_mdp),
16667bdc0c4bSKalyan Thota 		.mdp = sc7180_mdp,
16677bdc0c4bSKalyan Thota 		.ctl_count = ARRAY_SIZE(sc7180_ctl),
16687bdc0c4bSKalyan Thota 		.ctl = sc7180_ctl,
16697bdc0c4bSKalyan Thota 		.sspp_count = ARRAY_SIZE(sc7180_sspp),
16707bdc0c4bSKalyan Thota 		.sspp = sc7180_sspp,
16717bdc0c4bSKalyan Thota 		.mixer_count = ARRAY_SIZE(sc7180_lm),
16727bdc0c4bSKalyan Thota 		.mixer = sc7180_lm,
1673e47616dfSKalyan Thota 		.dspp_count = ARRAY_SIZE(sc7180_dspp),
1674e47616dfSKalyan Thota 		.dspp = sc7180_dspp,
16757bdc0c4bSKalyan Thota 		.pingpong_count = ARRAY_SIZE(sc7180_pp),
16767bdc0c4bSKalyan Thota 		.pingpong = sc7180_pp,
16777bdc0c4bSKalyan Thota 		.intf_count = ARRAY_SIZE(sc7180_intf),
16787bdc0c4bSKalyan Thota 		.intf = sc7180_intf,
16797bdc0c4bSKalyan Thota 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
16807bdc0c4bSKalyan Thota 		.vbif = sdm845_vbif,
16817bdc0c4bSKalyan Thota 		.reg_dma_count = 1,
16827bdc0c4bSKalyan Thota 		.dma_cfg = sdm845_regdma,
16837bdc0c4bSKalyan Thota 		.perf = sc7180_perf_data,
1684597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SC7180_MASK,
16857bdc0c4bSKalyan Thota 	};
16867bdc0c4bSKalyan Thota }
16877bdc0c4bSKalyan Thota 
1688386fced3SJonathan Marek /*
1689386fced3SJonathan Marek  * sm8150_cfg_init(): populate sm8150 dpu sub-blocks reg offsets
1690386fced3SJonathan Marek  * and instance counts.
1691386fced3SJonathan Marek  */
1692386fced3SJonathan Marek static void sm8150_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1693386fced3SJonathan Marek {
1694386fced3SJonathan Marek 	*dpu_cfg = (struct dpu_mdss_cfg){
1695386fced3SJonathan Marek 		.caps = &sm8150_dpu_caps,
1696386fced3SJonathan Marek 		.mdp_count = ARRAY_SIZE(sdm845_mdp),
1697386fced3SJonathan Marek 		.mdp = sdm845_mdp,
1698386fced3SJonathan Marek 		.ctl_count = ARRAY_SIZE(sm8150_ctl),
1699386fced3SJonathan Marek 		.ctl = sm8150_ctl,
1700386fced3SJonathan Marek 		.sspp_count = ARRAY_SIZE(sdm845_sspp),
1701386fced3SJonathan Marek 		.sspp = sdm845_sspp,
1702386fced3SJonathan Marek 		.mixer_count = ARRAY_SIZE(sm8150_lm),
1703386fced3SJonathan Marek 		.mixer = sm8150_lm,
170405ae91d9SDmitry Baryshkov 		.dspp_count = ARRAY_SIZE(sm8150_dspp),
170505ae91d9SDmitry Baryshkov 		.dspp = sm8150_dspp,
1706386fced3SJonathan Marek 		.pingpong_count = ARRAY_SIZE(sm8150_pp),
1707386fced3SJonathan Marek 		.pingpong = sm8150_pp,
17084369c93cSDmitry Baryshkov 		.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
17094369c93cSDmitry Baryshkov 		.merge_3d = sm8150_merge_3d,
1710386fced3SJonathan Marek 		.intf_count = ARRAY_SIZE(sm8150_intf),
1711386fced3SJonathan Marek 		.intf = sm8150_intf,
1712386fced3SJonathan Marek 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1713386fced3SJonathan Marek 		.vbif = sdm845_vbif,
1714386fced3SJonathan Marek 		.reg_dma_count = 1,
1715386fced3SJonathan Marek 		.dma_cfg = sm8150_regdma,
1716386fced3SJonathan Marek 		.perf = sm8150_perf_data,
1717597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SDM845_MASK,
1718386fced3SJonathan Marek 	};
1719386fced3SJonathan Marek }
1720386fced3SJonathan Marek 
1721af776a3eSJonathan Marek /*
1722f3af2d6eSRob Clark  * sc8180x_cfg_init(): populate sc8180 dpu sub-blocks reg offsets
1723f3af2d6eSRob Clark  * and instance counts.
1724f3af2d6eSRob Clark  */
1725f3af2d6eSRob Clark static void sc8180x_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1726f3af2d6eSRob Clark {
1727f3af2d6eSRob Clark 	*dpu_cfg = (struct dpu_mdss_cfg){
1728f3af2d6eSRob Clark 		.caps = &sc8180x_dpu_caps,
1729f3af2d6eSRob Clark 		.mdp_count = ARRAY_SIZE(sc8180x_mdp),
1730f3af2d6eSRob Clark 		.mdp = sc8180x_mdp,
1731f3af2d6eSRob Clark 		.ctl_count = ARRAY_SIZE(sm8150_ctl),
1732f3af2d6eSRob Clark 		.ctl = sm8150_ctl,
1733f3af2d6eSRob Clark 		.sspp_count = ARRAY_SIZE(sdm845_sspp),
1734f3af2d6eSRob Clark 		.sspp = sdm845_sspp,
1735f3af2d6eSRob Clark 		.mixer_count = ARRAY_SIZE(sm8150_lm),
1736f3af2d6eSRob Clark 		.mixer = sm8150_lm,
1737f3af2d6eSRob Clark 		.pingpong_count = ARRAY_SIZE(sm8150_pp),
1738f3af2d6eSRob Clark 		.pingpong = sm8150_pp,
1739f3af2d6eSRob Clark 		.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
1740f3af2d6eSRob Clark 		.merge_3d = sm8150_merge_3d,
1741f3af2d6eSRob Clark 		.intf_count = ARRAY_SIZE(sc8180x_intf),
1742f3af2d6eSRob Clark 		.intf = sc8180x_intf,
1743f3af2d6eSRob Clark 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1744f3af2d6eSRob Clark 		.vbif = sdm845_vbif,
1745f3af2d6eSRob Clark 		.reg_dma_count = 1,
1746f3af2d6eSRob Clark 		.dma_cfg = sm8150_regdma,
1747f3af2d6eSRob Clark 		.perf = sc8180x_perf_data,
1748f3af2d6eSRob Clark 		.mdss_irqs = IRQ_SC8180X_MASK,
1749f3af2d6eSRob Clark 	};
1750f3af2d6eSRob Clark }
1751f3af2d6eSRob Clark 
1752f3af2d6eSRob Clark /*
1753af776a3eSJonathan Marek  * sm8250_cfg_init(): populate sm8250 dpu sub-blocks reg offsets
1754af776a3eSJonathan Marek  * and instance counts.
1755af776a3eSJonathan Marek  */
1756af776a3eSJonathan Marek static void sm8250_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1757af776a3eSJonathan Marek {
1758af776a3eSJonathan Marek 	*dpu_cfg = (struct dpu_mdss_cfg){
1759af776a3eSJonathan Marek 		.caps = &sm8250_dpu_caps,
1760af776a3eSJonathan Marek 		.mdp_count = ARRAY_SIZE(sm8250_mdp),
1761af776a3eSJonathan Marek 		.mdp = sm8250_mdp,
1762af776a3eSJonathan Marek 		.ctl_count = ARRAY_SIZE(sm8150_ctl),
1763af776a3eSJonathan Marek 		.ctl = sm8150_ctl,
1764d21fc5dfSDmitry Baryshkov 		.sspp_count = ARRAY_SIZE(sm8250_sspp),
1765d21fc5dfSDmitry Baryshkov 		.sspp = sm8250_sspp,
1766af776a3eSJonathan Marek 		.mixer_count = ARRAY_SIZE(sm8150_lm),
1767af776a3eSJonathan Marek 		.mixer = sm8150_lm,
176805ae91d9SDmitry Baryshkov 		.dspp_count = ARRAY_SIZE(sm8150_dspp),
176905ae91d9SDmitry Baryshkov 		.dspp = sm8150_dspp,
1770af776a3eSJonathan Marek 		.pingpong_count = ARRAY_SIZE(sm8150_pp),
1771af776a3eSJonathan Marek 		.pingpong = sm8150_pp,
17724369c93cSDmitry Baryshkov 		.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
17734369c93cSDmitry Baryshkov 		.merge_3d = sm8150_merge_3d,
1774af776a3eSJonathan Marek 		.intf_count = ARRAY_SIZE(sm8150_intf),
1775af776a3eSJonathan Marek 		.intf = sm8150_intf,
1776af776a3eSJonathan Marek 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1777af776a3eSJonathan Marek 		.vbif = sdm845_vbif,
1778af776a3eSJonathan Marek 		.reg_dma_count = 1,
1779af776a3eSJonathan Marek 		.dma_cfg = sm8250_regdma,
1780af776a3eSJonathan Marek 		.perf = sm8250_perf_data,
1781597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SM8250_MASK,
1782af776a3eSJonathan Marek 	};
1783af776a3eSJonathan Marek }
1784af776a3eSJonathan Marek 
1785591e34a0SKrishna Manikandan static void sc7280_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1786591e34a0SKrishna Manikandan {
1787591e34a0SKrishna Manikandan 	*dpu_cfg = (struct dpu_mdss_cfg){
1788591e34a0SKrishna Manikandan 		.caps = &sc7280_dpu_caps,
1789591e34a0SKrishna Manikandan 		.mdp_count = ARRAY_SIZE(sc7280_mdp),
1790591e34a0SKrishna Manikandan 		.mdp = sc7280_mdp,
1791591e34a0SKrishna Manikandan 		.ctl_count = ARRAY_SIZE(sc7280_ctl),
1792591e34a0SKrishna Manikandan 		.ctl = sc7280_ctl,
1793591e34a0SKrishna Manikandan 		.sspp_count = ARRAY_SIZE(sc7280_sspp),
1794591e34a0SKrishna Manikandan 		.sspp = sc7280_sspp,
1795591e34a0SKrishna Manikandan 		.mixer_count = ARRAY_SIZE(sc7280_lm),
1796591e34a0SKrishna Manikandan 		.mixer = sc7280_lm,
1797591e34a0SKrishna Manikandan 		.pingpong_count = ARRAY_SIZE(sc7280_pp),
1798591e34a0SKrishna Manikandan 		.pingpong = sc7280_pp,
1799591e34a0SKrishna Manikandan 		.intf_count = ARRAY_SIZE(sc7280_intf),
1800591e34a0SKrishna Manikandan 		.intf = sc7280_intf,
1801591e34a0SKrishna Manikandan 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1802591e34a0SKrishna Manikandan 		.vbif = sdm845_vbif,
1803591e34a0SKrishna Manikandan 		.perf = sc7280_perf_data,
1804597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SC7280_MASK,
1805591e34a0SKrishna Manikandan 	};
1806591e34a0SKrishna Manikandan }
1807591e34a0SKrishna Manikandan 
18085334087eSLoic Poulain 
18095334087eSLoic Poulain /*
18105334087eSLoic Poulain  * qcm2290_cfg_init(): populate qcm2290 dpu sub-blocks reg offsets
18115334087eSLoic Poulain  * and instance counts.
18125334087eSLoic Poulain  */
18135334087eSLoic Poulain static void qcm2290_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
18145334087eSLoic Poulain {
18155334087eSLoic Poulain 	*dpu_cfg = (struct dpu_mdss_cfg){
18165334087eSLoic Poulain 		.caps = &qcm2290_dpu_caps,
18175334087eSLoic Poulain 		.mdp_count = ARRAY_SIZE(qcm2290_mdp),
18185334087eSLoic Poulain 		.mdp = qcm2290_mdp,
18195334087eSLoic Poulain 		.ctl_count = ARRAY_SIZE(qcm2290_ctl),
18205334087eSLoic Poulain 		.ctl = qcm2290_ctl,
18215334087eSLoic Poulain 		.sspp_count = ARRAY_SIZE(qcm2290_sspp),
18225334087eSLoic Poulain 		.sspp = qcm2290_sspp,
18235334087eSLoic Poulain 		.mixer_count = ARRAY_SIZE(qcm2290_lm),
18245334087eSLoic Poulain 		.mixer = qcm2290_lm,
18255334087eSLoic Poulain 		.dspp_count = ARRAY_SIZE(qcm2290_dspp),
18265334087eSLoic Poulain 		.dspp = qcm2290_dspp,
18275334087eSLoic Poulain 		.pingpong_count = ARRAY_SIZE(qcm2290_pp),
18285334087eSLoic Poulain 		.pingpong = qcm2290_pp,
18295334087eSLoic Poulain 		.intf_count = ARRAY_SIZE(qcm2290_intf),
18305334087eSLoic Poulain 		.intf = qcm2290_intf,
18315334087eSLoic Poulain 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
18325334087eSLoic Poulain 		.vbif = sdm845_vbif,
18335334087eSLoic Poulain 		.reg_dma_count = 1,
18345334087eSLoic Poulain 		.dma_cfg = sdm845_regdma,
18355334087eSLoic Poulain 		.perf = qcm2290_perf_data,
18365334087eSLoic Poulain 		.mdss_irqs = IRQ_SC7180_MASK,
18375334087eSLoic Poulain 	};
18385334087eSLoic Poulain }
18395334087eSLoic Poulain 
1840abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = {
184194391a14SAngeloGioacchino Del Regno 	{ .hw_rev = DPU_HW_VER_300, .cfg_init = msm8998_cfg_init},
184294391a14SAngeloGioacchino Del Regno 	{ .hw_rev = DPU_HW_VER_301, .cfg_init = msm8998_cfg_init},
184325fdd593SJeykumar Sankaran 	{ .hw_rev = DPU_HW_VER_400, .cfg_init = sdm845_cfg_init},
184425fdd593SJeykumar Sankaran 	{ .hw_rev = DPU_HW_VER_401, .cfg_init = sdm845_cfg_init},
1845386fced3SJonathan Marek 	{ .hw_rev = DPU_HW_VER_500, .cfg_init = sm8150_cfg_init},
1846386fced3SJonathan Marek 	{ .hw_rev = DPU_HW_VER_501, .cfg_init = sm8150_cfg_init},
1847f3af2d6eSRob Clark 	{ .hw_rev = DPU_HW_VER_510, .cfg_init = sc8180x_cfg_init},
1848af776a3eSJonathan Marek 	{ .hw_rev = DPU_HW_VER_600, .cfg_init = sm8250_cfg_init},
18497bdc0c4bSKalyan Thota 	{ .hw_rev = DPU_HW_VER_620, .cfg_init = sc7180_cfg_init},
18505334087eSLoic Poulain 	{ .hw_rev = DPU_HW_VER_650, .cfg_init = qcm2290_cfg_init},
1851591e34a0SKrishna Manikandan 	{ .hw_rev = DPU_HW_VER_720, .cfg_init = sc7280_cfg_init},
185225fdd593SJeykumar Sankaran };
185325fdd593SJeykumar Sankaran 
185425fdd593SJeykumar Sankaran void dpu_hw_catalog_deinit(struct dpu_mdss_cfg *dpu_cfg)
185525fdd593SJeykumar Sankaran {
185625fdd593SJeykumar Sankaran 	kfree(dpu_cfg);
185725fdd593SJeykumar Sankaran }
185825fdd593SJeykumar Sankaran 
185925fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev)
186025fdd593SJeykumar Sankaran {
186125fdd593SJeykumar Sankaran 	int i;
186225fdd593SJeykumar Sankaran 	struct dpu_mdss_cfg *dpu_cfg;
186325fdd593SJeykumar Sankaran 
186425fdd593SJeykumar Sankaran 	dpu_cfg = kzalloc(sizeof(*dpu_cfg), GFP_KERNEL);
186525fdd593SJeykumar Sankaran 	if (!dpu_cfg)
186625fdd593SJeykumar Sankaran 		return ERR_PTR(-ENOMEM);
186725fdd593SJeykumar Sankaran 
186825fdd593SJeykumar Sankaran 	for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) {
186925fdd593SJeykumar Sankaran 		if (cfg_handler[i].hw_rev == hw_rev) {
187025fdd593SJeykumar Sankaran 			cfg_handler[i].cfg_init(dpu_cfg);
187125fdd593SJeykumar Sankaran 			dpu_cfg->hwversion = hw_rev;
187225fdd593SJeykumar Sankaran 			return dpu_cfg;
187325fdd593SJeykumar Sankaran 		}
187425fdd593SJeykumar Sankaran 	}
187525fdd593SJeykumar Sankaran 
187625fdd593SJeykumar Sankaran 	DPU_ERROR("unsupported chipset id:%X\n", hw_rev);
187725fdd593SJeykumar Sankaran 	dpu_hw_catalog_deinit(dpu_cfg);
187825fdd593SJeykumar Sankaran 	return ERR_PTR(-ENODEV);
187925fdd593SJeykumar Sankaran }
188025fdd593SJeykumar Sankaran 
1881