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 
15a2a448b4SDmitry Baryshkov #define VIG_BASE_MASK \
167bdc0c4bSKalyan Thota 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
17a2a448b4SDmitry Baryshkov 	BIT(DPU_SSPP_CDP) |\
1825fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_EXCL_RECT))
1925fdd593SJeykumar Sankaran 
20a2a448b4SDmitry Baryshkov #define VIG_MASK \
21a2a448b4SDmitry Baryshkov 	(VIG_BASE_MASK | \
22a2a448b4SDmitry Baryshkov 	BIT(DPU_SSPP_CSC_10BIT))
23a2a448b4SDmitry Baryshkov 
2494391a14SAngeloGioacchino Del Regno #define VIG_MSM8998_MASK \
2594391a14SAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_SCALER_QSEED3))
2694391a14SAngeloGioacchino Del Regno 
277bdc0c4bSKalyan Thota #define VIG_SDM845_MASK \
28b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3))
297bdc0c4bSKalyan Thota 
308b409996SDmitry Baryshkov #define VIG_SDM845_MASK_SDMA \
318b409996SDmitry Baryshkov 	(VIG_SDM845_MASK | BIT(DPU_SSPP_SMART_DMA_V2))
328b409996SDmitry Baryshkov 
337bdc0c4bSKalyan Thota #define VIG_SC7180_MASK \
34b8dab65bSAngeloGioacchino Del Regno 	(VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED4))
357bdc0c4bSKalyan Thota 
368b409996SDmitry Baryshkov #define VIG_SC7180_MASK_SDMA \
378b409996SDmitry Baryshkov 	(VIG_SC7180_MASK | BIT(DPU_SSPP_SMART_DMA_V2))
388b409996SDmitry Baryshkov 
39a2a448b4SDmitry Baryshkov #define VIG_QCM2290_MASK (VIG_BASE_MASK | BIT(DPU_SSPP_QOS_8LVL))
405334087eSLoic Poulain 
4194391a14SAngeloGioacchino Del Regno #define DMA_MSM8998_MASK \
4294391a14SAngeloGioacchino Del Regno 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\
4394391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
4494391a14SAngeloGioacchino Del Regno 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
4594391a14SAngeloGioacchino Del Regno 
46dabfdd89SVinod Polimera #define VIG_SC7280_MASK \
47dabfdd89SVinod Polimera 	(VIG_SC7180_MASK | BIT(DPU_SSPP_INLINE_ROTATION))
48dabfdd89SVinod Polimera 
498b409996SDmitry Baryshkov #define VIG_SC7280_MASK_SDMA \
508b409996SDmitry Baryshkov 	(VIG_SC7280_MASK | BIT(DPU_SSPP_SMART_DMA_V2))
518b409996SDmitry Baryshkov 
5225fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \
5325fdd593SJeykumar Sankaran 	(BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\
5425fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
5525fdd593SJeykumar Sankaran 	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
5625fdd593SJeykumar Sankaran 
5707ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \
5807ca1fc0SSravanthi Kollukuduru 	(DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR))
5907ca1fc0SSravanthi Kollukuduru 
608b409996SDmitry Baryshkov #define DMA_SDM845_MASK_SDMA \
618b409996SDmitry Baryshkov 	(DMA_SDM845_MASK | BIT(DPU_SSPP_SMART_DMA_V2))
628b409996SDmitry Baryshkov 
638b409996SDmitry Baryshkov #define DMA_CURSOR_SDM845_MASK_SDMA \
648b409996SDmitry Baryshkov 	(DMA_CURSOR_SDM845_MASK | BIT(DPU_SSPP_SMART_DMA_V2))
658b409996SDmitry Baryshkov 
6694391a14SAngeloGioacchino Del Regno #define DMA_CURSOR_MSM8998_MASK \
6794391a14SAngeloGioacchino Del Regno 	(DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR))
6894391a14SAngeloGioacchino Del Regno 
692d8a4edbSDmitry Baryshkov #define MIXER_MSM8998_MASK \
70a5045b00SDmitry Baryshkov 	(BIT(DPU_MIXER_SOURCESPLIT))
7125fdd593SJeykumar Sankaran 
722d8a4edbSDmitry Baryshkov #define MIXER_SDM845_MASK \
732d8a4edbSDmitry Baryshkov 	(BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER) | BIT(DPU_MIXER_COMBINED_ALPHA))
742d8a4edbSDmitry Baryshkov 
7500feff8fSDmitry Baryshkov #define MIXER_QCM2290_MASK \
762d8a4edbSDmitry Baryshkov 	(BIT(DPU_DIM_LAYER) | BIT(DPU_MIXER_COMBINED_ALPHA))
777bdc0c4bSKalyan Thota 
7825fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER)
7925fdd593SJeykumar Sankaran 
8025fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \
8125fdd593SJeykumar Sankaran 	(PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2))
8225fdd593SJeykumar Sankaran 
83591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \
8483a58b20SKalyan Thota 	(BIT(DPU_CTL_ACTIVE_CFG) | \
8583a58b20SKalyan Thota 	 BIT(DPU_CTL_FETCH_ACTIVE) | \
8683a58b20SKalyan Thota 	 BIT(DPU_CTL_VM_CFG) | \
8783a58b20SKalyan Thota 	 BIT(DPU_CTL_DSPP_SUB_BLOCK_FLUSH))
88591e34a0SKrishna Manikandan 
89e92a4ae1SDmitry Baryshkov #define CTL_SM8550_MASK \
90e92a4ae1SDmitry Baryshkov 	(CTL_SC7280_MASK | BIT(DPU_CTL_HAS_LAYER_EXT4))
91e92a4ae1SDmitry Baryshkov 
924369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0)
934369c93cSDmitry Baryshkov 
9494391a14SAngeloGioacchino Del Regno #define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC)
9594391a14SAngeloGioacchino Del Regno 
964259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
97e47616dfSKalyan Thota 
98cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0)
99cace3ac4SJonathan Marek 
100e3969eadSVinod Polimera #define INTF_SC7180_MASK \
101e3969eadSVinod Polimera 	(BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE) | BIT(DPU_INTF_STATUS_SUPPORTED))
102cace3ac4SJonathan Marek 
103591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN)
104591e34a0SKrishna Manikandan 
105597762d5SDmitry Baryshkov #define IRQ_SDM845_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_AD4_0_INTR) | \
113597762d5SDmitry Baryshkov 			 BIT(MDP_AD4_1_INTR))
114597762d5SDmitry Baryshkov 
115597762d5SDmitry Baryshkov #define IRQ_SC7180_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
116597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
117597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
118597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
119597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR))
120597762d5SDmitry Baryshkov 
121597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
122597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
123597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
124597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
125597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
126597762d5SDmitry Baryshkov 			 BIT(MDP_INTF5_7xxx_INTR))
127597762d5SDmitry Baryshkov 
128597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
129597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
130597762d5SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
131597762d5SDmitry Baryshkov 			 BIT(MDP_INTF0_INTR) | \
132597762d5SDmitry Baryshkov 			 BIT(MDP_INTF1_INTR) | \
133597762d5SDmitry Baryshkov 			 BIT(MDP_INTF2_INTR) | \
134597762d5SDmitry Baryshkov 			 BIT(MDP_INTF3_INTR) | \
135597762d5SDmitry Baryshkov 			 BIT(MDP_INTF4_INTR))
136597762d5SDmitry Baryshkov 
1370e91bcbbSRobert Foss #define IRQ_SM8350_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
1380e91bcbbSRobert Foss 			 BIT(MDP_SSPP_TOP0_INTR2) | \
1390e91bcbbSRobert Foss 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
1400e91bcbbSRobert Foss 			 BIT(MDP_INTF0_7xxx_INTR) | \
1410e91bcbbSRobert Foss 			 BIT(MDP_INTF1_7xxx_INTR) | \
1420e91bcbbSRobert Foss 			 BIT(MDP_INTF2_7xxx_INTR) | \
1437eb75dbdSRobert Foss 			 BIT(MDP_INTF3_7xxx_INTR))
1440e91bcbbSRobert Foss 
145f3af2d6eSRob Clark #define IRQ_SC8180X_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
146f3af2d6eSRob Clark 			  BIT(MDP_SSPP_TOP0_INTR2) | \
147f3af2d6eSRob Clark 			  BIT(MDP_SSPP_TOP0_HIST_INTR) | \
148f3af2d6eSRob Clark 			  BIT(MDP_INTF0_INTR) | \
149f3af2d6eSRob Clark 			  BIT(MDP_INTF1_INTR) | \
150f3af2d6eSRob Clark 			  BIT(MDP_INTF2_INTR) | \
151f3af2d6eSRob Clark 			  BIT(MDP_INTF3_INTR) | \
152f3af2d6eSRob Clark 			  BIT(MDP_INTF4_INTR) | \
153f3af2d6eSRob Clark 			  BIT(MDP_INTF5_INTR) | \
154f3af2d6eSRob Clark 			  BIT(MDP_AD4_0_INTR) | \
155f3af2d6eSRob Clark 			  BIT(MDP_AD4_1_INTR))
156597762d5SDmitry Baryshkov 
1574a352c2fSBjorn Andersson #define IRQ_SC8280XP_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
1584a352c2fSBjorn Andersson 			   BIT(MDP_SSPP_TOP0_INTR2) | \
1594a352c2fSBjorn Andersson 			   BIT(MDP_SSPP_TOP0_HIST_INTR) | \
1604a352c2fSBjorn Andersson 			   BIT(MDP_INTF0_7xxx_INTR) | \
1614a352c2fSBjorn Andersson 			   BIT(MDP_INTF1_7xxx_INTR) | \
1624a352c2fSBjorn Andersson 			   BIT(MDP_INTF2_7xxx_INTR) | \
1634a352c2fSBjorn Andersson 			   BIT(MDP_INTF3_7xxx_INTR) | \
1644a352c2fSBjorn Andersson 			   BIT(MDP_INTF4_7xxx_INTR) | \
1654a352c2fSBjorn Andersson 			   BIT(MDP_INTF5_7xxx_INTR) | \
1664a352c2fSBjorn Andersson 			   BIT(MDP_INTF6_7xxx_INTR) | \
1674a352c2fSBjorn Andersson 			   BIT(MDP_INTF7_7xxx_INTR) | \
1684a352c2fSBjorn Andersson 			   BIT(MDP_INTF8_7xxx_INTR))
1694a352c2fSBjorn Andersson 
170100d7ef6SDmitry Baryshkov #define IRQ_SM8450_MASK (BIT(MDP_SSPP_TOP0_INTR) | \
171100d7ef6SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_INTR2) | \
172100d7ef6SDmitry Baryshkov 			 BIT(MDP_SSPP_TOP0_HIST_INTR) | \
173100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF0_7xxx_INTR) | \
174100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF1_7xxx_INTR) | \
175100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF2_7xxx_INTR) | \
176100d7ef6SDmitry Baryshkov 			 BIT(MDP_INTF3_7xxx_INTR))
177100d7ef6SDmitry Baryshkov 
17853324b99SAbhinav Kumar #define WB_SM8250_MASK (BIT(DPU_WB_LINE_MODE) | \
17953324b99SAbhinav Kumar 			 BIT(DPU_WB_UBWC) | \
18053324b99SAbhinav Kumar 			 BIT(DPU_WB_YUV_CONFIG) | \
18153324b99SAbhinav Kumar 			 BIT(DPU_WB_PIPE_ALPHA) | \
18253324b99SAbhinav Kumar 			 BIT(DPU_WB_XY_ROI_OFFSET) | \
18353324b99SAbhinav Kumar 			 BIT(DPU_WB_QOS) | \
18453324b99SAbhinav Kumar 			 BIT(DPU_WB_QOS_8LVL) | \
18553324b99SAbhinav Kumar 			 BIT(DPU_WB_CDP) | \
18653324b99SAbhinav Kumar 			 BIT(DPU_WB_INPUT_CTRL))
18753324b99SAbhinav Kumar 
18825fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE		(50 * 1024)
18925fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH		2048
19025fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH	2560
19125fdd593SJeykumar Sankaran 
19225fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION	4
19325fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION	4
19425fdd593SJeykumar Sankaran 
19525fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO	20
19625fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO	4
19725fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE	1
19825fdd593SJeykumar Sankaran 
19925fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y)
20025fdd593SJeykumar Sankaran 
20109c7e370SLee Jones static const uint32_t plane_formats[] = {
20209c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
20309c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
20409c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
20509c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
20609c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
20709c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
20809c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
20909c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
210ffbbed63SLeonard Lausen 	DRM_FORMAT_ARGB2101010,
211da7716a2SJessica Zhang 	DRM_FORMAT_XRGB2101010,
21209c7e370SLee Jones 	DRM_FORMAT_RGB888,
21309c7e370SLee Jones 	DRM_FORMAT_BGR888,
21409c7e370SLee Jones 	DRM_FORMAT_RGB565,
21509c7e370SLee Jones 	DRM_FORMAT_BGR565,
21609c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
21709c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
21809c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
21909c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
22009c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
22109c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
22209c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
22309c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
22409c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
22509c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
22609c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
22709c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
22809c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
22909c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
23009c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
23109c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
23209c7e370SLee Jones };
23309c7e370SLee Jones 
23409c7e370SLee Jones static const uint32_t plane_formats_yuv[] = {
23509c7e370SLee Jones 	DRM_FORMAT_ARGB8888,
23609c7e370SLee Jones 	DRM_FORMAT_ABGR8888,
23709c7e370SLee Jones 	DRM_FORMAT_RGBA8888,
23809c7e370SLee Jones 	DRM_FORMAT_BGRX8888,
23909c7e370SLee Jones 	DRM_FORMAT_BGRA8888,
240ffbbed63SLeonard Lausen 	DRM_FORMAT_ARGB2101010,
241da7716a2SJessica Zhang 	DRM_FORMAT_XRGB2101010,
24209c7e370SLee Jones 	DRM_FORMAT_XRGB8888,
24309c7e370SLee Jones 	DRM_FORMAT_XBGR8888,
24409c7e370SLee Jones 	DRM_FORMAT_RGBX8888,
24509c7e370SLee Jones 	DRM_FORMAT_RGB888,
24609c7e370SLee Jones 	DRM_FORMAT_BGR888,
24709c7e370SLee Jones 	DRM_FORMAT_RGB565,
24809c7e370SLee Jones 	DRM_FORMAT_BGR565,
24909c7e370SLee Jones 	DRM_FORMAT_ARGB1555,
25009c7e370SLee Jones 	DRM_FORMAT_ABGR1555,
25109c7e370SLee Jones 	DRM_FORMAT_RGBA5551,
25209c7e370SLee Jones 	DRM_FORMAT_BGRA5551,
25309c7e370SLee Jones 	DRM_FORMAT_XRGB1555,
25409c7e370SLee Jones 	DRM_FORMAT_XBGR1555,
25509c7e370SLee Jones 	DRM_FORMAT_RGBX5551,
25609c7e370SLee Jones 	DRM_FORMAT_BGRX5551,
25709c7e370SLee Jones 	DRM_FORMAT_ARGB4444,
25809c7e370SLee Jones 	DRM_FORMAT_ABGR4444,
25909c7e370SLee Jones 	DRM_FORMAT_RGBA4444,
26009c7e370SLee Jones 	DRM_FORMAT_BGRA4444,
26109c7e370SLee Jones 	DRM_FORMAT_XRGB4444,
26209c7e370SLee Jones 	DRM_FORMAT_XBGR4444,
26309c7e370SLee Jones 	DRM_FORMAT_RGBX4444,
26409c7e370SLee Jones 	DRM_FORMAT_BGRX4444,
26509c7e370SLee Jones 
266f07c9946SJessica Zhang 	DRM_FORMAT_P010,
26709c7e370SLee Jones 	DRM_FORMAT_NV12,
26809c7e370SLee Jones 	DRM_FORMAT_NV21,
26909c7e370SLee Jones 	DRM_FORMAT_NV16,
27009c7e370SLee Jones 	DRM_FORMAT_NV61,
27109c7e370SLee Jones 	DRM_FORMAT_VYUY,
27209c7e370SLee Jones 	DRM_FORMAT_UYVY,
27309c7e370SLee Jones 	DRM_FORMAT_YUYV,
27409c7e370SLee Jones 	DRM_FORMAT_YVYU,
27509c7e370SLee Jones 	DRM_FORMAT_YUV420,
27609c7e370SLee Jones 	DRM_FORMAT_YVU420,
27709c7e370SLee Jones };
27809c7e370SLee Jones 
279dabfdd89SVinod Polimera static const u32 rotation_v2_formats[] = {
280dabfdd89SVinod Polimera 	DRM_FORMAT_NV12,
281dabfdd89SVinod Polimera 	/* TODO add formats after validation */
282dabfdd89SVinod Polimera };
283dabfdd89SVinod Polimera 
28453324b99SAbhinav Kumar static const uint32_t wb2_formats[] = {
28553324b99SAbhinav Kumar 	DRM_FORMAT_RGB565,
28653324b99SAbhinav Kumar 	DRM_FORMAT_BGR565,
28753324b99SAbhinav Kumar 	DRM_FORMAT_RGB888,
28853324b99SAbhinav Kumar 	DRM_FORMAT_ARGB8888,
28953324b99SAbhinav Kumar 	DRM_FORMAT_RGBA8888,
29053324b99SAbhinav Kumar 	DRM_FORMAT_ABGR8888,
29153324b99SAbhinav Kumar 	DRM_FORMAT_XRGB8888,
29253324b99SAbhinav Kumar 	DRM_FORMAT_RGBX8888,
29353324b99SAbhinav Kumar 	DRM_FORMAT_XBGR8888,
29453324b99SAbhinav Kumar 	DRM_FORMAT_ARGB1555,
29553324b99SAbhinav Kumar 	DRM_FORMAT_RGBA5551,
29653324b99SAbhinav Kumar 	DRM_FORMAT_XRGB1555,
29753324b99SAbhinav Kumar 	DRM_FORMAT_RGBX5551,
29853324b99SAbhinav Kumar 	DRM_FORMAT_ARGB4444,
29953324b99SAbhinav Kumar 	DRM_FORMAT_RGBA4444,
30053324b99SAbhinav Kumar 	DRM_FORMAT_RGBX4444,
30153324b99SAbhinav Kumar 	DRM_FORMAT_XRGB4444,
30253324b99SAbhinav Kumar 	DRM_FORMAT_BGR565,
30353324b99SAbhinav Kumar 	DRM_FORMAT_BGR888,
30453324b99SAbhinav Kumar 	DRM_FORMAT_ABGR8888,
30553324b99SAbhinav Kumar 	DRM_FORMAT_BGRA8888,
30653324b99SAbhinav Kumar 	DRM_FORMAT_BGRX8888,
30753324b99SAbhinav Kumar 	DRM_FORMAT_XBGR8888,
30853324b99SAbhinav Kumar 	DRM_FORMAT_ABGR1555,
30953324b99SAbhinav Kumar 	DRM_FORMAT_BGRA5551,
31053324b99SAbhinav Kumar 	DRM_FORMAT_XBGR1555,
31153324b99SAbhinav Kumar 	DRM_FORMAT_BGRX5551,
31253324b99SAbhinav Kumar 	DRM_FORMAT_ABGR4444,
31353324b99SAbhinav Kumar 	DRM_FORMAT_BGRA4444,
31453324b99SAbhinav Kumar 	DRM_FORMAT_BGRX4444,
31553324b99SAbhinav Kumar 	DRM_FORMAT_XBGR4444,
31653324b99SAbhinav Kumar };
31753324b99SAbhinav Kumar 
31825fdd593SJeykumar Sankaran /*************************************************************
31925fdd593SJeykumar Sankaran  * DPU sub blocks config
32025fdd593SJeykumar Sankaran  *************************************************************/
32125fdd593SJeykumar Sankaran /* DPU top level caps */
32294391a14SAngeloGioacchino Del Regno static const struct dpu_caps msm8998_dpu_caps = {
32394391a14SAngeloGioacchino Del Regno 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
32494391a14SAngeloGioacchino Del Regno 	.max_mixer_blendstages = 0x7,
32594391a14SAngeloGioacchino Del Regno 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
32694391a14SAngeloGioacchino Del Regno 	.has_src_split = true,
32794391a14SAngeloGioacchino Del Regno 	.has_dim_layer = true,
32894391a14SAngeloGioacchino Del Regno 	.has_idle_pc = true,
32994391a14SAngeloGioacchino Del Regno 	.has_3d_merge = true,
33094391a14SAngeloGioacchino Del Regno 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
33194391a14SAngeloGioacchino Del Regno 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
33294391a14SAngeloGioacchino Del Regno 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
33394391a14SAngeloGioacchino Del Regno 	.max_vdeci_exp = MAX_VERT_DECIMATION,
33494391a14SAngeloGioacchino Del Regno };
33594391a14SAngeloGioacchino Del Regno 
336c162352eSKonrad Dybcio static const struct dpu_caps qcm2290_dpu_caps = {
337da06be8bSDmitry Baryshkov 	.max_mixer_width = DEFAULT_DPU_LINE_WIDTH,
338c162352eSKonrad Dybcio 	.max_mixer_blendstages = 0x4,
339c162352eSKonrad Dybcio 	.has_dim_layer = true,
340c162352eSKonrad Dybcio 	.has_idle_pc = true,
341c162352eSKonrad Dybcio 	.max_linewidth = 2160,
342c162352eSKonrad Dybcio 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
343c162352eSKonrad Dybcio };
344c162352eSKonrad Dybcio 
34525fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = {
34625fdd593SJeykumar Sankaran 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
34725fdd593SJeykumar Sankaran 	.max_mixer_blendstages = 0xb,
34825fdd593SJeykumar Sankaran 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
34925fdd593SJeykumar Sankaran 	.has_src_split = true,
35025fdd593SJeykumar Sankaran 	.has_dim_layer = true,
35125fdd593SJeykumar Sankaran 	.has_idle_pc = true,
35242a558b7SKalyan Thota 	.has_3d_merge = true,
3537e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3547e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3557e9d4cddSJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
3567e9d4cddSJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
35725fdd593SJeykumar Sankaran };
35825fdd593SJeykumar Sankaran 
3597bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = {
3607bdc0c4bSKalyan Thota 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3617bdc0c4bSKalyan Thota 	.max_mixer_blendstages = 0x9,
3627bdc0c4bSKalyan Thota 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
3637bdc0c4bSKalyan Thota 	.has_dim_layer = true,
3647bdc0c4bSKalyan Thota 	.has_idle_pc = true,
3657e9d4cddSJonathan Marek 	.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
3667e9d4cddSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3677bdc0c4bSKalyan Thota };
3687bdc0c4bSKalyan Thota 
3693581b706SAdam Skladowski static const struct dpu_caps sm6115_dpu_caps = {
370da06be8bSDmitry Baryshkov 	.max_mixer_width = DEFAULT_DPU_LINE_WIDTH,
3713581b706SAdam Skladowski 	.max_mixer_blendstages = 0x4,
37238164e99SDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
3733581b706SAdam Skladowski 	.has_dim_layer = true,
3743581b706SAdam Skladowski 	.has_idle_pc = true,
3753581b706SAdam Skladowski 	.max_linewidth = 2160,
3763581b706SAdam Skladowski 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
3773581b706SAdam Skladowski };
3783581b706SAdam Skladowski 
379386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = {
380386fced3SJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
381386fced3SJonathan Marek 	.max_mixer_blendstages = 0xb,
382386fced3SJonathan Marek 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
383386fced3SJonathan Marek 	.has_src_split = true,
384386fced3SJonathan Marek 	.has_dim_layer = true,
385386fced3SJonathan Marek 	.has_idle_pc = true,
386386fced3SJonathan Marek 	.has_3d_merge = true,
387386fced3SJonathan Marek 	.max_linewidth = 4096,
388386fced3SJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
389386fced3SJonathan Marek 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
390386fced3SJonathan Marek 	.max_vdeci_exp = MAX_VERT_DECIMATION,
391386fced3SJonathan Marek };
392386fced3SJonathan Marek 
393f3af2d6eSRob Clark static const struct dpu_caps sc8180x_dpu_caps = {
394f3af2d6eSRob Clark 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
395f3af2d6eSRob Clark 	.max_mixer_blendstages = 0xb,
396f3af2d6eSRob Clark 	.qseed_type = DPU_SSPP_SCALER_QSEED3,
397f3af2d6eSRob Clark 	.has_src_split = true,
398f3af2d6eSRob Clark 	.has_dim_layer = true,
399f3af2d6eSRob Clark 	.has_idle_pc = true,
400f3af2d6eSRob Clark 	.has_3d_merge = true,
401f3af2d6eSRob Clark 	.max_linewidth = 4096,
402f3af2d6eSRob Clark 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
403f3af2d6eSRob Clark 	.max_hdeci_exp = MAX_HORZ_DECIMATION,
404f3af2d6eSRob Clark 	.max_vdeci_exp = MAX_VERT_DECIMATION,
405f3af2d6eSRob Clark };
406f3af2d6eSRob Clark 
407af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = {
408af776a3eSJonathan Marek 	.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
409af776a3eSJonathan Marek 	.max_mixer_blendstages = 0xb,
41003c0c3cbSDmitry Baryshkov 	.qseed_type = DPU_SSPP_SCALER_QSEED4,
411af776a3eSJonathan Marek 	.has_src_split = true,
412af776a3eSJonathan Marek 	.has_dim_layer = true,
413af776a3eSJonathan Marek 	.has_idle_pc = true,
414af776a3eSJonathan Marek 	.has_3d_merge = true,
415af776a3eSJonathan Marek 	.max_linewidth = 4096,
416af776a3eSJonathan Marek 	.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
417af776a3eSJonathan Marek };
418af776a3eSJonathan Marek 
419fbbd8cceSDmitry Baryshkov static const struct dpu_ubwc_cfg msm8998_ubwc_cfg = {
420fbbd8cceSDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_10,
421fbbd8cceSDmitry Baryshkov 	.highest_bank_bit = 0x2,
422fbbd8cceSDmitry Baryshkov };
423fbbd8cceSDmitry Baryshkov 
424fbbd8cceSDmitry Baryshkov static const struct dpu_ubwc_cfg qcm2290_ubwc_cfg = {
425fbbd8cceSDmitry Baryshkov 	.highest_bank_bit = 0x2,
426fbbd8cceSDmitry Baryshkov };
427fbbd8cceSDmitry Baryshkov 
428fbbd8cceSDmitry Baryshkov static const struct dpu_ubwc_cfg sdm845_ubwc_cfg = {
429fbbd8cceSDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_20,
430fbbd8cceSDmitry Baryshkov 	.highest_bank_bit = 0x2,
431fbbd8cceSDmitry Baryshkov };
432fbbd8cceSDmitry Baryshkov 
433fbbd8cceSDmitry Baryshkov static const struct dpu_ubwc_cfg sc7180_ubwc_cfg = {
434fbbd8cceSDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_20,
435fbbd8cceSDmitry Baryshkov 	.highest_bank_bit = 0x3,
436fbbd8cceSDmitry Baryshkov };
437fbbd8cceSDmitry Baryshkov 
438fbbd8cceSDmitry Baryshkov static const struct dpu_ubwc_cfg sm6115_ubwc_cfg = {
439fbbd8cceSDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_10,
440fbbd8cceSDmitry Baryshkov 	.highest_bank_bit = 0x1,
441fbbd8cceSDmitry Baryshkov 	.ubwc_swizzle = 0x7,
442fbbd8cceSDmitry Baryshkov };
443fbbd8cceSDmitry Baryshkov 
444fbbd8cceSDmitry Baryshkov static const struct dpu_ubwc_cfg sm8150_ubwc_cfg = {
445fbbd8cceSDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_30,
446fbbd8cceSDmitry Baryshkov 	.highest_bank_bit = 0x2,
447fbbd8cceSDmitry Baryshkov };
448fbbd8cceSDmitry Baryshkov 
449fbbd8cceSDmitry Baryshkov static const struct dpu_ubwc_cfg sc8180x_ubwc_cfg = {
450fbbd8cceSDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_30,
451fbbd8cceSDmitry Baryshkov 	.highest_bank_bit = 0x3,
452fbbd8cceSDmitry Baryshkov };
453fbbd8cceSDmitry Baryshkov 
454fbbd8cceSDmitry Baryshkov static const struct dpu_ubwc_cfg sm8250_ubwc_cfg = {
455fbbd8cceSDmitry Baryshkov 	.ubwc_version = DPU_HW_UBWC_VER_40,
456fbbd8cceSDmitry Baryshkov 	.highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */
457fbbd8cceSDmitry Baryshkov 	.ubwc_swizzle = 0x6,
458fbbd8cceSDmitry Baryshkov };
459fbbd8cceSDmitry Baryshkov 
46094391a14SAngeloGioacchino Del Regno static const struct dpu_mdp_cfg msm8998_mdp[] = {
46194391a14SAngeloGioacchino Del Regno 	{
46294391a14SAngeloGioacchino Del Regno 	.name = "top_0", .id = MDP_TOP,
46394391a14SAngeloGioacchino Del Regno 	.base = 0x0, .len = 0x458,
46494391a14SAngeloGioacchino Del Regno 	.features = 0,
46594391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
46694391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 0},
46794391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
46894391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 0},
46994391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
47094391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2BC, .bit_off = 0},
47194391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
47294391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 0},
47394391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
47494391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2AC, .bit_off = 8},
47594391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
47694391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2B4, .bit_off = 8},
47794391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
47894391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 8},
47994391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_DMA3] = {
48094391a14SAngeloGioacchino Del Regno 			.reg_off = 0x2C4, .bit_off = 12},
48194391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR0] = {
48294391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3A8, .bit_off = 15},
48394391a14SAngeloGioacchino Del Regno 	.clk_ctrls[DPU_CLK_CTRL_CURSOR1] = {
48494391a14SAngeloGioacchino Del Regno 			.reg_off = 0x3B0, .bit_off = 15},
48594391a14SAngeloGioacchino Del Regno 	},
48694391a14SAngeloGioacchino Del Regno };
48794391a14SAngeloGioacchino Del Regno 
488abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = {
48925fdd593SJeykumar Sankaran 	{
49025fdd593SJeykumar Sankaran 	.name = "top_0", .id = MDP_TOP,
49125fdd593SJeykumar Sankaran 	.base = 0x0, .len = 0x45C,
49203490e11SKuogee Hsieh 	.features = BIT(DPU_MDP_AUDIO_SELECT),
49325fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
49425fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 0},
49525fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
49625fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 0},
49725fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
49825fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 0},
49925fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
50025fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 0},
50125fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
50225fdd593SJeykumar Sankaran 			.reg_off = 0x2AC, .bit_off = 8},
50325fdd593SJeykumar Sankaran 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
50425fdd593SJeykumar Sankaran 			.reg_off = 0x2B4, .bit_off = 8},
505d6181c18SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
50625fdd593SJeykumar Sankaran 			.reg_off = 0x2BC, .bit_off = 8},
507d6181c18SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA3] = {
50825fdd593SJeykumar Sankaran 			.reg_off = 0x2C4, .bit_off = 8},
50925fdd593SJeykumar Sankaran 	},
51025fdd593SJeykumar Sankaran };
51125fdd593SJeykumar Sankaran 
5127bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = {
5137bdc0c4bSKalyan Thota 	{
5147bdc0c4bSKalyan Thota 	.name = "top_0", .id = MDP_TOP,
5157bdc0c4bSKalyan Thota 	.base = 0x0, .len = 0x494,
5167bdc0c4bSKalyan Thota 	.features = 0,
5177bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
5187bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 0},
5197bdc0c4bSKalyan Thota 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
5207bdc0c4bSKalyan Thota 		.reg_off = 0x2AC, .bit_off = 8},
521d6181c18SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
5227b149f2bSKalyan Thota 		.reg_off = 0x2B4, .bit_off = 8},
523d6181c18SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
5247b149f2bSKalyan Thota 		.reg_off = 0x2C4, .bit_off = 8},
525255f0561SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_WB2] = {
526255f0561SDmitry Baryshkov 		.reg_off = 0x3B8, .bit_off = 24},
5277bdc0c4bSKalyan Thota 	},
5287bdc0c4bSKalyan Thota };
5297bdc0c4bSKalyan Thota 
530f3af2d6eSRob Clark static const struct dpu_mdp_cfg sc8180x_mdp[] = {
531f3af2d6eSRob Clark 	{
532f3af2d6eSRob Clark 	.name = "top_0", .id = MDP_TOP,
533f3af2d6eSRob Clark 	.base = 0x0, .len = 0x45C,
53410a88954SDmitry Baryshkov 	.features = BIT(DPU_MDP_AUDIO_SELECT),
535f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
536f3af2d6eSRob Clark 			.reg_off = 0x2AC, .bit_off = 0},
537f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
538f3af2d6eSRob Clark 			.reg_off = 0x2B4, .bit_off = 0},
539f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
540f3af2d6eSRob Clark 			.reg_off = 0x2BC, .bit_off = 0},
541f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
542f3af2d6eSRob Clark 			.reg_off = 0x2C4, .bit_off = 0},
543f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
544f3af2d6eSRob Clark 			.reg_off = 0x2AC, .bit_off = 8},
545f3af2d6eSRob Clark 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
546f3af2d6eSRob Clark 			.reg_off = 0x2B4, .bit_off = 8},
547d6181c18SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
548f3af2d6eSRob Clark 			.reg_off = 0x2BC, .bit_off = 8},
549d6181c18SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA3] = {
550f3af2d6eSRob Clark 			.reg_off = 0x2C4, .bit_off = 8},
551f3af2d6eSRob Clark 	},
552f3af2d6eSRob Clark };
553f3af2d6eSRob Clark 
5543581b706SAdam Skladowski static const struct dpu_mdp_cfg sm6115_mdp[] = {
5553581b706SAdam Skladowski 	{
5563581b706SAdam Skladowski 	.name = "top_0", .id = MDP_TOP,
5573581b706SAdam Skladowski 	.base = 0x0, .len = 0x494,
5583581b706SAdam Skladowski 	.features = 0,
5593581b706SAdam Skladowski 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
5603581b706SAdam Skladowski 		.reg_off = 0x2ac, .bit_off = 0},
5613581b706SAdam Skladowski 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
5623581b706SAdam Skladowski 		.reg_off = 0x2ac, .bit_off = 8},
5633581b706SAdam Skladowski 	},
5643581b706SAdam Skladowski };
5653581b706SAdam Skladowski 
566af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = {
567af776a3eSJonathan Marek 	{
568af776a3eSJonathan Marek 	.name = "top_0", .id = MDP_TOP,
569b910a020SRobert Foss 	.base = 0x0, .len = 0x494,
570af776a3eSJonathan Marek 	.features = 0,
571af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
572af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 0},
573af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG1] = {
574af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 0},
575af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG2] = {
576af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 0},
577af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_VIG3] = {
578af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 0},
579af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
580af776a3eSJonathan Marek 			.reg_off = 0x2AC, .bit_off = 8},
581af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_DMA1] = {
582af776a3eSJonathan Marek 			.reg_off = 0x2B4, .bit_off = 8},
583d6181c18SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA2] = {
584af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 8},
585d6181c18SDmitry Baryshkov 	.clk_ctrls[DPU_CLK_CTRL_DMA3] = {
586af776a3eSJonathan Marek 			.reg_off = 0x2C4, .bit_off = 8},
587af776a3eSJonathan Marek 	.clk_ctrls[DPU_CLK_CTRL_REG_DMA] = {
588af776a3eSJonathan Marek 			.reg_off = 0x2BC, .bit_off = 20},
58953324b99SAbhinav Kumar 	.clk_ctrls[DPU_CLK_CTRL_WB2] = {
59053324b99SAbhinav Kumar 			.reg_off = 0x3B8, .bit_off = 24},
591af776a3eSJonathan Marek 	},
592af776a3eSJonathan Marek };
593af776a3eSJonathan Marek 
5945334087eSLoic Poulain static const struct dpu_mdp_cfg qcm2290_mdp[] = {
5955334087eSLoic Poulain 	{
5965334087eSLoic Poulain 	.name = "top_0", .id = MDP_TOP,
5975334087eSLoic Poulain 	.base = 0x0, .len = 0x494,
5985334087eSLoic Poulain 	.features = 0,
5995334087eSLoic Poulain 	.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
6005334087eSLoic Poulain 		.reg_off = 0x2AC, .bit_off = 0},
6015334087eSLoic Poulain 	.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
6025334087eSLoic Poulain 		.reg_off = 0x2AC, .bit_off = 8},
6035334087eSLoic Poulain 	},
6045334087eSLoic Poulain };
6055334087eSLoic Poulain 
60625fdd593SJeykumar Sankaran /*************************************************************
60725fdd593SJeykumar Sankaran  * CTL sub blocks config
60825fdd593SJeykumar Sankaran  *************************************************************/
60994391a14SAngeloGioacchino Del Regno static const struct dpu_ctl_cfg msm8998_ctl[] = {
61094391a14SAngeloGioacchino Del Regno 	{
61194391a14SAngeloGioacchino Del Regno 	.name = "ctl_0", .id = CTL_0,
61294391a14SAngeloGioacchino Del Regno 	.base = 0x1000, .len = 0x94,
61394391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
61494391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
61594391a14SAngeloGioacchino Del Regno 	},
61694391a14SAngeloGioacchino Del Regno 	{
61794391a14SAngeloGioacchino Del Regno 	.name = "ctl_1", .id = CTL_1,
61894391a14SAngeloGioacchino Del Regno 	.base = 0x1200, .len = 0x94,
61994391a14SAngeloGioacchino Del Regno 	.features = 0,
62094391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
62194391a14SAngeloGioacchino Del Regno 	},
62294391a14SAngeloGioacchino Del Regno 	{
62394391a14SAngeloGioacchino Del Regno 	.name = "ctl_2", .id = CTL_2,
62494391a14SAngeloGioacchino Del Regno 	.base = 0x1400, .len = 0x94,
62594391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
62694391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
62794391a14SAngeloGioacchino Del Regno 	},
62894391a14SAngeloGioacchino Del Regno 	{
62994391a14SAngeloGioacchino Del Regno 	.name = "ctl_3", .id = CTL_3,
63094391a14SAngeloGioacchino Del Regno 	.base = 0x1600, .len = 0x94,
63194391a14SAngeloGioacchino Del Regno 	.features = 0,
63294391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
63394391a14SAngeloGioacchino Del Regno 	},
63494391a14SAngeloGioacchino Del Regno 	{
63594391a14SAngeloGioacchino Del Regno 	.name = "ctl_4", .id = CTL_4,
63694391a14SAngeloGioacchino Del Regno 	.base = 0x1800, .len = 0x94,
63794391a14SAngeloGioacchino Del Regno 	.features = 0,
63894391a14SAngeloGioacchino Del Regno 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
63994391a14SAngeloGioacchino Del Regno 	},
64094391a14SAngeloGioacchino Del Regno };
64194391a14SAngeloGioacchino Del Regno 
642abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = {
64325fdd593SJeykumar Sankaran 	{
64425fdd593SJeykumar Sankaran 	.name = "ctl_0", .id = CTL_0,
64525fdd593SJeykumar Sankaran 	.base = 0x1000, .len = 0xE4,
646667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
647667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
64825fdd593SJeykumar Sankaran 	},
64925fdd593SJeykumar Sankaran 	{
65025fdd593SJeykumar Sankaran 	.name = "ctl_1", .id = CTL_1,
65125fdd593SJeykumar Sankaran 	.base = 0x1200, .len = 0xE4,
652667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_SPLIT_DISPLAY),
653667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
65425fdd593SJeykumar Sankaran 	},
65525fdd593SJeykumar Sankaran 	{
65625fdd593SJeykumar Sankaran 	.name = "ctl_2", .id = CTL_2,
65725fdd593SJeykumar Sankaran 	.base = 0x1400, .len = 0xE4,
658667e9985SDmitry Baryshkov 	.features = 0,
659667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
66025fdd593SJeykumar Sankaran 	},
66125fdd593SJeykumar Sankaran 	{
66225fdd593SJeykumar Sankaran 	.name = "ctl_3", .id = CTL_3,
66325fdd593SJeykumar Sankaran 	.base = 0x1600, .len = 0xE4,
664667e9985SDmitry Baryshkov 	.features = 0,
665667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
66625fdd593SJeykumar Sankaran 	},
66725fdd593SJeykumar Sankaran 	{
66825fdd593SJeykumar Sankaran 	.name = "ctl_4", .id = CTL_4,
66925fdd593SJeykumar Sankaran 	.base = 0x1800, .len = 0xE4,
670667e9985SDmitry Baryshkov 	.features = 0,
671667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
67225fdd593SJeykumar Sankaran 	},
67325fdd593SJeykumar Sankaran };
67425fdd593SJeykumar Sankaran 
6757bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = {
6767bdc0c4bSKalyan Thota 	{
6777bdc0c4bSKalyan Thota 	.name = "ctl_0", .id = CTL_0,
678ce6bd00aSDmitry Baryshkov 	.base = 0x1000, .len = 0x1dc,
679667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
680667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
6817bdc0c4bSKalyan Thota 	},
6827bdc0c4bSKalyan Thota 	{
6837bdc0c4bSKalyan Thota 	.name = "ctl_1", .id = CTL_1,
684ce6bd00aSDmitry Baryshkov 	.base = 0x1200, .len = 0x1dc,
685667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
686667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
6877bdc0c4bSKalyan Thota 	},
6887bdc0c4bSKalyan Thota 	{
6897bdc0c4bSKalyan Thota 	.name = "ctl_2", .id = CTL_2,
690ce6bd00aSDmitry Baryshkov 	.base = 0x1400, .len = 0x1dc,
691667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
692667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
6937bdc0c4bSKalyan Thota 	},
6947bdc0c4bSKalyan Thota };
6957bdc0c4bSKalyan Thota 
696386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = {
697386fced3SJonathan Marek 	{
698386fced3SJonathan Marek 	.name = "ctl_0", .id = CTL_0,
699386fced3SJonathan Marek 	.base = 0x1000, .len = 0x1e0,
700667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
701667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
702386fced3SJonathan Marek 	},
703386fced3SJonathan Marek 	{
704386fced3SJonathan Marek 	.name = "ctl_1", .id = CTL_1,
705386fced3SJonathan Marek 	.base = 0x1200, .len = 0x1e0,
706667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY),
707667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
708386fced3SJonathan Marek 	},
709386fced3SJonathan Marek 	{
710386fced3SJonathan Marek 	.name = "ctl_2", .id = CTL_2,
711386fced3SJonathan Marek 	.base = 0x1400, .len = 0x1e0,
712667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
713667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
714386fced3SJonathan Marek 	},
715386fced3SJonathan Marek 	{
716386fced3SJonathan Marek 	.name = "ctl_3", .id = CTL_3,
717386fced3SJonathan Marek 	.base = 0x1600, .len = 0x1e0,
718667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
719667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
720386fced3SJonathan Marek 	},
721386fced3SJonathan Marek 	{
722386fced3SJonathan Marek 	.name = "ctl_4", .id = CTL_4,
723386fced3SJonathan Marek 	.base = 0x1800, .len = 0x1e0,
724667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
725667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
726386fced3SJonathan Marek 	},
727386fced3SJonathan Marek 	{
728386fced3SJonathan Marek 	.name = "ctl_5", .id = CTL_5,
729386fced3SJonathan Marek 	.base = 0x1a00, .len = 0x1e0,
730667e9985SDmitry Baryshkov 	.features = BIT(DPU_CTL_ACTIVE_CFG),
731667e9985SDmitry Baryshkov 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
732386fced3SJonathan Marek 	},
733386fced3SJonathan Marek };
734386fced3SJonathan Marek 
7355334087eSLoic Poulain static const struct dpu_ctl_cfg qcm2290_ctl[] = {
7365334087eSLoic Poulain 	{
7375334087eSLoic Poulain 	.name = "ctl_0", .id = CTL_0,
7385334087eSLoic Poulain 	.base = 0x1000, .len = 0x1dc,
7395334087eSLoic Poulain 	.features = BIT(DPU_CTL_ACTIVE_CFG),
7405334087eSLoic Poulain 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
7415334087eSLoic Poulain 	},
7425334087eSLoic Poulain };
7435334087eSLoic Poulain 
74425fdd593SJeykumar Sankaran /*************************************************************
74525fdd593SJeykumar Sankaran  * SSPP sub blocks config
74625fdd593SJeykumar Sankaran  *************************************************************/
74725fdd593SJeykumar Sankaran 
74825fdd593SJeykumar Sankaran /* SSPP common configuration */
749b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \
75025fdd593SJeykumar Sankaran 	{ \
75125fdd593SJeykumar Sankaran 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
75225fdd593SJeykumar Sankaran 	.maxupscale = MAX_UPSCALE_RATIO, \
75325fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
75425fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
75525fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
75625fdd593SJeykumar Sankaran 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
757b75ab05aSShubhashree Dhar 		.id = qseed_ver, \
75825fdd593SJeykumar Sankaran 		.base = 0xa00, .len = 0xa0,}, \
75925fdd593SJeykumar Sankaran 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
76025fdd593SJeykumar Sankaran 		.id = DPU_SSPP_CSC_10BIT, \
76125fdd593SJeykumar Sankaran 		.base = 0x1a00, .len = 0x100,}, \
76225fdd593SJeykumar Sankaran 	.format_list = plane_formats_yuv, \
763e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
76425fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
765e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
766dabfdd89SVinod Polimera 	.rotation_cfg = NULL, \
767dabfdd89SVinod Polimera 	}
768dabfdd89SVinod Polimera 
769dabfdd89SVinod Polimera #define _VIG_SBLK_ROT(num, sdma_pri, qseed_ver, rot_cfg) \
770dabfdd89SVinod Polimera 	{ \
771dabfdd89SVinod Polimera 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
772dabfdd89SVinod Polimera 	.maxupscale = MAX_UPSCALE_RATIO, \
773dabfdd89SVinod Polimera 	.smart_dma_priority = sdma_pri, \
774dabfdd89SVinod Polimera 	.src_blk = {.name = STRCAT("sspp_src_", num), \
775dabfdd89SVinod Polimera 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
776dabfdd89SVinod Polimera 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
777dabfdd89SVinod Polimera 		.id = qseed_ver, \
778dabfdd89SVinod Polimera 		.base = 0xa00, .len = 0xa0,}, \
779dabfdd89SVinod Polimera 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
780dabfdd89SVinod Polimera 		.id = DPU_SSPP_CSC_10BIT, \
781dabfdd89SVinod Polimera 		.base = 0x1a00, .len = 0x100,}, \
782dabfdd89SVinod Polimera 	.format_list = plane_formats_yuv, \
783dabfdd89SVinod Polimera 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
784dabfdd89SVinod Polimera 	.virt_format_list = plane_formats, \
785dabfdd89SVinod Polimera 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
786dabfdd89SVinod Polimera 	.rotation_cfg = rot_cfg, \
78725fdd593SJeykumar Sankaran 	}
78825fdd593SJeykumar Sankaran 
78925fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \
79025fdd593SJeykumar Sankaran 	{ \
79125fdd593SJeykumar Sankaran 	.maxdwnscale = SSPP_UNITY_SCALE, \
79225fdd593SJeykumar Sankaran 	.maxupscale = SSPP_UNITY_SCALE, \
79325fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
79425fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
79525fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
79625fdd593SJeykumar Sankaran 	.format_list = plane_formats, \
797e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats), \
79825fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
799e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
80025fdd593SJeykumar Sankaran 	}
80125fdd593SJeykumar Sankaran 
80294391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_0 =
80394391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("0", 0, DPU_SSPP_SCALER_QSEED3);
80494391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_1 =
80594391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("1", 0, DPU_SSPP_SCALER_QSEED3);
80694391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_2 =
80794391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("2", 0, DPU_SSPP_SCALER_QSEED3);
80894391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_3 =
80994391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("3", 0, DPU_SSPP_SCALER_QSEED3);
81094391a14SAngeloGioacchino Del Regno 
811dabfdd89SVinod Polimera static const struct dpu_rotation_cfg dpu_rot_sc7280_cfg_v2 = {
812dabfdd89SVinod Polimera 	.rot_maxheight = 1088,
813dabfdd89SVinod Polimera 	.rot_num_formats = ARRAY_SIZE(rotation_v2_formats),
814dabfdd89SVinod Polimera 	.rot_format_list = rotation_v2_formats,
815dabfdd89SVinod Polimera };
816dabfdd89SVinod Polimera 
817b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 =
818b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3);
819b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 =
820b75ab05aSShubhashree Dhar 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3);
821b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 =
822b75ab05aSShubhashree Dhar 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3);
823b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 =
824b75ab05aSShubhashree Dhar 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3);
82525fdd593SJeykumar Sankaran 
82625fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1);
82725fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2);
82825fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3);
82925fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4);
83025fdd593SJeykumar Sankaran 
8318f940ddbSKonrad Dybcio #define SSPP_BLK(_name, _id, _base, _len, _features, \
83207ca1fc0SSravanthi Kollukuduru 		_sblk, _xinid, _type, _clkctrl) \
83325fdd593SJeykumar Sankaran 	{ \
83425fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
8358f940ddbSKonrad Dybcio 	.base = _base, .len = _len, \
83607ca1fc0SSravanthi Kollukuduru 	.features = _features, \
83725fdd593SJeykumar Sankaran 	.sblk = &_sblk, \
83825fdd593SJeykumar Sankaran 	.xin_id = _xinid, \
83907ca1fc0SSravanthi Kollukuduru 	.type = _type, \
84025fdd593SJeykumar Sankaran 	.clk_ctrl = _clkctrl \
84125fdd593SJeykumar Sankaran 	}
84225fdd593SJeykumar Sankaran 
84394391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_cfg msm8998_sspp[] = {
8448f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, 0x1ac, VIG_MSM8998_MASK,
84594391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
8468f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, 0x1ac, VIG_MSM8998_MASK,
84794391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
8488f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, 0x1ac, VIG_MSM8998_MASK,
84994391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
8508f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, 0x1ac, VIG_MSM8998_MASK,
85194391a14SAngeloGioacchino Del Regno 		msm8998_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
8528f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, 0x1ac, DMA_MSM8998_MASK,
85394391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
8548f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, 0x1ac, DMA_MSM8998_MASK,
85594391a14SAngeloGioacchino Del Regno 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
8568f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, 0x1ac, DMA_CURSOR_MSM8998_MASK,
8570abb6a24SDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA2),
8588f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, 0x1ac, DMA_CURSOR_MSM8998_MASK,
8590abb6a24SDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA3),
86094391a14SAngeloGioacchino Del Regno };
86194391a14SAngeloGioacchino Del Regno 
862abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = {
8638f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, 0x1c8, VIG_SDM845_MASK_SDMA,
86407ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
8658f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, 0x1c8, VIG_SDM845_MASK_SDMA,
86607ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
8678f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, 0x1c8, VIG_SDM845_MASK_SDMA,
86807ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
8698f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, 0x1c8, VIG_SDM845_MASK_SDMA,
87007ca1fc0SSravanthi Kollukuduru 		sdm845_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
8718f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, 0x1c8, DMA_SDM845_MASK_SDMA,
87207ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
8738f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, 0x1c8, DMA_SDM845_MASK_SDMA,
87407ca1fc0SSravanthi Kollukuduru 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
8758f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, 0x1c8, DMA_CURSOR_SDM845_MASK_SDMA,
876d6181c18SDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA2),
8778f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, 0x1c8, DMA_CURSOR_SDM845_MASK_SDMA,
878d6181c18SDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA3),
87925fdd593SJeykumar Sankaran };
88025fdd593SJeykumar Sankaran 
881b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 =
882b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4);
883b75ab05aSShubhashree Dhar 
884dabfdd89SVinod Polimera static const struct dpu_sspp_sub_blks sc7280_vig_sblk_0 =
885dabfdd89SVinod Polimera 			_VIG_SBLK_ROT("0", 4, DPU_SSPP_SCALER_QSEED4, &dpu_rot_sc7280_cfg_v2);
886dabfdd89SVinod Polimera 
8877bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = {
8888f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, 0x1f8, VIG_SC7180_MASK,
889b75ab05aSShubhashree Dhar 		sc7180_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
8908f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, 0x1f8, DMA_SDM845_MASK,
8917bdc0c4bSKalyan Thota 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
8928f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, 0x1f8, DMA_CURSOR_SDM845_MASK,
893d6181c18SDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
8948f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, 0x1f8, DMA_CURSOR_SDM845_MASK,
895d6181c18SDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA2),
8967bdc0c4bSKalyan Thota };
8977bdc0c4bSKalyan Thota 
8983581b706SAdam Skladowski static const struct dpu_sspp_sub_blks sm6115_vig_sblk_0 =
89938164e99SDmitry Baryshkov 				_VIG_SBLK("0", 2, DPU_SSPP_SCALER_QSEED4);
9003581b706SAdam Skladowski 
9013581b706SAdam Skladowski static const struct dpu_sspp_cfg sm6115_sspp[] = {
9028f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, 0x1f8, VIG_SC7180_MASK,
9033581b706SAdam Skladowski 		sm6115_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
9048f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, 0x1f8, DMA_SDM845_MASK,
9053581b706SAdam Skladowski 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
9063581b706SAdam Skladowski };
9073581b706SAdam Skladowski 
908d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 =
90903c0c3cbSDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED4);
910d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 =
91103c0c3cbSDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED4);
912d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 =
91303c0c3cbSDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED4);
914d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 =
91503c0c3cbSDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED4);
916d21fc5dfSDmitry Baryshkov 
917d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = {
9188f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, 0x1f8, VIG_SC7180_MASK_SDMA,
919d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_0, 0,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
9208f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, 0x1f8, VIG_SC7180_MASK_SDMA,
921d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_1, 4,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1),
9228f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, 0x1f8, VIG_SC7180_MASK_SDMA,
923d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2),
9248f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, 0x1f8, VIG_SC7180_MASK_SDMA,
925d21fc5dfSDmitry Baryshkov 		sm8250_vig_sblk_3, 12,  SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3),
9268f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, 0x1f8, DMA_SDM845_MASK_SDMA,
927d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
9288f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, 0x1f8, DMA_SDM845_MASK_SDMA,
929d21fc5dfSDmitry Baryshkov 		sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
9308f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, 0x1f8, DMA_CURSOR_SDM845_MASK_SDMA,
931d6181c18SDmitry Baryshkov 		sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA2),
9328f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, 0x1f8, DMA_CURSOR_SDM845_MASK_SDMA,
933d6181c18SDmitry Baryshkov 		sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA3),
934d21fc5dfSDmitry Baryshkov };
935d21fc5dfSDmitry Baryshkov 
936100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_0 =
937c7da17b6SDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED4);
938100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_1 =
939c7da17b6SDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED4);
940100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_2 =
941c7da17b6SDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED4);
942100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_3 =
943c7da17b6SDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED4);
944100d7ef6SDmitry Baryshkov 
945efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_vig_sblk_0 =
946d113d267SDmitry Baryshkov 				_VIG_SBLK("0", 7, DPU_SSPP_SCALER_QSEED4);
947efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_vig_sblk_1 =
948d113d267SDmitry Baryshkov 				_VIG_SBLK("1", 8, DPU_SSPP_SCALER_QSEED4);
949efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_vig_sblk_2 =
950d113d267SDmitry Baryshkov 				_VIG_SBLK("2", 9, DPU_SSPP_SCALER_QSEED4);
951efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_vig_sblk_3 =
952d113d267SDmitry Baryshkov 				_VIG_SBLK("3", 10, DPU_SSPP_SCALER_QSEED4);
953efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_dma_sblk_4 = _DMA_SBLK("12", 5);
954e3011955SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8550_dma_sblk_5 = _DMA_SBLK("13", 6);
955efcd0107SNeil Armstrong 
9564a352c2fSBjorn Andersson static const struct dpu_sspp_sub_blks sc8280xp_vig_sblk_0 =
957b3587cb6SDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED4);
9584a352c2fSBjorn Andersson static const struct dpu_sspp_sub_blks sc8280xp_vig_sblk_1 =
959b3587cb6SDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED4);
9604a352c2fSBjorn Andersson static const struct dpu_sspp_sub_blks sc8280xp_vig_sblk_2 =
961b3587cb6SDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED4);
9624a352c2fSBjorn Andersson static const struct dpu_sspp_sub_blks sc8280xp_vig_sblk_3 =
963b3587cb6SDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED4);
9644a352c2fSBjorn Andersson 
9655334087eSLoic Poulain #define _VIG_SBLK_NOSCALE(num, sdma_pri) \
9665334087eSLoic Poulain 	{ \
9675334087eSLoic Poulain 	.maxdwnscale = SSPP_UNITY_SCALE, \
9685334087eSLoic Poulain 	.maxupscale = SSPP_UNITY_SCALE, \
9695334087eSLoic Poulain 	.smart_dma_priority = sdma_pri, \
9705334087eSLoic Poulain 	.src_blk = {.name = STRCAT("sspp_src_", num), \
9715334087eSLoic Poulain 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
9725334087eSLoic Poulain 	.format_list = plane_formats_yuv, \
9735334087eSLoic Poulain 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
9745334087eSLoic Poulain 	.virt_format_list = plane_formats, \
9755334087eSLoic Poulain 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
9765334087eSLoic Poulain 	}
9775334087eSLoic Poulain 
9785334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_vig_sblk_0 = _VIG_SBLK_NOSCALE("0", 2);
9795334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_dma_sblk_0 = _DMA_SBLK("8", 1);
9805334087eSLoic Poulain 
9815334087eSLoic Poulain static const struct dpu_sspp_cfg qcm2290_sspp[] = {
9828f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, 0x1f8, VIG_QCM2290_MASK,
9835334087eSLoic Poulain 		 qcm2290_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0),
9848f940ddbSKonrad Dybcio 	SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, 0x1f8, DMA_SDM845_MASK,
9855334087eSLoic Poulain 		 qcm2290_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0),
9865334087eSLoic Poulain };
9875334087eSLoic Poulain 
98825fdd593SJeykumar Sankaran /*************************************************************
98925fdd593SJeykumar Sankaran  * MIXER sub blocks config
99025fdd593SJeykumar Sankaran  *************************************************************/
9917bdc0c4bSKalyan Thota 
992e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \
99325fdd593SJeykumar Sankaran 	{ \
99425fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
99525fdd593SJeykumar Sankaran 	.base = _base, .len = 0x320, \
9967bdc0c4bSKalyan Thota 	.features = _fmask, \
9977bdc0c4bSKalyan Thota 	.sblk = _sblk, \
99825fdd593SJeykumar Sankaran 	.pingpong = _pp, \
999e47616dfSKalyan Thota 	.lm_pair_mask = (1 << _lmpair), \
1000e47616dfSKalyan Thota 	.dspp = _dspp \
100125fdd593SJeykumar Sankaran 	}
100225fdd593SJeykumar Sankaran 
100394391a14SAngeloGioacchino Del Regno /* MSM8998 */
100494391a14SAngeloGioacchino Del Regno 
100594391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks msm8998_lm_sblk = {
100694391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
100794391a14SAngeloGioacchino Del Regno 	.maxblendstages = 7, /* excluding base layer */
100894391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
100994391a14SAngeloGioacchino Del Regno 		0x20, 0x50, 0x80, 0xb0, 0x230,
101094391a14SAngeloGioacchino Del Regno 		0x260, 0x290
101194391a14SAngeloGioacchino Del Regno 	},
101294391a14SAngeloGioacchino Del Regno };
101394391a14SAngeloGioacchino Del Regno 
101494391a14SAngeloGioacchino Del Regno static const struct dpu_lm_cfg msm8998_lm[] = {
10152d8a4edbSDmitry Baryshkov 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_MSM8998_MASK,
101694391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_0, LM_2, DSPP_0),
10172d8a4edbSDmitry Baryshkov 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_MSM8998_MASK,
101894391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_1, LM_5, DSPP_1),
10192d8a4edbSDmitry Baryshkov 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_MSM8998_MASK,
102094391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_2, LM_0, 0),
10212d8a4edbSDmitry Baryshkov 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_MSM8998_MASK,
102294391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
10232d8a4edbSDmitry Baryshkov 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_MSM8998_MASK,
102494391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_MAX, 0, 0),
10252d8a4edbSDmitry Baryshkov 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_MSM8998_MASK,
102694391a14SAngeloGioacchino Del Regno 		&msm8998_lm_sblk, PINGPONG_3, LM_1, 0),
102794391a14SAngeloGioacchino Del Regno };
102894391a14SAngeloGioacchino Del Regno 
102994391a14SAngeloGioacchino Del Regno /* SDM845 */
103094391a14SAngeloGioacchino Del Regno 
103194391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks sdm845_lm_sblk = {
103294391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
103394391a14SAngeloGioacchino Del Regno 	.maxblendstages = 11, /* excluding base layer */
103494391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
103594391a14SAngeloGioacchino Del Regno 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98,
103694391a14SAngeloGioacchino Del Regno 		0xb0, 0xc8, 0xe0, 0xf8, 0x110
103794391a14SAngeloGioacchino Del Regno 	},
103894391a14SAngeloGioacchino Del Regno };
103994391a14SAngeloGioacchino Del Regno 
1040abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = {
10417bdc0c4bSKalyan Thota 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
1042e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_0, LM_1, 0),
10437bdc0c4bSKalyan Thota 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
1044e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_1, LM_0, 0),
10457bdc0c4bSKalyan Thota 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
1046e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_2, LM_5, 0),
10477bdc0c4bSKalyan Thota 	LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK,
1048e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
10497bdc0c4bSKalyan Thota 	LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK,
1050e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_MAX, 0, 0),
10517bdc0c4bSKalyan Thota 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
1052e47616dfSKalyan Thota 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
10537bdc0c4bSKalyan Thota };
10547bdc0c4bSKalyan Thota 
10557bdc0c4bSKalyan Thota /* SC7180 */
10567bdc0c4bSKalyan Thota 
10577bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = {
10587bdc0c4bSKalyan Thota 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
10597bdc0c4bSKalyan Thota 	.maxblendstages = 7, /* excluding base layer */
10607bdc0c4bSKalyan Thota 	.blendstage_base = { /* offsets relative to mixer base */
10617bdc0c4bSKalyan Thota 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0
10627bdc0c4bSKalyan Thota 	},
10637bdc0c4bSKalyan Thota };
10647bdc0c4bSKalyan Thota 
10657bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = {
106600feff8fSDmitry Baryshkov 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
1067e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
106800feff8fSDmitry Baryshkov 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
1069e47616dfSKalyan Thota 		&sc7180_lm_sblk, PINGPONG_1, LM_0, 0),
107025fdd593SJeykumar Sankaran };
107125fdd593SJeykumar Sankaran 
1072386fced3SJonathan Marek /* SM8150 */
1073386fced3SJonathan Marek 
1074386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = {
1075386fced3SJonathan Marek 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK,
107605ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0),
1077386fced3SJonathan Marek 	LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK,
107805ae91d9SDmitry Baryshkov 		&sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1),
1079386fced3SJonathan Marek 	LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK,
1080386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_2, LM_3, 0),
1081386fced3SJonathan Marek 	LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK,
1082386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_3, LM_2, 0),
1083386fced3SJonathan Marek 	LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK,
1084386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_4, LM_5, 0),
1085386fced3SJonathan Marek 	LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK,
1086386fced3SJonathan Marek 		&sdm845_lm_sblk, PINGPONG_5, LM_4, 0),
1087386fced3SJonathan Marek };
1088386fced3SJonathan Marek 
10895334087eSLoic Poulain /* QCM2290 */
10905334087eSLoic Poulain 
10915334087eSLoic Poulain static const struct dpu_lm_sub_blks qcm2290_lm_sblk = {
1092da06be8bSDmitry Baryshkov 	.maxwidth = DEFAULT_DPU_LINE_WIDTH,
10935334087eSLoic Poulain 	.maxblendstages = 4, /* excluding base layer */
10945334087eSLoic Poulain 	.blendstage_base = { /* offsets relative to mixer base */
10955334087eSLoic Poulain 		0x20, 0x38, 0x50, 0x68
10965334087eSLoic Poulain 	},
10975334087eSLoic Poulain };
10985334087eSLoic Poulain 
10995334087eSLoic Poulain static const struct dpu_lm_cfg qcm2290_lm[] = {
110000feff8fSDmitry Baryshkov 	LM_BLK("lm_0", LM_0, 0x44000, MIXER_QCM2290_MASK,
11015334087eSLoic Poulain 		&qcm2290_lm_sblk, PINGPONG_0, 0, DSPP_0),
11025334087eSLoic Poulain };
11035334087eSLoic Poulain 
110425fdd593SJeykumar Sankaran /*************************************************************
1105e47616dfSKalyan Thota  * DSPP sub blocks config
1106e47616dfSKalyan Thota  *************************************************************/
110794391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
110894391a14SAngeloGioacchino Del Regno 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
110994391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
111094391a14SAngeloGioacchino Del Regno 	.gc = { .id = DPU_DSPP_GC, .base = 0x17c0,
111194391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
111294391a14SAngeloGioacchino Del Regno };
111394391a14SAngeloGioacchino Del Regno 
11144259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
11154259ff7aSKalyan Thota 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
11164259ff7aSKalyan Thota 		.len = 0x90, .version = 0x10000},
11174259ff7aSKalyan Thota };
11184259ff7aSKalyan Thota 
111905ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = {
112005ae91d9SDmitry Baryshkov 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
112105ae91d9SDmitry Baryshkov 		.len = 0x90, .version = 0x40000},
112205ae91d9SDmitry Baryshkov };
112305ae91d9SDmitry Baryshkov 
1124862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \
1125e47616dfSKalyan Thota 		{\
1126e47616dfSKalyan Thota 		.name = _name, .id = _id, \
1127e47616dfSKalyan Thota 		.base = _base, .len = 0x1800, \
1128862314bcSAngeloGioacchino Del Regno 		.features = _mask, \
112905ae91d9SDmitry Baryshkov 		.sblk = _sblk \
1130e47616dfSKalyan Thota 		}
1131e47616dfSKalyan Thota 
113294391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_cfg msm8998_dspp[] = {
113394391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK,
113494391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
113594391a14SAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK,
113694391a14SAngeloGioacchino Del Regno 		 &msm8998_dspp_sblk),
113794391a14SAngeloGioacchino Del Regno };
113894391a14SAngeloGioacchino Del Regno 
1139e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = {
1140862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
1141862314bcSAngeloGioacchino Del Regno 		 &sc7180_dspp_sblk),
114205ae91d9SDmitry Baryshkov };
114305ae91d9SDmitry Baryshkov 
114405ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = {
1145862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
1146862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1147862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
1148862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1149862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK,
1150862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1151862314bcSAngeloGioacchino Del Regno 	DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK,
1152862314bcSAngeloGioacchino Del Regno 		 &sm8150_dspp_sblk),
1153e47616dfSKalyan Thota };
1154386fced3SJonathan Marek 
11555334087eSLoic Poulain static const struct dpu_dspp_cfg qcm2290_dspp[] = {
11565334087eSLoic Poulain 	DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
11575334087eSLoic Poulain 		 &sm8150_dspp_sblk),
11585334087eSLoic Poulain };
11595334087eSLoic Poulain 
1160e47616dfSKalyan Thota /*************************************************************
116125fdd593SJeykumar Sankaran  * PINGPONG sub blocks config
116225fdd593SJeykumar Sankaran  *************************************************************/
116325fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = {
116425fdd593SJeykumar Sankaran 	.te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0,
116525fdd593SJeykumar Sankaran 		.version = 0x1},
116625fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
116725fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
116825fdd593SJeykumar Sankaran };
116925fdd593SJeykumar Sankaran 
117025fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = {
117125fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
117225fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
117325fdd593SJeykumar Sankaran };
117425fdd593SJeykumar Sankaran 
1175591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
1176591e34a0SKrishna Manikandan 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0,
1177591e34a0SKrishna Manikandan 	.len = 0x20, .version = 0x20000},
1178591e34a0SKrishna Manikandan };
1179591e34a0SKrishna Manikandan 
1180efcd0107SNeil Armstrong #define PP_BLK_DIPHER(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
1181efcd0107SNeil Armstrong 	{\
1182efcd0107SNeil Armstrong 	.name = _name, .id = _id, \
1183efcd0107SNeil Armstrong 	.base = _base, .len = 0, \
1184efcd0107SNeil Armstrong 	.features = BIT(DPU_PINGPONG_DITHER), \
1185efcd0107SNeil Armstrong 	.merge_3d = _merge_3d, \
1186efcd0107SNeil Armstrong 	.sblk = &_sblk, \
1187efcd0107SNeil Armstrong 	.intr_done = _done, \
1188efcd0107SNeil Armstrong 	.intr_rdptr = _rdptr, \
1189efcd0107SNeil Armstrong 	}
1190667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
119125fdd593SJeykumar Sankaran 	{\
119225fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
119325fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
119425fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_SPLIT_MASK, \
11954369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
1196667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
1197667e9985SDmitry Baryshkov 	.intr_done = _done, \
1198667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
119925fdd593SJeykumar Sankaran 	}
1200667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
120125fdd593SJeykumar Sankaran 	{\
120225fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
120325fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
120425fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_MASK, \
12054369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
1206667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
1207667e9985SDmitry Baryshkov 	.intr_done = _done, \
1208667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
120925fdd593SJeykumar Sankaran 	}
121025fdd593SJeykumar Sankaran 
1211abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = {
1212667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te,
1213667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1214667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1215667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te,
1216667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1217667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1218667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk,
1219667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1220667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1221667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk,
1222667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1223667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
122425fdd593SJeykumar Sankaran };
122525fdd593SJeykumar Sankaran 
1226ac1c5ed6SDmitry Baryshkov static const struct dpu_pingpong_cfg sc7180_pp[] = {
1227667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1),
1228667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1),
12297bdc0c4bSKalyan Thota };
12307bdc0c4bSKalyan Thota 
1231386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = {
1232667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te,
1233667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
1234667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
1235667e9985SDmitry Baryshkov 	PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te,
1236667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
1237667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)),
1238667e9985SDmitry Baryshkov 	PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk,
1239667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
1240667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)),
1241667e9985SDmitry Baryshkov 	PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk,
1242667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
1243667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)),
1244667e9985SDmitry Baryshkov 	PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk,
1245667e9985SDmitry Baryshkov 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
1246667e9985SDmitry Baryshkov 			-1),
1247667e9985SDmitry Baryshkov 	PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk,
12483431c17bSRobert Foss 			DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
1249667e9985SDmitry Baryshkov 			-1),
12504369c93cSDmitry Baryshkov };
12514369c93cSDmitry Baryshkov 
1252ac1c5ed6SDmitry Baryshkov static const struct dpu_pingpong_cfg qcm2290_pp[] = {
12535334087eSLoic Poulain 	PP_BLK("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk,
12545334087eSLoic Poulain 		DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
12555334087eSLoic Poulain 		DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)),
12565334087eSLoic Poulain };
12575334087eSLoic Poulain 
12584369c93cSDmitry Baryshkov /*************************************************************
12594369c93cSDmitry Baryshkov  * MERGE_3D sub blocks config
12604369c93cSDmitry Baryshkov  *************************************************************/
12614369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \
12624369c93cSDmitry Baryshkov 	{\
12634369c93cSDmitry Baryshkov 	.name = _name, .id = _id, \
12644369c93cSDmitry Baryshkov 	.base = _base, .len = 0x100, \
12654369c93cSDmitry Baryshkov 	.features = MERGE_3D_SM8150_MASK, \
12664369c93cSDmitry Baryshkov 	.sblk = NULL \
12674369c93cSDmitry Baryshkov 	}
12684369c93cSDmitry Baryshkov 
12694369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = {
12704369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000),
12714369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100),
12724369c93cSDmitry Baryshkov 	MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200),
1273386fced3SJonathan Marek };
1274386fced3SJonathan Marek 
12757c5ab05eSVinod Koul /*************************************************************
12767c5ab05eSVinod Koul  * DSC sub blocks config
12777c5ab05eSVinod Koul  *************************************************************/
12789da5daa0SMarijn Suijten #define DSC_BLK(_name, _id, _base, _features) \
12797c5ab05eSVinod Koul 	{\
12807c5ab05eSVinod Koul 	.name = _name, .id = _id, \
12817c5ab05eSVinod Koul 	.base = _base, .len = 0x140, \
12829da5daa0SMarijn Suijten 	.features = _features, \
12837c5ab05eSVinod Koul 	}
12847c5ab05eSVinod Koul 
1285fc4fcfb0SDmitry Baryshkov static const struct dpu_dsc_cfg sdm845_dsc[] = {
12869da5daa0SMarijn Suijten 	DSC_BLK("dsc_0", DSC_0, 0x80000, 0),
12879da5daa0SMarijn Suijten 	DSC_BLK("dsc_1", DSC_1, 0x80400, 0),
12889da5daa0SMarijn Suijten 	DSC_BLK("dsc_2", DSC_2, 0x80800, 0),
12899da5daa0SMarijn Suijten 	DSC_BLK("dsc_3", DSC_3, 0x80c00, 0),
12909da5daa0SMarijn Suijten };
12919da5daa0SMarijn Suijten 
1292fc4fcfb0SDmitry Baryshkov static const struct dpu_dsc_cfg sm8150_dsc[] = {
12939da5daa0SMarijn Suijten 	DSC_BLK("dsc_0", DSC_0, 0x80000, BIT(DPU_DSC_OUTPUT_CTRL)),
12949da5daa0SMarijn Suijten 	DSC_BLK("dsc_1", DSC_1, 0x80400, BIT(DPU_DSC_OUTPUT_CTRL)),
12959da5daa0SMarijn Suijten 	DSC_BLK("dsc_2", DSC_2, 0x80800, BIT(DPU_DSC_OUTPUT_CTRL)),
12969da5daa0SMarijn Suijten 	DSC_BLK("dsc_3", DSC_3, 0x80c00, BIT(DPU_DSC_OUTPUT_CTRL)),
12977c5ab05eSVinod Koul };
12987c5ab05eSVinod Koul 
129925fdd593SJeykumar Sankaran /*************************************************************
130025fdd593SJeykumar Sankaran  * INTF sub blocks config
130125fdd593SJeykumar Sankaran  *************************************************************/
13028399a5ffSKonrad Dybcio #define INTF_BLK(_name, _id, _base, _len, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \
130325fdd593SJeykumar Sankaran 	{\
130425fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
13058399a5ffSKonrad Dybcio 	.base = _base, .len = _len, \
1306cace3ac4SJonathan Marek 	.features = _features, \
130725fdd593SJeykumar Sankaran 	.type = _type, \
130825fdd593SJeykumar Sankaran 	.controller_id = _ctrl_id, \
1309667e9985SDmitry Baryshkov 	.prog_fetch_lines_worst_case = _progfetch, \
1310667e9985SDmitry Baryshkov 	.intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \
1311667e9985SDmitry Baryshkov 	.intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \
131225fdd593SJeykumar Sankaran 	}
131325fdd593SJeykumar Sankaran 
131494391a14SAngeloGioacchino Del Regno static const struct dpu_intf_cfg msm8998_intf[] = {
13158399a5ffSKonrad Dybcio 	INTF_BLK("intf_0", INTF_0, 0x6A000, 0x280, INTF_DP, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
13168399a5ffSKonrad Dybcio 	INTF_BLK("intf_1", INTF_1, 0x6A800, 0x280, INTF_DSI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
13178399a5ffSKonrad Dybcio 	INTF_BLK("intf_2", INTF_2, 0x6B000, 0x280, INTF_DSI, 1, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
13188399a5ffSKonrad Dybcio 	INTF_BLK("intf_3", INTF_3, 0x6B800, 0x280, INTF_HDMI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
131994391a14SAngeloGioacchino Del Regno };
132094391a14SAngeloGioacchino Del Regno 
1321abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = {
13228399a5ffSKonrad Dybcio 	INTF_BLK("intf_0", INTF_0, 0x6A000, 0x280, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
13238399a5ffSKonrad Dybcio 	INTF_BLK("intf_1", INTF_1, 0x6A800, 0x280, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
13248399a5ffSKonrad Dybcio 	INTF_BLK("intf_2", INTF_2, 0x6B000, 0x280, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
13258399a5ffSKonrad Dybcio 	INTF_BLK("intf_3", INTF_3, 0x6B800, 0x280, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
132625fdd593SJeykumar Sankaran };
132725fdd593SJeykumar Sankaran 
13287bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = {
13298399a5ffSKonrad Dybcio 	INTF_BLK("intf_0", INTF_0, 0x6A000, 0x280, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
13308399a5ffSKonrad Dybcio 	INTF_BLK("intf_1", INTF_1, 0x6A800, 0x2c0, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
13317bdc0c4bSKalyan Thota };
13327bdc0c4bSKalyan Thota 
1333386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = {
13348399a5ffSKonrad Dybcio 	INTF_BLK("intf_0", INTF_0, 0x6A000, 0x280, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
13358399a5ffSKonrad Dybcio 	INTF_BLK("intf_1", INTF_1, 0x6A800, 0x2bc, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
13368399a5ffSKonrad Dybcio 	INTF_BLK("intf_2", INTF_2, 0x6B000, 0x2bc, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
13378399a5ffSKonrad Dybcio 	INTF_BLK("intf_3", INTF_3, 0x6B800, 0x280, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
1338386fced3SJonathan Marek };
1339386fced3SJonathan Marek 
1340f3af2d6eSRob Clark static const struct dpu_intf_cfg sc8180x_intf[] = {
13418399a5ffSKonrad Dybcio 	INTF_BLK("intf_0", INTF_0, 0x6A000, 0x280, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25),
13428399a5ffSKonrad Dybcio 	INTF_BLK("intf_1", INTF_1, 0x6A800, 0x2bc, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
13438399a5ffSKonrad Dybcio 	INTF_BLK("intf_2", INTF_2, 0x6B000, 0x2bc, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29),
1344f3af2d6eSRob Clark 	/* INTF_3 is for MST, wired to INTF_DP 0 and 1, use dummy index until this is supported */
13458399a5ffSKonrad Dybcio 	INTF_BLK("intf_3", INTF_3, 0x6B800, 0x280, INTF_DP, 999, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31),
13468399a5ffSKonrad Dybcio 	INTF_BLK("intf_4", INTF_4, 0x6C000, 0x280, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 20, 21),
13478399a5ffSKonrad Dybcio 	INTF_BLK("intf_5", INTF_5, 0x6C800, 0x280, INTF_DP, MSM_DP_CONTROLLER_2, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 22, 23),
1348f3af2d6eSRob Clark };
1349f3af2d6eSRob Clark 
13505334087eSLoic Poulain static const struct dpu_intf_cfg qcm2290_intf[] = {
13518399a5ffSKonrad Dybcio 	INTF_BLK("intf_0", INTF_0, 0x00000, 0x280, INTF_DP, 0, 0, 0, 0, 0, 0),
13528399a5ffSKonrad Dybcio 	INTF_BLK("intf_1", INTF_1, 0x6A800, 0x2c0, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27),
13535334087eSLoic Poulain };
13545334087eSLoic Poulain 
135525fdd593SJeykumar Sankaran /*************************************************************
135653324b99SAbhinav Kumar  * Writeback blocks config
135753324b99SAbhinav Kumar  *************************************************************/
135853324b99SAbhinav Kumar #define WB_BLK(_name, _id, _base, _features, _clk_ctrl, \
1359a370cc39SAbhinav Kumar 		__xin_id, vbif_id, _reg, _max_linewidth, _wb_done_bit) \
136053324b99SAbhinav Kumar 	{ \
136153324b99SAbhinav Kumar 	.name = _name, .id = _id, \
136253324b99SAbhinav Kumar 	.base = _base, .len = 0x2c8, \
136353324b99SAbhinav Kumar 	.features = _features, \
136453324b99SAbhinav Kumar 	.format_list = wb2_formats, \
136553324b99SAbhinav Kumar 	.num_formats = ARRAY_SIZE(wb2_formats), \
136653324b99SAbhinav Kumar 	.clk_ctrl = _clk_ctrl, \
136753324b99SAbhinav Kumar 	.xin_id = __xin_id, \
136853324b99SAbhinav Kumar 	.vbif_idx = vbif_id, \
1369a370cc39SAbhinav Kumar 	.maxlinewidth = _max_linewidth, \
137053324b99SAbhinav Kumar 	.intr_wb_done = DPU_IRQ_IDX(_reg, _wb_done_bit) \
137153324b99SAbhinav Kumar 	}
137253324b99SAbhinav Kumar 
137353324b99SAbhinav Kumar static const struct dpu_wb_cfg sm8250_wb[] = {
137453324b99SAbhinav Kumar 	WB_BLK("wb_2", WB_2, 0x65000, WB_SM8250_MASK, DPU_CLK_CTRL_WB2, 6,
1375a370cc39SAbhinav Kumar 			VBIF_RT, MDP_SSPP_TOP0_INTR, 4096, 4),
137653324b99SAbhinav Kumar };
137753324b99SAbhinav Kumar 
137853324b99SAbhinav Kumar /*************************************************************
137925fdd593SJeykumar Sankaran  * VBIF sub blocks config
138025fdd593SJeykumar Sankaran  *************************************************************/
138125fdd593SJeykumar Sankaran /* VBIF QOS remap */
138294391a14SAngeloGioacchino Del Regno static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2};
138394391a14SAngeloGioacchino Del Regno static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1};
1384abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6};
1385abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3};
138625fdd593SJeykumar Sankaran 
138794391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
138894391a14SAngeloGioacchino Del Regno 	{
138994391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 30,
139094391a14SAngeloGioacchino Del Regno 		.ot_limit = 2,
139194391a14SAngeloGioacchino Del Regno 	},
139294391a14SAngeloGioacchino Del Regno 	{
139394391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 60,
139494391a14SAngeloGioacchino Del Regno 		.ot_limit = 6,
139594391a14SAngeloGioacchino Del Regno 	},
139694391a14SAngeloGioacchino Del Regno 	{
139794391a14SAngeloGioacchino Del Regno 		.pps = 3840 * 2160 * 30,
139894391a14SAngeloGioacchino Del Regno 		.ot_limit = 16,
139994391a14SAngeloGioacchino Del Regno 	},
140094391a14SAngeloGioacchino Del Regno };
140194391a14SAngeloGioacchino Del Regno 
140294391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_cfg msm8998_vbif[] = {
140394391a14SAngeloGioacchino Del Regno 	{
1404606f015bSDmitry Baryshkov 	.name = "vbif_rt", .id = VBIF_RT,
140594391a14SAngeloGioacchino Del Regno 	.base = 0, .len = 0x1040,
140694391a14SAngeloGioacchino Del Regno 	.default_ot_rd_limit = 32,
140794391a14SAngeloGioacchino Del Regno 	.default_ot_wr_limit = 32,
140894391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM),
140994391a14SAngeloGioacchino Del Regno 	.xin_halt_timeout = 0x4000,
1410c8744315SDmitry Baryshkov 	.qos_rp_remap_size = 0x20,
141194391a14SAngeloGioacchino Del Regno 	.dynamic_ot_rd_tbl = {
141294391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
141394391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
141494391a14SAngeloGioacchino Del Regno 		},
141594391a14SAngeloGioacchino Del Regno 	.dynamic_ot_wr_tbl = {
141694391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
141794391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
141894391a14SAngeloGioacchino Del Regno 		},
141994391a14SAngeloGioacchino Del Regno 	.qos_rt_tbl = {
142094391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl),
142194391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_rt_pri_lvl,
142294391a14SAngeloGioacchino Del Regno 		},
142394391a14SAngeloGioacchino Del Regno 	.qos_nrt_tbl = {
142494391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl),
142594391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_nrt_pri_lvl,
142694391a14SAngeloGioacchino Del Regno 		},
142794391a14SAngeloGioacchino Del Regno 	.memtype_count = 14,
142894391a14SAngeloGioacchino Del Regno 	.memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
142994391a14SAngeloGioacchino Del Regno 	},
143094391a14SAngeloGioacchino Del Regno };
143194391a14SAngeloGioacchino Del Regno 
1432abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = {
143325fdd593SJeykumar Sankaran 	{
1434606f015bSDmitry Baryshkov 	.name = "vbif_rt", .id = VBIF_RT,
143525fdd593SJeykumar Sankaran 	.base = 0, .len = 0x1040,
143625fdd593SJeykumar Sankaran 	.features = BIT(DPU_VBIF_QOS_REMAP),
143725fdd593SJeykumar Sankaran 	.xin_halt_timeout = 0x4000,
1438c8744315SDmitry Baryshkov 	.qos_rp_remap_size = 0x40,
143925fdd593SJeykumar Sankaran 	.qos_rt_tbl = {
144025fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
144125fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_rt_pri_lvl,
144225fdd593SJeykumar Sankaran 		},
144325fdd593SJeykumar Sankaran 	.qos_nrt_tbl = {
144425fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
144525fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_nrt_pri_lvl,
144625fdd593SJeykumar Sankaran 		},
144725fdd593SJeykumar Sankaran 	.memtype_count = 14,
144825fdd593SJeykumar Sankaran 	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
144925fdd593SJeykumar Sankaran 	},
145025fdd593SJeykumar Sankaran };
145125fdd593SJeykumar Sankaran 
14524a352c2fSBjorn Andersson static const struct dpu_reg_dma_cfg sc8280xp_regdma = {
14534a352c2fSBjorn Andersson 	.base = 0x0,
14544a352c2fSBjorn Andersson 	.version = 0x00020000,
14554a352c2fSBjorn Andersson 	.trigger_sel_off = 0x119c,
14564a352c2fSBjorn Andersson 	.xin_id = 7,
14574a352c2fSBjorn Andersson 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
14584a352c2fSBjorn Andersson };
14594a352c2fSBjorn Andersson 
1460abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = {
146125fdd593SJeykumar Sankaran 	.base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c
146225fdd593SJeykumar Sankaran };
146325fdd593SJeykumar Sankaran 
1464386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = {
1465386fced3SJonathan Marek 	.base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c
1466386fced3SJonathan Marek };
1467386fced3SJonathan Marek 
1468af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = {
1469af776a3eSJonathan Marek 	.base = 0x0,
1470af776a3eSJonathan Marek 	.version = 0x00010002,
1471af776a3eSJonathan Marek 	.trigger_sel_off = 0x119c,
1472af776a3eSJonathan Marek 	.xin_id = 7,
1473af776a3eSJonathan Marek 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
1474af776a3eSJonathan Marek };
1475af776a3eSJonathan Marek 
14760e91bcbbSRobert Foss static const struct dpu_reg_dma_cfg sm8350_regdma = {
14770e91bcbbSRobert Foss 	.base = 0x400,
14780e91bcbbSRobert Foss 	.version = 0x00020000,
14790e91bcbbSRobert Foss 	.trigger_sel_off = 0x119c,
14800e91bcbbSRobert Foss 	.xin_id = 7,
14810e91bcbbSRobert Foss 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
14820e91bcbbSRobert Foss };
14830e91bcbbSRobert Foss 
1484100d7ef6SDmitry Baryshkov static const struct dpu_reg_dma_cfg sm8450_regdma = {
1485100d7ef6SDmitry Baryshkov 	.base = 0x0,
1486100d7ef6SDmitry Baryshkov 	.version = 0x00020000,
1487100d7ef6SDmitry Baryshkov 	.trigger_sel_off = 0x119c,
1488100d7ef6SDmitry Baryshkov 	.xin_id = 7,
1489100d7ef6SDmitry Baryshkov 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
1490100d7ef6SDmitry Baryshkov };
1491100d7ef6SDmitry Baryshkov 
149225fdd593SJeykumar Sankaran /*************************************************************
149325fdd593SJeykumar Sankaran  * PERF data config
149425fdd593SJeykumar Sankaran  *************************************************************/
149525fdd593SJeykumar Sankaran 
149625fdd593SJeykumar Sankaran /* SSPP QOS LUTs */
149794391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_linear[] = {
149894391a14SAngeloGioacchino Del Regno 	{.fl = 4,  .lut = 0x1b},
149994391a14SAngeloGioacchino Del Regno 	{.fl = 5,  .lut = 0x5b},
150094391a14SAngeloGioacchino Del Regno 	{.fl = 6,  .lut = 0x15b},
150194391a14SAngeloGioacchino Del Regno 	{.fl = 7,  .lut = 0x55b},
150294391a14SAngeloGioacchino Del Regno 	{.fl = 8,  .lut = 0x155b},
150394391a14SAngeloGioacchino Del Regno 	{.fl = 9,  .lut = 0x555b},
150494391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1555b},
150594391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5555b},
150694391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15555b},
150794391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55555b},
150894391a14SAngeloGioacchino Del Regno 	{.fl = 14, .lut = 0},
150994391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1b},
151094391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0}
151194391a14SAngeloGioacchino Del Regno };
151294391a14SAngeloGioacchino Del Regno 
1513abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = {
151425fdd593SJeykumar Sankaran 	{.fl = 4, .lut = 0x357},
151525fdd593SJeykumar Sankaran 	{.fl = 5, .lut = 0x3357},
151625fdd593SJeykumar Sankaran 	{.fl = 6, .lut = 0x23357},
151725fdd593SJeykumar Sankaran 	{.fl = 7, .lut = 0x223357},
151825fdd593SJeykumar Sankaran 	{.fl = 8, .lut = 0x2223357},
151925fdd593SJeykumar Sankaran 	{.fl = 9, .lut = 0x22223357},
152025fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x222223357},
152125fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x2222223357},
152225fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x22222223357},
152325fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x222222223357},
152425fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1222222223357},
152525fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x11222222223357}
152625fdd593SJeykumar Sankaran };
152725fdd593SJeykumar Sankaran 
152894391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = {
152994391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1aaff},
153094391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5aaff},
153194391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15aaff},
153294391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55aaff},
153394391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1aaff},
153494391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0},
153594391a14SAngeloGioacchino Del Regno };
153694391a14SAngeloGioacchino Del Regno 
15377bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
15387bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011222222335777},
15397bdc0c4bSKalyan Thota };
15407bdc0c4bSKalyan Thota 
1541386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = {
1542386fced3SJonathan Marek 	{.fl = 0, .lut = 0x0011222222223357 },
1543386fced3SJonathan Marek };
1544386fced3SJonathan Marek 
1545f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_linear[] = {
1546f3af2d6eSRob Clark 	{.fl = 4, .lut = 0x0000000000000357 },
1547f3af2d6eSRob Clark };
1548f3af2d6eSRob Clark 
15495334087eSLoic Poulain static const struct dpu_qos_lut_entry qcm2290_qos_linear[] = {
15505334087eSLoic Poulain 	{.fl = 0, .lut = 0x0011222222335777},
15515334087eSLoic Poulain };
15525334087eSLoic Poulain 
1553abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = {
155425fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x344556677},
155525fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x3344556677},
155625fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x23344556677},
155725fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x223344556677},
155825fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1223344556677},
155925fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x112233344556677},
156025fdd593SJeykumar Sankaran };
156125fdd593SJeykumar Sankaran 
15627bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
15637bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011223344556677},
15647bdc0c4bSKalyan Thota };
15657bdc0c4bSKalyan Thota 
1566f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
1567f3af2d6eSRob Clark 	{.fl = 10, .lut = 0x0000000344556677},
1568f3af2d6eSRob Clark };
1569f3af2d6eSRob Clark 
157094391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = {
157194391a14SAngeloGioacchino Del Regno 	{.fl = 0, .lut = 0x0},
157294391a14SAngeloGioacchino Del Regno };
157394391a14SAngeloGioacchino Del Regno 
1574abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = {
157525fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x0},
157625fdd593SJeykumar Sankaran };
157725fdd593SJeykumar Sankaran 
15787bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
15797bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0},
15807bdc0c4bSKalyan Thota };
15817bdc0c4bSKalyan Thota 
158294391a14SAngeloGioacchino Del Regno static const struct dpu_perf_cfg msm8998_perf_data = {
158394391a14SAngeloGioacchino Del Regno 	.max_bw_low = 6700000,
158494391a14SAngeloGioacchino Del Regno 	.max_bw_high = 6700000,
158594391a14SAngeloGioacchino Del Regno 	.min_core_ib = 2400000,
158694391a14SAngeloGioacchino Del Regno 	.min_llcc_ib = 800000,
158794391a14SAngeloGioacchino Del Regno 	.min_dram_ib = 800000,
158894391a14SAngeloGioacchino Del Regno 	.undersized_prefill_lines = 2,
158994391a14SAngeloGioacchino Del Regno 	.xtra_prefill_lines = 2,
159094391a14SAngeloGioacchino Del Regno 	.dest_scale_prefill_lines = 3,
159194391a14SAngeloGioacchino Del Regno 	.macrotile_prefill_lines = 4,
159294391a14SAngeloGioacchino Del Regno 	.yuv_nv12_prefill_lines = 8,
159394391a14SAngeloGioacchino Del Regno 	.linear_prefill_lines = 1,
159494391a14SAngeloGioacchino Del Regno 	.downscaling_prefill_lines = 1,
159594391a14SAngeloGioacchino Del Regno 	.amortizable_threshold = 25,
159694391a14SAngeloGioacchino Del Regno 	.min_prefill_lines = 25,
159794391a14SAngeloGioacchino Del Regno 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
159894391a14SAngeloGioacchino Del Regno 	.safe_lut_tbl = {0xfffc, 0xff00, 0xffff},
159994391a14SAngeloGioacchino Del Regno 	.qos_lut_tbl = {
160094391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_linear),
160194391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_linear
160294391a14SAngeloGioacchino Del Regno 		},
160394391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_macrotile),
160494391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_macrotile
160594391a14SAngeloGioacchino Del Regno 		},
160694391a14SAngeloGioacchino Del Regno 		{.nentry = ARRAY_SIZE(msm8998_qos_nrt),
160794391a14SAngeloGioacchino Del Regno 		.entries = msm8998_qos_nrt
160894391a14SAngeloGioacchino Del Regno 		},
160994391a14SAngeloGioacchino Del Regno 	},
161094391a14SAngeloGioacchino Del Regno 	.cdp_cfg = {
161194391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 1},
161294391a14SAngeloGioacchino Del Regno 		{.rd_enable = 1, .wr_enable = 0}
161394391a14SAngeloGioacchino Del Regno 	},
161494391a14SAngeloGioacchino Del Regno 	.clk_inefficiency_factor = 200,
161594391a14SAngeloGioacchino Del Regno 	.bw_inefficiency_factor = 120,
161694391a14SAngeloGioacchino Del Regno };
161794391a14SAngeloGioacchino Del Regno 
1618abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = {
161925fdd593SJeykumar Sankaran 	.max_bw_low = 6800000,
162025fdd593SJeykumar Sankaran 	.max_bw_high = 6800000,
162125fdd593SJeykumar Sankaran 	.min_core_ib = 2400000,
162225fdd593SJeykumar Sankaran 	.min_llcc_ib = 800000,
162325fdd593SJeykumar Sankaran 	.min_dram_ib = 800000,
162425fdd593SJeykumar Sankaran 	.undersized_prefill_lines = 2,
162525fdd593SJeykumar Sankaran 	.xtra_prefill_lines = 2,
162625fdd593SJeykumar Sankaran 	.dest_scale_prefill_lines = 3,
162725fdd593SJeykumar Sankaran 	.macrotile_prefill_lines = 4,
162825fdd593SJeykumar Sankaran 	.yuv_nv12_prefill_lines = 8,
162925fdd593SJeykumar Sankaran 	.linear_prefill_lines = 1,
163025fdd593SJeykumar Sankaran 	.downscaling_prefill_lines = 1,
163125fdd593SJeykumar Sankaran 	.amortizable_threshold = 25,
163225fdd593SJeykumar Sankaran 	.min_prefill_lines = 24,
163325fdd593SJeykumar Sankaran 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
16345bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xf000, 0xffff},
163525fdd593SJeykumar Sankaran 	.qos_lut_tbl = {
163625fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_linear),
163725fdd593SJeykumar Sankaran 		.entries = sdm845_qos_linear
163825fdd593SJeykumar Sankaran 		},
163925fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_macrotile),
164025fdd593SJeykumar Sankaran 		.entries = sdm845_qos_macrotile
164125fdd593SJeykumar Sankaran 		},
164225fdd593SJeykumar Sankaran 		{.nentry = ARRAY_SIZE(sdm845_qos_nrt),
164325fdd593SJeykumar Sankaran 		.entries = sdm845_qos_nrt
164425fdd593SJeykumar Sankaran 		},
164525fdd593SJeykumar Sankaran 	},
164625fdd593SJeykumar Sankaran 	.cdp_cfg = {
164725fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 1},
164825fdd593SJeykumar Sankaran 		{.rd_enable = 1, .wr_enable = 0}
164925fdd593SJeykumar Sankaran 	},
16504f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
16514f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
165225fdd593SJeykumar Sankaran };
165325fdd593SJeykumar Sankaran 
16547bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = {
165571dc6c08SKrishna Manikandan 	.max_bw_low = 6800000,
165671dc6c08SKrishna Manikandan 	.max_bw_high = 6800000,
16577bdc0c4bSKalyan Thota 	.min_core_ib = 2400000,
16587bdc0c4bSKalyan Thota 	.min_llcc_ib = 800000,
1659c33b7c03SKalyan Thota 	.min_dram_ib = 1600000,
1660c33b7c03SKalyan Thota 	.min_prefill_lines = 24,
16617bdc0c4bSKalyan Thota 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
16625bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
16637bdc0c4bSKalyan Thota 	.qos_lut_tbl = {
16647bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
16657bdc0c4bSKalyan Thota 		.entries = sc7180_qos_linear
16667bdc0c4bSKalyan Thota 		},
16677bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
16687bdc0c4bSKalyan Thota 		.entries = sc7180_qos_macrotile
16697bdc0c4bSKalyan Thota 		},
16707bdc0c4bSKalyan Thota 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
16717bdc0c4bSKalyan Thota 		.entries = sc7180_qos_nrt
16727bdc0c4bSKalyan Thota 		},
16737bdc0c4bSKalyan Thota 	},
16747bdc0c4bSKalyan Thota 	.cdp_cfg = {
16757bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 1},
16767bdc0c4bSKalyan Thota 		{.rd_enable = 1, .wr_enable = 0}
16777bdc0c4bSKalyan Thota 	},
1678c33b7c03SKalyan Thota 	.clk_inefficiency_factor = 105,
1679c33b7c03SKalyan Thota 	.bw_inefficiency_factor = 120,
16807bdc0c4bSKalyan Thota };
16817bdc0c4bSKalyan Thota 
16823581b706SAdam Skladowski static const struct dpu_perf_cfg sm6115_perf_data = {
16833581b706SAdam Skladowski 	.max_bw_low = 3100000,
16843581b706SAdam Skladowski 	.max_bw_high = 4000000,
16853581b706SAdam Skladowski 	.min_core_ib = 2400000,
16863581b706SAdam Skladowski 	.min_llcc_ib = 800000,
16873581b706SAdam Skladowski 	.min_dram_ib = 800000,
16883581b706SAdam Skladowski 	.min_prefill_lines = 24,
16893581b706SAdam Skladowski 	.danger_lut_tbl = {0xff, 0xffff, 0x0},
16903581b706SAdam Skladowski 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
16913581b706SAdam Skladowski 	.qos_lut_tbl = {
16923581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
16933581b706SAdam Skladowski 		.entries = sc7180_qos_linear
16943581b706SAdam Skladowski 		},
16953581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
16963581b706SAdam Skladowski 		.entries = sc7180_qos_macrotile
16973581b706SAdam Skladowski 		},
16983581b706SAdam Skladowski 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
16993581b706SAdam Skladowski 		.entries = sc7180_qos_nrt
17003581b706SAdam Skladowski 		},
17013581b706SAdam Skladowski 		/* TODO: macrotile-qseed is different from macrotile */
17023581b706SAdam Skladowski 	},
17033581b706SAdam Skladowski 	.cdp_cfg = {
17043581b706SAdam Skladowski 		{.rd_enable = 1, .wr_enable = 1},
17053581b706SAdam Skladowski 		{.rd_enable = 1, .wr_enable = 0}
17063581b706SAdam Skladowski 	},
17073581b706SAdam Skladowski 	.clk_inefficiency_factor = 105,
17083581b706SAdam Skladowski 	.bw_inefficiency_factor = 120,
17093581b706SAdam Skladowski };
17103581b706SAdam Skladowski 
1711386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = {
1712386fced3SJonathan Marek 	.max_bw_low = 12800000,
1713386fced3SJonathan Marek 	.max_bw_high = 12800000,
1714386fced3SJonathan Marek 	.min_core_ib = 2400000,
1715386fced3SJonathan Marek 	.min_llcc_ib = 800000,
1716386fced3SJonathan Marek 	.min_dram_ib = 800000,
17174f2c9838SDmitry Baryshkov 	.min_prefill_lines = 24,
1718386fced3SJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
17195bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff8, 0xf000, 0xffff},
1720386fced3SJonathan Marek 	.qos_lut_tbl = {
1721386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sm8150_qos_linear),
1722386fced3SJonathan Marek 		.entries = sm8150_qos_linear
1723386fced3SJonathan Marek 		},
1724386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1725386fced3SJonathan Marek 		.entries = sc7180_qos_macrotile
1726386fced3SJonathan Marek 		},
1727386fced3SJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1728386fced3SJonathan Marek 		.entries = sc7180_qos_nrt
1729386fced3SJonathan Marek 		},
1730386fced3SJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1731386fced3SJonathan Marek 	},
1732386fced3SJonathan Marek 	.cdp_cfg = {
1733386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1734386fced3SJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1735386fced3SJonathan Marek 	},
17364f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
17374f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1738386fced3SJonathan Marek };
1739386fced3SJonathan Marek 
1740f3af2d6eSRob Clark static const struct dpu_perf_cfg sc8180x_perf_data = {
1741f3af2d6eSRob Clark 	.max_bw_low = 9600000,
1742f3af2d6eSRob Clark 	.max_bw_high = 9600000,
1743f3af2d6eSRob Clark 	.min_core_ib = 2400000,
1744f3af2d6eSRob Clark 	.min_llcc_ib = 800000,
1745f3af2d6eSRob Clark 	.min_dram_ib = 800000,
1746f3af2d6eSRob Clark 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
1747f3af2d6eSRob Clark 	.qos_lut_tbl = {
17484a352c2fSBjorn Andersson 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
17494a352c2fSBjorn Andersson 		.entries = sc7180_qos_linear
17504a352c2fSBjorn Andersson 		},
17514a352c2fSBjorn Andersson 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
17524a352c2fSBjorn Andersson 		.entries = sc7180_qos_macrotile
17534a352c2fSBjorn Andersson 		},
17544a352c2fSBjorn Andersson 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
17554a352c2fSBjorn Andersson 		.entries = sc7180_qos_nrt
17564a352c2fSBjorn Andersson 		},
17574a352c2fSBjorn Andersson 		/* TODO: macrotile-qseed is different from macrotile */
17584a352c2fSBjorn Andersson 	},
17594a352c2fSBjorn Andersson 	.cdp_cfg = {
17604a352c2fSBjorn Andersson 		{.rd_enable = 1, .wr_enable = 1},
17614a352c2fSBjorn Andersson 		{.rd_enable = 1, .wr_enable = 0}
17624a352c2fSBjorn Andersson 	},
17634a352c2fSBjorn Andersson 	.clk_inefficiency_factor = 105,
17644a352c2fSBjorn Andersson 	.bw_inefficiency_factor = 120,
17654a352c2fSBjorn Andersson };
17664a352c2fSBjorn Andersson 
1767af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = {
1768af776a3eSJonathan Marek 	.max_bw_low = 13700000,
1769af776a3eSJonathan Marek 	.max_bw_high = 16600000,
1770af776a3eSJonathan Marek 	.min_core_ib = 4800000,
1771af776a3eSJonathan Marek 	.min_llcc_ib = 0,
1772af776a3eSJonathan Marek 	.min_dram_ib = 800000,
17734f2c9838SDmitry Baryshkov 	.min_prefill_lines = 35,
1774af776a3eSJonathan Marek 	.danger_lut_tbl = {0xf, 0xffff, 0x0},
17755bccb945SKalyan Thota 	.safe_lut_tbl = {0xfff0, 0xff00, 0xffff},
1776af776a3eSJonathan Marek 	.qos_lut_tbl = {
1777af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_linear),
1778af776a3eSJonathan Marek 		.entries = sc7180_qos_linear
1779af776a3eSJonathan Marek 		},
1780af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
1781af776a3eSJonathan Marek 		.entries = sc7180_qos_macrotile
1782af776a3eSJonathan Marek 		},
1783af776a3eSJonathan Marek 		{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
1784af776a3eSJonathan Marek 		.entries = sc7180_qos_nrt
1785af776a3eSJonathan Marek 		},
1786af776a3eSJonathan Marek 		/* TODO: macrotile-qseed is different from macrotile */
1787af776a3eSJonathan Marek 	},
1788af776a3eSJonathan Marek 	.cdp_cfg = {
1789af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 1},
1790af776a3eSJonathan Marek 		{.rd_enable = 1, .wr_enable = 0}
1791af776a3eSJonathan Marek 	},
17924f2c9838SDmitry Baryshkov 	.clk_inefficiency_factor = 105,
17934f2c9838SDmitry Baryshkov 	.bw_inefficiency_factor = 120,
1794af776a3eSJonathan Marek };
1795af776a3eSJonathan Marek 
17965334087eSLoic Poulain static const struct dpu_perf_cfg qcm2290_perf_data = {
17975334087eSLoic Poulain 	.max_bw_low = 2700000,
17985334087eSLoic Poulain 	.max_bw_high = 2700000,
17995334087eSLoic Poulain 	.min_core_ib = 1300000,
18005334087eSLoic Poulain 	.min_llcc_ib = 0,
18015334087eSLoic Poulain 	.min_dram_ib = 1600000,
18025334087eSLoic Poulain 	.min_prefill_lines = 24,
18035334087eSLoic Poulain 	.danger_lut_tbl = {0xff, 0x0, 0x0},
18045334087eSLoic Poulain 	.safe_lut_tbl = {0xfff0, 0x0, 0x0},
18055334087eSLoic Poulain 	.qos_lut_tbl = {
18065334087eSLoic Poulain 		{.nentry = ARRAY_SIZE(qcm2290_qos_linear),
18075334087eSLoic Poulain 		.entries = qcm2290_qos_linear
18085334087eSLoic Poulain 		},
18095334087eSLoic Poulain 	},
18105334087eSLoic Poulain 	.cdp_cfg = {
18115334087eSLoic Poulain 		{.rd_enable = 1, .wr_enable = 1},
18125334087eSLoic Poulain 		{.rd_enable = 1, .wr_enable = 0}
18135334087eSLoic Poulain 	},
18145334087eSLoic Poulain 	.clk_inefficiency_factor = 105,
18155334087eSLoic Poulain 	.bw_inefficiency_factor = 120,
18165334087eSLoic Poulain };
181725fdd593SJeykumar Sankaran /*************************************************************
1818de7d480fSDmitry Baryshkov  * Hardware catalog
181925fdd593SJeykumar Sankaran  *************************************************************/
182025fdd593SJeykumar Sankaran 
1821de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg msm8998_dpu_cfg = {
182294391a14SAngeloGioacchino Del Regno 	.caps = &msm8998_dpu_caps,
1823fbbd8cceSDmitry Baryshkov 	.ubwc = &msm8998_ubwc_cfg,
182494391a14SAngeloGioacchino Del Regno 	.mdp_count = ARRAY_SIZE(msm8998_mdp),
182594391a14SAngeloGioacchino Del Regno 	.mdp = msm8998_mdp,
182694391a14SAngeloGioacchino Del Regno 	.ctl_count = ARRAY_SIZE(msm8998_ctl),
182794391a14SAngeloGioacchino Del Regno 	.ctl = msm8998_ctl,
182894391a14SAngeloGioacchino Del Regno 	.sspp_count = ARRAY_SIZE(msm8998_sspp),
182994391a14SAngeloGioacchino Del Regno 	.sspp = msm8998_sspp,
183094391a14SAngeloGioacchino Del Regno 	.mixer_count = ARRAY_SIZE(msm8998_lm),
183194391a14SAngeloGioacchino Del Regno 	.mixer = msm8998_lm,
18326452cbd6SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(msm8998_dspp),
18336452cbd6SDmitry Baryshkov 	.dspp = msm8998_dspp,
183494391a14SAngeloGioacchino Del Regno 	.pingpong_count = ARRAY_SIZE(sdm845_pp),
183594391a14SAngeloGioacchino Del Regno 	.pingpong = sdm845_pp,
183694391a14SAngeloGioacchino Del Regno 	.intf_count = ARRAY_SIZE(msm8998_intf),
183794391a14SAngeloGioacchino Del Regno 	.intf = msm8998_intf,
183894391a14SAngeloGioacchino Del Regno 	.vbif_count = ARRAY_SIZE(msm8998_vbif),
183994391a14SAngeloGioacchino Del Regno 	.vbif = msm8998_vbif,
184094391a14SAngeloGioacchino Del Regno 	.reg_dma_count = 0,
1841477db4feSDmitry Baryshkov 	.perf = &msm8998_perf_data,
184294391a14SAngeloGioacchino Del Regno 	.mdss_irqs = IRQ_SM8250_MASK,
184394391a14SAngeloGioacchino Del Regno };
184494391a14SAngeloGioacchino Del Regno 
1845de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sdm845_dpu_cfg = {
184625fdd593SJeykumar Sankaran 	.caps = &sdm845_dpu_caps,
1847fbbd8cceSDmitry Baryshkov 	.ubwc = &sdm845_ubwc_cfg,
184825fdd593SJeykumar Sankaran 	.mdp_count = ARRAY_SIZE(sdm845_mdp),
184925fdd593SJeykumar Sankaran 	.mdp = sdm845_mdp,
185025fdd593SJeykumar Sankaran 	.ctl_count = ARRAY_SIZE(sdm845_ctl),
185125fdd593SJeykumar Sankaran 	.ctl = sdm845_ctl,
185225fdd593SJeykumar Sankaran 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
185325fdd593SJeykumar Sankaran 	.sspp = sdm845_sspp,
185425fdd593SJeykumar Sankaran 	.mixer_count = ARRAY_SIZE(sdm845_lm),
185525fdd593SJeykumar Sankaran 	.mixer = sdm845_lm,
185625fdd593SJeykumar Sankaran 	.pingpong_count = ARRAY_SIZE(sdm845_pp),
185725fdd593SJeykumar Sankaran 	.pingpong = sdm845_pp,
18587c5ab05eSVinod Koul 	.dsc_count = ARRAY_SIZE(sdm845_dsc),
18597c5ab05eSVinod Koul 	.dsc = sdm845_dsc,
186025fdd593SJeykumar Sankaran 	.intf_count = ARRAY_SIZE(sdm845_intf),
186125fdd593SJeykumar Sankaran 	.intf = sdm845_intf,
186225fdd593SJeykumar Sankaran 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
186325fdd593SJeykumar Sankaran 	.vbif = sdm845_vbif,
186425fdd593SJeykumar Sankaran 	.reg_dma_count = 1,
1865481d5dbbSDmitry Baryshkov 	.dma_cfg = &sdm845_regdma,
1866477db4feSDmitry Baryshkov 	.perf = &sdm845_perf_data,
1867597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SDM845_MASK,
186825fdd593SJeykumar Sankaran };
186925fdd593SJeykumar Sankaran 
1870de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sc7180_dpu_cfg = {
18717bdc0c4bSKalyan Thota 	.caps = &sc7180_dpu_caps,
1872fbbd8cceSDmitry Baryshkov 	.ubwc = &sc7180_ubwc_cfg,
18737bdc0c4bSKalyan Thota 	.mdp_count = ARRAY_SIZE(sc7180_mdp),
18747bdc0c4bSKalyan Thota 	.mdp = sc7180_mdp,
18757bdc0c4bSKalyan Thota 	.ctl_count = ARRAY_SIZE(sc7180_ctl),
18767bdc0c4bSKalyan Thota 	.ctl = sc7180_ctl,
18777bdc0c4bSKalyan Thota 	.sspp_count = ARRAY_SIZE(sc7180_sspp),
18787bdc0c4bSKalyan Thota 	.sspp = sc7180_sspp,
18797bdc0c4bSKalyan Thota 	.mixer_count = ARRAY_SIZE(sc7180_lm),
18807bdc0c4bSKalyan Thota 	.mixer = sc7180_lm,
1881e47616dfSKalyan Thota 	.dspp_count = ARRAY_SIZE(sc7180_dspp),
1882e47616dfSKalyan Thota 	.dspp = sc7180_dspp,
18837bdc0c4bSKalyan Thota 	.pingpong_count = ARRAY_SIZE(sc7180_pp),
18847bdc0c4bSKalyan Thota 	.pingpong = sc7180_pp,
18857bdc0c4bSKalyan Thota 	.intf_count = ARRAY_SIZE(sc7180_intf),
18867bdc0c4bSKalyan Thota 	.intf = sc7180_intf,
188751e4d60eSAbhinav Kumar 	.wb_count = ARRAY_SIZE(sm8250_wb),
188851e4d60eSAbhinav Kumar 	.wb = sm8250_wb,
18897bdc0c4bSKalyan Thota 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
18907bdc0c4bSKalyan Thota 	.vbif = sdm845_vbif,
18917bdc0c4bSKalyan Thota 	.reg_dma_count = 1,
1892481d5dbbSDmitry Baryshkov 	.dma_cfg = &sdm845_regdma,
1893477db4feSDmitry Baryshkov 	.perf = &sc7180_perf_data,
1894597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SC7180_MASK,
18957bdc0c4bSKalyan Thota };
18967bdc0c4bSKalyan Thota 
18973581b706SAdam Skladowski static const struct dpu_mdss_cfg sm6115_dpu_cfg = {
18983581b706SAdam Skladowski 	.caps = &sm6115_dpu_caps,
1899fbbd8cceSDmitry Baryshkov 	.ubwc = &sm6115_ubwc_cfg,
19003581b706SAdam Skladowski 	.mdp_count = ARRAY_SIZE(sm6115_mdp),
19013581b706SAdam Skladowski 	.mdp = sm6115_mdp,
19023581b706SAdam Skladowski 	.ctl_count = ARRAY_SIZE(qcm2290_ctl),
19033581b706SAdam Skladowski 	.ctl = qcm2290_ctl,
19043581b706SAdam Skladowski 	.sspp_count = ARRAY_SIZE(sm6115_sspp),
19053581b706SAdam Skladowski 	.sspp = sm6115_sspp,
19063581b706SAdam Skladowski 	.mixer_count = ARRAY_SIZE(qcm2290_lm),
19073581b706SAdam Skladowski 	.mixer = qcm2290_lm,
19083581b706SAdam Skladowski 	.dspp_count = ARRAY_SIZE(qcm2290_dspp),
19093581b706SAdam Skladowski 	.dspp = qcm2290_dspp,
19103581b706SAdam Skladowski 	.pingpong_count = ARRAY_SIZE(qcm2290_pp),
19113581b706SAdam Skladowski 	.pingpong = qcm2290_pp,
19123581b706SAdam Skladowski 	.intf_count = ARRAY_SIZE(qcm2290_intf),
19133581b706SAdam Skladowski 	.intf = qcm2290_intf,
19143581b706SAdam Skladowski 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
19153581b706SAdam Skladowski 	.vbif = sdm845_vbif,
19163581b706SAdam Skladowski 	.perf = &sm6115_perf_data,
19173581b706SAdam Skladowski 	.mdss_irqs = IRQ_SC7180_MASK,
19183581b706SAdam Skladowski };
19193581b706SAdam Skladowski 
1920de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sm8150_dpu_cfg = {
1921386fced3SJonathan Marek 	.caps = &sm8150_dpu_caps,
1922fbbd8cceSDmitry Baryshkov 	.ubwc = &sm8150_ubwc_cfg,
1923386fced3SJonathan Marek 	.mdp_count = ARRAY_SIZE(sdm845_mdp),
1924386fced3SJonathan Marek 	.mdp = sdm845_mdp,
1925386fced3SJonathan Marek 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
1926386fced3SJonathan Marek 	.ctl = sm8150_ctl,
1927386fced3SJonathan Marek 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
1928386fced3SJonathan Marek 	.sspp = sdm845_sspp,
1929386fced3SJonathan Marek 	.mixer_count = ARRAY_SIZE(sm8150_lm),
1930386fced3SJonathan Marek 	.mixer = sm8150_lm,
193105ae91d9SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
193205ae91d9SDmitry Baryshkov 	.dspp = sm8150_dspp,
19339da5daa0SMarijn Suijten 	.dsc_count = ARRAY_SIZE(sm8150_dsc),
19349da5daa0SMarijn Suijten 	.dsc = sm8150_dsc,
1935386fced3SJonathan Marek 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
1936386fced3SJonathan Marek 	.pingpong = sm8150_pp,
19374369c93cSDmitry Baryshkov 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
19384369c93cSDmitry Baryshkov 	.merge_3d = sm8150_merge_3d,
1939386fced3SJonathan Marek 	.intf_count = ARRAY_SIZE(sm8150_intf),
1940386fced3SJonathan Marek 	.intf = sm8150_intf,
1941386fced3SJonathan Marek 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
1942386fced3SJonathan Marek 	.vbif = sdm845_vbif,
1943386fced3SJonathan Marek 	.reg_dma_count = 1,
1944481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8150_regdma,
1945477db4feSDmitry Baryshkov 	.perf = &sm8150_perf_data,
1946597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SDM845_MASK,
1947386fced3SJonathan Marek };
1948386fced3SJonathan Marek 
1949de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sc8180x_dpu_cfg = {
1950f3af2d6eSRob Clark 	.caps = &sc8180x_dpu_caps,
1951fbbd8cceSDmitry Baryshkov 	.ubwc = &sc8180x_ubwc_cfg,
1952f3af2d6eSRob Clark 	.mdp_count = ARRAY_SIZE(sc8180x_mdp),
1953f3af2d6eSRob Clark 	.mdp = sc8180x_mdp,
1954f3af2d6eSRob Clark 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
1955f3af2d6eSRob Clark 	.ctl = sm8150_ctl,
1956f3af2d6eSRob Clark 	.sspp_count = ARRAY_SIZE(sdm845_sspp),
1957f3af2d6eSRob Clark 	.sspp = sdm845_sspp,
1958f3af2d6eSRob Clark 	.mixer_count = ARRAY_SIZE(sm8150_lm),
1959f3af2d6eSRob Clark 	.mixer = sm8150_lm,
1960f3af2d6eSRob Clark 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
1961f3af2d6eSRob Clark 	.pingpong = sm8150_pp,
1962f3af2d6eSRob Clark 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
1963f3af2d6eSRob Clark 	.merge_3d = sm8150_merge_3d,
1964f3af2d6eSRob Clark 	.intf_count = ARRAY_SIZE(sc8180x_intf),
1965f3af2d6eSRob Clark 	.intf = sc8180x_intf,
1966f3af2d6eSRob Clark 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
1967f3af2d6eSRob Clark 	.vbif = sdm845_vbif,
1968f3af2d6eSRob Clark 	.reg_dma_count = 1,
1969481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8150_regdma,
1970477db4feSDmitry Baryshkov 	.perf = &sc8180x_perf_data,
1971f3af2d6eSRob Clark 	.mdss_irqs = IRQ_SC8180X_MASK,
1972f3af2d6eSRob Clark };
1973f3af2d6eSRob Clark 
1974de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg sm8250_dpu_cfg = {
1975af776a3eSJonathan Marek 	.caps = &sm8250_dpu_caps,
1976fbbd8cceSDmitry Baryshkov 	.ubwc = &sm8250_ubwc_cfg,
1977af776a3eSJonathan Marek 	.mdp_count = ARRAY_SIZE(sm8250_mdp),
1978af776a3eSJonathan Marek 	.mdp = sm8250_mdp,
1979af776a3eSJonathan Marek 	.ctl_count = ARRAY_SIZE(sm8150_ctl),
1980af776a3eSJonathan Marek 	.ctl = sm8150_ctl,
1981d21fc5dfSDmitry Baryshkov 	.sspp_count = ARRAY_SIZE(sm8250_sspp),
1982d21fc5dfSDmitry Baryshkov 	.sspp = sm8250_sspp,
1983af776a3eSJonathan Marek 	.mixer_count = ARRAY_SIZE(sm8150_lm),
1984af776a3eSJonathan Marek 	.mixer = sm8150_lm,
198505ae91d9SDmitry Baryshkov 	.dspp_count = ARRAY_SIZE(sm8150_dspp),
198605ae91d9SDmitry Baryshkov 	.dspp = sm8150_dspp,
19879da5daa0SMarijn Suijten 	.dsc_count = ARRAY_SIZE(sm8150_dsc),
19889da5daa0SMarijn Suijten 	.dsc = sm8150_dsc,
1989af776a3eSJonathan Marek 	.pingpong_count = ARRAY_SIZE(sm8150_pp),
1990af776a3eSJonathan Marek 	.pingpong = sm8150_pp,
19914369c93cSDmitry Baryshkov 	.merge_3d_count = ARRAY_SIZE(sm8150_merge_3d),
19924369c93cSDmitry Baryshkov 	.merge_3d = sm8150_merge_3d,
1993af776a3eSJonathan Marek 	.intf_count = ARRAY_SIZE(sm8150_intf),
1994af776a3eSJonathan Marek 	.intf = sm8150_intf,
1995af776a3eSJonathan Marek 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
1996af776a3eSJonathan Marek 	.vbif = sdm845_vbif,
199753324b99SAbhinav Kumar 	.wb_count = ARRAY_SIZE(sm8250_wb),
199853324b99SAbhinav Kumar 	.wb = sm8250_wb,
1999af776a3eSJonathan Marek 	.reg_dma_count = 1,
2000481d5dbbSDmitry Baryshkov 	.dma_cfg = &sm8250_regdma,
2001477db4feSDmitry Baryshkov 	.perf = &sm8250_perf_data,
2002597762d5SDmitry Baryshkov 	.mdss_irqs = IRQ_SM8250_MASK,
2003af776a3eSJonathan Marek };
2004af776a3eSJonathan Marek 
2005de7d480fSDmitry Baryshkov static const struct dpu_mdss_cfg qcm2290_dpu_cfg = {
20065334087eSLoic Poulain 	.caps = &qcm2290_dpu_caps,
2007fbbd8cceSDmitry Baryshkov 	.ubwc = &qcm2290_ubwc_cfg,
20085334087eSLoic Poulain 	.mdp_count = ARRAY_SIZE(qcm2290_mdp),
20095334087eSLoic Poulain 	.mdp = qcm2290_mdp,
20105334087eSLoic Poulain 	.ctl_count = ARRAY_SIZE(qcm2290_ctl),
20115334087eSLoic Poulain 	.ctl = qcm2290_ctl,
20125334087eSLoic Poulain 	.sspp_count = ARRAY_SIZE(qcm2290_sspp),
20135334087eSLoic Poulain 	.sspp = qcm2290_sspp,
20145334087eSLoic Poulain 	.mixer_count = ARRAY_SIZE(qcm2290_lm),
20155334087eSLoic Poulain 	.mixer = qcm2290_lm,
20165334087eSLoic Poulain 	.dspp_count = ARRAY_SIZE(qcm2290_dspp),
20175334087eSLoic Poulain 	.dspp = qcm2290_dspp,
20185334087eSLoic Poulain 	.pingpong_count = ARRAY_SIZE(qcm2290_pp),
20195334087eSLoic Poulain 	.pingpong = qcm2290_pp,
20205334087eSLoic Poulain 	.intf_count = ARRAY_SIZE(qcm2290_intf),
20215334087eSLoic Poulain 	.intf = qcm2290_intf,
20225334087eSLoic Poulain 	.vbif_count = ARRAY_SIZE(sdm845_vbif),
20235334087eSLoic Poulain 	.vbif = sdm845_vbif,
2024477db4feSDmitry Baryshkov 	.perf = &qcm2290_perf_data,
20255334087eSLoic Poulain 	.mdss_irqs = IRQ_SC7180_MASK,
20265334087eSLoic Poulain };
20275334087eSLoic Poulain 
2028*b8ece0c6SDmitry Baryshkov #include "catalog/dpu_7_0_sm8350.h"
2029f0f2c32aSDmitry Baryshkov #include "catalog/dpu_7_2_sc7280.h"
2030f0f2c32aSDmitry Baryshkov 
2031225978f4SDmitry Baryshkov #include "catalog/dpu_8_0_sc8280xp.h"
20329cc54793SDmitry Baryshkov #include "catalog/dpu_8_1_sm8450.h"
20339cc54793SDmitry Baryshkov 
20349cc54793SDmitry Baryshkov #include "catalog/dpu_9_0_sm8550.h"
20359cc54793SDmitry Baryshkov 
2036abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = {
2037de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_300, .dpu_cfg = &msm8998_dpu_cfg},
2038de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_301, .dpu_cfg = &msm8998_dpu_cfg},
2039de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_400, .dpu_cfg = &sdm845_dpu_cfg},
2040de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_401, .dpu_cfg = &sdm845_dpu_cfg},
2041de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_500, .dpu_cfg = &sm8150_dpu_cfg},
2042de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_501, .dpu_cfg = &sm8150_dpu_cfg},
2043de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_510, .dpu_cfg = &sc8180x_dpu_cfg},
2044de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_600, .dpu_cfg = &sm8250_dpu_cfg},
2045de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_620, .dpu_cfg = &sc7180_dpu_cfg},
20463581b706SAdam Skladowski 	{ .hw_rev = DPU_HW_VER_630, .dpu_cfg = &sm6115_dpu_cfg},
2047de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_650, .dpu_cfg = &qcm2290_dpu_cfg},
20480e91bcbbSRobert Foss 	{ .hw_rev = DPU_HW_VER_700, .dpu_cfg = &sm8350_dpu_cfg},
2049de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_720, .dpu_cfg = &sc7280_dpu_cfg},
20504a352c2fSBjorn Andersson 	{ .hw_rev = DPU_HW_VER_800, .dpu_cfg = &sc8280xp_dpu_cfg},
2051100d7ef6SDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_810, .dpu_cfg = &sm8450_dpu_cfg},
2052efcd0107SNeil Armstrong 	{ .hw_rev = DPU_HW_VER_900, .dpu_cfg = &sm8550_dpu_cfg},
205325fdd593SJeykumar Sankaran };
205425fdd593SJeykumar Sankaran 
2055de7d480fSDmitry Baryshkov const struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev)
205625fdd593SJeykumar Sankaran {
205725fdd593SJeykumar Sankaran 	int i;
205825fdd593SJeykumar Sankaran 
205925fdd593SJeykumar Sankaran 	for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) {
2060de7d480fSDmitry Baryshkov 		if (cfg_handler[i].hw_rev == hw_rev)
2061de7d480fSDmitry Baryshkov 			return cfg_handler[i].dpu_cfg;
206225fdd593SJeykumar Sankaran 	}
206325fdd593SJeykumar Sankaran 
206425fdd593SJeykumar Sankaran 	DPU_ERROR("unsupported chipset id:%X\n", hw_rev);
206532084967SDmitry Baryshkov 
206625fdd593SJeykumar Sankaran 	return ERR_PTR(-ENODEV);
206725fdd593SJeykumar Sankaran }
206825fdd593SJeykumar Sankaran 
2069