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 
197bdc0c4bSKalyan Thota #define VIG_SDM845_MASK \
20b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3))
217bdc0c4bSKalyan Thota 
227bdc0c4bSKalyan Thota #define VIG_SC7180_MASK \
23b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED4))
247bdc0c4bSKalyan Thota 
25d21fc5dfSDmitry Baryshkov #define VIG_SM8250_MASK \
26095eed89SDmitry Baryshkov 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3LITE))
27d21fc5dfSDmitry Baryshkov 
2825fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \
2925fdd593SJeykumar Sankaran 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\
3025fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
3125fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
3225fdd593SJeykumar Sankaran 
3307ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \
3407ca1fc0SSravanthi Kollukuduru 	(DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR))
3507ca1fc0SSravanthi Kollukuduru 
3625fdd593SJeykumar Sankaran #define MIXER_SDM845_MASK \
3725fdd593SJeykumar Sankaran 	(BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER))
3825fdd593SJeykumar Sankaran 
397bdc0c4bSKalyan Thota #define MIXER_SC7180_MASK \
407bdc0c4bSKalyan Thota 	(BIT(DPU_DIM_LAYER))
417bdc0c4bSKalyan Thota 
4225fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER)
4325fdd593SJeykumar Sankaran 
4425fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \
4525fdd593SJeykumar Sankaran 	(PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2))
4625fdd593SJeykumar Sankaran 
47591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \
48591e34a0SKrishna Manikandan 	(BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE))
49591e34a0SKrishna Manikandan 
504369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0)
514369c93cSDmitry Baryshkov 
524259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
53e47616dfSKalyan Thota 
54cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0)
55cace3ac4SJonathan Marek 
56cace3ac4SJonathan Marek #define INTF_SC7180_MASK BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE)
57cace3ac4SJonathan Marek 
58591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN)
59591e34a0SKrishna Manikandan 
60597762d5SDmitry Baryshkov #define IRQ_SDM845_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
61597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
62597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
63597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
64597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
65597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
66597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
67597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR) | \
68597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_0_INTR) | \
69597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_1_INTR))
70597762d5SDmitry Baryshkov 
71597762d5SDmitry Baryshkov #define IRQ_SC7180_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
72597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
73597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
74597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
75597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR))
76597762d5SDmitry Baryshkov 
77597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
78597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
79597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
80597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
81597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
82597762d5SDmitry Baryshkov 			 BIT(MDP_INTF5_7xxx_INTR))
83597762d5SDmitry Baryshkov 
84597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
85597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
86597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
87597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
88597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
89597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
90597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
91597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR))
92597762d5SDmitry Baryshkov 
93597762d5SDmitry Baryshkov 
9425fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE		(50 * 1024)
9525fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH		2048
9625fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH	2560
9725fdd593SJeykumar Sankaran 
9825fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION	4
9925fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION	4
10025fdd593SJeykumar Sankaran 
10125fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO	20
10225fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO	4
10325fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE	1
10425fdd593SJeykumar Sankaran 
10525fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y)
10625fdd593SJeykumar Sankaran 
10709c7e370SLee Jones static const uint32_t plane_formats[] = {
10809c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
10909c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
11009c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
11109c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
11209c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
11309c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
11409c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
11509c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
11609c7e370SLee Jones 	DRM_FORMAT_RGB888,
11709c7e370SLee Jones 	DRM_FORMAT_BGR888,
11809c7e370SLee Jones 	DRM_FORMAT_RGB565,
11909c7e370SLee Jones 	DRM_FORMAT_BGR565,
12009c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
12109c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
12209c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
12309c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
12409c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
12509c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
12609c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
12709c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
12809c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
12909c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
13009c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
13109c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
13209c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
13309c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
13409c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
13509c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
13609c7e370SLee Jones };
13709c7e370SLee Jones 
13809c7e370SLee Jones static const uint32_t plane_formats_yuv[] = {
13909c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
14009c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
14109c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
14209c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
14309c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
14409c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
14509c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
14609c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
14709c7e370SLee Jones 	DRM_FORMAT_RGB888,
14809c7e370SLee Jones 	DRM_FORMAT_BGR888,
14909c7e370SLee Jones 	DRM_FORMAT_RGB565,
15009c7e370SLee Jones 	DRM_FORMAT_BGR565,
15109c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
15209c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
15309c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
15409c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
15509c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
15609c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
15709c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
15809c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
15909c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
16009c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
16109c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
16209c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
16309c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
16409c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
16509c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
16609c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
16709c7e370SLee Jones 
16809c7e370SLee Jones 	DRM_FORMAT_NV12,
16909c7e370SLee Jones 	DRM_FORMAT_NV21,
17009c7e370SLee Jones 	DRM_FORMAT_NV16,
17109c7e370SLee Jones 	DRM_FORMAT_NV61,
17209c7e370SLee Jones 	DRM_FORMAT_VYUY,
17309c7e370SLee Jones 	DRM_FORMAT_UYVY,
17409c7e370SLee Jones 	DRM_FORMAT_YUYV,
17509c7e370SLee Jones 	DRM_FORMAT_YVYU,
17609c7e370SLee Jones 	DRM_FORMAT_YUV420,
17709c7e370SLee Jones 	DRM_FORMAT_YVU420,
17809c7e370SLee Jones };
17909c7e370SLee Jones 
18025fdd593SJeykumar Sankaran /*************************************************************
18125fdd593SJeykumar Sankaran  * DPU sub blocks config
18225fdd593SJeykumar Sankaran  *************************************************************/
18325fdd593SJeykumar Sankaran /* DPU top level caps */
18425fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = {
18525fdd593SJeykumar Sankaran 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
18625fdd593SJeykumar Sankaran 	.max_mixer_blendstages = 0xb,
18725fdd593SJeykumar Sankaran 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
18825fdd593SJeykumar Sankaran 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
18925fdd593SJeykumar Sankaran 	.ubwc_version = DPU_HW_UBWC_VER_20,
19025fdd593SJeykumar Sankaran 	.has_src_split = true,
19125fdd593SJeykumar Sankaran 	.has_dim_layer = true,
19225fdd593SJeykumar Sankaran 	.has_idle_pc = true,
19342a558b7SKalyan Thota 	.has_3d_merge = true,
1947e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
1957e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
1967e9d4cddSJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
1977e9d4cddSJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
19825fdd593SJeykumar Sankaran };
19925fdd593SJeykumar Sankaran 
2007bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = {
2017bdc0c4bSKalyan Thota 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
2027bdc0c4bSKalyan Thota 	.max_mixer_blendstages = 0x9,
2037bdc0c4bSKalyan Thota 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
2047bdc0c4bSKalyan Thota 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
2057bdc0c4bSKalyan Thota 	.ubwc_version = DPU_HW_UBWC_VER_20,
2067bdc0c4bSKalyan Thota 	.has_dim_layer = true,
2077bdc0c4bSKalyan Thota 	.has_idle_pc = true,
2087e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
2097e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
2107bdc0c4bSKalyan Thota };
2117bdc0c4bSKalyan Thota 
212386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = {
213386fced3SJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
214386fced3SJonathan Marek 	.max_mixer_blendstages = 0xb,
215386fced3SJonathan Marek 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
216386fced3SJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
217386fced3SJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_30,
218386fced3SJonathan Marek 	.has_src_split = true,
219386fced3SJonathan Marek 	.has_dim_layer = true,
220386fced3SJonathan Marek 	.has_idle_pc = true,
221386fced3SJonathan Marek 	.has_3d_merge = true,
222386fced3SJonathan Marek 	.max_linewidth = 4096,
223386fced3SJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
224386fced3SJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
225386fced3SJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
226386fced3SJonathan Marek };
227386fced3SJonathan Marek 
228af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = {
229af776a3eSJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
230af776a3eSJonathan Marek 	.max_mixer_blendstages = 0xb,
231d21fc5dfSDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED3LITE,
232af776a3eSJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
233af776a3eSJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_40,
234af776a3eSJonathan Marek 	.has_src_split = true,
235af776a3eSJonathan Marek 	.has_dim_layer = true,
236af776a3eSJonathan Marek 	.has_idle_pc = true,
237af776a3eSJonathan Marek 	.has_3d_merge = true,
238af776a3eSJonathan Marek 	.max_linewidth = 4096,
239af776a3eSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
240af776a3eSJonathan Marek };
241af776a3eSJonathan Marek 
242591e34a0SKrishna Manikandan static const struct dpu_caps sc7280_dpu_caps = {
243591e34a0SKrishna Manikandan 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
244591e34a0SKrishna Manikandan 	.max_mixer_blendstages = 0x7,
245591e34a0SKrishna Manikandan 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
246591e34a0SKrishna Manikandan 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
247591e34a0SKrishna Manikandan 	.ubwc_version = DPU_HW_UBWC_VER_30,
248591e34a0SKrishna Manikandan 	.has_dim_layer = true,
249591e34a0SKrishna Manikandan 	.has_idle_pc = true,
250591e34a0SKrishna Manikandan 	.max_linewidth = 2400,
251591e34a0SKrishna Manikandan 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
252591e34a0SKrishna Manikandan };
253591e34a0SKrishna Manikandan 
254abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = {
25525fdd593SJeykumar Sankaran 	{
25625fdd593SJeykumar Sankaran 	.name = "top_0", .id = MDP_TOP,
25725fdd593SJeykumar Sankaran 	.base = 0x0, .len = 0x45C,
25825fdd593SJeykumar Sankaran 	.features = 0,
25925fdd593SJeykumar Sankaran 	.highest_bank_bit = 0x2,
26025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
26125fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 0},
26225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
26325fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 0},
26425fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
26525fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 0},
26625fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
26725fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 0},
26825fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
26925fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 8},
27025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
27125fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 8},
27225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
27325fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 8},
27425fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
27525fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 8},
27625fdd593SJeykumar Sankaran 	},
27725fdd593SJeykumar Sankaran };
27825fdd593SJeykumar Sankaran 
2797bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = {
2807bdc0c4bSKalyan Thota 	{
2817bdc0c4bSKalyan Thota 	.name = "top_0", .id = MDP_TOP,
2827bdc0c4bSKalyan Thota 	.base = 0x0, .len = 0x494,
2837bdc0c4bSKalyan Thota 	.features = 0,
2847bdc0c4bSKalyan Thota 	.highest_bank_bit = 0x3,
2857bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
2867bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 0},
2877bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
2887bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 8},
2897bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
2907b149f2bSKalyan Thota 		.reg_off = 0x2B4, .bit_off = 8},
2917b149f2bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
2927b149f2bSKalyan Thota 		.reg_off = 0x2C4, .bit_off = 8},
2937bdc0c4bSKalyan Thota 	},
2947bdc0c4bSKalyan Thota };
2957bdc0c4bSKalyan Thota 
296af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = {
297af776a3eSJonathan Marek 	{
298af776a3eSJonathan Marek 	.name = "top_0", .id = MDP_TOP,
299b910a020SRobert Foss 	.base = 0x0, .len = 0x494,
300af776a3eSJonathan Marek 	.features = 0,
301af776a3eSJonathan Marek 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
302af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
303af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 0},
304af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
305af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 0},
306af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
307af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 0},
308af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
309af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 0},
310af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
311af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 8},
312af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
313af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 8},
314af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
315af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 8},
316af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
317af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 8},
318af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
319af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 20},
320af776a3eSJonathan Marek 	},
321af776a3eSJonathan Marek };
322af776a3eSJonathan Marek 
323591e34a0SKrishna Manikandan static const struct dpu_mdp_cfg sc7280_mdp[] = {
324591e34a0SKrishna Manikandan 	{
325591e34a0SKrishna Manikandan 	.name = "top_0", .id = MDP_TOP,
326591e34a0SKrishna Manikandan 	.base = 0x0, .len = 0x2014,
327591e34a0SKrishna Manikandan 	.highest_bank_bit = 0x1,
328591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
329591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 0},
330591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
331591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 8},
332591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
333591e34a0SKrishna Manikandan 		.reg_off = 0x2B4, .bit_off = 8},
334591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
335591e34a0SKrishna Manikandan 		.reg_off = 0x2C4, .bit_off = 8},
336591e34a0SKrishna Manikandan 	},
337591e34a0SKrishna Manikandan };
338591e34a0SKrishna Manikandan 
33925fdd593SJeykumar Sankaran /*************************************************************
34025fdd593SJeykumar Sankaran  * CTL sub blocks config
34125fdd593SJeykumar Sankaran  *************************************************************/
342abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = {
34325fdd593SJeykumar Sankaran 	{
34425fdd593SJeykumar Sankaran 	.name = "ctl_0", .id = CTL_0,
34525fdd593SJeykumar Sankaran 	.base = 0x1000, .len = 0xE4,
346667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
347667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
34825fdd593SJeykumar Sankaran 	},
34925fdd593SJeykumar Sankaran 	{
35025fdd593SJeykumar Sankaran 	.name = "ctl_1", .id = CTL_1,
35125fdd593SJeykumar Sankaran 	.base = 0x1200, .len = 0xE4,
352667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
353667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
35425fdd593SJeykumar Sankaran 	},
35525fdd593SJeykumar Sankaran 	{
35625fdd593SJeykumar Sankaran 	.name = "ctl_2", .id = CTL_2,
35725fdd593SJeykumar Sankaran 	.base = 0x1400, .len = 0xE4,
358667e9985SDmitry Baryshkov 	.features = 0,
359667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
36025fdd593SJeykumar Sankaran 	},
36125fdd593SJeykumar Sankaran 	{
36225fdd593SJeykumar Sankaran 	.name = "ctl_3", .id = CTL_3,
36325fdd593SJeykumar Sankaran 	.base = 0x1600, .len = 0xE4,
364667e9985SDmitry Baryshkov 	.features = 0,
365667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
36625fdd593SJeykumar Sankaran 	},
36725fdd593SJeykumar Sankaran 	{
36825fdd593SJeykumar Sankaran 	.name = "ctl_4", .id = CTL_4,
36925fdd593SJeykumar Sankaran 	.base = 0x1800, .len = 0xE4,
370667e9985SDmitry Baryshkov 	.features = 0,
371667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
37225fdd593SJeykumar Sankaran 	},
37325fdd593SJeykumar Sankaran };
37425fdd593SJeykumar Sankaran 
3757bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = {
3767bdc0c4bSKalyan Thota 	{
3777bdc0c4bSKalyan Thota 	.name = "ctl_0", .id = CTL_0,
3787bdc0c4bSKalyan Thota 	.base = 0x1000, .len = 0xE4,
379667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
380667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
3817bdc0c4bSKalyan Thota 	},
3827bdc0c4bSKalyan Thota 	{
3837bdc0c4bSKalyan Thota 	.name = "ctl_1", .id = CTL_1,
3847bdc0c4bSKalyan Thota 	.base = 0x1200, .len = 0xE4,
385667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
386667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
3877bdc0c4bSKalyan Thota 	},
3887bdc0c4bSKalyan Thota 	{
3897bdc0c4bSKalyan Thota 	.name = "ctl_2", .id = CTL_2,
3907bdc0c4bSKalyan Thota 	.base = 0x1400, .len = 0xE4,
391667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
392667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
3937bdc0c4bSKalyan Thota 	},
3947bdc0c4bSKalyan Thota };
3957bdc0c4bSKalyan Thota 
396386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = {
397386fced3SJonathan Marek 	{
398386fced3SJonathan Marek 	.name = "ctl_0", .id = CTL_0,
399386fced3SJonathan Marek 	.base = 0x1000, .len = 0x1e0,
400667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
401667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
402386fced3SJonathan Marek 	},
403386fced3SJonathan Marek 	{
404386fced3SJonathan Marek 	.name = "ctl_1", .id = CTL_1,
405386fced3SJonathan Marek 	.base = 0x1200, .len = 0x1e0,
406667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
407667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
408386fced3SJonathan Marek 	},
409386fced3SJonathan Marek 	{
410386fced3SJonathan Marek 	.name = "ctl_2", .id = CTL_2,
411386fced3SJonathan Marek 	.base = 0x1400, .len = 0x1e0,
412667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
413667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
414386fced3SJonathan Marek 	},
415386fced3SJonathan Marek 	{
416386fced3SJonathan Marek 	.name = "ctl_3", .id = CTL_3,
417386fced3SJonathan Marek 	.base = 0x1600, .len = 0x1e0,
418667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
419667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
420386fced3SJonathan Marek 	},
421386fced3SJonathan Marek 	{
422386fced3SJonathan Marek 	.name = "ctl_4", .id = CTL_4,
423386fced3SJonathan Marek 	.base = 0x1800, .len = 0x1e0,
424667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
425667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
426386fced3SJonathan Marek 	},
427386fced3SJonathan Marek 	{
428386fced3SJonathan Marek 	.name = "ctl_5", .id = CTL_5,
429386fced3SJonathan Marek 	.base = 0x1a00, .len = 0x1e0,
430667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
431667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
432386fced3SJonathan Marek 	},
433386fced3SJonathan Marek };
434386fced3SJonathan Marek 
435591e34a0SKrishna Manikandan static const struct dpu_ctl_cfg sc7280_ctl[] = {
436591e34a0SKrishna Manikandan 	{
437591e34a0SKrishna Manikandan 	.name = "ctl_0", .id = CTL_0,
438591e34a0SKrishna Manikandan 	.base = 0x15000, .len = 0x1E8,
439667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
440667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
441591e34a0SKrishna Manikandan 	},
442591e34a0SKrishna Manikandan 	{
443591e34a0SKrishna Manikandan 	.name = "ctl_1", .id = CTL_1,
444591e34a0SKrishna Manikandan 	.base = 0x16000, .len = 0x1E8,
445667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
446667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
447591e34a0SKrishna Manikandan 	},
448591e34a0SKrishna Manikandan 	{
449591e34a0SKrishna Manikandan 	.name = "ctl_2", .id = CTL_2,
450591e34a0SKrishna Manikandan 	.base = 0x17000, .len = 0x1E8,
451667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
452667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
453591e34a0SKrishna Manikandan 	},
454591e34a0SKrishna Manikandan 	{
455591e34a0SKrishna Manikandan 	.name = "ctl_3", .id = CTL_3,
456591e34a0SKrishna Manikandan 	.base = 0x18000, .len = 0x1E8,
457667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
458667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
459591e34a0SKrishna Manikandan 	},
460591e34a0SKrishna Manikandan };
461591e34a0SKrishna Manikandan 
46225fdd593SJeykumar Sankaran /*************************************************************
46325fdd593SJeykumar Sankaran  * SSPP sub blocks config
46425fdd593SJeykumar Sankaran  *************************************************************/
46525fdd593SJeykumar Sankaran 
46625fdd593SJeykumar Sankaran /* SSPP common configuration */
46725fdd593SJeykumar Sankaran 
468b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \
46925fdd593SJeykumar Sankaran 	{ \
47025fdd593SJeykumar Sankaran 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
47125fdd593SJeykumar Sankaran 	.maxupscale = MAX_UPSCALE_RATIO, \
47225fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
47325fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
47425fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
47525fdd593SJeykumar Sankaran 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
476b75ab05aSShubhashree Dhar 		.id = qseed_ver, \
47725fdd593SJeykumar Sankaran 		.base = 0xa00, .len = 0xa0,}, \
47825fdd593SJeykumar Sankaran 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
47925fdd593SJeykumar Sankaran 		.id = DPU_SSPP_CSC_10BIT, \
48025fdd593SJeykumar Sankaran 		.base = 0x1a00, .len = 0x100,}, \
48125fdd593SJeykumar Sankaran 	.format_list = plane_formats_yuv, \
482e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
48325fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
484e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
48525fdd593SJeykumar Sankaran 	}
48625fdd593SJeykumar Sankaran 
48725fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \
48825fdd593SJeykumar Sankaran 	{ \
48925fdd593SJeykumar Sankaran 	.maxdwnscale = SSPP_UNITY_SCALE, \
49025fdd593SJeykumar Sankaran 	.maxupscale = SSPP_UNITY_SCALE, \
49125fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
49225fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
49325fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
49425fdd593SJeykumar Sankaran 	.format_list = plane_formats, \
495e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats), \
49625fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
497e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
49825fdd593SJeykumar Sankaran 	}
49925fdd593SJeykumar Sankaran 
500b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 =
501b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3);
502b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 =
503b75ab05aSShubhashree Dhar 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3);
504b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 =
505b75ab05aSShubhashree Dhar 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3);
506b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 =
507b75ab05aSShubhashree Dhar 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3);
50825fdd593SJeykumar Sankaran 
50925fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1);
51025fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2);
51125fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3);
51225fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4);
51325fdd593SJeykumar Sankaran 
51407ca1fc0SSravanthi Kollukuduru #define SSPP_BLK(_name, _id, _base, _features, \
51507ca1fc0SSravanthi Kollukuduru 		_sblk, _xinid, _type, _clkctrl) \
51625fdd593SJeykumar Sankaran 	{ \
51725fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
51825fdd593SJeykumar Sankaran 	.base = _base, .len = 0x1c8, \
51907ca1fc0SSravanthi Kollukuduru 	.features = _features, \
52025fdd593SJeykumar Sankaran 	.sblk = &_sblk, \
52125fdd593SJeykumar Sankaran 	.xin_id = _xinid, \
52207ca1fc0SSravanthi Kollukuduru 	.type = _type, \
52325fdd593SJeykumar Sankaran 	.clk_ctrl = _clkctrl \
52425fdd593SJeykumar Sankaran 	}
52525fdd593SJeykumar Sankaran 
526abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = {
52707ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SDM845_MASK,
52807ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
52907ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SDM845_MASK,
53007ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
53107ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SDM845_MASK,
53207ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
53307ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SDM845_MASK,
53407ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
53507ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
53607ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
53707ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
53807ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
53907ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
54007ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
54107ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
54207ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
54325fdd593SJeykumar Sankaran };
54425fdd593SJeykumar Sankaran 
545b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 =
546b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4);
547b75ab05aSShubhashree Dhar 
5487bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = {
5497bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
550b75ab05aSShubhashree Dhar 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
5517bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
5527bdc0c4bSKalyan Thota 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
5537b149f2bSKalyan Thota 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
5547b149f2bSKalyan Thota 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
5557bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
5567b149f2bSKalyan Thota 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
5577bdc0c4bSKalyan Thota };
5587bdc0c4bSKalyan Thota 
559d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 =
560d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE);
561d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 =
562d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE);
563d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 =
564d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE);
565d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 =
566d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE);
567d21fc5dfSDmitry Baryshkov 
568d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = {
569d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK,
570d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
571d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SM8250_MASK,
572d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
573d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SM8250_MASK,
574d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
575d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SM8250_MASK,
576d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
577d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
578d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
579d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
580d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
581d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
582d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
583d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
584d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
585d21fc5dfSDmitry Baryshkov };
586d21fc5dfSDmitry Baryshkov 
587591e34a0SKrishna Manikandan static const struct dpu_sspp_cfg sc7280_sspp[] = {
588591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
589591e34a0SKrishna Manikandan 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
590591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
591591e34a0SKrishna Manikandan 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
592591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
593591e34a0SKrishna Manikandan 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
594591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
595591e34a0SKrishna Manikandan 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
596591e34a0SKrishna Manikandan };
597591e34a0SKrishna Manikandan 
59825fdd593SJeykumar Sankaran /*************************************************************
59925fdd593SJeykumar Sankaran  * MIXER sub blocks config
60025fdd593SJeykumar Sankaran  *************************************************************/
6017bdc0c4bSKalyan Thota 
6027bdc0c4bSKalyan Thota /* SDM845 */
6037bdc0c4bSKalyan Thota 
60425fdd593SJeykumar Sankaran static const struct dpu_lm_sub_blks sdm845_lm_sblk = {
60525fdd593SJeykumar Sankaran 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
60625fdd593SJeykumar Sankaran 	.maxblendstages = 11, /* excluding base layer */
60725fdd593SJeykumar Sankaran 	.blendstage_base = { /* offsets relative to mixer base */
60825fdd593SJeykumar Sankaran 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98,
60925fdd593SJeykumar Sankaran 		0xb0, 0xc8, 0xe0, 0xf8, 0x110
61025fdd593SJeykumar Sankaran 	},
61125fdd593SJeykumar Sankaran };
61225fdd593SJeykumar Sankaran 
613e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \
61425fdd593SJeykumar Sankaran 	{ \
61525fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
61625fdd593SJeykumar Sankaran 	.base = _base, .len = 0x320, \
6177bdc0c4bSKalyan Thota 	.features = _fmask, \
6187bdc0c4bSKalyan Thota 	.sblk = _sblk, \
61925fdd593SJeykumar Sankaran 	.pingpong = _pp, \
620e47616dfSKalyan Thota 	.lm_pair_mask = (1 << _lmpair), \
621e47616dfSKalyan Thota 	.dspp = _dspp \
62225fdd593SJeykumar Sankaran 	}
62325fdd593SJeykumar Sankaran 
624abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = {
6257bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
626e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_0, LM_1, 0),
6277bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
628e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_1, LM_0, 0),
6297bdc0c4bSKalyan Thota 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
630e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_2, LM_5, 0),
6317bdc0c4bSKalyan Thota 	LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK,
632e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
6337bdc0c4bSKalyan Thota 	LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK,
634e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
6357bdc0c4bSKalyan Thota 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
636e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
6377bdc0c4bSKalyan Thota };
6387bdc0c4bSKalyan Thota 
6397bdc0c4bSKalyan Thota /* SC7180 */
6407bdc0c4bSKalyan Thota 
6417bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = {
6427bdc0c4bSKalyan Thota 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
6437bdc0c4bSKalyan Thota 	.maxblendstages = 7, /* excluding base layer */
6447bdc0c4bSKalyan Thota 	.blendstage_base = { /* offsets relative to mixer base */
6457bdc0c4bSKalyan Thota 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0
6467bdc0c4bSKalyan Thota 	},
6477bdc0c4bSKalyan Thota };
6487bdc0c4bSKalyan Thota 
6497bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = {
6507bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
651e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
6527bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SC7180_MASK,
653e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_1, LM_0, 0),
65425fdd593SJeykumar Sankaran };
65525fdd593SJeykumar Sankaran 
656386fced3SJonathan Marek /* SM8150 */
657386fced3SJonathan Marek 
658386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = {
659386fced3SJonathan Marek 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
66005ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
661386fced3SJonathan Marek 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
66205ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1),
663386fced3SJonathan Marek 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
664386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_2, LM_3, 0),
665386fced3SJonathan Marek 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK,
666386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
667386fced3SJonathan Marek 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK,
668386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_4, LM_5, 0),
669386fced3SJonathan Marek 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
670386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_5, LM_4, 0),
671386fced3SJonathan Marek };
672386fced3SJonathan Marek 
673591e34a0SKrishna Manikandan static const struct dpu_lm_cfg sc7280_lm[] = {
674591e34a0SKrishna Manikandan 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
675591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_0, 0, 0),
676591e34a0SKrishna Manikandan 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SC7180_MASK,
677591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_2, LM_3, 0),
678591e34a0SKrishna Manikandan 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SC7180_MASK,
679591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_3, LM_2, 0),
680591e34a0SKrishna Manikandan };
681591e34a0SKrishna Manikandan 
68225fdd593SJeykumar Sankaran /*************************************************************
683e47616dfSKalyan Thota  * DSPP sub blocks config
684e47616dfSKalyan Thota  *************************************************************/
6854259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
6864259ff7aSKalyan Thota 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
6874259ff7aSKalyan Thota 		.len = 0x90, .version = 0x10000},
6884259ff7aSKalyan Thota };
6894259ff7aSKalyan Thota 
69005ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = {
69105ae91d9SDmitry Baryshkov 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
69205ae91d9SDmitry Baryshkov 		.len = 0x90, .version = 0x40000},
69305ae91d9SDmitry Baryshkov };
69405ae91d9SDmitry Baryshkov 
695862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \
696e47616dfSKalyan Thota 		{\
697e47616dfSKalyan Thota 		.name = _name, .id = _id, \
698e47616dfSKalyan Thota 		.base = _base, .len = 0x1800, \
699862314bcSAngeloGioacchino Del Regno 		.features = _mask, \
70005ae91d9SDmitry Baryshkov 		.sblk = _sblk \
701e47616dfSKalyan Thota 		}
702e47616dfSKalyan Thota 
703e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = {
704862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
705862314bcSAngeloGioacchino Del Regno 		 &sc7180_dspp_sblk),
70605ae91d9SDmitry Baryshkov };
70705ae91d9SDmitry Baryshkov 
70805ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = {
709862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
710862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
711862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
712862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
713862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK,
714862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
715862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK,
716862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
717e47616dfSKalyan Thota };
718386fced3SJonathan Marek 
719e47616dfSKalyan Thota /*************************************************************
72025fdd593SJeykumar Sankaran  * PINGPONG sub blocks config
72125fdd593SJeykumar Sankaran  *************************************************************/
72225fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = {
72325fdd593SJeykumar Sankaran 	.te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0,
72425fdd593SJeykumar Sankaran 		.version = 0x1},
72525fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
72625fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
72725fdd593SJeykumar Sankaran };
72825fdd593SJeykumar Sankaran 
72925fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = {
73025fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
73125fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
73225fdd593SJeykumar Sankaran };
73325fdd593SJeykumar Sankaran 
734591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
735591e34a0SKrishna Manikandan 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0,
736591e34a0SKrishna Manikandan 	.len = 0x20, .version = 0x20000},
737591e34a0SKrishna Manikandan };
738591e34a0SKrishna Manikandan 
739667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
74025fdd593SJeykumar Sankaran 	{\
74125fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
74225fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
74325fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_SPLIT_MASK, \
7444369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
745667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
746667e9985SDmitry Baryshkov 	.intr_done = _done, \
747667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
74825fdd593SJeykumar Sankaran 	}
749667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
75025fdd593SJeykumar Sankaran 	{\
75125fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
75225fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
75325fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_MASK, \
7544369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
755667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
756667e9985SDmitry Baryshkov 	.intr_done = _done, \
757667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
75825fdd593SJeykumar Sankaran 	}
75925fdd593SJeykumar Sankaran 
760abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = {
761667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te,
762667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
763667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
764667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te,
765667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
766667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
767667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk,
768667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
769667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
770667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk,
771667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
772667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
77325fdd593SJeykumar Sankaran };
77425fdd593SJeykumar Sankaran 
7757bdc0c4bSKalyan Thota static struct dpu_pingpong_cfg sc7180_pp[] = {
776667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1),
777667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1),
7787bdc0c4bSKalyan Thota };
7797bdc0c4bSKalyan Thota 
780386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = {
781667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te,
782667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
783667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
784667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te,
785667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
786667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
787667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk,
788667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
789667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
790667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk,
791667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
792667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
793667e9985SDmitry Baryshkov 	PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk,
794667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
795667e9985SDmitry Baryshkov 			-1),
796667e9985SDmitry Baryshkov 	PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk,
7973431c17bSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
798667e9985SDmitry Baryshkov 			-1),
7994369c93cSDmitry Baryshkov };
8004369c93cSDmitry Baryshkov 
8014369c93cSDmitry Baryshkov /*************************************************************
8024369c93cSDmitry Baryshkov  * MERGE_3D sub blocks config
8034369c93cSDmitry Baryshkov  *************************************************************/
8044369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \
8054369c93cSDmitry Baryshkov 	{\
8064369c93cSDmitry Baryshkov 	.name = _name, .id = _id, \
8074369c93cSDmitry Baryshkov 	.base = _base, .len = 0x100, \
8084369c93cSDmitry Baryshkov 	.features = MERGE_3D_SM8150_MASK, \
8094369c93cSDmitry Baryshkov 	.sblk = NULL \
8104369c93cSDmitry Baryshkov 	}
8114369c93cSDmitry Baryshkov 
8124369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = {
8134369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000),
8144369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100),
8154369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200),
816386fced3SJonathan Marek };
817386fced3SJonathan Marek 
818591e34a0SKrishna Manikandan static const struct dpu_pingpong_cfg sc7280_pp[] = {
819667e9985SDmitry Baryshkov 	PP_BLK("pingpong_0", PINGPONG_0, 0x59000, 0, sc7280_pp_sblk, -1, -1),
820667e9985SDmitry Baryshkov 	PP_BLK("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1),
821667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1),
822667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1),
823591e34a0SKrishna Manikandan };
82425fdd593SJeykumar Sankaran /*************************************************************
82525fdd593SJeykumar Sankaran  * INTF sub blocks config
82625fdd593SJeykumar Sankaran  *************************************************************/
827667e9985SDmitry Baryshkov #define INTF_BLK(_name, _id, _base, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \
82825fdd593SJeykumar Sankaran 	{\
82925fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
83025fdd593SJeykumar Sankaran 	.base = _base, .len = 0x280, \
831cace3ac4SJonathan Marek 	.features = _features, \
83225fdd593SJeykumar Sankaran 	.type = _type, \
83325fdd593SJeykumar Sankaran 	.controller_id = _ctrl_id, \
834667e9985SDmitry Baryshkov 	.prog_fetch_lines_worst_case = _progfetch, \
835667e9985SDmitry Baryshkov 	.intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \
836667e9985SDmitry Baryshkov 	.intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \
83725fdd593SJeykumar Sankaran 	}
83825fdd593SJeykumar Sankaran 
839abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = {
840667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
841667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
842667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
843667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
84425fdd593SJeykumar Sankaran };
84525fdd593SJeykumar Sankaran 
8467bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = {
847*bb3de286SBjorn Andersson 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
848667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
8497bdc0c4bSKalyan Thota };
8507bdc0c4bSKalyan Thota 
851386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = {
852667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
853667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
854667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
855667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
856386fced3SJonathan Marek };
857386fced3SJonathan Marek 
858591e34a0SKrishna Manikandan static const struct dpu_intf_cfg sc7280_intf[] = {
859667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
860667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
861667e9985SDmitry Baryshkov 	INTF_BLK("intf_5", INTF_5, 0x39000, INTF_EDP, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
862591e34a0SKrishna Manikandan };
863591e34a0SKrishna Manikandan 
86425fdd593SJeykumar Sankaran /*************************************************************
86525fdd593SJeykumar Sankaran  * VBIF sub blocks config
86625fdd593SJeykumar Sankaran  *************************************************************/
86725fdd593SJeykumar Sankaran /* VBIF QOS remap */
868abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6};
869abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3};
87025fdd593SJeykumar Sankaran 
871abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = {
87225fdd593SJeykumar Sankaran 	{
87325fdd593SJeykumar Sankaran 	.name = "vbif_0", .id = VBIF_0,
87425fdd593SJeykumar Sankaran 	.base = 0, .len = 0x1040,
87525fdd593SJeykumar Sankaran 	.features = BIT(DPU_VBIF_QOS_REMAP),
87625fdd593SJeykumar Sankaran 	.xin_halt_timeout = 0x4000,
87725fdd593SJeykumar Sankaran 	.qos_rt_tbl = {
87825fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
87925fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_rt_pri_lvl,
88025fdd593SJeykumar Sankaran 		},
88125fdd593SJeykumar Sankaran 	.qos_nrt_tbl = {
88225fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
88325fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_nrt_pri_lvl,
88425fdd593SJeykumar Sankaran 		},
88525fdd593SJeykumar Sankaran 	.memtype_count = 14,
88625fdd593SJeykumar Sankaran 	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
88725fdd593SJeykumar Sankaran 	},
88825fdd593SJeykumar Sankaran };
88925fdd593SJeykumar Sankaran 
890abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = {
89125fdd593SJeykumar Sankaran 	.base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c
89225fdd593SJeykumar Sankaran };
89325fdd593SJeykumar Sankaran 
894386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = {
895386fced3SJonathan Marek 	.base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c
896386fced3SJonathan Marek };
897386fced3SJonathan Marek 
898af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = {
899af776a3eSJonathan Marek 	.base = 0x0,
900af776a3eSJonathan Marek 	.version = 0x00010002,
901af776a3eSJonathan Marek 	.trigger_sel_off = 0x119c,
902af776a3eSJonathan Marek 	.xin_id = 7,
903af776a3eSJonathan Marek 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
904af776a3eSJonathan Marek };
905af776a3eSJonathan Marek 
90625fdd593SJeykumar Sankaran /*************************************************************
90725fdd593SJeykumar Sankaran  * PERF data config
90825fdd593SJeykumar Sankaran  *************************************************************/
90925fdd593SJeykumar Sankaran 
91025fdd593SJeykumar Sankaran /* SSPP QOS LUTs */
911abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = {
91225fdd593SJeykumar Sankaran 	{.fl = 4, .lut = 0x357},
91325fdd593SJeykumar Sankaran 	{.fl = 5, .lut = 0x3357},
91425fdd593SJeykumar Sankaran 	{.fl = 6, .lut = 0x23357},
91525fdd593SJeykumar Sankaran 	{.fl = 7, .lut = 0x223357},
91625fdd593SJeykumar Sankaran 	{.fl = 8, .lut = 0x2223357},
91725fdd593SJeykumar Sankaran 	{.fl = 9, .lut = 0x22223357},
91825fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x222223357},
91925fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x2222223357},
92025fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x22222223357},
92125fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x222222223357},
92225fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1222222223357},
92325fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x11222222223357}
92425fdd593SJeykumar Sankaran };
92525fdd593SJeykumar Sankaran 
9267bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
9277bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011222222335777},
9287bdc0c4bSKalyan Thota };
9297bdc0c4bSKalyan Thota 
930386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = {
931386fced3SJonathan Marek 	{.fl = 0, .lut = 0x0011222222223357 },
932386fced3SJonathan Marek };
933386fced3SJonathan Marek 
934abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = {
93525fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x344556677},
93625fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x3344556677},
93725fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x23344556677},
93825fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x223344556677},
93925fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1223344556677},
94025fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x112233344556677},
94125fdd593SJeykumar Sankaran };
94225fdd593SJeykumar Sankaran 
9437bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
9447bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011223344556677},
9457bdc0c4bSKalyan Thota };
9467bdc0c4bSKalyan Thota 
947abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = {
94825fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x0},
94925fdd593SJeykumar Sankaran };
95025fdd593SJeykumar Sankaran 
9517bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
9527bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0},
9537bdc0c4bSKalyan Thota };
9547bdc0c4bSKalyan Thota 
955abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = {
95625fdd593SJeykumar Sankaran 	.max_bw_low = 6800000,
95725fdd593SJeykumar Sankaran 	.max_bw_high = 6800000,
95825fdd593SJeykumar Sankaran 	.min_core_ib = 2400000,
95925fdd593SJeykumar Sankaran 	.min_llcc_ib = 800000,
96025fdd593SJeykumar Sankaran 	.min_dram_ib = 800000,
96125fdd593SJeykumar Sankaran 	.undersized_prefill_lines = 2,
96225fdd593SJeykumar Sankaran 	.xtra_prefill_lines = 2,
96325fdd593SJeykumar Sankaran 	.dest_scale_prefill_lines = 3,
96425fdd593SJeykumar Sankaran 	.macrotile_prefill_lines = 4,
96525fdd593SJeykumar Sankaran 	.yuv_nv12_prefill_lines = 8,
96625fdd593SJeykumar Sankaran 	.linear_prefill_lines = 1,
96725fdd593SJeykumar Sankaran 	.downscaling_prefill_lines = 1,
96825fdd593SJeykumar Sankaran 	.amortizable_threshold = 25,
96925fdd593SJeykumar Sankaran 	.min_prefill_lines = 24,
97025fdd593SJeykumar Sankaran 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
9715bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xf000, 0xffff},
97225fdd593SJeykumar Sankaran 	.qos_lut_tbl = {
97325fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_linear),
97425fdd593SJeykumar Sankaran 		.entries = sdm845_qos_linear
97525fdd593SJeykumar Sankaran 		},
97625fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_macrotile),
97725fdd593SJeykumar Sankaran 		.entries = sdm845_qos_macrotile
97825fdd593SJeykumar Sankaran 		},
97925fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_nrt),
98025fdd593SJeykumar Sankaran 		.entries = sdm845_qos_nrt
98125fdd593SJeykumar Sankaran 		},
98225fdd593SJeykumar Sankaran 	},
98325fdd593SJeykumar Sankaran 	.cdp_cfg = {
98425fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 1},
98525fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 0}
98625fdd593SJeykumar Sankaran 	},
9874f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
9884f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
98925fdd593SJeykumar Sankaran };
99025fdd593SJeykumar Sankaran 
9917bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = {
99271dc6c08SKrishna Manikandan 	.max_bw_low = 6800000,
99371dc6c08SKrishna Manikandan 	.max_bw_high = 6800000,
9947bdc0c4bSKalyan Thota 	.min_core_ib = 2400000,
9957bdc0c4bSKalyan Thota 	.min_llcc_ib = 800000,
996c33b7c03SKalyan Thota 	.min_dram_ib = 1600000,
997c33b7c03SKalyan Thota 	.min_prefill_lines = 24,
9987bdc0c4bSKalyan Thota 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
9995bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
10007bdc0c4bSKalyan Thota 	.qos_lut_tbl = {
10017bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
10027bdc0c4bSKalyan Thota 		.entries = sc7180_qos_linear
10037bdc0c4bSKalyan Thota 		},
10047bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
10057bdc0c4bSKalyan Thota 		.entries = sc7180_qos_macrotile
10067bdc0c4bSKalyan Thota 		},
10077bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
10087bdc0c4bSKalyan Thota 		.entries = sc7180_qos_nrt
10097bdc0c4bSKalyan Thota 		},
10107bdc0c4bSKalyan Thota 	},
10117bdc0c4bSKalyan Thota 	.cdp_cfg = {
10127bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 1},
10137bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 0}
10147bdc0c4bSKalyan Thota 	},
1015c33b7c03SKalyan Thota 	.clk_inefficiency_factor = 105,
1016c33b7c03SKalyan Thota 	.bw_inefficiency_factor = 120,
10177bdc0c4bSKalyan Thota };
10187bdc0c4bSKalyan Thota 
1019386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = {
1020386fced3SJonathan Marek 	.max_bw_low = 12800000,
1021386fced3SJonathan Marek 	.max_bw_high = 12800000,
1022386fced3SJonathan Marek 	.min_core_ib = 2400000,
1023386fced3SJonathan Marek 	.min_llcc_ib = 800000,
1024386fced3SJonathan Marek 	.min_dram_ib = 800000,
10254f2c9838SDmitry Baryshkov 	.min_prefill_lines = 24,
1026386fced3SJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
10275bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff8, 0xf000, 0xffff},
1028386fced3SJonathan Marek 	.qos_lut_tbl = {
1029386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sm8150_qos_linear),
1030386fced3SJonathan Marek 		.entries = sm8150_qos_linear
1031386fced3SJonathan Marek 		},
1032386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1033386fced3SJonathan Marek 		.entries = sc7180_qos_macrotile
1034386fced3SJonathan Marek 		},
1035386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1036386fced3SJonathan Marek 		.entries = sc7180_qos_nrt
1037386fced3SJonathan Marek 		},
1038386fced3SJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1039386fced3SJonathan Marek 	},
1040386fced3SJonathan Marek 	.cdp_cfg = {
1041386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1042386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1043386fced3SJonathan Marek 	},
10444f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
10454f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1046386fced3SJonathan Marek };
1047386fced3SJonathan Marek 
1048af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = {
1049af776a3eSJonathan Marek 	.max_bw_low = 13700000,
1050af776a3eSJonathan Marek 	.max_bw_high = 16600000,
1051af776a3eSJonathan Marek 	.min_core_ib = 4800000,
1052af776a3eSJonathan Marek 	.min_llcc_ib = 0,
1053af776a3eSJonathan Marek 	.min_dram_ib = 800000,
10544f2c9838SDmitry Baryshkov 	.min_prefill_lines = 35,
1055af776a3eSJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
10565bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
1057af776a3eSJonathan Marek 	.qos_lut_tbl = {
1058af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
1059af776a3eSJonathan Marek 		.entries = sc7180_qos_linear
1060af776a3eSJonathan Marek 		},
1061af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1062af776a3eSJonathan Marek 		.entries = sc7180_qos_macrotile
1063af776a3eSJonathan Marek 		},
1064af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1065af776a3eSJonathan Marek 		.entries = sc7180_qos_nrt
1066af776a3eSJonathan Marek 		},
1067af776a3eSJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1068af776a3eSJonathan Marek 	},
1069af776a3eSJonathan Marek 	.cdp_cfg = {
1070af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1071af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1072af776a3eSJonathan Marek 	},
10734f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
10744f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1075af776a3eSJonathan Marek };
1076af776a3eSJonathan Marek 
1077591e34a0SKrishna Manikandan static const struct dpu_perf_cfg sc7280_perf_data = {
1078591e34a0SKrishna Manikandan 	.max_bw_low = 4700000,
1079591e34a0SKrishna Manikandan 	.max_bw_high = 8800000,
1080591e34a0SKrishna Manikandan 	.min_core_ib = 2500000,
1081591e34a0SKrishna Manikandan 	.min_llcc_ib = 0,
1082591e34a0SKrishna Manikandan 	.min_dram_ib = 1600000,
1083591e34a0SKrishna Manikandan 	.min_prefill_lines = 24,
1084591e34a0SKrishna Manikandan 	.danger_lut_tbl = {0xffff, 0xffff, 0x0},
10855bccb945SKalyan Thota 	.safe_lut_tbl = {0xff00, 0xff00, 0xffff},
1086591e34a0SKrishna Manikandan 	.qos_lut_tbl = {
1087591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1088591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
1089591e34a0SKrishna Manikandan 		},
1090591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1091591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
1092591e34a0SKrishna Manikandan 		},
1093591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1094591e34a0SKrishna Manikandan 		.entries = sc7180_qos_nrt
1095591e34a0SKrishna Manikandan 		},
1096591e34a0SKrishna Manikandan 	},
1097591e34a0SKrishna Manikandan 	.cdp_cfg = {
1098591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 1},
1099591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 0}
1100591e34a0SKrishna Manikandan 	},
1101591e34a0SKrishna Manikandan 	.clk_inefficiency_factor = 105,
1102591e34a0SKrishna Manikandan 	.bw_inefficiency_factor = 120,
1103591e34a0SKrishna Manikandan };
1104591e34a0SKrishna Manikandan 
110525fdd593SJeykumar Sankaran /*************************************************************
110625fdd593SJeykumar Sankaran  * Hardware catalog init
110725fdd593SJeykumar Sankaran  *************************************************************/
110825fdd593SJeykumar Sankaran 
110925fdd593SJeykumar Sankaran /*
111025fdd593SJeykumar Sankaran  * sdm845_cfg_init(): populate sdm845 dpu sub-blocks reg offsets
111125fdd593SJeykumar Sankaran  * and instance counts.
111225fdd593SJeykumar Sankaran  */
1113fba33caeSJordan Crouse static void sdm845_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
111425fdd593SJeykumar Sankaran {
111525fdd593SJeykumar Sankaran 	*dpu_cfg = (struct dpu_mdss_cfg){
111625fdd593SJeykumar Sankaran 		.caps = &sdm845_dpu_caps,
111725fdd593SJeykumar Sankaran 		.mdp_count = ARRAY_SIZE(sdm845_mdp),
111825fdd593SJeykumar Sankaran 		.mdp = sdm845_mdp,
111925fdd593SJeykumar Sankaran 		.ctl_count = ARRAY_SIZE(sdm845_ctl),
112025fdd593SJeykumar Sankaran 		.ctl = sdm845_ctl,
112125fdd593SJeykumar Sankaran 		.sspp_count = ARRAY_SIZE(sdm845_sspp),
112225fdd593SJeykumar Sankaran 		.sspp = sdm845_sspp,
112325fdd593SJeykumar Sankaran 		.mixer_count = ARRAY_SIZE(sdm845_lm),
112425fdd593SJeykumar Sankaran 		.mixer = sdm845_lm,
112525fdd593SJeykumar Sankaran 		.pingpong_count = ARRAY_SIZE(sdm845_pp),
112625fdd593SJeykumar Sankaran 		.pingpong = sdm845_pp,
112725fdd593SJeykumar Sankaran 		.intf_count = ARRAY_SIZE(sdm845_intf),
112825fdd593SJeykumar Sankaran 		.intf = sdm845_intf,
112925fdd593SJeykumar Sankaran 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
113025fdd593SJeykumar Sankaran 		.vbif = sdm845_vbif,
113125fdd593SJeykumar Sankaran 		.reg_dma_count = 1,
113225fdd593SJeykumar Sankaran 		.dma_cfg = sdm845_regdma,
113325fdd593SJeykumar Sankaran 		.perf = sdm845_perf_data,
1134597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SDM845_MASK,
113525fdd593SJeykumar Sankaran 	};
113625fdd593SJeykumar Sankaran }
113725fdd593SJeykumar Sankaran 
11387bdc0c4bSKalyan Thota /*
11397bdc0c4bSKalyan Thota  * sc7180_cfg_init(): populate sc7180 dpu sub-blocks reg offsets
11407bdc0c4bSKalyan Thota  * and instance counts.
11417bdc0c4bSKalyan Thota  */
11427bdc0c4bSKalyan Thota static void sc7180_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
11437bdc0c4bSKalyan Thota {
11447bdc0c4bSKalyan Thota 	*dpu_cfg = (struct dpu_mdss_cfg){
11457bdc0c4bSKalyan Thota 		.caps = &sc7180_dpu_caps,
11467bdc0c4bSKalyan Thota 		.mdp_count = ARRAY_SIZE(sc7180_mdp),
11477bdc0c4bSKalyan Thota 		.mdp = sc7180_mdp,
11487bdc0c4bSKalyan Thota 		.ctl_count = ARRAY_SIZE(sc7180_ctl),
11497bdc0c4bSKalyan Thota 		.ctl = sc7180_ctl,
11507bdc0c4bSKalyan Thota 		.sspp_count = ARRAY_SIZE(sc7180_sspp),
11517bdc0c4bSKalyan Thota 		.sspp = sc7180_sspp,
11527bdc0c4bSKalyan Thota 		.mixer_count = ARRAY_SIZE(sc7180_lm),
11537bdc0c4bSKalyan Thota 		.mixer = sc7180_lm,
1154e47616dfSKalyan Thota 		.dspp_count = ARRAY_SIZE(sc7180_dspp),
1155e47616dfSKalyan Thota 		.dspp = sc7180_dspp,
11567bdc0c4bSKalyan Thota 		.pingpong_count = ARRAY_SIZE(sc7180_pp),
11577bdc0c4bSKalyan Thota 		.pingpong = sc7180_pp,
11587bdc0c4bSKalyan Thota 		.intf_count = ARRAY_SIZE(sc7180_intf),
11597bdc0c4bSKalyan Thota 		.intf = sc7180_intf,
11607bdc0c4bSKalyan Thota 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
11617bdc0c4bSKalyan Thota 		.vbif = sdm845_vbif,
11627bdc0c4bSKalyan Thota 		.reg_dma_count = 1,
11637bdc0c4bSKalyan Thota 		.dma_cfg = sdm845_regdma,
11647bdc0c4bSKalyan Thota 		.perf = sc7180_perf_data,
1165597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SC7180_MASK,
11667bdc0c4bSKalyan Thota 	};
11677bdc0c4bSKalyan Thota }
11687bdc0c4bSKalyan Thota 
1169386fced3SJonathan Marek /*
1170386fced3SJonathan Marek  * sm8150_cfg_init(): populate sm8150 dpu sub-blocks reg offsets
1171386fced3SJonathan Marek  * and instance counts.
1172386fced3SJonathan Marek  */
1173386fced3SJonathan Marek static void sm8150_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1174386fced3SJonathan Marek {
1175386fced3SJonathan Marek 	*dpu_cfg = (struct dpu_mdss_cfg){
1176386fced3SJonathan Marek 		.caps = &sm8150_dpu_caps,
1177386fced3SJonathan Marek 		.mdp_count = ARRAY_SIZE(sdm845_mdp),
1178386fced3SJonathan Marek 		.mdp = sdm845_mdp,
1179386fced3SJonathan Marek 		.ctl_count = ARRAY_SIZE(sm8150_ctl),
1180386fced3SJonathan Marek 		.ctl = sm8150_ctl,
1181386fced3SJonathan Marek 		.sspp_count = ARRAY_SIZE(sdm845_sspp),
1182386fced3SJonathan Marek 		.sspp = sdm845_sspp,
1183386fced3SJonathan Marek 		.mixer_count = ARRAY_SIZE(sm8150_lm),
1184386fced3SJonathan Marek 		.mixer = sm8150_lm,
118505ae91d9SDmitry Baryshkov 		.dspp_count = ARRAY_SIZE(sm8150_dspp),
118605ae91d9SDmitry Baryshkov 		.dspp = sm8150_dspp,
1187386fced3SJonathan Marek 		.pingpong_count = ARRAY_SIZE(sm8150_pp),
1188386fced3SJonathan Marek 		.pingpong = sm8150_pp,
11894369c93cSDmitry Baryshkov 		.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
11904369c93cSDmitry Baryshkov 		.merge_3d = sm8150_merge_3d,
1191386fced3SJonathan Marek 		.intf_count = ARRAY_SIZE(sm8150_intf),
1192386fced3SJonathan Marek 		.intf = sm8150_intf,
1193386fced3SJonathan Marek 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1194386fced3SJonathan Marek 		.vbif = sdm845_vbif,
1195386fced3SJonathan Marek 		.reg_dma_count = 1,
1196386fced3SJonathan Marek 		.dma_cfg = sm8150_regdma,
1197386fced3SJonathan Marek 		.perf = sm8150_perf_data,
1198597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SDM845_MASK,
1199386fced3SJonathan Marek 	};
1200386fced3SJonathan Marek }
1201386fced3SJonathan Marek 
1202af776a3eSJonathan Marek /*
1203af776a3eSJonathan Marek  * sm8250_cfg_init(): populate sm8250 dpu sub-blocks reg offsets
1204af776a3eSJonathan Marek  * and instance counts.
1205af776a3eSJonathan Marek  */
1206af776a3eSJonathan Marek static void sm8250_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1207af776a3eSJonathan Marek {
1208af776a3eSJonathan Marek 	*dpu_cfg = (struct dpu_mdss_cfg){
1209af776a3eSJonathan Marek 		.caps = &sm8250_dpu_caps,
1210af776a3eSJonathan Marek 		.mdp_count = ARRAY_SIZE(sm8250_mdp),
1211af776a3eSJonathan Marek 		.mdp = sm8250_mdp,
1212af776a3eSJonathan Marek 		.ctl_count = ARRAY_SIZE(sm8150_ctl),
1213af776a3eSJonathan Marek 		.ctl = sm8150_ctl,
1214d21fc5dfSDmitry Baryshkov 		.sspp_count = ARRAY_SIZE(sm8250_sspp),
1215d21fc5dfSDmitry Baryshkov 		.sspp = sm8250_sspp,
1216af776a3eSJonathan Marek 		.mixer_count = ARRAY_SIZE(sm8150_lm),
1217af776a3eSJonathan Marek 		.mixer = sm8150_lm,
121805ae91d9SDmitry Baryshkov 		.dspp_count = ARRAY_SIZE(sm8150_dspp),
121905ae91d9SDmitry Baryshkov 		.dspp = sm8150_dspp,
1220af776a3eSJonathan Marek 		.pingpong_count = ARRAY_SIZE(sm8150_pp),
1221af776a3eSJonathan Marek 		.pingpong = sm8150_pp,
12224369c93cSDmitry Baryshkov 		.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
12234369c93cSDmitry Baryshkov 		.merge_3d = sm8150_merge_3d,
1224af776a3eSJonathan Marek 		.intf_count = ARRAY_SIZE(sm8150_intf),
1225af776a3eSJonathan Marek 		.intf = sm8150_intf,
1226af776a3eSJonathan Marek 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1227af776a3eSJonathan Marek 		.vbif = sdm845_vbif,
1228af776a3eSJonathan Marek 		.reg_dma_count = 1,
1229af776a3eSJonathan Marek 		.dma_cfg = sm8250_regdma,
1230af776a3eSJonathan Marek 		.perf = sm8250_perf_data,
1231597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SM8250_MASK,
1232af776a3eSJonathan Marek 	};
1233af776a3eSJonathan Marek }
1234af776a3eSJonathan Marek 
1235591e34a0SKrishna Manikandan static void sc7280_cfg_init(struct dpu_mdss_cfg *dpu_cfg)
1236591e34a0SKrishna Manikandan {
1237591e34a0SKrishna Manikandan 	*dpu_cfg = (struct dpu_mdss_cfg){
1238591e34a0SKrishna Manikandan 		.caps = &sc7280_dpu_caps,
1239591e34a0SKrishna Manikandan 		.mdp_count = ARRAY_SIZE(sc7280_mdp),
1240591e34a0SKrishna Manikandan 		.mdp = sc7280_mdp,
1241591e34a0SKrishna Manikandan 		.ctl_count = ARRAY_SIZE(sc7280_ctl),
1242591e34a0SKrishna Manikandan 		.ctl = sc7280_ctl,
1243591e34a0SKrishna Manikandan 		.sspp_count = ARRAY_SIZE(sc7280_sspp),
1244591e34a0SKrishna Manikandan 		.sspp = sc7280_sspp,
1245591e34a0SKrishna Manikandan 		.mixer_count = ARRAY_SIZE(sc7280_lm),
1246591e34a0SKrishna Manikandan 		.mixer = sc7280_lm,
1247591e34a0SKrishna Manikandan 		.pingpong_count = ARRAY_SIZE(sc7280_pp),
1248591e34a0SKrishna Manikandan 		.pingpong = sc7280_pp,
1249591e34a0SKrishna Manikandan 		.intf_count = ARRAY_SIZE(sc7280_intf),
1250591e34a0SKrishna Manikandan 		.intf = sc7280_intf,
1251591e34a0SKrishna Manikandan 		.vbif_count = ARRAY_SIZE(sdm845_vbif),
1252591e34a0SKrishna Manikandan 		.vbif = sdm845_vbif,
1253591e34a0SKrishna Manikandan 		.perf = sc7280_perf_data,
1254597762d5SDmitry Baryshkov 		.mdss_irqs = IRQ_SC7280_MASK,
1255591e34a0SKrishna Manikandan 	};
1256591e34a0SKrishna Manikandan }
1257591e34a0SKrishna Manikandan 
1258abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = {
125925fdd593SJeykumar Sankaran 	{ .hw_rev = DPU_HW_VER_400, .cfg_init = sdm845_cfg_init},
126025fdd593SJeykumar Sankaran 	{ .hw_rev = DPU_HW_VER_401, .cfg_init = sdm845_cfg_init},
1261386fced3SJonathan Marek 	{ .hw_rev = DPU_HW_VER_500, .cfg_init = sm8150_cfg_init},
1262386fced3SJonathan Marek 	{ .hw_rev = DPU_HW_VER_501, .cfg_init = sm8150_cfg_init},
1263af776a3eSJonathan Marek 	{ .hw_rev = DPU_HW_VER_600, .cfg_init = sm8250_cfg_init},
12647bdc0c4bSKalyan Thota 	{ .hw_rev = DPU_HW_VER_620, .cfg_init = sc7180_cfg_init},
1265591e34a0SKrishna Manikandan 	{ .hw_rev = DPU_HW_VER_720, .cfg_init = sc7280_cfg_init},
126625fdd593SJeykumar Sankaran };
126725fdd593SJeykumar Sankaran 
126825fdd593SJeykumar Sankaran void dpu_hw_catalog_deinit(struct dpu_mdss_cfg *dpu_cfg)
126925fdd593SJeykumar Sankaran {
127025fdd593SJeykumar Sankaran 	kfree(dpu_cfg);
127125fdd593SJeykumar Sankaran }
127225fdd593SJeykumar Sankaran 
127325fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev)
127425fdd593SJeykumar Sankaran {
127525fdd593SJeykumar Sankaran 	int i;
127625fdd593SJeykumar Sankaran 	struct dpu_mdss_cfg *dpu_cfg;
127725fdd593SJeykumar Sankaran 
127825fdd593SJeykumar Sankaran 	dpu_cfg = kzalloc(sizeof(*dpu_cfg), GFP_KERNEL);
127925fdd593SJeykumar Sankaran 	if (!dpu_cfg)
128025fdd593SJeykumar Sankaran 		return ERR_PTR(-ENOMEM);
128125fdd593SJeykumar Sankaran 
128225fdd593SJeykumar Sankaran 	for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) {
128325fdd593SJeykumar Sankaran 		if (cfg_handler[i].hw_rev == hw_rev) {
128425fdd593SJeykumar Sankaran 			cfg_handler[i].cfg_init(dpu_cfg);
128525fdd593SJeykumar Sankaran 			dpu_cfg->hwversion = hw_rev;
128625fdd593SJeykumar Sankaran 			return dpu_cfg;
128725fdd593SJeykumar Sankaran 		}
128825fdd593SJeykumar Sankaran 	}
128925fdd593SJeykumar Sankaran 
129025fdd593SJeykumar Sankaran 	DPU_ERROR("unsupported chipset id:%X\n", hw_rev);
129125fdd593SJeykumar Sankaran 	dpu_hw_catalog_deinit(dpu_cfg);
129225fdd593SJeykumar Sankaran 	return ERR_PTR(-ENODEV);
129325fdd593SJeykumar Sankaran }
129425fdd593SJeykumar Sankaran 
1295