197fb5e8dSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
225fdd593SJeykumar Sankaran /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
353324b99SAbhinav Kumar  * Copyright (c) 2022. Qualcomm Innovation Center, Inc. All rights reserved.
425fdd593SJeykumar Sankaran  */
525fdd593SJeykumar Sankaran 
625fdd593SJeykumar Sankaran #define pr_fmt(fmt)	"[drm:%s:%d] " fmt, __func__, __LINE__
725fdd593SJeykumar Sankaran #include <linux/slab.h>
825fdd593SJeykumar Sankaran #include <linux/of_address.h>
925fdd593SJeykumar Sankaran #include <linux/platform_device.h>
1025fdd593SJeykumar Sankaran #include "dpu_hw_mdss.h"
11597762d5SDmitry Baryshkov #include "dpu_hw_interrupts.h"
1225fdd593SJeykumar Sankaran #include "dpu_hw_catalog.h"
1325fdd593SJeykumar Sankaran #include "dpu_kms.h"
1425fdd593SJeykumar Sankaran 
157bdc0c4bSKalyan Thota #define VIG_MASK \
167bdc0c4bSKalyan Thota 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
17b8dab65bSAngeloGioacchino Del Regno 	BIT(DPU_SSPP_CSC_10BIT) | BIT(DPU_SSPP_CDP) |\
1825fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_EXCL_RECT))
1925fdd593SJeykumar Sankaran 
2094391a14SAngeloGioacchino Del Regno #define VIG_MSM8998_MASK \
2194391a14SAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_SCALER_QSEED3))
2294391a14SAngeloGioacchino Del Regno 
237bdc0c4bSKalyan Thota #define VIG_SDM845_MASK \
24b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3))
257bdc0c4bSKalyan Thota 
267bdc0c4bSKalyan Thota #define VIG_SC7180_MASK \
27b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED4))
287bdc0c4bSKalyan Thota 
29d21fc5dfSDmitry Baryshkov #define VIG_SM8250_MASK \
30095eed89SDmitry Baryshkov 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3LITE))
31d21fc5dfSDmitry Baryshkov 
325334087eSLoic Poulain #define VIG_QCM2290_MASK (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL))
335334087eSLoic Poulain 
3494391a14SAngeloGioacchino Del Regno #define DMA_MSM8998_MASK \
3594391a14SAngeloGioacchino Del Regno 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
3694391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
3794391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
3894391a14SAngeloGioacchino Del Regno 
39dabfdd89SVinod Polimera #define VIG_SC7280_MASK \
40dabfdd89SVinod Polimera 	(VIG_SC7180_MASK | BIT(DPU_SSPP_INLINE_ROTATION))
41dabfdd89SVinod Polimera 
4225fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \
4325fdd593SJeykumar Sankaran 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\
4425fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
4525fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
4625fdd593SJeykumar Sankaran 
4707ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \
4807ca1fc0SSravanthi Kollukuduru 	(DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR))
4907ca1fc0SSravanthi Kollukuduru 
5094391a14SAngeloGioacchino Del Regno #define DMA_CURSOR_MSM8998_MASK \
5194391a14SAngeloGioacchino Del Regno 	(DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR))
5294391a14SAngeloGioacchino Del Regno 
532d8a4edbSDmitry Baryshkov #define MIXER_MSM8998_MASK \
5425fdd593SJeykumar Sankaran 	(BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER))
5525fdd593SJeykumar Sankaran 
562d8a4edbSDmitry Baryshkov #define MIXER_SDM845_MASK \
572d8a4edbSDmitry Baryshkov 	(BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER) | BIT(DPU_MIXER_COMBINED_ALPHA))
582d8a4edbSDmitry Baryshkov 
597bdc0c4bSKalyan Thota #define MIXER_SC7180_MASK \
602d8a4edbSDmitry Baryshkov 	(BIT(DPU_DIM_LAYER) | BIT(DPU_MIXER_COMBINED_ALPHA))
617bdc0c4bSKalyan Thota 
6225fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER)
6325fdd593SJeykumar Sankaran 
6425fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \
6525fdd593SJeykumar Sankaran 	(PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2))
6625fdd593SJeykumar Sankaran 
67591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \
6844bf8704SKalyan Thota 	(BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE) | BIT(DPU_CTL_VM_CFG))
69591e34a0SKrishna Manikandan 
704369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0)
714369c93cSDmitry Baryshkov 
7294391a14SAngeloGioacchino Del Regno #define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC)
7394391a14SAngeloGioacchino Del Regno 
744259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
75e47616dfSKalyan Thota 
76cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0)
77cace3ac4SJonathan Marek 
78cace3ac4SJonathan Marek #define INTF_SC7180_MASK BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE)
79cace3ac4SJonathan Marek 
80591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN)
81591e34a0SKrishna Manikandan 
82597762d5SDmitry Baryshkov #define IRQ_SDM845_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
83597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
84597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
85597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
86597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
87597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
88597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
89597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_0_INTR) | \
90597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_1_INTR))
91597762d5SDmitry Baryshkov 
92597762d5SDmitry Baryshkov #define IRQ_SC7180_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
93597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
94597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
95597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
96597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR))
97597762d5SDmitry Baryshkov 
98597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
99597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
100597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
101597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
102597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
103597762d5SDmitry Baryshkov 			 BIT(MDP_INTF5_7xxx_INTR))
104597762d5SDmitry Baryshkov 
105597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
106597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
107597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
108597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
109597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
110597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
111597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
112597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR))
113597762d5SDmitry Baryshkov 
1140e91bcbbSRobert Foss #define IRQ_SM8350_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
1150e91bcbbSRobert Foss 			 BIT(MDP_SSPP_TOP0_INTR2) | \
1160e91bcbbSRobert Foss 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
1170e91bcbbSRobert Foss 			 BIT(MDP_INTF0_7xxx_INTR) | \
1180e91bcbbSRobert Foss 			 BIT(MDP_INTF1_7xxx_INTR) | \
1190e91bcbbSRobert Foss 			 BIT(MDP_INTF2_7xxx_INTR) | \
120*7eb75dbdSRobert Foss 			 BIT(MDP_INTF3_7xxx_INTR))
1210e91bcbbSRobert Foss 
122f3af2d6eSRob Clark #define IRQ_SC8180X_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
123f3af2d6eSRob Clark 			  BIT(MDP_SSPP_TOP0_INTR2) | \
124f3af2d6eSRob Clark 			  BIT(MDP_SSPP_TOP0_HIST_INTR) | \
125f3af2d6eSRob Clark 			  BIT(MDP_INTF0_INTR) | \
126f3af2d6eSRob Clark 			  BIT(MDP_INTF1_INTR) | \
127f3af2d6eSRob Clark 			  BIT(MDP_INTF2_INTR) | \
128f3af2d6eSRob Clark 			  BIT(MDP_INTF3_INTR) | \
129f3af2d6eSRob Clark 			  BIT(MDP_INTF4_INTR) | \
130f3af2d6eSRob Clark 			  BIT(MDP_INTF5_INTR) | \
131f3af2d6eSRob Clark 			  BIT(MDP_AD4_0_INTR) | \
132f3af2d6eSRob Clark 			  BIT(MDP_AD4_1_INTR))
133597762d5SDmitry Baryshkov 
134100d7ef6SDmitry Baryshkov #define IRQ_SM8450_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
135100d7ef6SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
136100d7ef6SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
137100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
138100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
139100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF2_7xxx_INTR) | \
140100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF3_7xxx_INTR))
141100d7ef6SDmitry Baryshkov 
14253324b99SAbhinav Kumar #define WB_SM8250_MASK (BIT(DPU_WB_LINE_MODE) | \
14353324b99SAbhinav Kumar 			 BIT(DPU_WB_UBWC) | \
14453324b99SAbhinav Kumar 			 BIT(DPU_WB_YUV_CONFIG) | \
14553324b99SAbhinav Kumar 			 BIT(DPU_WB_PIPE_ALPHA) | \
14653324b99SAbhinav Kumar 			 BIT(DPU_WB_XY_ROI_OFFSET) | \
14753324b99SAbhinav Kumar 			 BIT(DPU_WB_QOS) | \
14853324b99SAbhinav Kumar 			 BIT(DPU_WB_QOS_8LVL) | \
14953324b99SAbhinav Kumar 			 BIT(DPU_WB_CDP) | \
15053324b99SAbhinav Kumar 			 BIT(DPU_WB_INPUT_CTRL))
15153324b99SAbhinav Kumar 
15225fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE		(50 * 1024)
15325fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH		2048
15425fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH	2560
15525fdd593SJeykumar Sankaran 
15625fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION	4
15725fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION	4
15825fdd593SJeykumar Sankaran 
15925fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO	20
16025fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO	4
16125fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE	1
16225fdd593SJeykumar Sankaran 
16325fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y)
16425fdd593SJeykumar Sankaran 
16509c7e370SLee Jones static const uint32_t plane_formats[] = {
16609c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
16709c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
16809c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
16909c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
17009c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
17109c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
17209c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
17309c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
174da7716a2SJessica Zhang 	DRM_FORMAT_XRGB2101010,
17509c7e370SLee Jones 	DRM_FORMAT_RGB888,
17609c7e370SLee Jones 	DRM_FORMAT_BGR888,
17709c7e370SLee Jones 	DRM_FORMAT_RGB565,
17809c7e370SLee Jones 	DRM_FORMAT_BGR565,
17909c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
18009c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
18109c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
18209c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
18309c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
18409c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
18509c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
18609c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
18709c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
18809c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
18909c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
19009c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
19109c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
19209c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
19309c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
19409c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
19509c7e370SLee Jones };
19609c7e370SLee Jones 
19709c7e370SLee Jones static const uint32_t plane_formats_yuv[] = {
19809c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
19909c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
20009c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
20109c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
20209c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
203da7716a2SJessica Zhang 	DRM_FORMAT_XRGB2101010,
20409c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
20509c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
20609c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
20709c7e370SLee Jones 	DRM_FORMAT_RGB888,
20809c7e370SLee Jones 	DRM_FORMAT_BGR888,
20909c7e370SLee Jones 	DRM_FORMAT_RGB565,
21009c7e370SLee Jones 	DRM_FORMAT_BGR565,
21109c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
21209c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
21309c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
21409c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
21509c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
21609c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
21709c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
21809c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
21909c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
22009c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
22109c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
22209c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
22309c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
22409c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
22509c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
22609c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
22709c7e370SLee Jones 
228f07c9946SJessica Zhang 	DRM_FORMAT_P010,
22909c7e370SLee Jones 	DRM_FORMAT_NV12,
23009c7e370SLee Jones 	DRM_FORMAT_NV21,
23109c7e370SLee Jones 	DRM_FORMAT_NV16,
23209c7e370SLee Jones 	DRM_FORMAT_NV61,
23309c7e370SLee Jones 	DRM_FORMAT_VYUY,
23409c7e370SLee Jones 	DRM_FORMAT_UYVY,
23509c7e370SLee Jones 	DRM_FORMAT_YUYV,
23609c7e370SLee Jones 	DRM_FORMAT_YVYU,
23709c7e370SLee Jones 	DRM_FORMAT_YUV420,
23809c7e370SLee Jones 	DRM_FORMAT_YVU420,
23909c7e370SLee Jones };
24009c7e370SLee Jones 
241dabfdd89SVinod Polimera static const u32 rotation_v2_formats[] = {
242dabfdd89SVinod Polimera 	DRM_FORMAT_NV12,
243dabfdd89SVinod Polimera 	/* TODO add formats after validation */
244dabfdd89SVinod Polimera };
245dabfdd89SVinod Polimera 
24653324b99SAbhinav Kumar static const uint32_t wb2_formats[] = {
24753324b99SAbhinav Kumar 	DRM_FORMAT_RGB565,
24853324b99SAbhinav Kumar 	DRM_FORMAT_BGR565,
24953324b99SAbhinav Kumar 	DRM_FORMAT_RGB888,
25053324b99SAbhinav Kumar 	DRM_FORMAT_ARGB8888,
25153324b99SAbhinav Kumar 	DRM_FORMAT_RGBA8888,
25253324b99SAbhinav Kumar 	DRM_FORMAT_ABGR8888,
25353324b99SAbhinav Kumar 	DRM_FORMAT_XRGB8888,
25453324b99SAbhinav Kumar 	DRM_FORMAT_RGBX8888,
25553324b99SAbhinav Kumar 	DRM_FORMAT_XBGR8888,
25653324b99SAbhinav Kumar 	DRM_FORMAT_ARGB1555,
25753324b99SAbhinav Kumar 	DRM_FORMAT_RGBA5551,
25853324b99SAbhinav Kumar 	DRM_FORMAT_XRGB1555,
25953324b99SAbhinav Kumar 	DRM_FORMAT_RGBX5551,
26053324b99SAbhinav Kumar 	DRM_FORMAT_ARGB4444,
26153324b99SAbhinav Kumar 	DRM_FORMAT_RGBA4444,
26253324b99SAbhinav Kumar 	DRM_FORMAT_RGBX4444,
26353324b99SAbhinav Kumar 	DRM_FORMAT_XRGB4444,
26453324b99SAbhinav Kumar 	DRM_FORMAT_BGR565,
26553324b99SAbhinav Kumar 	DRM_FORMAT_BGR888,
26653324b99SAbhinav Kumar 	DRM_FORMAT_ABGR8888,
26753324b99SAbhinav Kumar 	DRM_FORMAT_BGRA8888,
26853324b99SAbhinav Kumar 	DRM_FORMAT_BGRX8888,
26953324b99SAbhinav Kumar 	DRM_FORMAT_XBGR8888,
27053324b99SAbhinav Kumar 	DRM_FORMAT_ABGR1555,
27153324b99SAbhinav Kumar 	DRM_FORMAT_BGRA5551,
27253324b99SAbhinav Kumar 	DRM_FORMAT_XBGR1555,
27353324b99SAbhinav Kumar 	DRM_FORMAT_BGRX5551,
27453324b99SAbhinav Kumar 	DRM_FORMAT_ABGR4444,
27553324b99SAbhinav Kumar 	DRM_FORMAT_BGRA4444,
27653324b99SAbhinav Kumar 	DRM_FORMAT_BGRX4444,
27753324b99SAbhinav Kumar 	DRM_FORMAT_XBGR4444,
27853324b99SAbhinav Kumar };
27953324b99SAbhinav Kumar 
28025fdd593SJeykumar Sankaran /*************************************************************
28125fdd593SJeykumar Sankaran  * DPU sub blocks config
28225fdd593SJeykumar Sankaran  *************************************************************/
28325fdd593SJeykumar Sankaran /* DPU top level caps */
28494391a14SAngeloGioacchino Del Regno static const struct dpu_caps msm8998_dpu_caps = {
28594391a14SAngeloGioacchino Del Regno 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
28694391a14SAngeloGioacchino Del Regno 	.max_mixer_blendstages = 0x7,
28794391a14SAngeloGioacchino Del Regno 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
28894391a14SAngeloGioacchino Del Regno 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V1,
28994391a14SAngeloGioacchino Del Regno 	.ubwc_version = DPU_HW_UBWC_VER_10,
29094391a14SAngeloGioacchino Del Regno 	.has_src_split = true,
29194391a14SAngeloGioacchino Del Regno 	.has_dim_layer = true,
29294391a14SAngeloGioacchino Del Regno 	.has_idle_pc = true,
29394391a14SAngeloGioacchino Del Regno 	.has_3d_merge = true,
29494391a14SAngeloGioacchino Del Regno 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
29594391a14SAngeloGioacchino Del Regno 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
29694391a14SAngeloGioacchino Del Regno 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
29794391a14SAngeloGioacchino Del Regno 	.max_vdeci_exp = MAX_VERT_DECIMATION,
29894391a14SAngeloGioacchino Del Regno };
29994391a14SAngeloGioacchino Del Regno 
300c162352eSKonrad Dybcio static const struct dpu_caps qcm2290_dpu_caps = {
301c162352eSKonrad Dybcio 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
302c162352eSKonrad Dybcio 	.max_mixer_blendstages = 0x4,
303c162352eSKonrad Dybcio 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
304c162352eSKonrad Dybcio 	.ubwc_version = DPU_HW_UBWC_VER_20,
305c162352eSKonrad Dybcio 	.has_dim_layer = true,
306c162352eSKonrad Dybcio 	.has_idle_pc = true,
307c162352eSKonrad Dybcio 	.max_linewidth = 2160,
308c162352eSKonrad Dybcio 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
309c162352eSKonrad Dybcio };
310c162352eSKonrad Dybcio 
31125fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = {
31225fdd593SJeykumar Sankaran 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
31325fdd593SJeykumar Sankaran 	.max_mixer_blendstages = 0xb,
31425fdd593SJeykumar Sankaran 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
31525fdd593SJeykumar Sankaran 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
31625fdd593SJeykumar Sankaran 	.ubwc_version = DPU_HW_UBWC_VER_20,
31725fdd593SJeykumar Sankaran 	.has_src_split = true,
31825fdd593SJeykumar Sankaran 	.has_dim_layer = true,
31925fdd593SJeykumar Sankaran 	.has_idle_pc = true,
32042a558b7SKalyan Thota 	.has_3d_merge = true,
3217e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3227e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3237e9d4cddSJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
3247e9d4cddSJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
32525fdd593SJeykumar Sankaran };
32625fdd593SJeykumar Sankaran 
3277bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = {
3287bdc0c4bSKalyan Thota 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3297bdc0c4bSKalyan Thota 	.max_mixer_blendstages = 0x9,
3307bdc0c4bSKalyan Thota 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
3317bdc0c4bSKalyan Thota 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
3327bdc0c4bSKalyan Thota 	.ubwc_version = DPU_HW_UBWC_VER_20,
3337bdc0c4bSKalyan Thota 	.has_dim_layer = true,
3347bdc0c4bSKalyan Thota 	.has_idle_pc = true,
3357e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3367e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3377bdc0c4bSKalyan Thota };
3387bdc0c4bSKalyan Thota 
3393581b706SAdam Skladowski static const struct dpu_caps sm6115_dpu_caps = {
3403581b706SAdam Skladowski 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3413581b706SAdam Skladowski 	.max_mixer_blendstages = 0x4,
3423581b706SAdam Skladowski 	.qseed_type = DPU_SSPP_SCALER_QSEED3LITE,
3433581b706SAdam Skladowski 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
3443581b706SAdam Skladowski 	.ubwc_version = DPU_HW_UBWC_VER_20,
3453581b706SAdam Skladowski 	.has_dim_layer = true,
3463581b706SAdam Skladowski 	.has_idle_pc = true,
3473581b706SAdam Skladowski 	.max_linewidth = 2160,
3483581b706SAdam Skladowski 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3493581b706SAdam Skladowski };
3503581b706SAdam Skladowski 
351386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = {
352386fced3SJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
353386fced3SJonathan Marek 	.max_mixer_blendstages = 0xb,
354386fced3SJonathan Marek 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
355386fced3SJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
356386fced3SJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_30,
357386fced3SJonathan Marek 	.has_src_split = true,
358386fced3SJonathan Marek 	.has_dim_layer = true,
359386fced3SJonathan Marek 	.has_idle_pc = true,
360386fced3SJonathan Marek 	.has_3d_merge = true,
361386fced3SJonathan Marek 	.max_linewidth = 4096,
362386fced3SJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
363386fced3SJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
364386fced3SJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
365386fced3SJonathan Marek };
366386fced3SJonathan Marek 
367f3af2d6eSRob Clark static const struct dpu_caps sc8180x_dpu_caps = {
368f3af2d6eSRob Clark 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
369f3af2d6eSRob Clark 	.max_mixer_blendstages = 0xb,
370f3af2d6eSRob Clark 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
371f3af2d6eSRob Clark 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
372f3af2d6eSRob Clark 	.ubwc_version = DPU_HW_UBWC_VER_30,
373f3af2d6eSRob Clark 	.has_src_split = true,
374f3af2d6eSRob Clark 	.has_dim_layer = true,
375f3af2d6eSRob Clark 	.has_idle_pc = true,
376f3af2d6eSRob Clark 	.has_3d_merge = true,
377f3af2d6eSRob Clark 	.max_linewidth = 4096,
378f3af2d6eSRob Clark 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
379f3af2d6eSRob Clark 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
380f3af2d6eSRob Clark 	.max_vdeci_exp = MAX_VERT_DECIMATION,
381f3af2d6eSRob Clark };
382f3af2d6eSRob Clark 
383af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = {
384af776a3eSJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
385af776a3eSJonathan Marek 	.max_mixer_blendstages = 0xb,
386d21fc5dfSDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED3LITE,
387af776a3eSJonathan Marek 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
388af776a3eSJonathan Marek 	.ubwc_version = DPU_HW_UBWC_VER_40,
389af776a3eSJonathan Marek 	.has_src_split = true,
390af776a3eSJonathan Marek 	.has_dim_layer = true,
391af776a3eSJonathan Marek 	.has_idle_pc = true,
392af776a3eSJonathan Marek 	.has_3d_merge = true,
393af776a3eSJonathan Marek 	.max_linewidth = 4096,
394af776a3eSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
395af776a3eSJonathan Marek };
396af776a3eSJonathan Marek 
3970e91bcbbSRobert Foss static const struct dpu_caps sm8350_dpu_caps = {
3980e91bcbbSRobert Foss 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3990e91bcbbSRobert Foss 	.max_mixer_blendstages = 0xb,
4000e91bcbbSRobert Foss 	.qseed_type = DPU_SSPP_SCALER_QSEED3LITE,
4010e91bcbbSRobert Foss 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
4020e91bcbbSRobert Foss 	.ubwc_version = DPU_HW_UBWC_VER_40,
4030e91bcbbSRobert Foss 	.has_src_split = true,
4040e91bcbbSRobert Foss 	.has_dim_layer = true,
4050e91bcbbSRobert Foss 	.has_idle_pc = true,
4060e91bcbbSRobert Foss 	.has_3d_merge = true,
4070e91bcbbSRobert Foss 	.max_linewidth = 4096,
4080e91bcbbSRobert Foss 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
4090e91bcbbSRobert Foss };
4100e91bcbbSRobert Foss 
411100d7ef6SDmitry Baryshkov static const struct dpu_caps sm8450_dpu_caps = {
412100d7ef6SDmitry Baryshkov 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
413100d7ef6SDmitry Baryshkov 	.max_mixer_blendstages = 0xb,
414100d7ef6SDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
415100d7ef6SDmitry Baryshkov 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */
416100d7ef6SDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_40,
417100d7ef6SDmitry Baryshkov 	.has_src_split = true,
418100d7ef6SDmitry Baryshkov 	.has_dim_layer = true,
419100d7ef6SDmitry Baryshkov 	.has_idle_pc = true,
420100d7ef6SDmitry Baryshkov 	.has_3d_merge = true,
421100d7ef6SDmitry Baryshkov 	.max_linewidth = 5120,
422100d7ef6SDmitry Baryshkov 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
423100d7ef6SDmitry Baryshkov };
424100d7ef6SDmitry Baryshkov 
425591e34a0SKrishna Manikandan static const struct dpu_caps sc7280_dpu_caps = {
426591e34a0SKrishna Manikandan 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
427591e34a0SKrishna Manikandan 	.max_mixer_blendstages = 0x7,
428591e34a0SKrishna Manikandan 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
429591e34a0SKrishna Manikandan 	.smart_dma_rev = DPU_SSPP_SMART_DMA_V2,
430591e34a0SKrishna Manikandan 	.ubwc_version = DPU_HW_UBWC_VER_30,
431591e34a0SKrishna Manikandan 	.has_dim_layer = true,
432591e34a0SKrishna Manikandan 	.has_idle_pc = true,
433591e34a0SKrishna Manikandan 	.max_linewidth = 2400,
434591e34a0SKrishna Manikandan 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
435591e34a0SKrishna Manikandan };
436591e34a0SKrishna Manikandan 
43794391a14SAngeloGioacchino Del Regno static const struct dpu_mdp_cfg msm8998_mdp[] = {
43894391a14SAngeloGioacchino Del Regno 	{
43994391a14SAngeloGioacchino Del Regno 	.name = "top_0", .id = MDP_TOP,
44094391a14SAngeloGioacchino Del Regno 	.base = 0x0, .len = 0x458,
44194391a14SAngeloGioacchino Del Regno 	.features = 0,
44294391a14SAngeloGioacchino Del Regno 	.highest_bank_bit = 0x2,
44394391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
44494391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 0},
44594391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
44694391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 0},
44794391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
44894391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2BC, .bit_off = 0},
44994391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
45094391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 0},
45194391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
45294391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 8},
45394391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
45494391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 8},
45594391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
45694391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 8},
45794391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA3] = {
45894391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 12},
45994391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
46094391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3A8, .bit_off = 15},
46194391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
46294391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3B0, .bit_off = 15},
46394391a14SAngeloGioacchino Del Regno 	},
46494391a14SAngeloGioacchino Del Regno };
46594391a14SAngeloGioacchino Del Regno 
466abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = {
46725fdd593SJeykumar Sankaran 	{
46825fdd593SJeykumar Sankaran 	.name = "top_0", .id = MDP_TOP,
46925fdd593SJeykumar Sankaran 	.base = 0x0, .len = 0x45C,
47003490e11SKuogee Hsieh 	.features = BIT(DPU_MDP_AUDIO_SELECT),
47125fdd593SJeykumar Sankaran 	.highest_bank_bit = 0x2,
47225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
47325fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 0},
47425fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
47525fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 0},
47625fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
47725fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 0},
47825fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
47925fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 0},
48025fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
48125fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 8},
48225fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
48325fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 8},
48425fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
48525fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 8},
48625fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
48725fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 8},
48825fdd593SJeykumar Sankaran 	},
48925fdd593SJeykumar Sankaran };
49025fdd593SJeykumar Sankaran 
4917bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = {
4927bdc0c4bSKalyan Thota 	{
4937bdc0c4bSKalyan Thota 	.name = "top_0", .id = MDP_TOP,
4947bdc0c4bSKalyan Thota 	.base = 0x0, .len = 0x494,
4957bdc0c4bSKalyan Thota 	.features = 0,
4967bdc0c4bSKalyan Thota 	.highest_bank_bit = 0x3,
4977bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
4987bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 0},
4997bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
5007bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 8},
5017bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
5027b149f2bSKalyan Thota 		.reg_off = 0x2B4, .bit_off = 8},
5037b149f2bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
5047b149f2bSKalyan Thota 		.reg_off = 0x2C4, .bit_off = 8},
5057bdc0c4bSKalyan Thota 	},
5067bdc0c4bSKalyan Thota };
5077bdc0c4bSKalyan Thota 
508f3af2d6eSRob Clark static const struct dpu_mdp_cfg sc8180x_mdp[] = {
509f3af2d6eSRob Clark 	{
510f3af2d6eSRob Clark 	.name = "top_0", .id = MDP_TOP,
511f3af2d6eSRob Clark 	.base = 0x0, .len = 0x45C,
512f3af2d6eSRob Clark 	.features = 0,
513f3af2d6eSRob Clark 	.highest_bank_bit = 0x3,
514f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
515f3af2d6eSRob Clark 			.reg_off = 0x2AC, .bit_off = 0},
516f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
517f3af2d6eSRob Clark 			.reg_off = 0x2B4, .bit_off = 0},
518f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
519f3af2d6eSRob Clark 			.reg_off = 0x2BC, .bit_off = 0},
520f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
521f3af2d6eSRob Clark 			.reg_off = 0x2C4, .bit_off = 0},
522f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
523f3af2d6eSRob Clark 			.reg_off = 0x2AC, .bit_off = 8},
524f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
525f3af2d6eSRob Clark 			.reg_off = 0x2B4, .bit_off = 8},
526f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
527f3af2d6eSRob Clark 			.reg_off = 0x2BC, .bit_off = 8},
528f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
529f3af2d6eSRob Clark 			.reg_off = 0x2C4, .bit_off = 8},
530f3af2d6eSRob Clark 	},
531f3af2d6eSRob Clark };
532f3af2d6eSRob Clark 
5333581b706SAdam Skladowski static const struct dpu_mdp_cfg sm6115_mdp[] = {
5343581b706SAdam Skladowski 	{
5353581b706SAdam Skladowski 	.name = "top_0", .id = MDP_TOP,
5363581b706SAdam Skladowski 	.base = 0x0, .len = 0x494,
5373581b706SAdam Skladowski 	.features = 0,
5383581b706SAdam Skladowski 	.highest_bank_bit = 0x1,
5393581b706SAdam Skladowski 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
5403581b706SAdam Skladowski 		.reg_off = 0x2ac, .bit_off = 0},
5413581b706SAdam Skladowski 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
5423581b706SAdam Skladowski 		.reg_off = 0x2ac, .bit_off = 8},
5433581b706SAdam Skladowski 	},
5443581b706SAdam Skladowski };
5453581b706SAdam Skladowski 
546af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = {
547af776a3eSJonathan Marek 	{
548af776a3eSJonathan Marek 	.name = "top_0", .id = MDP_TOP,
549b910a020SRobert Foss 	.base = 0x0, .len = 0x494,
550af776a3eSJonathan Marek 	.features = 0,
551af776a3eSJonathan Marek 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
552af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
553af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 0},
554af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
555af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 0},
556af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
557af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 0},
558af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
559af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 0},
560af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
561af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 8},
562af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
563af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 8},
564af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
565af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 8},
566af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
567af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 8},
568af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
569af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 20},
57053324b99SAbhinav Kumar 	.clk_ctrls[DPU_CLK_CTRL_WB2] = {
57153324b99SAbhinav Kumar 			.reg_off = 0x3B8, .bit_off = 24},
572af776a3eSJonathan Marek 	},
573af776a3eSJonathan Marek };
574af776a3eSJonathan Marek 
5750e91bcbbSRobert Foss static const struct dpu_mdp_cfg sm8350_mdp[] = {
5760e91bcbbSRobert Foss 	{
5770e91bcbbSRobert Foss 	.name = "top_0", .id = MDP_TOP,
5780e91bcbbSRobert Foss 	.base = 0x0, .len = 0x494,
5790e91bcbbSRobert Foss 	.features = 0,
5800e91bcbbSRobert Foss 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
5810e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
5820e91bcbbSRobert Foss 			.reg_off = 0x2ac, .bit_off = 0},
5830e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
5840e91bcbbSRobert Foss 			.reg_off = 0x2b4, .bit_off = 0},
5850e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
5860e91bcbbSRobert Foss 			.reg_off = 0x2bc, .bit_off = 0},
5870e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
5880e91bcbbSRobert Foss 			.reg_off = 0x2c4, .bit_off = 0},
5890e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
5900e91bcbbSRobert Foss 			.reg_off = 0x2ac, .bit_off = 8},
5910e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
5920e91bcbbSRobert Foss 			.reg_off = 0x2b4, .bit_off = 8},
5930e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
5940e91bcbbSRobert Foss 			.reg_off = 0x2bc, .bit_off = 8},
5950e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
5960e91bcbbSRobert Foss 			.reg_off = 0x2c4, .bit_off = 8},
5970e91bcbbSRobert Foss 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
5980e91bcbbSRobert Foss 			.reg_off = 0x2bc, .bit_off = 20},
5990e91bcbbSRobert Foss 	},
6000e91bcbbSRobert Foss };
6010e91bcbbSRobert Foss 
602100d7ef6SDmitry Baryshkov static const struct dpu_mdp_cfg sm8450_mdp[] = {
603100d7ef6SDmitry Baryshkov 	{
604100d7ef6SDmitry Baryshkov 	.name = "top_0", .id = MDP_TOP,
605100d7ef6SDmitry Baryshkov 	.base = 0x0, .len = 0x494,
606100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_MDP_PERIPH_0_REMOVED),
607100d7ef6SDmitry Baryshkov 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
608100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
609100d7ef6SDmitry Baryshkov 			.reg_off = 0x2AC, .bit_off = 0},
610100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
611100d7ef6SDmitry Baryshkov 			.reg_off = 0x2B4, .bit_off = 0},
612100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
613100d7ef6SDmitry Baryshkov 			.reg_off = 0x2BC, .bit_off = 0},
614100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
615100d7ef6SDmitry Baryshkov 			.reg_off = 0x2C4, .bit_off = 0},
616100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
617100d7ef6SDmitry Baryshkov 			.reg_off = 0x2AC, .bit_off = 8},
618100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
619100d7ef6SDmitry Baryshkov 			.reg_off = 0x2B4, .bit_off = 8},
620100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
621100d7ef6SDmitry Baryshkov 			.reg_off = 0x2BC, .bit_off = 8},
622100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
623100d7ef6SDmitry Baryshkov 			.reg_off = 0x2C4, .bit_off = 8},
624100d7ef6SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
625100d7ef6SDmitry Baryshkov 			.reg_off = 0x2BC, .bit_off = 20},
626100d7ef6SDmitry Baryshkov 	},
627100d7ef6SDmitry Baryshkov };
628100d7ef6SDmitry Baryshkov 
629591e34a0SKrishna Manikandan static const struct dpu_mdp_cfg sc7280_mdp[] = {
630591e34a0SKrishna Manikandan 	{
631591e34a0SKrishna Manikandan 	.name = "top_0", .id = MDP_TOP,
632591e34a0SKrishna Manikandan 	.base = 0x0, .len = 0x2014,
633591e34a0SKrishna Manikandan 	.highest_bank_bit = 0x1,
634591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
635591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 0},
636591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
637591e34a0SKrishna Manikandan 		.reg_off = 0x2AC, .bit_off = 8},
638591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
639591e34a0SKrishna Manikandan 		.reg_off = 0x2B4, .bit_off = 8},
640591e34a0SKrishna Manikandan 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
641591e34a0SKrishna Manikandan 		.reg_off = 0x2C4, .bit_off = 8},
642591e34a0SKrishna Manikandan 	},
643591e34a0SKrishna Manikandan };
644591e34a0SKrishna Manikandan 
6455334087eSLoic Poulain static const struct dpu_mdp_cfg qcm2290_mdp[] = {
6465334087eSLoic Poulain 	{
6475334087eSLoic Poulain 	.name = "top_0", .id = MDP_TOP,
6485334087eSLoic Poulain 	.base = 0x0, .len = 0x494,
6495334087eSLoic Poulain 	.features = 0,
6505334087eSLoic Poulain 	.highest_bank_bit = 0x2,
6515334087eSLoic Poulain 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
6525334087eSLoic Poulain 		.reg_off = 0x2AC, .bit_off = 0},
6535334087eSLoic Poulain 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
6545334087eSLoic Poulain 		.reg_off = 0x2AC, .bit_off = 8},
6555334087eSLoic Poulain 	},
6565334087eSLoic Poulain };
6575334087eSLoic Poulain 
65825fdd593SJeykumar Sankaran /*************************************************************
65925fdd593SJeykumar Sankaran  * CTL sub blocks config
66025fdd593SJeykumar Sankaran  *************************************************************/
66194391a14SAngeloGioacchino Del Regno static const struct dpu_ctl_cfg msm8998_ctl[] = {
66294391a14SAngeloGioacchino Del Regno 	{
66394391a14SAngeloGioacchino Del Regno 	.name = "ctl_0", .id = CTL_0,
66494391a14SAngeloGioacchino Del Regno 	.base = 0x1000, .len = 0x94,
66594391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
66694391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
66794391a14SAngeloGioacchino Del Regno 	},
66894391a14SAngeloGioacchino Del Regno 	{
66994391a14SAngeloGioacchino Del Regno 	.name = "ctl_1", .id = CTL_1,
67094391a14SAngeloGioacchino Del Regno 	.base = 0x1200, .len = 0x94,
67194391a14SAngeloGioacchino Del Regno 	.features = 0,
67294391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
67394391a14SAngeloGioacchino Del Regno 	},
67494391a14SAngeloGioacchino Del Regno 	{
67594391a14SAngeloGioacchino Del Regno 	.name = "ctl_2", .id = CTL_2,
67694391a14SAngeloGioacchino Del Regno 	.base = 0x1400, .len = 0x94,
67794391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
67894391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
67994391a14SAngeloGioacchino Del Regno 	},
68094391a14SAngeloGioacchino Del Regno 	{
68194391a14SAngeloGioacchino Del Regno 	.name = "ctl_3", .id = CTL_3,
68294391a14SAngeloGioacchino Del Regno 	.base = 0x1600, .len = 0x94,
68394391a14SAngeloGioacchino Del Regno 	.features = 0,
68494391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
68594391a14SAngeloGioacchino Del Regno 	},
68694391a14SAngeloGioacchino Del Regno 	{
68794391a14SAngeloGioacchino Del Regno 	.name = "ctl_4", .id = CTL_4,
68894391a14SAngeloGioacchino Del Regno 	.base = 0x1800, .len = 0x94,
68994391a14SAngeloGioacchino Del Regno 	.features = 0,
69094391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
69194391a14SAngeloGioacchino Del Regno 	},
69294391a14SAngeloGioacchino Del Regno };
69394391a14SAngeloGioacchino Del Regno 
694abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = {
69525fdd593SJeykumar Sankaran 	{
69625fdd593SJeykumar Sankaran 	.name = "ctl_0", .id = CTL_0,
69725fdd593SJeykumar Sankaran 	.base = 0x1000, .len = 0xE4,
698667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
699667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
70025fdd593SJeykumar Sankaran 	},
70125fdd593SJeykumar Sankaran 	{
70225fdd593SJeykumar Sankaran 	.name = "ctl_1", .id = CTL_1,
70325fdd593SJeykumar Sankaran 	.base = 0x1200, .len = 0xE4,
704667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
705667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
70625fdd593SJeykumar Sankaran 	},
70725fdd593SJeykumar Sankaran 	{
70825fdd593SJeykumar Sankaran 	.name = "ctl_2", .id = CTL_2,
70925fdd593SJeykumar Sankaran 	.base = 0x1400, .len = 0xE4,
710667e9985SDmitry Baryshkov 	.features = 0,
711667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
71225fdd593SJeykumar Sankaran 	},
71325fdd593SJeykumar Sankaran 	{
71425fdd593SJeykumar Sankaran 	.name = "ctl_3", .id = CTL_3,
71525fdd593SJeykumar Sankaran 	.base = 0x1600, .len = 0xE4,
716667e9985SDmitry Baryshkov 	.features = 0,
717667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
71825fdd593SJeykumar Sankaran 	},
71925fdd593SJeykumar Sankaran 	{
72025fdd593SJeykumar Sankaran 	.name = "ctl_4", .id = CTL_4,
72125fdd593SJeykumar Sankaran 	.base = 0x1800, .len = 0xE4,
722667e9985SDmitry Baryshkov 	.features = 0,
723667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
72425fdd593SJeykumar Sankaran 	},
72525fdd593SJeykumar Sankaran };
72625fdd593SJeykumar Sankaran 
7277bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = {
7287bdc0c4bSKalyan Thota 	{
7297bdc0c4bSKalyan Thota 	.name = "ctl_0", .id = CTL_0,
7307bdc0c4bSKalyan Thota 	.base = 0x1000, .len = 0xE4,
731667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
732667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
7337bdc0c4bSKalyan Thota 	},
7347bdc0c4bSKalyan Thota 	{
7357bdc0c4bSKalyan Thota 	.name = "ctl_1", .id = CTL_1,
7367bdc0c4bSKalyan Thota 	.base = 0x1200, .len = 0xE4,
737667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
738667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
7397bdc0c4bSKalyan Thota 	},
7407bdc0c4bSKalyan Thota 	{
7417bdc0c4bSKalyan Thota 	.name = "ctl_2", .id = CTL_2,
7427bdc0c4bSKalyan Thota 	.base = 0x1400, .len = 0xE4,
743667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
744667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
7457bdc0c4bSKalyan Thota 	},
7467bdc0c4bSKalyan Thota };
7477bdc0c4bSKalyan Thota 
748386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = {
749386fced3SJonathan Marek 	{
750386fced3SJonathan Marek 	.name = "ctl_0", .id = CTL_0,
751386fced3SJonathan Marek 	.base = 0x1000, .len = 0x1e0,
752667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
753667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
754386fced3SJonathan Marek 	},
755386fced3SJonathan Marek 	{
756386fced3SJonathan Marek 	.name = "ctl_1", .id = CTL_1,
757386fced3SJonathan Marek 	.base = 0x1200, .len = 0x1e0,
758667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
759667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
760386fced3SJonathan Marek 	},
761386fced3SJonathan Marek 	{
762386fced3SJonathan Marek 	.name = "ctl_2", .id = CTL_2,
763386fced3SJonathan Marek 	.base = 0x1400, .len = 0x1e0,
764667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
765667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
766386fced3SJonathan Marek 	},
767386fced3SJonathan Marek 	{
768386fced3SJonathan Marek 	.name = "ctl_3", .id = CTL_3,
769386fced3SJonathan Marek 	.base = 0x1600, .len = 0x1e0,
770667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
771667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
772386fced3SJonathan Marek 	},
773386fced3SJonathan Marek 	{
774386fced3SJonathan Marek 	.name = "ctl_4", .id = CTL_4,
775386fced3SJonathan Marek 	.base = 0x1800, .len = 0x1e0,
776667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
777667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
778386fced3SJonathan Marek 	},
779386fced3SJonathan Marek 	{
780386fced3SJonathan Marek 	.name = "ctl_5", .id = CTL_5,
781386fced3SJonathan Marek 	.base = 0x1a00, .len = 0x1e0,
782667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
783667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
784386fced3SJonathan Marek 	},
785386fced3SJonathan Marek };
786386fced3SJonathan Marek 
7870e91bcbbSRobert Foss static const struct dpu_ctl_cfg sm8350_ctl[] = {
7880e91bcbbSRobert Foss 	{
7890e91bcbbSRobert Foss 	.name = "ctl_0", .id = CTL_0,
7900e91bcbbSRobert Foss 	.base = 0x15000, .len = 0x1e8,
7910e91bcbbSRobert Foss 	.features = BIT(DPU_CTL_SPLIT_DISPLAY) | CTL_SC7280_MASK,
7920e91bcbbSRobert Foss 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
7930e91bcbbSRobert Foss 	},
7940e91bcbbSRobert Foss 	{
7950e91bcbbSRobert Foss 	.name = "ctl_1", .id = CTL_1,
7960e91bcbbSRobert Foss 	.base = 0x16000, .len = 0x1e8,
7970e91bcbbSRobert Foss 	.features = BIT(DPU_CTL_SPLIT_DISPLAY) | CTL_SC7280_MASK,
7980e91bcbbSRobert Foss 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
7990e91bcbbSRobert Foss 	},
8000e91bcbbSRobert Foss 	{
8010e91bcbbSRobert Foss 	.name = "ctl_2", .id = CTL_2,
8020e91bcbbSRobert Foss 	.base = 0x17000, .len = 0x1e8,
8030e91bcbbSRobert Foss 	.features = CTL_SC7280_MASK,
8040e91bcbbSRobert Foss 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
8050e91bcbbSRobert Foss 	},
8060e91bcbbSRobert Foss 	{
8070e91bcbbSRobert Foss 	.name = "ctl_3", .id = CTL_3,
8080e91bcbbSRobert Foss 	.base = 0x18000, .len = 0x1e8,
8090e91bcbbSRobert Foss 	.features = CTL_SC7280_MASK,
8100e91bcbbSRobert Foss 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
8110e91bcbbSRobert Foss 	},
8120e91bcbbSRobert Foss 	{
8130e91bcbbSRobert Foss 	.name = "ctl_4", .id = CTL_4,
8140e91bcbbSRobert Foss 	.base = 0x19000, .len = 0x1e8,
8150e91bcbbSRobert Foss 	.features = CTL_SC7280_MASK,
8160e91bcbbSRobert Foss 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
8170e91bcbbSRobert Foss 	},
8180e91bcbbSRobert Foss 	{
8190e91bcbbSRobert Foss 	.name = "ctl_5", .id = CTL_5,
8200e91bcbbSRobert Foss 	.base = 0x1a000, .len = 0x1e8,
8210e91bcbbSRobert Foss 	.features = CTL_SC7280_MASK,
8220e91bcbbSRobert Foss 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
8230e91bcbbSRobert Foss 	},
8240e91bcbbSRobert Foss };
8250e91bcbbSRobert Foss 
826100d7ef6SDmitry Baryshkov static const struct dpu_ctl_cfg sm8450_ctl[] = {
827100d7ef6SDmitry Baryshkov 	{
828100d7ef6SDmitry Baryshkov 	.name = "ctl_0", .id = CTL_0,
829100d7ef6SDmitry Baryshkov 	.base = 0x15000, .len = 0x204,
830100d7ef6SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY) | BIT(DPU_CTL_FETCH_ACTIVE),
831100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
832100d7ef6SDmitry Baryshkov 	},
833100d7ef6SDmitry Baryshkov 	{
834100d7ef6SDmitry Baryshkov 	.name = "ctl_1", .id = CTL_1,
8350e91bcbbSRobert Foss 	.base = 0x16000, .len = 0x1e8,
8360e91bcbbSRobert Foss 	.features = BIT(DPU_CTL_SPLIT_DISPLAY) | CTL_SC7280_MASK,
837100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
838100d7ef6SDmitry Baryshkov 	},
839100d7ef6SDmitry Baryshkov 	{
840100d7ef6SDmitry Baryshkov 	.name = "ctl_2", .id = CTL_2,
8410e91bcbbSRobert Foss 	.base = 0x17000, .len = 0x1e8,
8420e91bcbbSRobert Foss 	.features = CTL_SC7280_MASK,
843100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
844100d7ef6SDmitry Baryshkov 	},
845100d7ef6SDmitry Baryshkov 	{
846100d7ef6SDmitry Baryshkov 	.name = "ctl_3", .id = CTL_3,
8470e91bcbbSRobert Foss 	.base = 0x18000, .len = 0x1e8,
8480e91bcbbSRobert Foss 	.features = CTL_SC7280_MASK,
849100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
850100d7ef6SDmitry Baryshkov 	},
851100d7ef6SDmitry Baryshkov 	{
852100d7ef6SDmitry Baryshkov 	.name = "ctl_4", .id = CTL_4,
8530e91bcbbSRobert Foss 	.base = 0x19000, .len = 0x1e8,
8540e91bcbbSRobert Foss 	.features = CTL_SC7280_MASK,
855100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
856100d7ef6SDmitry Baryshkov 	},
857100d7ef6SDmitry Baryshkov 	{
858100d7ef6SDmitry Baryshkov 	.name = "ctl_5", .id = CTL_5,
8590e91bcbbSRobert Foss 	.base = 0x1a000, .len = 0x1e8,
8600e91bcbbSRobert Foss 	.features = CTL_SC7280_MASK,
861100d7ef6SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
862100d7ef6SDmitry Baryshkov 	},
863100d7ef6SDmitry Baryshkov };
864100d7ef6SDmitry Baryshkov 
865591e34a0SKrishna Manikandan static const struct dpu_ctl_cfg sc7280_ctl[] = {
866591e34a0SKrishna Manikandan 	{
867591e34a0SKrishna Manikandan 	.name = "ctl_0", .id = CTL_0,
868591e34a0SKrishna Manikandan 	.base = 0x15000, .len = 0x1E8,
869667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
870667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
871591e34a0SKrishna Manikandan 	},
872591e34a0SKrishna Manikandan 	{
873591e34a0SKrishna Manikandan 	.name = "ctl_1", .id = CTL_1,
874591e34a0SKrishna Manikandan 	.base = 0x16000, .len = 0x1E8,
875667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
876667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
877591e34a0SKrishna Manikandan 	},
878591e34a0SKrishna Manikandan 	{
879591e34a0SKrishna Manikandan 	.name = "ctl_2", .id = CTL_2,
880591e34a0SKrishna Manikandan 	.base = 0x17000, .len = 0x1E8,
881667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
882667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
883591e34a0SKrishna Manikandan 	},
884591e34a0SKrishna Manikandan 	{
885591e34a0SKrishna Manikandan 	.name = "ctl_3", .id = CTL_3,
886591e34a0SKrishna Manikandan 	.base = 0x18000, .len = 0x1E8,
887667e9985SDmitry Baryshkov 	.features = CTL_SC7280_MASK,
888667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
889591e34a0SKrishna Manikandan 	},
890591e34a0SKrishna Manikandan };
891591e34a0SKrishna Manikandan 
8925334087eSLoic Poulain static const struct dpu_ctl_cfg qcm2290_ctl[] = {
8935334087eSLoic Poulain 	{
8945334087eSLoic Poulain 	.name = "ctl_0", .id = CTL_0,
8955334087eSLoic Poulain 	.base = 0x1000, .len = 0x1dc,
8965334087eSLoic Poulain 	.features = BIT(DPU_CTL_ACTIVE_CFG),
8975334087eSLoic Poulain 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
8985334087eSLoic Poulain 	},
8995334087eSLoic Poulain };
9005334087eSLoic Poulain 
90125fdd593SJeykumar Sankaran /*************************************************************
90225fdd593SJeykumar Sankaran  * SSPP sub blocks config
90325fdd593SJeykumar Sankaran  *************************************************************/
90425fdd593SJeykumar Sankaran 
90525fdd593SJeykumar Sankaran /* SSPP common configuration */
906b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \
90725fdd593SJeykumar Sankaran 	{ \
90825fdd593SJeykumar Sankaran 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
90925fdd593SJeykumar Sankaran 	.maxupscale = MAX_UPSCALE_RATIO, \
91025fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
91125fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
91225fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
91325fdd593SJeykumar Sankaran 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
914b75ab05aSShubhashree Dhar 		.id = qseed_ver, \
91525fdd593SJeykumar Sankaran 		.base = 0xa00, .len = 0xa0,}, \
91625fdd593SJeykumar Sankaran 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
91725fdd593SJeykumar Sankaran 		.id = DPU_SSPP_CSC_10BIT, \
91825fdd593SJeykumar Sankaran 		.base = 0x1a00, .len = 0x100,}, \
91925fdd593SJeykumar Sankaran 	.format_list = plane_formats_yuv, \
920e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
92125fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
922e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
923dabfdd89SVinod Polimera 	.rotation_cfg = NULL, \
924dabfdd89SVinod Polimera 	}
925dabfdd89SVinod Polimera 
926dabfdd89SVinod Polimera #define _VIG_SBLK_ROT(num, sdma_pri, qseed_ver, rot_cfg) \
927dabfdd89SVinod Polimera 	{ \
928dabfdd89SVinod Polimera 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
929dabfdd89SVinod Polimera 	.maxupscale = MAX_UPSCALE_RATIO, \
930dabfdd89SVinod Polimera 	.smart_dma_priority = sdma_pri, \
931dabfdd89SVinod Polimera 	.src_blk = {.name = STRCAT("sspp_src_", num), \
932dabfdd89SVinod Polimera 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
933dabfdd89SVinod Polimera 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
934dabfdd89SVinod Polimera 		.id = qseed_ver, \
935dabfdd89SVinod Polimera 		.base = 0xa00, .len = 0xa0,}, \
936dabfdd89SVinod Polimera 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
937dabfdd89SVinod Polimera 		.id = DPU_SSPP_CSC_10BIT, \
938dabfdd89SVinod Polimera 		.base = 0x1a00, .len = 0x100,}, \
939dabfdd89SVinod Polimera 	.format_list = plane_formats_yuv, \
940dabfdd89SVinod Polimera 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
941dabfdd89SVinod Polimera 	.virt_format_list = plane_formats, \
942dabfdd89SVinod Polimera 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
943dabfdd89SVinod Polimera 	.rotation_cfg = rot_cfg, \
94425fdd593SJeykumar Sankaran 	}
94525fdd593SJeykumar Sankaran 
94625fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \
94725fdd593SJeykumar Sankaran 	{ \
94825fdd593SJeykumar Sankaran 	.maxdwnscale = SSPP_UNITY_SCALE, \
94925fdd593SJeykumar Sankaran 	.maxupscale = SSPP_UNITY_SCALE, \
95025fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
95125fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
95225fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
95325fdd593SJeykumar Sankaran 	.format_list = plane_formats, \
954e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats), \
95525fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
956e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
95725fdd593SJeykumar Sankaran 	}
95825fdd593SJeykumar Sankaran 
95994391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_0 =
96094391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("0", 0, DPU_SSPP_SCALER_QSEED3);
96194391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_1 =
96294391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("1", 0, DPU_SSPP_SCALER_QSEED3);
96394391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_2 =
96494391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("2", 0, DPU_SSPP_SCALER_QSEED3);
96594391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_3 =
96694391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("3", 0, DPU_SSPP_SCALER_QSEED3);
96794391a14SAngeloGioacchino Del Regno 
968dabfdd89SVinod Polimera static const struct dpu_rotation_cfg dpu_rot_sc7280_cfg_v2 = {
969dabfdd89SVinod Polimera 	.rot_maxheight = 1088,
970dabfdd89SVinod Polimera 	.rot_num_formats = ARRAY_SIZE(rotation_v2_formats),
971dabfdd89SVinod Polimera 	.rot_format_list = rotation_v2_formats,
972dabfdd89SVinod Polimera };
973dabfdd89SVinod Polimera 
974b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 =
975b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3);
976b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 =
977b75ab05aSShubhashree Dhar 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3);
978b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 =
979b75ab05aSShubhashree Dhar 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3);
980b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 =
981b75ab05aSShubhashree Dhar 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3);
98225fdd593SJeykumar Sankaran 
98325fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1);
98425fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2);
98525fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3);
98625fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4);
98725fdd593SJeykumar Sankaran 
98807ca1fc0SSravanthi Kollukuduru #define SSPP_BLK(_name, _id, _base, _features, \
98907ca1fc0SSravanthi Kollukuduru 		_sblk, _xinid, _type, _clkctrl) \
99025fdd593SJeykumar Sankaran 	{ \
99125fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
99225fdd593SJeykumar Sankaran 	.base = _base, .len = 0x1c8, \
99307ca1fc0SSravanthi Kollukuduru 	.features = _features, \
99425fdd593SJeykumar Sankaran 	.sblk = &_sblk, \
99525fdd593SJeykumar Sankaran 	.xin_id = _xinid, \
99607ca1fc0SSravanthi Kollukuduru 	.type = _type, \
99725fdd593SJeykumar Sankaran 	.clk_ctrl = _clkctrl \
99825fdd593SJeykumar Sankaran 	}
99925fdd593SJeykumar Sankaran 
100094391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_cfg msm8998_sspp[] = {
100194391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_MSM8998_MASK,
100294391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
100394391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_MSM8998_MASK,
100494391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
100594391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_MSM8998_MASK,
100694391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
100794391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_MSM8998_MASK,
100894391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
100994391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_MSM8998_MASK,
101094391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
101194391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_MSM8998_MASK,
101294391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
101394391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_MSM8998_MASK,
101494391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
101594391a14SAngeloGioacchino Del Regno 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_MSM8998_MASK,
101694391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
101794391a14SAngeloGioacchino Del Regno };
101894391a14SAngeloGioacchino Del Regno 
1019abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = {
102007ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SDM845_MASK,
102107ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
102207ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SDM845_MASK,
102307ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
102407ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SDM845_MASK,
102507ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
102607ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SDM845_MASK,
102707ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
102807ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
102907ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
103007ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
103107ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
103207ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
103307ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
103407ca1fc0SSravanthi Kollukuduru 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
103507ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
103625fdd593SJeykumar Sankaran };
103725fdd593SJeykumar Sankaran 
1038b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 =
1039b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4);
1040b75ab05aSShubhashree Dhar 
1041dabfdd89SVinod Polimera static const struct dpu_sspp_sub_blks sc7280_vig_sblk_0 =
1042dabfdd89SVinod Polimera 			_VIG_SBLK_ROT("0", 4, DPU_SSPP_SCALER_QSEED4, &dpu_rot_sc7280_cfg_v2);
1043dabfdd89SVinod Polimera 
10447bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = {
10457bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
1046b75ab05aSShubhashree Dhar 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
10477bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
10487bdc0c4bSKalyan Thota 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
10497b149f2bSKalyan Thota 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
10507b149f2bSKalyan Thota 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
10517bdc0c4bSKalyan Thota 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
10527b149f2bSKalyan Thota 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
10537bdc0c4bSKalyan Thota };
10547bdc0c4bSKalyan Thota 
10553581b706SAdam Skladowski static const struct dpu_sspp_sub_blks sm6115_vig_sblk_0 =
10563581b706SAdam Skladowski 				_VIG_SBLK("0", 2, DPU_SSPP_SCALER_QSEED3LITE);
10573581b706SAdam Skladowski 
10583581b706SAdam Skladowski static const struct dpu_sspp_cfg sm6115_sspp[] = {
10593581b706SAdam Skladowski 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK,
10603581b706SAdam Skladowski 		sm6115_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
10613581b706SAdam Skladowski 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
10623581b706SAdam Skladowski 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
10633581b706SAdam Skladowski };
10643581b706SAdam Skladowski 
1065d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 =
1066d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE);
1067d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 =
1068d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE);
1069d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 =
1070d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE);
1071d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 =
1072d21fc5dfSDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE);
1073d21fc5dfSDmitry Baryshkov 
1074d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = {
1075d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK,
1076d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
1077d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SM8250_MASK,
1078d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
1079d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SM8250_MASK,
1080d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
1081d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SM8250_MASK,
1082d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
1083d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
1084d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
1085d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
1086d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
1087d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
1088d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
1089d21fc5dfSDmitry Baryshkov 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
1090d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
1091d21fc5dfSDmitry Baryshkov };
1092d21fc5dfSDmitry Baryshkov 
1093100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_0 =
1094100d7ef6SDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE);
1095100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_1 =
1096100d7ef6SDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE);
1097100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_2 =
1098100d7ef6SDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE);
1099100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_3 =
1100100d7ef6SDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE);
1101100d7ef6SDmitry Baryshkov 
1102100d7ef6SDmitry Baryshkov static const struct dpu_sspp_cfg sm8450_sspp[] = {
1103100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK,
1104100d7ef6SDmitry Baryshkov 		sm8450_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
1105100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SC7180_MASK,
1106100d7ef6SDmitry Baryshkov 		sm8450_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
1107100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SC7180_MASK,
1108100d7ef6SDmitry Baryshkov 		sm8450_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
1109100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SC7180_MASK,
1110100d7ef6SDmitry Baryshkov 		sm8450_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
1111100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
1112100d7ef6SDmitry Baryshkov 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
1113100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_SDM845_MASK,
1114100d7ef6SDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
1115100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
1116100d7ef6SDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
1117100d7ef6SDmitry Baryshkov 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000,  DMA_CURSOR_SDM845_MASK,
1118100d7ef6SDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
1119100d7ef6SDmitry Baryshkov };
1120100d7ef6SDmitry Baryshkov 
1121591e34a0SKrishna Manikandan static const struct dpu_sspp_cfg sc7280_sspp[] = {
1122dabfdd89SVinod Polimera 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7280_MASK,
1123dabfdd89SVinod Polimera 		sc7280_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
1124591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
1125591e34a0SKrishna Manikandan 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
1126591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_CURSOR_SDM845_MASK,
1127591e34a0SKrishna Manikandan 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0),
1128591e34a0SKrishna Manikandan 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_SDM845_MASK,
1129591e34a0SKrishna Manikandan 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1),
1130591e34a0SKrishna Manikandan };
1131591e34a0SKrishna Manikandan 
11325334087eSLoic Poulain 
11335334087eSLoic Poulain #define _VIG_SBLK_NOSCALE(num, sdma_pri) \
11345334087eSLoic Poulain 	{ \
11355334087eSLoic Poulain 	.maxdwnscale = SSPP_UNITY_SCALE, \
11365334087eSLoic Poulain 	.maxupscale = SSPP_UNITY_SCALE, \
11375334087eSLoic Poulain 	.smart_dma_priority = sdma_pri, \
11385334087eSLoic Poulain 	.src_blk = {.name = STRCAT("sspp_src_", num), \
11395334087eSLoic Poulain 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
11405334087eSLoic Poulain 	.format_list = plane_formats_yuv, \
11415334087eSLoic Poulain 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
11425334087eSLoic Poulain 	.virt_format_list = plane_formats, \
11435334087eSLoic Poulain 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
11445334087eSLoic Poulain 	}
11455334087eSLoic Poulain 
11465334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_vig_sblk_0 = _VIG_SBLK_NOSCALE("0", 2);
11475334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_dma_sblk_0 = _DMA_SBLK("8", 1);
11485334087eSLoic Poulain 
11495334087eSLoic Poulain static const struct dpu_sspp_cfg qcm2290_sspp[] = {
11505334087eSLoic Poulain 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_QCM2290_MASK,
11515334087eSLoic Poulain 		 qcm2290_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
11525334087eSLoic Poulain 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000,  DMA_SDM845_MASK,
11535334087eSLoic Poulain 		 qcm2290_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
11545334087eSLoic Poulain };
11555334087eSLoic Poulain 
115625fdd593SJeykumar Sankaran /*************************************************************
115725fdd593SJeykumar Sankaran  * MIXER sub blocks config
115825fdd593SJeykumar Sankaran  *************************************************************/
11597bdc0c4bSKalyan Thota 
1160e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \
116125fdd593SJeykumar Sankaran 	{ \
116225fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
116325fdd593SJeykumar Sankaran 	.base = _base, .len = 0x320, \
11647bdc0c4bSKalyan Thota 	.features = _fmask, \
11657bdc0c4bSKalyan Thota 	.sblk = _sblk, \
116625fdd593SJeykumar Sankaran 	.pingpong = _pp, \
1167e47616dfSKalyan Thota 	.lm_pair_mask = (1 << _lmpair), \
1168e47616dfSKalyan Thota 	.dspp = _dspp \
116925fdd593SJeykumar Sankaran 	}
117025fdd593SJeykumar Sankaran 
117194391a14SAngeloGioacchino Del Regno /* MSM8998 */
117294391a14SAngeloGioacchino Del Regno 
117394391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks msm8998_lm_sblk = {
117494391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
117594391a14SAngeloGioacchino Del Regno 	.maxblendstages = 7, /* excluding base layer */
117694391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
117794391a14SAngeloGioacchino Del Regno 		0x20, 0x50, 0x80, 0xb0, 0x230,
117894391a14SAngeloGioacchino Del Regno 		0x260, 0x290
117994391a14SAngeloGioacchino Del Regno 	},
118094391a14SAngeloGioacchino Del Regno };
118194391a14SAngeloGioacchino Del Regno 
118294391a14SAngeloGioacchino Del Regno static const struct dpu_lm_cfg msm8998_lm[] = {
11832d8a4edbSDmitry Baryshkov 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_MSM8998_MASK,
118494391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_0, LM_2, DSPP_0),
11852d8a4edbSDmitry Baryshkov 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_MSM8998_MASK,
118694391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_1, LM_5, DSPP_1),
11872d8a4edbSDmitry Baryshkov 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_MSM8998_MASK,
118894391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_2, LM_0, 0),
11892d8a4edbSDmitry Baryshkov 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_MSM8998_MASK,
119094391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
11912d8a4edbSDmitry Baryshkov 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_MSM8998_MASK,
119294391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
11932d8a4edbSDmitry Baryshkov 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_MSM8998_MASK,
119494391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_3, LM_1, 0),
119594391a14SAngeloGioacchino Del Regno };
119694391a14SAngeloGioacchino Del Regno 
119794391a14SAngeloGioacchino Del Regno /* SDM845 */
119894391a14SAngeloGioacchino Del Regno 
119994391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks sdm845_lm_sblk = {
120094391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
120194391a14SAngeloGioacchino Del Regno 	.maxblendstages = 11, /* excluding base layer */
120294391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
120394391a14SAngeloGioacchino Del Regno 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98,
120494391a14SAngeloGioacchino Del Regno 		0xb0, 0xc8, 0xe0, 0xf8, 0x110
120594391a14SAngeloGioacchino Del Regno 	},
120694391a14SAngeloGioacchino Del Regno };
120794391a14SAngeloGioacchino Del Regno 
1208abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = {
12097bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
1210e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_0, LM_1, 0),
12117bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
1212e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_1, LM_0, 0),
12137bdc0c4bSKalyan Thota 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
1214e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_2, LM_5, 0),
12157bdc0c4bSKalyan Thota 	LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK,
1216e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
12177bdc0c4bSKalyan Thota 	LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK,
1218e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
12197bdc0c4bSKalyan Thota 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
1220e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
12217bdc0c4bSKalyan Thota };
12227bdc0c4bSKalyan Thota 
12237bdc0c4bSKalyan Thota /* SC7180 */
12247bdc0c4bSKalyan Thota 
12257bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = {
12267bdc0c4bSKalyan Thota 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
12277bdc0c4bSKalyan Thota 	.maxblendstages = 7, /* excluding base layer */
12287bdc0c4bSKalyan Thota 	.blendstage_base = { /* offsets relative to mixer base */
12297bdc0c4bSKalyan Thota 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0
12307bdc0c4bSKalyan Thota 	},
12317bdc0c4bSKalyan Thota };
12327bdc0c4bSKalyan Thota 
12337bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = {
12347bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
1235e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
12367bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SC7180_MASK,
1237e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_1, LM_0, 0),
123825fdd593SJeykumar Sankaran };
123925fdd593SJeykumar Sankaran 
1240386fced3SJonathan Marek /* SM8150 */
1241386fced3SJonathan Marek 
1242386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = {
1243386fced3SJonathan Marek 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
124405ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
1245386fced3SJonathan Marek 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
124605ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1),
1247386fced3SJonathan Marek 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
1248386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_2, LM_3, 0),
1249386fced3SJonathan Marek 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK,
1250386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
1251386fced3SJonathan Marek 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK,
1252386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_4, LM_5, 0),
1253386fced3SJonathan Marek 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
1254386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_5, LM_4, 0),
1255386fced3SJonathan Marek };
1256386fced3SJonathan Marek 
1257591e34a0SKrishna Manikandan static const struct dpu_lm_cfg sc7280_lm[] = {
1258591e34a0SKrishna Manikandan 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
1259fca5ad26SKalyan Thota 		&sc7180_lm_sblk, PINGPONG_0, 0, DSPP_0),
1260591e34a0SKrishna Manikandan 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SC7180_MASK,
1261591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_2, LM_3, 0),
1262591e34a0SKrishna Manikandan 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SC7180_MASK,
1263591e34a0SKrishna Manikandan 		&sc7180_lm_sblk, PINGPONG_3, LM_2, 0),
1264591e34a0SKrishna Manikandan };
1265591e34a0SKrishna Manikandan 
12665334087eSLoic Poulain /* QCM2290 */
12675334087eSLoic Poulain 
12685334087eSLoic Poulain static const struct dpu_lm_sub_blks qcm2290_lm_sblk = {
12695334087eSLoic Poulain 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
12705334087eSLoic Poulain 	.maxblendstages = 4, /* excluding base layer */
12715334087eSLoic Poulain 	.blendstage_base = { /* offsets relative to mixer base */
12725334087eSLoic Poulain 		0x20, 0x38, 0x50, 0x68
12735334087eSLoic Poulain 	},
12745334087eSLoic Poulain };
12755334087eSLoic Poulain 
12765334087eSLoic Poulain static const struct dpu_lm_cfg qcm2290_lm[] = {
12775334087eSLoic Poulain 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK,
12785334087eSLoic Poulain 		&qcm2290_lm_sblk, PINGPONG_0, 0, DSPP_0),
12795334087eSLoic Poulain };
12805334087eSLoic Poulain 
128125fdd593SJeykumar Sankaran /*************************************************************
1282e47616dfSKalyan Thota  * DSPP sub blocks config
1283e47616dfSKalyan Thota  *************************************************************/
128494391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
128594391a14SAngeloGioacchino Del Regno 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
128694391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
128794391a14SAngeloGioacchino Del Regno 	.gc = { .id = DPU_DSPP_GC, .base = 0x17c0,
128894391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
128994391a14SAngeloGioacchino Del Regno };
129094391a14SAngeloGioacchino Del Regno 
12914259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
12924259ff7aSKalyan Thota 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
12934259ff7aSKalyan Thota 		.len = 0x90, .version = 0x10000},
12944259ff7aSKalyan Thota };
12954259ff7aSKalyan Thota 
129605ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = {
129705ae91d9SDmitry Baryshkov 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
129805ae91d9SDmitry Baryshkov 		.len = 0x90, .version = 0x40000},
129905ae91d9SDmitry Baryshkov };
130005ae91d9SDmitry Baryshkov 
1301862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \
1302e47616dfSKalyan Thota 		{\
1303e47616dfSKalyan Thota 		.name = _name, .id = _id, \
1304e47616dfSKalyan Thota 		.base = _base, .len = 0x1800, \
1305862314bcSAngeloGioacchino Del Regno 		.features = _mask, \
130605ae91d9SDmitry Baryshkov 		.sblk = _sblk \
1307e47616dfSKalyan Thota 		}
1308e47616dfSKalyan Thota 
130994391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_cfg msm8998_dspp[] = {
131094391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK,
131194391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
131294391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK,
131394391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
131494391a14SAngeloGioacchino Del Regno };
131594391a14SAngeloGioacchino Del Regno 
1316e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = {
1317862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
1318862314bcSAngeloGioacchino Del Regno 		 &sc7180_dspp_sblk),
131905ae91d9SDmitry Baryshkov };
132005ae91d9SDmitry Baryshkov 
132105ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = {
1322862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
1323862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1324862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
1325862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1326862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK,
1327862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1328862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK,
1329862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1330e47616dfSKalyan Thota };
1331386fced3SJonathan Marek 
13325334087eSLoic Poulain static const struct dpu_dspp_cfg qcm2290_dspp[] = {
13335334087eSLoic Poulain 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
13345334087eSLoic Poulain 		 &sm8150_dspp_sblk),
13355334087eSLoic Poulain };
13365334087eSLoic Poulain 
1337e47616dfSKalyan Thota /*************************************************************
133825fdd593SJeykumar Sankaran  * PINGPONG sub blocks config
133925fdd593SJeykumar Sankaran  *************************************************************/
134025fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = {
134125fdd593SJeykumar Sankaran 	.te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0,
134225fdd593SJeykumar Sankaran 		.version = 0x1},
134325fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
134425fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
134525fdd593SJeykumar Sankaran };
134625fdd593SJeykumar Sankaran 
134725fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = {
134825fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
134925fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
135025fdd593SJeykumar Sankaran };
135125fdd593SJeykumar Sankaran 
1352591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
1353591e34a0SKrishna Manikandan 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0,
1354591e34a0SKrishna Manikandan 	.len = 0x20, .version = 0x20000},
1355591e34a0SKrishna Manikandan };
1356591e34a0SKrishna Manikandan 
1357667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
135825fdd593SJeykumar Sankaran 	{\
135925fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
136025fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
136125fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_SPLIT_MASK, \
13624369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
1363667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
1364667e9985SDmitry Baryshkov 	.intr_done = _done, \
1365667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
136625fdd593SJeykumar Sankaran 	}
1367667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
136825fdd593SJeykumar Sankaran 	{\
136925fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
137025fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
137125fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_MASK, \
13724369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
1373667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
1374667e9985SDmitry Baryshkov 	.intr_done = _done, \
1375667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
137625fdd593SJeykumar Sankaran 	}
137725fdd593SJeykumar Sankaran 
1378abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = {
1379667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te,
1380667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1381667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1382667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te,
1383667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1384667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1385667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk,
1386667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1387667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1388667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk,
1389667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1390667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
139125fdd593SJeykumar Sankaran };
139225fdd593SJeykumar Sankaran 
13937bdc0c4bSKalyan Thota static struct dpu_pingpong_cfg sc7180_pp[] = {
1394667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1),
1395667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1),
13967bdc0c4bSKalyan Thota };
13977bdc0c4bSKalyan Thota 
1398386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = {
1399667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te,
1400667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1401667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1402667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te,
1403667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1404667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1405667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk,
1406667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1407667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1408667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk,
1409667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1410667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
1411667e9985SDmitry Baryshkov 	PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk,
1412667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
1413667e9985SDmitry Baryshkov 			-1),
1414667e9985SDmitry Baryshkov 	PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk,
14153431c17bSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
1416667e9985SDmitry Baryshkov 			-1),
14174369c93cSDmitry Baryshkov };
14184369c93cSDmitry Baryshkov 
14190e91bcbbSRobert Foss static const struct dpu_pingpong_cfg sm8350_pp[] = {
14200e91bcbbSRobert Foss 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x69000, MERGE_3D_0, sdm845_pp_sblk_te,
14210e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
14220e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
14230e91bcbbSRobert Foss 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x6a000, MERGE_3D_0, sdm845_pp_sblk_te,
14240e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
14250e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
14260e91bcbbSRobert Foss 	PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, MERGE_3D_1, sdm845_pp_sblk,
14270e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
14280e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
14290e91bcbbSRobert Foss 	PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, MERGE_3D_1, sdm845_pp_sblk,
14300e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
14310e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
14320e91bcbbSRobert Foss 	PP_BLK("pingpong_4", PINGPONG_4, 0x6d000, MERGE_3D_2, sdm845_pp_sblk,
14330e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
14340e91bcbbSRobert Foss 			-1),
14350e91bcbbSRobert Foss 	PP_BLK("pingpong_5", PINGPONG_5, 0x6e000, MERGE_3D_2, sdm845_pp_sblk,
14360e91bcbbSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
14370e91bcbbSRobert Foss 			-1),
14380e91bcbbSRobert Foss };
14390e91bcbbSRobert Foss 
14401a5b5372SRobert Foss static const struct dpu_pingpong_cfg sc7280_pp[] = {
14411a5b5372SRobert Foss 	PP_BLK("pingpong_0", PINGPONG_0, 0x59000, 0, sc7280_pp_sblk, -1, -1),
14421a5b5372SRobert Foss 	PP_BLK("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1),
14431a5b5372SRobert Foss 	PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1),
14441a5b5372SRobert Foss 	PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1),
14451a5b5372SRobert Foss };
14461a5b5372SRobert Foss 
14475334087eSLoic Poulain static struct dpu_pingpong_cfg qcm2290_pp[] = {
14485334087eSLoic Poulain 	PP_BLK("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk,
14495334087eSLoic Poulain 		DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
14505334087eSLoic Poulain 		DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
14515334087eSLoic Poulain };
14525334087eSLoic Poulain 
1453100d7ef6SDmitry Baryshkov /* FIXME: interrupts */
1454100d7ef6SDmitry Baryshkov static const struct dpu_pingpong_cfg sm8450_pp[] = {
1455100d7ef6SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x69000, MERGE_3D_0, sdm845_pp_sblk_te,
1456100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1457100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1458100d7ef6SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x6a000, MERGE_3D_0, sdm845_pp_sblk_te,
1459100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1460100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1461100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, MERGE_3D_1, sdm845_pp_sblk,
1462100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1463100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1464100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, MERGE_3D_1, sdm845_pp_sblk,
1465100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1466100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
1467100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_4", PINGPONG_4, 0x6d000, MERGE_3D_2, sdm845_pp_sblk,
1468100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
1469100d7ef6SDmitry Baryshkov 			-1),
1470100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_5", PINGPONG_5, 0x6e000, MERGE_3D_2, sdm845_pp_sblk,
1471100d7ef6SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
1472100d7ef6SDmitry Baryshkov 			-1),
1473100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_6", PINGPONG_6, 0x65800, MERGE_3D_3, sdm845_pp_sblk,
1474100d7ef6SDmitry Baryshkov 			-1,
1475100d7ef6SDmitry Baryshkov 			-1),
1476100d7ef6SDmitry Baryshkov 	PP_BLK("pingpong_7", PINGPONG_7, 0x65c00, MERGE_3D_3, sdm845_pp_sblk,
1477100d7ef6SDmitry Baryshkov 			-1,
1478100d7ef6SDmitry Baryshkov 			-1),
1479100d7ef6SDmitry Baryshkov };
1480100d7ef6SDmitry Baryshkov 
14814369c93cSDmitry Baryshkov /*************************************************************
14824369c93cSDmitry Baryshkov  * MERGE_3D sub blocks config
14834369c93cSDmitry Baryshkov  *************************************************************/
14844369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \
14854369c93cSDmitry Baryshkov 	{\
14864369c93cSDmitry Baryshkov 	.name = _name, .id = _id, \
14874369c93cSDmitry Baryshkov 	.base = _base, .len = 0x100, \
14884369c93cSDmitry Baryshkov 	.features = MERGE_3D_SM8150_MASK, \
14894369c93cSDmitry Baryshkov 	.sblk = NULL \
14904369c93cSDmitry Baryshkov 	}
14914369c93cSDmitry Baryshkov 
14924369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = {
14934369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000),
14944369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100),
14954369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200),
1496386fced3SJonathan Marek };
1497386fced3SJonathan Marek 
14980e91bcbbSRobert Foss static const struct dpu_merge_3d_cfg sm8350_merge_3d[] = {
14990e91bcbbSRobert Foss 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x4e000),
15000e91bcbbSRobert Foss 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x4f000),
15010e91bcbbSRobert Foss 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x50000),
15020e91bcbbSRobert Foss };
15030e91bcbbSRobert Foss 
1504100d7ef6SDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8450_merge_3d[] = {
1505100d7ef6SDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x4e000),
1506100d7ef6SDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x4f000),
1507100d7ef6SDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x50000),
1508100d7ef6SDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_3", MERGE_3D_3, 0x65f00),
1509100d7ef6SDmitry Baryshkov };
1510100d7ef6SDmitry Baryshkov 
15117c5ab05eSVinod Koul /*************************************************************
15127c5ab05eSVinod Koul  * DSC sub blocks config
15137c5ab05eSVinod Koul  *************************************************************/
15147c5ab05eSVinod Koul #define DSC_BLK(_name, _id, _base) \
15157c5ab05eSVinod Koul 	{\
15167c5ab05eSVinod Koul 	.name = _name, .id = _id, \
15177c5ab05eSVinod Koul 	.base = _base, .len = 0x140, \
15187c5ab05eSVinod Koul 	.features = 0, \
15197c5ab05eSVinod Koul 	}
15207c5ab05eSVinod Koul 
15217c5ab05eSVinod Koul static struct dpu_dsc_cfg sdm845_dsc[] = {
15227c5ab05eSVinod Koul 	DSC_BLK("dsc_0", DSC_0, 0x80000),
15237c5ab05eSVinod Koul 	DSC_BLK("dsc_1", DSC_1, 0x80400),
15247c5ab05eSVinod Koul 	DSC_BLK("dsc_2", DSC_2, 0x80800),
15257c5ab05eSVinod Koul 	DSC_BLK("dsc_3", DSC_3, 0x80c00),
15267c5ab05eSVinod Koul };
15277c5ab05eSVinod Koul 
15280e91bcbbSRobert Foss static struct dpu_dsc_cfg sm8350_dsc[] = {
15290e91bcbbSRobert Foss 	DSC_BLK("dsc_0", DSC_0, 0x80000),
15300e91bcbbSRobert Foss 	DSC_BLK("dsc_1", DSC_1, 0x81000),
15310e91bcbbSRobert Foss };
15320e91bcbbSRobert Foss 
153325fdd593SJeykumar Sankaran /*************************************************************
153425fdd593SJeykumar Sankaran  * INTF sub blocks config
153525fdd593SJeykumar Sankaran  *************************************************************/
1536667e9985SDmitry Baryshkov #define INTF_BLK(_name, _id, _base, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \
153725fdd593SJeykumar Sankaran 	{\
153825fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
153925fdd593SJeykumar Sankaran 	.base = _base, .len = 0x280, \
1540cace3ac4SJonathan Marek 	.features = _features, \
154125fdd593SJeykumar Sankaran 	.type = _type, \
154225fdd593SJeykumar Sankaran 	.controller_id = _ctrl_id, \
1543667e9985SDmitry Baryshkov 	.prog_fetch_lines_worst_case = _progfetch, \
1544667e9985SDmitry Baryshkov 	.intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \
1545667e9985SDmitry Baryshkov 	.intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \
154625fdd593SJeykumar Sankaran 	}
154725fdd593SJeykumar Sankaran 
154894391a14SAngeloGioacchino Del Regno static const struct dpu_intf_cfg msm8998_intf[] = {
154994391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
155094391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
155194391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
155294391a14SAngeloGioacchino Del Regno 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_HDMI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
155394391a14SAngeloGioacchino Del Regno };
155494391a14SAngeloGioacchino Del Regno 
1555abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = {
1556667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1557667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1558667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1559667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
156025fdd593SJeykumar Sankaran };
156125fdd593SJeykumar Sankaran 
15627bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = {
1563bb3de286SBjorn Andersson 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1564667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
15657bdc0c4bSKalyan Thota };
15667bdc0c4bSKalyan Thota 
1567386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = {
1568667e9985SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1569667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1570667e9985SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1571667e9985SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1572386fced3SJonathan Marek };
1573386fced3SJonathan Marek 
1574591e34a0SKrishna Manikandan static const struct dpu_intf_cfg sc7280_intf[] = {
1575ef7837ffSSankeerth Billakanti 	INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1576667e9985SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1577ef7837ffSSankeerth Billakanti 	INTF_BLK("intf_5", INTF_5, 0x39000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
1578591e34a0SKrishna Manikandan };
1579591e34a0SKrishna Manikandan 
15800e91bcbbSRobert Foss static const struct dpu_intf_cfg sm8350_intf[] = {
15810e91bcbbSRobert Foss 	INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
15820e91bcbbSRobert Foss 	INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
15830e91bcbbSRobert Foss 	INTF_BLK("intf_2", INTF_2, 0x36000, INTF_DSI, 1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
15840e91bcbbSRobert Foss 	INTF_BLK("intf_3", INTF_3, 0x37000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
15850e91bcbbSRobert Foss };
15860e91bcbbSRobert Foss 
1587f3af2d6eSRob Clark static const struct dpu_intf_cfg sc8180x_intf[] = {
1588f3af2d6eSRob Clark 	INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1589f3af2d6eSRob Clark 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1590f3af2d6eSRob Clark 	INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1591f3af2d6eSRob Clark 	/* INTF_3 is for MST, wired to INTF_DP 0 and 1, use dummy index until this is supported */
1592f3af2d6eSRob Clark 	INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 999, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1593f3af2d6eSRob Clark 	INTF_BLK("intf_4", INTF_4, 0x6C000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 20, 21),
1594f3af2d6eSRob Clark 	INTF_BLK("intf_5", INTF_5, 0x6C800, INTF_DP, MSM_DP_CONTROLLER_2, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
1595f3af2d6eSRob Clark };
1596f3af2d6eSRob Clark 
15975334087eSLoic Poulain static const struct dpu_intf_cfg qcm2290_intf[] = {
15985334087eSLoic Poulain 	INTF_BLK("intf_0", INTF_0, 0x00000, INTF_NONE, 0, 0, 0, 0, 0, 0),
15995334087eSLoic Poulain 	INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
16005334087eSLoic Poulain };
16015334087eSLoic Poulain 
1602100d7ef6SDmitry Baryshkov static const struct dpu_intf_cfg sm8450_intf[] = {
1603100d7ef6SDmitry Baryshkov 	INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
1604100d7ef6SDmitry Baryshkov 	INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
1605100d7ef6SDmitry Baryshkov 	INTF_BLK("intf_2", INTF_2, 0x36000, INTF_DSI, 1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1606100d7ef6SDmitry Baryshkov 	INTF_BLK("intf_3", INTF_3, 0x37000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1607100d7ef6SDmitry Baryshkov };
1608100d7ef6SDmitry Baryshkov 
160925fdd593SJeykumar Sankaran /*************************************************************
161053324b99SAbhinav Kumar  * Writeback blocks config
161153324b99SAbhinav Kumar  *************************************************************/
161253324b99SAbhinav Kumar #define WB_BLK(_name, _id, _base, _features, _clk_ctrl, \
1613a370cc39SAbhinav Kumar 		__xin_id, vbif_id, _reg, _max_linewidth, _wb_done_bit) \
161453324b99SAbhinav Kumar 	{ \
161553324b99SAbhinav Kumar 	.name = _name, .id = _id, \
161653324b99SAbhinav Kumar 	.base = _base, .len = 0x2c8, \
161753324b99SAbhinav Kumar 	.features = _features, \
161853324b99SAbhinav Kumar 	.format_list = wb2_formats, \
161953324b99SAbhinav Kumar 	.num_formats = ARRAY_SIZE(wb2_formats), \
162053324b99SAbhinav Kumar 	.clk_ctrl = _clk_ctrl, \
162153324b99SAbhinav Kumar 	.xin_id = __xin_id, \
162253324b99SAbhinav Kumar 	.vbif_idx = vbif_id, \
1623a370cc39SAbhinav Kumar 	.maxlinewidth = _max_linewidth, \
162453324b99SAbhinav Kumar 	.intr_wb_done = DPU_IRQ_IDX(_reg, _wb_done_bit) \
162553324b99SAbhinav Kumar 	}
162653324b99SAbhinav Kumar 
162753324b99SAbhinav Kumar static const struct dpu_wb_cfg sm8250_wb[] = {
162853324b99SAbhinav Kumar 	WB_BLK("wb_2", WB_2, 0x65000, WB_SM8250_MASK, DPU_CLK_CTRL_WB2, 6,
1629a370cc39SAbhinav Kumar 			VBIF_RT, MDP_SSPP_TOP0_INTR, 4096, 4),
163053324b99SAbhinav Kumar };
163153324b99SAbhinav Kumar 
163253324b99SAbhinav Kumar /*************************************************************
163325fdd593SJeykumar Sankaran  * VBIF sub blocks config
163425fdd593SJeykumar Sankaran  *************************************************************/
163525fdd593SJeykumar Sankaran /* VBIF QOS remap */
163694391a14SAngeloGioacchino Del Regno static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2};
163794391a14SAngeloGioacchino Del Regno static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1};
1638abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6};
1639abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3};
164025fdd593SJeykumar Sankaran 
164194391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
164294391a14SAngeloGioacchino Del Regno 	{
164394391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 30,
164494391a14SAngeloGioacchino Del Regno 		.ot_limit = 2,
164594391a14SAngeloGioacchino Del Regno 	},
164694391a14SAngeloGioacchino Del Regno 	{
164794391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 60,
164894391a14SAngeloGioacchino Del Regno 		.ot_limit = 6,
164994391a14SAngeloGioacchino Del Regno 	},
165094391a14SAngeloGioacchino Del Regno 	{
165194391a14SAngeloGioacchino Del Regno 		.pps = 3840 * 2160 * 30,
165294391a14SAngeloGioacchino Del Regno 		.ot_limit = 16,
165394391a14SAngeloGioacchino Del Regno 	},
165494391a14SAngeloGioacchino Del Regno };
165594391a14SAngeloGioacchino Del Regno 
165694391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_cfg msm8998_vbif[] = {
165794391a14SAngeloGioacchino Del Regno 	{
1658606f015bSDmitry Baryshkov 	.name = "vbif_rt", .id = VBIF_RT,
165994391a14SAngeloGioacchino Del Regno 	.base = 0, .len = 0x1040,
166094391a14SAngeloGioacchino Del Regno 	.default_ot_rd_limit = 32,
166194391a14SAngeloGioacchino Del Regno 	.default_ot_wr_limit = 32,
166294391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM),
166394391a14SAngeloGioacchino Del Regno 	.xin_halt_timeout = 0x4000,
1664c8744315SDmitry Baryshkov 	.qos_rp_remap_size = 0x20,
166594391a14SAngeloGioacchino Del Regno 	.dynamic_ot_rd_tbl = {
166694391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
166794391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
166894391a14SAngeloGioacchino Del Regno 		},
166994391a14SAngeloGioacchino Del Regno 	.dynamic_ot_wr_tbl = {
167094391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
167194391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
167294391a14SAngeloGioacchino Del Regno 		},
167394391a14SAngeloGioacchino Del Regno 	.qos_rt_tbl = {
167494391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl),
167594391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_rt_pri_lvl,
167694391a14SAngeloGioacchino Del Regno 		},
167794391a14SAngeloGioacchino Del Regno 	.qos_nrt_tbl = {
167894391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl),
167994391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_nrt_pri_lvl,
168094391a14SAngeloGioacchino Del Regno 		},
168194391a14SAngeloGioacchino Del Regno 	.memtype_count = 14,
168294391a14SAngeloGioacchino Del Regno 	.memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
168394391a14SAngeloGioacchino Del Regno 	},
168494391a14SAngeloGioacchino Del Regno };
168594391a14SAngeloGioacchino Del Regno 
1686abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = {
168725fdd593SJeykumar Sankaran 	{
1688606f015bSDmitry Baryshkov 	.name = "vbif_rt", .id = VBIF_RT,
168925fdd593SJeykumar Sankaran 	.base = 0, .len = 0x1040,
169025fdd593SJeykumar Sankaran 	.features = BIT(DPU_VBIF_QOS_REMAP),
169125fdd593SJeykumar Sankaran 	.xin_halt_timeout = 0x4000,
1692c8744315SDmitry Baryshkov 	.qos_rp_remap_size = 0x40,
169325fdd593SJeykumar Sankaran 	.qos_rt_tbl = {
169425fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
169525fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_rt_pri_lvl,
169625fdd593SJeykumar Sankaran 		},
169725fdd593SJeykumar Sankaran 	.qos_nrt_tbl = {
169825fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
169925fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_nrt_pri_lvl,
170025fdd593SJeykumar Sankaran 		},
170125fdd593SJeykumar Sankaran 	.memtype_count = 14,
170225fdd593SJeykumar Sankaran 	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
170325fdd593SJeykumar Sankaran 	},
170425fdd593SJeykumar Sankaran };
170525fdd593SJeykumar Sankaran 
1706abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = {
170725fdd593SJeykumar Sankaran 	.base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c
170825fdd593SJeykumar Sankaran };
170925fdd593SJeykumar Sankaran 
1710386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = {
1711386fced3SJonathan Marek 	.base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c
1712386fced3SJonathan Marek };
1713386fced3SJonathan Marek 
1714af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = {
1715af776a3eSJonathan Marek 	.base = 0x0,
1716af776a3eSJonathan Marek 	.version = 0x00010002,
1717af776a3eSJonathan Marek 	.trigger_sel_off = 0x119c,
1718af776a3eSJonathan Marek 	.xin_id = 7,
1719af776a3eSJonathan Marek 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
1720af776a3eSJonathan Marek };
1721af776a3eSJonathan Marek 
17220e91bcbbSRobert Foss static const struct dpu_reg_dma_cfg sm8350_regdma = {
17230e91bcbbSRobert Foss 	.base = 0x400,
17240e91bcbbSRobert Foss 	.version = 0x00020000,
17250e91bcbbSRobert Foss 	.trigger_sel_off = 0x119c,
17260e91bcbbSRobert Foss 	.xin_id = 7,
17270e91bcbbSRobert Foss 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
17280e91bcbbSRobert Foss };
17290e91bcbbSRobert Foss 
1730100d7ef6SDmitry Baryshkov static const struct dpu_reg_dma_cfg sm8450_regdma = {
1731100d7ef6SDmitry Baryshkov 	.base = 0x0,
1732100d7ef6SDmitry Baryshkov 	.version = 0x00020000,
1733100d7ef6SDmitry Baryshkov 	.trigger_sel_off = 0x119c,
1734100d7ef6SDmitry Baryshkov 	.xin_id = 7,
1735100d7ef6SDmitry Baryshkov 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
1736100d7ef6SDmitry Baryshkov };
1737100d7ef6SDmitry Baryshkov 
173825fdd593SJeykumar Sankaran /*************************************************************
173925fdd593SJeykumar Sankaran  * PERF data config
174025fdd593SJeykumar Sankaran  *************************************************************/
174125fdd593SJeykumar Sankaran 
174225fdd593SJeykumar Sankaran /* SSPP QOS LUTs */
174394391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_linear[] = {
174494391a14SAngeloGioacchino Del Regno 	{.fl = 4,  .lut = 0x1b},
174594391a14SAngeloGioacchino Del Regno 	{.fl = 5,  .lut = 0x5b},
174694391a14SAngeloGioacchino Del Regno 	{.fl = 6,  .lut = 0x15b},
174794391a14SAngeloGioacchino Del Regno 	{.fl = 7,  .lut = 0x55b},
174894391a14SAngeloGioacchino Del Regno 	{.fl = 8,  .lut = 0x155b},
174994391a14SAngeloGioacchino Del Regno 	{.fl = 9,  .lut = 0x555b},
175094391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1555b},
175194391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5555b},
175294391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15555b},
175394391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55555b},
175494391a14SAngeloGioacchino Del Regno 	{.fl = 14, .lut = 0},
175594391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1b},
175694391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0}
175794391a14SAngeloGioacchino Del Regno };
175894391a14SAngeloGioacchino Del Regno 
1759abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = {
176025fdd593SJeykumar Sankaran 	{.fl = 4, .lut = 0x357},
176125fdd593SJeykumar Sankaran 	{.fl = 5, .lut = 0x3357},
176225fdd593SJeykumar Sankaran 	{.fl = 6, .lut = 0x23357},
176325fdd593SJeykumar Sankaran 	{.fl = 7, .lut = 0x223357},
176425fdd593SJeykumar Sankaran 	{.fl = 8, .lut = 0x2223357},
176525fdd593SJeykumar Sankaran 	{.fl = 9, .lut = 0x22223357},
176625fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x222223357},
176725fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x2222223357},
176825fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x22222223357},
176925fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x222222223357},
177025fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1222222223357},
177125fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x11222222223357}
177225fdd593SJeykumar Sankaran };
177325fdd593SJeykumar Sankaran 
177494391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = {
177594391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1aaff},
177694391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5aaff},
177794391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15aaff},
177894391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55aaff},
177994391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1aaff},
178094391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0},
178194391a14SAngeloGioacchino Del Regno };
178294391a14SAngeloGioacchino Del Regno 
17837bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
17847bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011222222335777},
17857bdc0c4bSKalyan Thota };
17867bdc0c4bSKalyan Thota 
1787386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = {
1788386fced3SJonathan Marek 	{.fl = 0, .lut = 0x0011222222223357 },
1789386fced3SJonathan Marek };
1790386fced3SJonathan Marek 
1791f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_linear[] = {
1792f3af2d6eSRob Clark 	{.fl = 4, .lut = 0x0000000000000357 },
1793f3af2d6eSRob Clark };
1794f3af2d6eSRob Clark 
17955334087eSLoic Poulain static const struct dpu_qos_lut_entry qcm2290_qos_linear[] = {
17965334087eSLoic Poulain 	{.fl = 0, .lut = 0x0011222222335777},
17975334087eSLoic Poulain };
17985334087eSLoic Poulain 
1799abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = {
180025fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x344556677},
180125fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x3344556677},
180225fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x23344556677},
180325fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x223344556677},
180425fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1223344556677},
180525fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x112233344556677},
180625fdd593SJeykumar Sankaran };
180725fdd593SJeykumar Sankaran 
18087bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
18097bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011223344556677},
18107bdc0c4bSKalyan Thota };
18117bdc0c4bSKalyan Thota 
1812f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
1813f3af2d6eSRob Clark 	{.fl = 10, .lut = 0x0000000344556677},
1814f3af2d6eSRob Clark };
1815f3af2d6eSRob Clark 
181694391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = {
181794391a14SAngeloGioacchino Del Regno 	{.fl = 0, .lut = 0x0},
181894391a14SAngeloGioacchino Del Regno };
181994391a14SAngeloGioacchino Del Regno 
1820abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = {
182125fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x0},
182225fdd593SJeykumar Sankaran };
182325fdd593SJeykumar Sankaran 
18247bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
18257bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0},
18267bdc0c4bSKalyan Thota };
18277bdc0c4bSKalyan Thota 
182894391a14SAngeloGioacchino Del Regno static const struct dpu_perf_cfg msm8998_perf_data = {
182994391a14SAngeloGioacchino Del Regno 	.max_bw_low = 6700000,
183094391a14SAngeloGioacchino Del Regno 	.max_bw_high = 6700000,
183194391a14SAngeloGioacchino Del Regno 	.min_core_ib = 2400000,
183294391a14SAngeloGioacchino Del Regno 	.min_llcc_ib = 800000,
183394391a14SAngeloGioacchino Del Regno 	.min_dram_ib = 800000,
183494391a14SAngeloGioacchino Del Regno 	.undersized_prefill_lines = 2,
183594391a14SAngeloGioacchino Del Regno 	.xtra_prefill_lines = 2,
183694391a14SAngeloGioacchino Del Regno 	.dest_scale_prefill_lines = 3,
183794391a14SAngeloGioacchino Del Regno 	.macrotile_prefill_lines = 4,
183894391a14SAngeloGioacchino Del Regno 	.yuv_nv12_prefill_lines = 8,
183994391a14SAngeloGioacchino Del Regno 	.linear_prefill_lines = 1,
184094391a14SAngeloGioacchino Del Regno 	.downscaling_prefill_lines = 1,
184194391a14SAngeloGioacchino Del Regno 	.amortizable_threshold = 25,
184294391a14SAngeloGioacchino Del Regno 	.min_prefill_lines = 25,
184394391a14SAngeloGioacchino Del Regno 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
184494391a14SAngeloGioacchino Del Regno 	.safe_lut_tbl = {0xfffc, 0xff00, 0xffff},
184594391a14SAngeloGioacchino Del Regno 	.qos_lut_tbl = {
184694391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_linear),
184794391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_linear
184894391a14SAngeloGioacchino Del Regno 		},
184994391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_macrotile),
185094391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_macrotile
185194391a14SAngeloGioacchino Del Regno 		},
185294391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_nrt),
185394391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_nrt
185494391a14SAngeloGioacchino Del Regno 		},
185594391a14SAngeloGioacchino Del Regno 	},
185694391a14SAngeloGioacchino Del Regno 	.cdp_cfg = {
185794391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 1},
185894391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 0}
185994391a14SAngeloGioacchino Del Regno 	},
186094391a14SAngeloGioacchino Del Regno 	.clk_inefficiency_factor = 200,
186194391a14SAngeloGioacchino Del Regno 	.bw_inefficiency_factor = 120,
186294391a14SAngeloGioacchino Del Regno };
186394391a14SAngeloGioacchino Del Regno 
1864abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = {
186525fdd593SJeykumar Sankaran 	.max_bw_low = 6800000,
186625fdd593SJeykumar Sankaran 	.max_bw_high = 6800000,
186725fdd593SJeykumar Sankaran 	.min_core_ib = 2400000,
186825fdd593SJeykumar Sankaran 	.min_llcc_ib = 800000,
186925fdd593SJeykumar Sankaran 	.min_dram_ib = 800000,
187025fdd593SJeykumar Sankaran 	.undersized_prefill_lines = 2,
187125fdd593SJeykumar Sankaran 	.xtra_prefill_lines = 2,
187225fdd593SJeykumar Sankaran 	.dest_scale_prefill_lines = 3,
187325fdd593SJeykumar Sankaran 	.macrotile_prefill_lines = 4,
187425fdd593SJeykumar Sankaran 	.yuv_nv12_prefill_lines = 8,
187525fdd593SJeykumar Sankaran 	.linear_prefill_lines = 1,
187625fdd593SJeykumar Sankaran 	.downscaling_prefill_lines = 1,
187725fdd593SJeykumar Sankaran 	.amortizable_threshold = 25,
187825fdd593SJeykumar Sankaran 	.min_prefill_lines = 24,
187925fdd593SJeykumar Sankaran 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
18805bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xf000, 0xffff},
188125fdd593SJeykumar Sankaran 	.qos_lut_tbl = {
188225fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_linear),
188325fdd593SJeykumar Sankaran 		.entries = sdm845_qos_linear
188425fdd593SJeykumar Sankaran 		},
188525fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_macrotile),
188625fdd593SJeykumar Sankaran 		.entries = sdm845_qos_macrotile
188725fdd593SJeykumar Sankaran 		},
188825fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_nrt),
188925fdd593SJeykumar Sankaran 		.entries = sdm845_qos_nrt
189025fdd593SJeykumar Sankaran 		},
189125fdd593SJeykumar Sankaran 	},
189225fdd593SJeykumar Sankaran 	.cdp_cfg = {
189325fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 1},
189425fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 0}
189525fdd593SJeykumar Sankaran 	},
18964f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
18974f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
189825fdd593SJeykumar Sankaran };
189925fdd593SJeykumar Sankaran 
19007bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = {
190171dc6c08SKrishna Manikandan 	.max_bw_low = 6800000,
190271dc6c08SKrishna Manikandan 	.max_bw_high = 6800000,
19037bdc0c4bSKalyan Thota 	.min_core_ib = 2400000,
19047bdc0c4bSKalyan Thota 	.min_llcc_ib = 800000,
1905c33b7c03SKalyan Thota 	.min_dram_ib = 1600000,
1906c33b7c03SKalyan Thota 	.min_prefill_lines = 24,
19077bdc0c4bSKalyan Thota 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
19085bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
19097bdc0c4bSKalyan Thota 	.qos_lut_tbl = {
19107bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
19117bdc0c4bSKalyan Thota 		.entries = sc7180_qos_linear
19127bdc0c4bSKalyan Thota 		},
19137bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
19147bdc0c4bSKalyan Thota 		.entries = sc7180_qos_macrotile
19157bdc0c4bSKalyan Thota 		},
19167bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
19177bdc0c4bSKalyan Thota 		.entries = sc7180_qos_nrt
19187bdc0c4bSKalyan Thota 		},
19197bdc0c4bSKalyan Thota 	},
19207bdc0c4bSKalyan Thota 	.cdp_cfg = {
19217bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 1},
19227bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 0}
19237bdc0c4bSKalyan Thota 	},
1924c33b7c03SKalyan Thota 	.clk_inefficiency_factor = 105,
1925c33b7c03SKalyan Thota 	.bw_inefficiency_factor = 120,
19267bdc0c4bSKalyan Thota };
19277bdc0c4bSKalyan Thota 
19283581b706SAdam Skladowski static const struct dpu_perf_cfg sm6115_perf_data = {
19293581b706SAdam Skladowski 	.max_bw_low = 3100000,
19303581b706SAdam Skladowski 	.max_bw_high = 4000000,
19313581b706SAdam Skladowski 	.min_core_ib = 2400000,
19323581b706SAdam Skladowski 	.min_llcc_ib = 800000,
19333581b706SAdam Skladowski 	.min_dram_ib = 800000,
19343581b706SAdam Skladowski 	.min_prefill_lines = 24,
19353581b706SAdam Skladowski 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
19363581b706SAdam Skladowski 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
19373581b706SAdam Skladowski 	.qos_lut_tbl = {
19383581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
19393581b706SAdam Skladowski 		.entries = sc7180_qos_linear
19403581b706SAdam Skladowski 		},
19413581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
19423581b706SAdam Skladowski 		.entries = sc7180_qos_macrotile
19433581b706SAdam Skladowski 		},
19443581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
19453581b706SAdam Skladowski 		.entries = sc7180_qos_nrt
19463581b706SAdam Skladowski 		},
19473581b706SAdam Skladowski 		/* TODO: macrotile-qseed is different from macrotile */
19483581b706SAdam Skladowski 	},
19493581b706SAdam Skladowski 	.cdp_cfg = {
19503581b706SAdam Skladowski 		{.rd_enable = 1, .wr_enable = 1},
19513581b706SAdam Skladowski 		{.rd_enable = 1, .wr_enable = 0}
19523581b706SAdam Skladowski 	},
19533581b706SAdam Skladowski 	.clk_inefficiency_factor = 105,
19543581b706SAdam Skladowski 	.bw_inefficiency_factor = 120,
19553581b706SAdam Skladowski };
19563581b706SAdam Skladowski 
1957386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = {
1958386fced3SJonathan Marek 	.max_bw_low = 12800000,
1959386fced3SJonathan Marek 	.max_bw_high = 12800000,
1960386fced3SJonathan Marek 	.min_core_ib = 2400000,
1961386fced3SJonathan Marek 	.min_llcc_ib = 800000,
1962386fced3SJonathan Marek 	.min_dram_ib = 800000,
19634f2c9838SDmitry Baryshkov 	.min_prefill_lines = 24,
1964386fced3SJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
19655bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff8, 0xf000, 0xffff},
1966386fced3SJonathan Marek 	.qos_lut_tbl = {
1967386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sm8150_qos_linear),
1968386fced3SJonathan Marek 		.entries = sm8150_qos_linear
1969386fced3SJonathan Marek 		},
1970386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1971386fced3SJonathan Marek 		.entries = sc7180_qos_macrotile
1972386fced3SJonathan Marek 		},
1973386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1974386fced3SJonathan Marek 		.entries = sc7180_qos_nrt
1975386fced3SJonathan Marek 		},
1976386fced3SJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1977386fced3SJonathan Marek 	},
1978386fced3SJonathan Marek 	.cdp_cfg = {
1979386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1980386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1981386fced3SJonathan Marek 	},
19824f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
19834f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1984386fced3SJonathan Marek };
1985386fced3SJonathan Marek 
1986f3af2d6eSRob Clark static const struct dpu_perf_cfg sc8180x_perf_data = {
1987f3af2d6eSRob Clark 	.max_bw_low = 9600000,
1988f3af2d6eSRob Clark 	.max_bw_high = 9600000,
1989f3af2d6eSRob Clark 	.min_core_ib = 2400000,
1990f3af2d6eSRob Clark 	.min_llcc_ib = 800000,
1991f3af2d6eSRob Clark 	.min_dram_ib = 800000,
1992f3af2d6eSRob Clark 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
1993f3af2d6eSRob Clark 	.qos_lut_tbl = {
1994f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc8180x_qos_linear),
1995f3af2d6eSRob Clark 		.entries = sc8180x_qos_linear
1996f3af2d6eSRob Clark 		},
1997f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc8180x_qos_macrotile),
1998f3af2d6eSRob Clark 		.entries = sc8180x_qos_macrotile
1999f3af2d6eSRob Clark 		},
2000f3af2d6eSRob Clark 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
2001f3af2d6eSRob Clark 		.entries = sc7180_qos_nrt
2002f3af2d6eSRob Clark 		},
2003f3af2d6eSRob Clark 		/* TODO: macrotile-qseed is different from macrotile */
2004f3af2d6eSRob Clark 	},
2005f3af2d6eSRob Clark 	.cdp_cfg = {
2006f3af2d6eSRob Clark 		{.rd_enable = 1, .wr_enable = 1},
2007f3af2d6eSRob Clark 		{.rd_enable = 1, .wr_enable = 0}
2008f3af2d6eSRob Clark 	},
2009f3af2d6eSRob Clark 	.clk_inefficiency_factor = 105,
2010f3af2d6eSRob Clark 	.bw_inefficiency_factor = 120,
2011f3af2d6eSRob Clark };
2012f3af2d6eSRob Clark 
2013af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = {
2014af776a3eSJonathan Marek 	.max_bw_low = 13700000,
2015af776a3eSJonathan Marek 	.max_bw_high = 16600000,
2016af776a3eSJonathan Marek 	.min_core_ib = 4800000,
2017af776a3eSJonathan Marek 	.min_llcc_ib = 0,
2018af776a3eSJonathan Marek 	.min_dram_ib = 800000,
20194f2c9838SDmitry Baryshkov 	.min_prefill_lines = 35,
2020af776a3eSJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
20215bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
2022af776a3eSJonathan Marek 	.qos_lut_tbl = {
2023af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
2024af776a3eSJonathan Marek 		.entries = sc7180_qos_linear
2025af776a3eSJonathan Marek 		},
2026af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
2027af776a3eSJonathan Marek 		.entries = sc7180_qos_macrotile
2028af776a3eSJonathan Marek 		},
2029af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
2030af776a3eSJonathan Marek 		.entries = sc7180_qos_nrt
2031af776a3eSJonathan Marek 		},
2032af776a3eSJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
2033af776a3eSJonathan Marek 	},
2034af776a3eSJonathan Marek 	.cdp_cfg = {
2035af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
2036af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
2037af776a3eSJonathan Marek 	},
20384f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
20394f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
2040af776a3eSJonathan Marek };
2041af776a3eSJonathan Marek 
2042100d7ef6SDmitry Baryshkov static const struct dpu_perf_cfg sm8450_perf_data = {
2043100d7ef6SDmitry Baryshkov 	.max_bw_low = 13600000,
2044100d7ef6SDmitry Baryshkov 	.max_bw_high = 18200000,
2045100d7ef6SDmitry Baryshkov 	.min_core_ib = 2500000,
2046100d7ef6SDmitry Baryshkov 	.min_llcc_ib = 0,
2047100d7ef6SDmitry Baryshkov 	.min_dram_ib = 800000,
2048100d7ef6SDmitry Baryshkov 	.min_prefill_lines = 35,
2049100d7ef6SDmitry Baryshkov 	/* FIXME: lut tables */
2050100d7ef6SDmitry Baryshkov 	.danger_lut_tbl = {0x3ffff, 0x3ffff, 0x0},
2051100d7ef6SDmitry Baryshkov 	.safe_lut_tbl = {0xfe00, 0xfe00, 0xffff},
2052100d7ef6SDmitry Baryshkov 	.qos_lut_tbl = {
2053100d7ef6SDmitry Baryshkov 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
2054100d7ef6SDmitry Baryshkov 		.entries = sc7180_qos_linear
2055100d7ef6SDmitry Baryshkov 		},
2056100d7ef6SDmitry Baryshkov 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
2057100d7ef6SDmitry Baryshkov 		.entries = sc7180_qos_macrotile
2058100d7ef6SDmitry Baryshkov 		},
2059100d7ef6SDmitry Baryshkov 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
2060100d7ef6SDmitry Baryshkov 		.entries = sc7180_qos_nrt
2061100d7ef6SDmitry Baryshkov 		},
2062100d7ef6SDmitry Baryshkov 		/* TODO: macrotile-qseed is different from macrotile */
2063100d7ef6SDmitry Baryshkov 	},
2064100d7ef6SDmitry Baryshkov 	.cdp_cfg = {
2065100d7ef6SDmitry Baryshkov 		{.rd_enable = 1, .wr_enable = 1},
2066100d7ef6SDmitry Baryshkov 		{.rd_enable = 1, .wr_enable = 0}
2067100d7ef6SDmitry Baryshkov 	},
2068100d7ef6SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
2069100d7ef6SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
2070100d7ef6SDmitry Baryshkov };
2071100d7ef6SDmitry Baryshkov 
2072591e34a0SKrishna Manikandan static const struct dpu_perf_cfg sc7280_perf_data = {
2073591e34a0SKrishna Manikandan 	.max_bw_low = 4700000,
2074591e34a0SKrishna Manikandan 	.max_bw_high = 8800000,
2075591e34a0SKrishna Manikandan 	.min_core_ib = 2500000,
2076591e34a0SKrishna Manikandan 	.min_llcc_ib = 0,
2077591e34a0SKrishna Manikandan 	.min_dram_ib = 1600000,
2078591e34a0SKrishna Manikandan 	.min_prefill_lines = 24,
2079591e34a0SKrishna Manikandan 	.danger_lut_tbl = {0xffff, 0xffff, 0x0},
20805bccb945SKalyan Thota 	.safe_lut_tbl = {0xff00, 0xff00, 0xffff},
2081591e34a0SKrishna Manikandan 	.qos_lut_tbl = {
2082591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
2083591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
2084591e34a0SKrishna Manikandan 		},
2085591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
2086591e34a0SKrishna Manikandan 		.entries = sc7180_qos_macrotile
2087591e34a0SKrishna Manikandan 		},
2088591e34a0SKrishna Manikandan 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
2089591e34a0SKrishna Manikandan 		.entries = sc7180_qos_nrt
2090591e34a0SKrishna Manikandan 		},
2091591e34a0SKrishna Manikandan 	},
2092591e34a0SKrishna Manikandan 	.cdp_cfg = {
2093591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 1},
2094591e34a0SKrishna Manikandan 		{.rd_enable = 1, .wr_enable = 0}
2095591e34a0SKrishna Manikandan 	},
2096591e34a0SKrishna Manikandan 	.clk_inefficiency_factor = 105,
2097591e34a0SKrishna Manikandan 	.bw_inefficiency_factor = 120,
2098591e34a0SKrishna Manikandan };
2099591e34a0SKrishna Manikandan 
21000e91bcbbSRobert Foss static const struct dpu_perf_cfg sm8350_perf_data = {
21010e91bcbbSRobert Foss 	.max_bw_low = 11800000,
21020e91bcbbSRobert Foss 	.max_bw_high = 15500000,
21030e91bcbbSRobert Foss 	.min_core_ib = 2500000,
21040e91bcbbSRobert Foss 	.min_llcc_ib = 0,
21050e91bcbbSRobert Foss 	.min_dram_ib = 800000,
21060e91bcbbSRobert Foss 	.min_prefill_lines = 40,
21070e91bcbbSRobert Foss 	/* FIXME: lut tables */
21080e91bcbbSRobert Foss 	.danger_lut_tbl = {0x3ffff, 0x3ffff, 0x0},
21090e91bcbbSRobert Foss 	.safe_lut_tbl = {0xfe00, 0xfe00, 0xffff},
21100e91bcbbSRobert Foss 	.qos_lut_tbl = {
21110e91bcbbSRobert Foss 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
21120e91bcbbSRobert Foss 		.entries = sc7180_qos_linear
21130e91bcbbSRobert Foss 		},
21140e91bcbbSRobert Foss 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
21150e91bcbbSRobert Foss 		.entries = sc7180_qos_macrotile
21160e91bcbbSRobert Foss 		},
21170e91bcbbSRobert Foss 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
21180e91bcbbSRobert Foss 		.entries = sc7180_qos_nrt
21190e91bcbbSRobert Foss 		},
21200e91bcbbSRobert Foss 		/* TODO: macrotile-qseed is different from macrotile */
21210e91bcbbSRobert Foss 	},
21220e91bcbbSRobert Foss 	.cdp_cfg = {
21230e91bcbbSRobert Foss 		{.rd_enable = 1, .wr_enable = 1},
21240e91bcbbSRobert Foss 		{.rd_enable = 1, .wr_enable = 0}
21250e91bcbbSRobert Foss 	},
21260e91bcbbSRobert Foss 	.clk_inefficiency_factor = 105,
21270e91bcbbSRobert Foss 	.bw_inefficiency_factor = 120,
21280e91bcbbSRobert Foss };
21290e91bcbbSRobert Foss 
21305334087eSLoic Poulain static const struct dpu_perf_cfg qcm2290_perf_data = {
21315334087eSLoic Poulain 	.max_bw_low = 2700000,
21325334087eSLoic Poulain 	.max_bw_high = 2700000,
21335334087eSLoic Poulain 	.min_core_ib = 1300000,
21345334087eSLoic Poulain 	.min_llcc_ib = 0,
21355334087eSLoic Poulain 	.min_dram_ib = 1600000,
21365334087eSLoic Poulain 	.min_prefill_lines = 24,
21375334087eSLoic Poulain 	.danger_lut_tbl = {0xff, 0x0, 0x0},
21385334087eSLoic Poulain 	.safe_lut_tbl = {0xfff0, 0x0, 0x0},
21395334087eSLoic Poulain 	.qos_lut_tbl = {
21405334087eSLoic Poulain 		{.nentry = ARRAY_SIZE(qcm2290_qos_linear),
21415334087eSLoic Poulain 		.entries = qcm2290_qos_linear
21425334087eSLoic Poulain 		},
21435334087eSLoic Poulain 	},
21445334087eSLoic Poulain 	.cdp_cfg = {
21455334087eSLoic Poulain 		{.rd_enable = 1, .wr_enable = 1},
21465334087eSLoic Poulain 		{.rd_enable = 1, .wr_enable = 0}
21475334087eSLoic Poulain 	},
21485334087eSLoic Poulain 	.clk_inefficiency_factor = 105,
21495334087eSLoic Poulain 	.bw_inefficiency_factor = 120,
21505334087eSLoic Poulain };
215125fdd593SJeykumar Sankaran /*************************************************************
2152de7d480fSDmitry Baryshkov  * Hardware catalog
215325fdd593SJeykumar Sankaran  *************************************************************/
215425fdd593SJeykumar Sankaran 
2155de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg msm8998_dpu_cfg = {
215694391a14SAngeloGioacchino Del Regno 	.caps = &msm8998_dpu_caps,
215794391a14SAngeloGioacchino Del Regno 	.mdp_count = ARRAY_SIZE(msm8998_mdp),
215894391a14SAngeloGioacchino Del Regno 	.mdp = msm8998_mdp,
215994391a14SAngeloGioacchino Del Regno 	.ctl_count = ARRAY_SIZE(msm8998_ctl),
216094391a14SAngeloGioacchino Del Regno 	.ctl = msm8998_ctl,
216194391a14SAngeloGioacchino Del Regno 	.sspp_count = ARRAY_SIZE(msm8998_sspp),
216294391a14SAngeloGioacchino Del Regno 	.sspp = msm8998_sspp,
216394391a14SAngeloGioacchino Del Regno 	.mixer_count = ARRAY_SIZE(msm8998_lm),
216494391a14SAngeloGioacchino Del Regno 	.mixer = msm8998_lm,
21656452cbd6SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(msm8998_dspp),
21666452cbd6SDmitry Baryshkov 	.dspp = msm8998_dspp,
216794391a14SAngeloGioacchino Del Regno 	.pingpong_count = ARRAY_SIZE(sdm845_pp),
216894391a14SAngeloGioacchino Del Regno 	.pingpong = sdm845_pp,
216994391a14SAngeloGioacchino Del Regno 	.intf_count = ARRAY_SIZE(msm8998_intf),
217094391a14SAngeloGioacchino Del Regno 	.intf = msm8998_intf,
217194391a14SAngeloGioacchino Del Regno 	.vbif_count = ARRAY_SIZE(msm8998_vbif),
217294391a14SAngeloGioacchino Del Regno 	.vbif = msm8998_vbif,
217394391a14SAngeloGioacchino Del Regno 	.reg_dma_count = 0,
2174477db4feSDmitry Baryshkov 	.perf = &msm8998_perf_data,
217594391a14SAngeloGioacchino Del Regno 	.mdss_irqs = IRQ_SM8250_MASK,
217694391a14SAngeloGioacchino Del Regno };
217794391a14SAngeloGioacchino Del Regno 
2178de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sdm845_dpu_cfg = {
217925fdd593SJeykumar Sankaran 	.caps = &sdm845_dpu_caps,
218025fdd593SJeykumar Sankaran 	.mdp_count = ARRAY_SIZE(sdm845_mdp),
218125fdd593SJeykumar Sankaran 	.mdp = sdm845_mdp,
218225fdd593SJeykumar Sankaran 	.ctl_count = ARRAY_SIZE(sdm845_ctl),
218325fdd593SJeykumar Sankaran 	.ctl = sdm845_ctl,
218425fdd593SJeykumar Sankaran 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
218525fdd593SJeykumar Sankaran 	.sspp = sdm845_sspp,
218625fdd593SJeykumar Sankaran 	.mixer_count = ARRAY_SIZE(sdm845_lm),
218725fdd593SJeykumar Sankaran 	.mixer = sdm845_lm,
218825fdd593SJeykumar Sankaran 	.pingpong_count = ARRAY_SIZE(sdm845_pp),
218925fdd593SJeykumar Sankaran 	.pingpong = sdm845_pp,
21907c5ab05eSVinod Koul 	.dsc_count = ARRAY_SIZE(sdm845_dsc),
21917c5ab05eSVinod Koul 	.dsc = sdm845_dsc,
219225fdd593SJeykumar Sankaran 	.intf_count = ARRAY_SIZE(sdm845_intf),
219325fdd593SJeykumar Sankaran 	.intf = sdm845_intf,
219425fdd593SJeykumar Sankaran 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
219525fdd593SJeykumar Sankaran 	.vbif = sdm845_vbif,
219625fdd593SJeykumar Sankaran 	.reg_dma_count = 1,
2197481d5dbbSDmitry Baryshkov 	.dma_cfg = &sdm845_regdma,
2198477db4feSDmitry Baryshkov 	.perf = &sdm845_perf_data,
2199597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SDM845_MASK,
220025fdd593SJeykumar Sankaran };
220125fdd593SJeykumar Sankaran 
2202de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sc7180_dpu_cfg = {
22037bdc0c4bSKalyan Thota 	.caps = &sc7180_dpu_caps,
22047bdc0c4bSKalyan Thota 	.mdp_count = ARRAY_SIZE(sc7180_mdp),
22057bdc0c4bSKalyan Thota 	.mdp = sc7180_mdp,
22067bdc0c4bSKalyan Thota 	.ctl_count = ARRAY_SIZE(sc7180_ctl),
22077bdc0c4bSKalyan Thota 	.ctl = sc7180_ctl,
22087bdc0c4bSKalyan Thota 	.sspp_count = ARRAY_SIZE(sc7180_sspp),
22097bdc0c4bSKalyan Thota 	.sspp = sc7180_sspp,
22107bdc0c4bSKalyan Thota 	.mixer_count = ARRAY_SIZE(sc7180_lm),
22117bdc0c4bSKalyan Thota 	.mixer = sc7180_lm,
2212e47616dfSKalyan Thota 	.dspp_count = ARRAY_SIZE(sc7180_dspp),
2213e47616dfSKalyan Thota 	.dspp = sc7180_dspp,
22147bdc0c4bSKalyan Thota 	.pingpong_count = ARRAY_SIZE(sc7180_pp),
22157bdc0c4bSKalyan Thota 	.pingpong = sc7180_pp,
22167bdc0c4bSKalyan Thota 	.intf_count = ARRAY_SIZE(sc7180_intf),
22177bdc0c4bSKalyan Thota 	.intf = sc7180_intf,
221851e4d60eSAbhinav Kumar 	.wb_count = ARRAY_SIZE(sm8250_wb),
221951e4d60eSAbhinav Kumar 	.wb = sm8250_wb,
22207bdc0c4bSKalyan Thota 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
22217bdc0c4bSKalyan Thota 	.vbif = sdm845_vbif,
22227bdc0c4bSKalyan Thota 	.reg_dma_count = 1,
2223481d5dbbSDmitry Baryshkov 	.dma_cfg = &sdm845_regdma,
2224477db4feSDmitry Baryshkov 	.perf = &sc7180_perf_data,
2225597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SC7180_MASK,
22267bdc0c4bSKalyan Thota };
22277bdc0c4bSKalyan Thota 
22283581b706SAdam Skladowski static const struct dpu_mdss_cfg sm6115_dpu_cfg = {
22293581b706SAdam Skladowski 	.caps = &sm6115_dpu_caps,
22303581b706SAdam Skladowski 	.mdp_count = ARRAY_SIZE(sm6115_mdp),
22313581b706SAdam Skladowski 	.mdp = sm6115_mdp,
22323581b706SAdam Skladowski 	.ctl_count = ARRAY_SIZE(qcm2290_ctl),
22333581b706SAdam Skladowski 	.ctl = qcm2290_ctl,
22343581b706SAdam Skladowski 	.sspp_count = ARRAY_SIZE(sm6115_sspp),
22353581b706SAdam Skladowski 	.sspp = sm6115_sspp,
22363581b706SAdam Skladowski 	.mixer_count = ARRAY_SIZE(qcm2290_lm),
22373581b706SAdam Skladowski 	.mixer = qcm2290_lm,
22383581b706SAdam Skladowski 	.dspp_count = ARRAY_SIZE(qcm2290_dspp),
22393581b706SAdam Skladowski 	.dspp = qcm2290_dspp,
22403581b706SAdam Skladowski 	.pingpong_count = ARRAY_SIZE(qcm2290_pp),
22413581b706SAdam Skladowski 	.pingpong = qcm2290_pp,
22423581b706SAdam Skladowski 	.intf_count = ARRAY_SIZE(qcm2290_intf),
22433581b706SAdam Skladowski 	.intf = qcm2290_intf,
22443581b706SAdam Skladowski 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
22453581b706SAdam Skladowski 	.vbif = sdm845_vbif,
22463581b706SAdam Skladowski 	.perf = &sm6115_perf_data,
22473581b706SAdam Skladowski 	.mdss_irqs = IRQ_SC7180_MASK,
22483581b706SAdam Skladowski };
22493581b706SAdam Skladowski 
2250de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sm8150_dpu_cfg = {
2251386fced3SJonathan Marek 	.caps = &sm8150_dpu_caps,
2252386fced3SJonathan Marek 	.mdp_count = ARRAY_SIZE(sdm845_mdp),
2253386fced3SJonathan Marek 	.mdp = sdm845_mdp,
2254386fced3SJonathan Marek 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
2255386fced3SJonathan Marek 	.ctl = sm8150_ctl,
2256386fced3SJonathan Marek 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
2257386fced3SJonathan Marek 	.sspp = sdm845_sspp,
2258386fced3SJonathan Marek 	.mixer_count = ARRAY_SIZE(sm8150_lm),
2259386fced3SJonathan Marek 	.mixer = sm8150_lm,
226005ae91d9SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
226105ae91d9SDmitry Baryshkov 	.dspp = sm8150_dspp,
2262386fced3SJonathan Marek 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
2263386fced3SJonathan Marek 	.pingpong = sm8150_pp,
22644369c93cSDmitry Baryshkov 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
22654369c93cSDmitry Baryshkov 	.merge_3d = sm8150_merge_3d,
2266386fced3SJonathan Marek 	.intf_count = ARRAY_SIZE(sm8150_intf),
2267386fced3SJonathan Marek 	.intf = sm8150_intf,
2268386fced3SJonathan Marek 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2269386fced3SJonathan Marek 	.vbif = sdm845_vbif,
2270386fced3SJonathan Marek 	.reg_dma_count = 1,
2271481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8150_regdma,
2272477db4feSDmitry Baryshkov 	.perf = &sm8150_perf_data,
2273597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SDM845_MASK,
2274386fced3SJonathan Marek };
2275386fced3SJonathan Marek 
2276de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sc8180x_dpu_cfg = {
2277f3af2d6eSRob Clark 	.caps = &sc8180x_dpu_caps,
2278f3af2d6eSRob Clark 	.mdp_count = ARRAY_SIZE(sc8180x_mdp),
2279f3af2d6eSRob Clark 	.mdp = sc8180x_mdp,
2280f3af2d6eSRob Clark 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
2281f3af2d6eSRob Clark 	.ctl = sm8150_ctl,
2282f3af2d6eSRob Clark 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
2283f3af2d6eSRob Clark 	.sspp = sdm845_sspp,
2284f3af2d6eSRob Clark 	.mixer_count = ARRAY_SIZE(sm8150_lm),
2285f3af2d6eSRob Clark 	.mixer = sm8150_lm,
2286f3af2d6eSRob Clark 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
2287f3af2d6eSRob Clark 	.pingpong = sm8150_pp,
2288f3af2d6eSRob Clark 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
2289f3af2d6eSRob Clark 	.merge_3d = sm8150_merge_3d,
2290f3af2d6eSRob Clark 	.intf_count = ARRAY_SIZE(sc8180x_intf),
2291f3af2d6eSRob Clark 	.intf = sc8180x_intf,
2292f3af2d6eSRob Clark 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2293f3af2d6eSRob Clark 	.vbif = sdm845_vbif,
2294f3af2d6eSRob Clark 	.reg_dma_count = 1,
2295481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8150_regdma,
2296477db4feSDmitry Baryshkov 	.perf = &sc8180x_perf_data,
2297f3af2d6eSRob Clark 	.mdss_irqs = IRQ_SC8180X_MASK,
2298f3af2d6eSRob Clark };
2299f3af2d6eSRob Clark 
2300de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sm8250_dpu_cfg = {
2301af776a3eSJonathan Marek 	.caps = &sm8250_dpu_caps,
2302af776a3eSJonathan Marek 	.mdp_count = ARRAY_SIZE(sm8250_mdp),
2303af776a3eSJonathan Marek 	.mdp = sm8250_mdp,
2304af776a3eSJonathan Marek 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
2305af776a3eSJonathan Marek 	.ctl = sm8150_ctl,
2306d21fc5dfSDmitry Baryshkov 	.sspp_count = ARRAY_SIZE(sm8250_sspp),
2307d21fc5dfSDmitry Baryshkov 	.sspp = sm8250_sspp,
2308af776a3eSJonathan Marek 	.mixer_count = ARRAY_SIZE(sm8150_lm),
2309af776a3eSJonathan Marek 	.mixer = sm8150_lm,
231005ae91d9SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
231105ae91d9SDmitry Baryshkov 	.dspp = sm8150_dspp,
2312af776a3eSJonathan Marek 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
2313af776a3eSJonathan Marek 	.pingpong = sm8150_pp,
23144369c93cSDmitry Baryshkov 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
23154369c93cSDmitry Baryshkov 	.merge_3d = sm8150_merge_3d,
2316af776a3eSJonathan Marek 	.intf_count = ARRAY_SIZE(sm8150_intf),
2317af776a3eSJonathan Marek 	.intf = sm8150_intf,
2318af776a3eSJonathan Marek 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2319af776a3eSJonathan Marek 	.vbif = sdm845_vbif,
232053324b99SAbhinav Kumar 	.wb_count = ARRAY_SIZE(sm8250_wb),
232153324b99SAbhinav Kumar 	.wb = sm8250_wb,
2322af776a3eSJonathan Marek 	.reg_dma_count = 1,
2323481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8250_regdma,
2324477db4feSDmitry Baryshkov 	.perf = &sm8250_perf_data,
2325597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SM8250_MASK,
2326af776a3eSJonathan Marek };
2327af776a3eSJonathan Marek 
23280e91bcbbSRobert Foss static const struct dpu_mdss_cfg sm8350_dpu_cfg = {
23290e91bcbbSRobert Foss 	.caps = &sm8350_dpu_caps,
23300e91bcbbSRobert Foss 	.mdp_count = ARRAY_SIZE(sm8350_mdp),
23310e91bcbbSRobert Foss 	.mdp = sm8350_mdp,
23320e91bcbbSRobert Foss 	.ctl_count = ARRAY_SIZE(sm8350_ctl),
23330e91bcbbSRobert Foss 	.ctl = sm8350_ctl,
23340e91bcbbSRobert Foss 	.sspp_count = ARRAY_SIZE(sm8250_sspp),
23350e91bcbbSRobert Foss 	.sspp = sm8250_sspp,
23360e91bcbbSRobert Foss 	.mixer_count = ARRAY_SIZE(sm8150_lm),
23370e91bcbbSRobert Foss 	.mixer = sm8150_lm,
23380e91bcbbSRobert Foss 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
23390e91bcbbSRobert Foss 	.dspp = sm8150_dspp,
23400e91bcbbSRobert Foss 	.pingpong_count = ARRAY_SIZE(sm8350_pp),
23410e91bcbbSRobert Foss 	.pingpong = sm8350_pp,
23420e91bcbbSRobert Foss 	.dsc_count = ARRAY_SIZE(sm8350_dsc),
23430e91bcbbSRobert Foss 	.dsc = sm8350_dsc,
23440e91bcbbSRobert Foss 	.merge_3d_count = ARRAY_SIZE(sm8350_merge_3d),
23450e91bcbbSRobert Foss 	.merge_3d = sm8350_merge_3d,
23460e91bcbbSRobert Foss 	.intf_count = ARRAY_SIZE(sm8350_intf),
23470e91bcbbSRobert Foss 	.intf = sm8350_intf,
23480e91bcbbSRobert Foss 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
23490e91bcbbSRobert Foss 	.vbif = sdm845_vbif,
23500e91bcbbSRobert Foss 	.reg_dma_count = 1,
23510e91bcbbSRobert Foss 	.dma_cfg = &sm8250_regdma,
23520e91bcbbSRobert Foss 	.perf = &sm8350_perf_data,
23530e91bcbbSRobert Foss 	.mdss_irqs = IRQ_SM8350_MASK,
23540e91bcbbSRobert Foss };
23550e91bcbbSRobert Foss 
2356100d7ef6SDmitry Baryshkov static const struct dpu_mdss_cfg sm8450_dpu_cfg = {
2357100d7ef6SDmitry Baryshkov 	.caps = &sm8450_dpu_caps,
2358100d7ef6SDmitry Baryshkov 	.mdp_count = ARRAY_SIZE(sm8450_mdp),
2359100d7ef6SDmitry Baryshkov 	.mdp = sm8450_mdp,
2360100d7ef6SDmitry Baryshkov 	.ctl_count = ARRAY_SIZE(sm8450_ctl),
2361100d7ef6SDmitry Baryshkov 	.ctl = sm8450_ctl,
2362100d7ef6SDmitry Baryshkov 	.sspp_count = ARRAY_SIZE(sm8450_sspp),
2363100d7ef6SDmitry Baryshkov 	.sspp = sm8450_sspp,
2364100d7ef6SDmitry Baryshkov 	.mixer_count = ARRAY_SIZE(sm8150_lm),
2365100d7ef6SDmitry Baryshkov 	.mixer = sm8150_lm,
2366100d7ef6SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
2367100d7ef6SDmitry Baryshkov 	.dspp = sm8150_dspp,
2368100d7ef6SDmitry Baryshkov 	.pingpong_count = ARRAY_SIZE(sm8450_pp),
2369100d7ef6SDmitry Baryshkov 	.pingpong = sm8450_pp,
2370100d7ef6SDmitry Baryshkov 	.merge_3d_count = ARRAY_SIZE(sm8450_merge_3d),
2371100d7ef6SDmitry Baryshkov 	.merge_3d = sm8450_merge_3d,
2372100d7ef6SDmitry Baryshkov 	.intf_count = ARRAY_SIZE(sm8450_intf),
2373100d7ef6SDmitry Baryshkov 	.intf = sm8450_intf,
2374100d7ef6SDmitry Baryshkov 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2375100d7ef6SDmitry Baryshkov 	.vbif = sdm845_vbif,
2376100d7ef6SDmitry Baryshkov 	.reg_dma_count = 1,
2377100d7ef6SDmitry Baryshkov 	.dma_cfg = &sm8450_regdma,
2378100d7ef6SDmitry Baryshkov 	.perf = &sm8450_perf_data,
2379100d7ef6SDmitry Baryshkov 	.mdss_irqs = IRQ_SM8450_MASK,
2380100d7ef6SDmitry Baryshkov };
2381100d7ef6SDmitry Baryshkov 
2382de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sc7280_dpu_cfg = {
2383591e34a0SKrishna Manikandan 	.caps = &sc7280_dpu_caps,
2384591e34a0SKrishna Manikandan 	.mdp_count = ARRAY_SIZE(sc7280_mdp),
2385591e34a0SKrishna Manikandan 	.mdp = sc7280_mdp,
2386591e34a0SKrishna Manikandan 	.ctl_count = ARRAY_SIZE(sc7280_ctl),
2387591e34a0SKrishna Manikandan 	.ctl = sc7280_ctl,
2388591e34a0SKrishna Manikandan 	.sspp_count = ARRAY_SIZE(sc7280_sspp),
2389591e34a0SKrishna Manikandan 	.sspp = sc7280_sspp,
2390fca5ad26SKalyan Thota 	.dspp_count = ARRAY_SIZE(sc7180_dspp),
2391fca5ad26SKalyan Thota 	.dspp = sc7180_dspp,
2392591e34a0SKrishna Manikandan 	.mixer_count = ARRAY_SIZE(sc7280_lm),
2393591e34a0SKrishna Manikandan 	.mixer = sc7280_lm,
2394591e34a0SKrishna Manikandan 	.pingpong_count = ARRAY_SIZE(sc7280_pp),
2395591e34a0SKrishna Manikandan 	.pingpong = sc7280_pp,
2396591e34a0SKrishna Manikandan 	.intf_count = ARRAY_SIZE(sc7280_intf),
2397591e34a0SKrishna Manikandan 	.intf = sc7280_intf,
2398591e34a0SKrishna Manikandan 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
2399591e34a0SKrishna Manikandan 	.vbif = sdm845_vbif,
2400477db4feSDmitry Baryshkov 	.perf = &sc7280_perf_data,
2401597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SC7280_MASK,
2402591e34a0SKrishna Manikandan };
2403591e34a0SKrishna Manikandan 
2404de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg qcm2290_dpu_cfg = {
24055334087eSLoic Poulain 	.caps = &qcm2290_dpu_caps,
24065334087eSLoic Poulain 	.mdp_count = ARRAY_SIZE(qcm2290_mdp),
24075334087eSLoic Poulain 	.mdp = qcm2290_mdp,
24085334087eSLoic Poulain 	.ctl_count = ARRAY_SIZE(qcm2290_ctl),
24095334087eSLoic Poulain 	.ctl = qcm2290_ctl,
24105334087eSLoic Poulain 	.sspp_count = ARRAY_SIZE(qcm2290_sspp),
24115334087eSLoic Poulain 	.sspp = qcm2290_sspp,
24125334087eSLoic Poulain 	.mixer_count = ARRAY_SIZE(qcm2290_lm),
24135334087eSLoic Poulain 	.mixer = qcm2290_lm,
24145334087eSLoic Poulain 	.dspp_count = ARRAY_SIZE(qcm2290_dspp),
24155334087eSLoic Poulain 	.dspp = qcm2290_dspp,
24165334087eSLoic Poulain 	.pingpong_count = ARRAY_SIZE(qcm2290_pp),
24175334087eSLoic Poulain 	.pingpong = qcm2290_pp,
24185334087eSLoic Poulain 	.intf_count = ARRAY_SIZE(qcm2290_intf),
24195334087eSLoic Poulain 	.intf = qcm2290_intf,
24205334087eSLoic Poulain 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
24215334087eSLoic Poulain 	.vbif = sdm845_vbif,
24225334087eSLoic Poulain 	.reg_dma_count = 1,
2423481d5dbbSDmitry Baryshkov 	.dma_cfg = &sdm845_regdma,
2424477db4feSDmitry Baryshkov 	.perf = &qcm2290_perf_data,
24255334087eSLoic Poulain 	.mdss_irqs = IRQ_SC7180_MASK,
24265334087eSLoic Poulain };
24275334087eSLoic Poulain 
2428abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = {
2429de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_300, .dpu_cfg = &msm8998_dpu_cfg},
2430de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_301, .dpu_cfg = &msm8998_dpu_cfg},
2431de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_400, .dpu_cfg = &sdm845_dpu_cfg},
2432de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_401, .dpu_cfg = &sdm845_dpu_cfg},
2433de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_500, .dpu_cfg = &sm8150_dpu_cfg},
2434de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_501, .dpu_cfg = &sm8150_dpu_cfg},
2435de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_510, .dpu_cfg = &sc8180x_dpu_cfg},
2436de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_600, .dpu_cfg = &sm8250_dpu_cfg},
2437de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_620, .dpu_cfg = &sc7180_dpu_cfg},
24383581b706SAdam Skladowski 	{ .hw_rev = DPU_HW_VER_630, .dpu_cfg = &sm6115_dpu_cfg},
2439de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_650, .dpu_cfg = &qcm2290_dpu_cfg},
24400e91bcbbSRobert Foss 	{ .hw_rev = DPU_HW_VER_700, .dpu_cfg = &sm8350_dpu_cfg},
2441de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_720, .dpu_cfg = &sc7280_dpu_cfg},
2442100d7ef6SDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_810, .dpu_cfg = &sm8450_dpu_cfg},
244325fdd593SJeykumar Sankaran };
244425fdd593SJeykumar Sankaran 
2445de7d480fSDmitry Baryshkov const struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev)
244625fdd593SJeykumar Sankaran {
244725fdd593SJeykumar Sankaran 	int i;
244825fdd593SJeykumar Sankaran 
244925fdd593SJeykumar Sankaran 	for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) {
2450de7d480fSDmitry Baryshkov 		if (cfg_handler[i].hw_rev == hw_rev)
2451de7d480fSDmitry Baryshkov 			return cfg_handler[i].dpu_cfg;
245225fdd593SJeykumar Sankaran 	}
245325fdd593SJeykumar Sankaran 
245425fdd593SJeykumar Sankaran 	DPU_ERROR("unsupported chipset id:%X\n", hw_rev);
245532084967SDmitry Baryshkov 
245625fdd593SJeykumar Sankaran 	return ERR_PTR(-ENODEV);
245725fdd593SJeykumar Sankaran }
245825fdd593SJeykumar Sankaran 
2459