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  * SSPP sub blocks config
32025fdd593SJeykumar Sankaran  *************************************************************/
32125fdd593SJeykumar Sankaran 
32225fdd593SJeykumar Sankaran /* SSPP common configuration */
323b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \
32425fdd593SJeykumar Sankaran 	{ \
32525fdd593SJeykumar Sankaran 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
32625fdd593SJeykumar Sankaran 	.maxupscale = MAX_UPSCALE_RATIO, \
32725fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
32825fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
32925fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
33025fdd593SJeykumar Sankaran 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
331b75ab05aSShubhashree Dhar 		.id = qseed_ver, \
33225fdd593SJeykumar Sankaran 		.base = 0xa00, .len = 0xa0,}, \
33325fdd593SJeykumar Sankaran 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
33425fdd593SJeykumar Sankaran 		.id = DPU_SSPP_CSC_10BIT, \
33525fdd593SJeykumar Sankaran 		.base = 0x1a00, .len = 0x100,}, \
33625fdd593SJeykumar Sankaran 	.format_list = plane_formats_yuv, \
337e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
33825fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
339e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
340dabfdd89SVinod Polimera 	.rotation_cfg = NULL, \
341dabfdd89SVinod Polimera 	}
342dabfdd89SVinod Polimera 
343dabfdd89SVinod Polimera #define _VIG_SBLK_ROT(num, sdma_pri, qseed_ver, rot_cfg) \
344dabfdd89SVinod Polimera 	{ \
345dabfdd89SVinod Polimera 	.maxdwnscale = MAX_DOWNSCALE_RATIO, \
346dabfdd89SVinod Polimera 	.maxupscale = MAX_UPSCALE_RATIO, \
347dabfdd89SVinod Polimera 	.smart_dma_priority = sdma_pri, \
348dabfdd89SVinod Polimera 	.src_blk = {.name = STRCAT("sspp_src_", num), \
349dabfdd89SVinod Polimera 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
350dabfdd89SVinod Polimera 	.scaler_blk = {.name = STRCAT("sspp_scaler", num), \
351dabfdd89SVinod Polimera 		.id = qseed_ver, \
352dabfdd89SVinod Polimera 		.base = 0xa00, .len = 0xa0,}, \
353dabfdd89SVinod Polimera 	.csc_blk = {.name = STRCAT("sspp_csc", num), \
354dabfdd89SVinod Polimera 		.id = DPU_SSPP_CSC_10BIT, \
355dabfdd89SVinod Polimera 		.base = 0x1a00, .len = 0x100,}, \
356dabfdd89SVinod Polimera 	.format_list = plane_formats_yuv, \
357dabfdd89SVinod Polimera 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
358dabfdd89SVinod Polimera 	.virt_format_list = plane_formats, \
359dabfdd89SVinod Polimera 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
360dabfdd89SVinod Polimera 	.rotation_cfg = rot_cfg, \
36125fdd593SJeykumar Sankaran 	}
36225fdd593SJeykumar Sankaran 
36325fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \
36425fdd593SJeykumar Sankaran 	{ \
36525fdd593SJeykumar Sankaran 	.maxdwnscale = SSPP_UNITY_SCALE, \
36625fdd593SJeykumar Sankaran 	.maxupscale = SSPP_UNITY_SCALE, \
36725fdd593SJeykumar Sankaran 	.smart_dma_priority = sdma_pri, \
36825fdd593SJeykumar Sankaran 	.src_blk = {.name = STRCAT("sspp_src_", num), \
36925fdd593SJeykumar Sankaran 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
37025fdd593SJeykumar Sankaran 	.format_list = plane_formats, \
371e6b63a7bSFritz Koenig 	.num_formats = ARRAY_SIZE(plane_formats), \
37225fdd593SJeykumar Sankaran 	.virt_format_list = plane_formats, \
373e6b63a7bSFritz Koenig 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
37425fdd593SJeykumar Sankaran 	}
37525fdd593SJeykumar Sankaran 
37694391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_0 =
37794391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("0", 0, DPU_SSPP_SCALER_QSEED3);
37894391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_1 =
37994391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("1", 0, DPU_SSPP_SCALER_QSEED3);
38094391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_2 =
38194391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("2", 0, DPU_SSPP_SCALER_QSEED3);
38294391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_3 =
38394391a14SAngeloGioacchino Del Regno 				_VIG_SBLK("3", 0, DPU_SSPP_SCALER_QSEED3);
38494391a14SAngeloGioacchino Del Regno 
385dabfdd89SVinod Polimera static const struct dpu_rotation_cfg dpu_rot_sc7280_cfg_v2 = {
386dabfdd89SVinod Polimera 	.rot_maxheight = 1088,
387dabfdd89SVinod Polimera 	.rot_num_formats = ARRAY_SIZE(rotation_v2_formats),
388dabfdd89SVinod Polimera 	.rot_format_list = rotation_v2_formats,
389dabfdd89SVinod Polimera };
390dabfdd89SVinod Polimera 
391b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 =
392b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3);
393b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 =
394b75ab05aSShubhashree Dhar 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3);
395b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 =
396b75ab05aSShubhashree Dhar 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3);
397b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 =
398b75ab05aSShubhashree Dhar 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3);
39925fdd593SJeykumar Sankaran 
40025fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1);
40125fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2);
40225fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3);
40325fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4);
40425fdd593SJeykumar Sankaran 
4058f940ddbSKonrad Dybcio #define SSPP_BLK(_name, _id, _base, _len, _features, \
40607ca1fc0SSravanthi Kollukuduru 		_sblk, _xinid, _type, _clkctrl) \
40725fdd593SJeykumar Sankaran 	{ \
40825fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
4098f940ddbSKonrad Dybcio 	.base = _base, .len = _len, \
41007ca1fc0SSravanthi Kollukuduru 	.features = _features, \
41125fdd593SJeykumar Sankaran 	.sblk = &_sblk, \
41225fdd593SJeykumar Sankaran 	.xin_id = _xinid, \
41307ca1fc0SSravanthi Kollukuduru 	.type = _type, \
41425fdd593SJeykumar Sankaran 	.clk_ctrl = _clkctrl \
41525fdd593SJeykumar Sankaran 	}
41625fdd593SJeykumar Sankaran 
417b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 =
418b75ab05aSShubhashree Dhar 				_VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4);
419b75ab05aSShubhashree Dhar 
420dabfdd89SVinod Polimera static const struct dpu_sspp_sub_blks sc7280_vig_sblk_0 =
421dabfdd89SVinod Polimera 			_VIG_SBLK_ROT("0", 4, DPU_SSPP_SCALER_QSEED4, &dpu_rot_sc7280_cfg_v2);
422dabfdd89SVinod Polimera 
4233581b706SAdam Skladowski static const struct dpu_sspp_sub_blks sm6115_vig_sblk_0 =
42438164e99SDmitry Baryshkov 				_VIG_SBLK("0", 2, DPU_SSPP_SCALER_QSEED4);
4253581b706SAdam Skladowski 
426d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 =
42703c0c3cbSDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED4);
428d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 =
42903c0c3cbSDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED4);
430d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 =
43103c0c3cbSDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED4);
432d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 =
43303c0c3cbSDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED4);
434d21fc5dfSDmitry Baryshkov 
435100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_0 =
436c7da17b6SDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED4);
437100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_1 =
438c7da17b6SDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED4);
439100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_2 =
440c7da17b6SDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED4);
441100d7ef6SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8450_vig_sblk_3 =
442c7da17b6SDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED4);
443100d7ef6SDmitry Baryshkov 
444efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_vig_sblk_0 =
445d113d267SDmitry Baryshkov 				_VIG_SBLK("0", 7, DPU_SSPP_SCALER_QSEED4);
446efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_vig_sblk_1 =
447d113d267SDmitry Baryshkov 				_VIG_SBLK("1", 8, DPU_SSPP_SCALER_QSEED4);
448efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_vig_sblk_2 =
449d113d267SDmitry Baryshkov 				_VIG_SBLK("2", 9, DPU_SSPP_SCALER_QSEED4);
450efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_vig_sblk_3 =
451d113d267SDmitry Baryshkov 				_VIG_SBLK("3", 10, DPU_SSPP_SCALER_QSEED4);
452efcd0107SNeil Armstrong static const struct dpu_sspp_sub_blks sm8550_dma_sblk_4 = _DMA_SBLK("12", 5);
453e3011955SDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8550_dma_sblk_5 = _DMA_SBLK("13", 6);
454efcd0107SNeil Armstrong 
4554a352c2fSBjorn Andersson static const struct dpu_sspp_sub_blks sc8280xp_vig_sblk_0 =
456b3587cb6SDmitry Baryshkov 				_VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED4);
4574a352c2fSBjorn Andersson static const struct dpu_sspp_sub_blks sc8280xp_vig_sblk_1 =
458b3587cb6SDmitry Baryshkov 				_VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED4);
4594a352c2fSBjorn Andersson static const struct dpu_sspp_sub_blks sc8280xp_vig_sblk_2 =
460b3587cb6SDmitry Baryshkov 				_VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED4);
4614a352c2fSBjorn Andersson static const struct dpu_sspp_sub_blks sc8280xp_vig_sblk_3 =
462b3587cb6SDmitry Baryshkov 				_VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED4);
4634a352c2fSBjorn Andersson 
4645334087eSLoic Poulain #define _VIG_SBLK_NOSCALE(num, sdma_pri) \
4655334087eSLoic Poulain 	{ \
4665334087eSLoic Poulain 	.maxdwnscale = SSPP_UNITY_SCALE, \
4675334087eSLoic Poulain 	.maxupscale = SSPP_UNITY_SCALE, \
4685334087eSLoic Poulain 	.smart_dma_priority = sdma_pri, \
4695334087eSLoic Poulain 	.src_blk = {.name = STRCAT("sspp_src_", num), \
4705334087eSLoic Poulain 		.id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \
4715334087eSLoic Poulain 	.format_list = plane_formats_yuv, \
4725334087eSLoic Poulain 	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
4735334087eSLoic Poulain 	.virt_format_list = plane_formats, \
4745334087eSLoic Poulain 	.virt_num_formats = ARRAY_SIZE(plane_formats), \
4755334087eSLoic Poulain 	}
4765334087eSLoic Poulain 
4775334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_vig_sblk_0 = _VIG_SBLK_NOSCALE("0", 2);
4785334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_dma_sblk_0 = _DMA_SBLK("8", 1);
4795334087eSLoic Poulain 
48025fdd593SJeykumar Sankaran /*************************************************************
48125fdd593SJeykumar Sankaran  * MIXER sub blocks config
48225fdd593SJeykumar Sankaran  *************************************************************/
4837bdc0c4bSKalyan Thota 
484e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \
48525fdd593SJeykumar Sankaran 	{ \
48625fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
48725fdd593SJeykumar Sankaran 	.base = _base, .len = 0x320, \
4887bdc0c4bSKalyan Thota 	.features = _fmask, \
4897bdc0c4bSKalyan Thota 	.sblk = _sblk, \
49025fdd593SJeykumar Sankaran 	.pingpong = _pp, \
491e47616dfSKalyan Thota 	.lm_pair_mask = (1 << _lmpair), \
492e47616dfSKalyan Thota 	.dspp = _dspp \
49325fdd593SJeykumar Sankaran 	}
49425fdd593SJeykumar Sankaran 
49594391a14SAngeloGioacchino Del Regno /* MSM8998 */
49694391a14SAngeloGioacchino Del Regno 
49794391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks msm8998_lm_sblk = {
49894391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
49994391a14SAngeloGioacchino Del Regno 	.maxblendstages = 7, /* excluding base layer */
50094391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
50194391a14SAngeloGioacchino Del Regno 		0x20, 0x50, 0x80, 0xb0, 0x230,
50294391a14SAngeloGioacchino Del Regno 		0x260, 0x290
50394391a14SAngeloGioacchino Del Regno 	},
50494391a14SAngeloGioacchino Del Regno };
50594391a14SAngeloGioacchino Del Regno 
50694391a14SAngeloGioacchino Del Regno /* SDM845 */
50794391a14SAngeloGioacchino Del Regno 
50894391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks sdm845_lm_sblk = {
50994391a14SAngeloGioacchino Del Regno 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
51094391a14SAngeloGioacchino Del Regno 	.maxblendstages = 11, /* excluding base layer */
51194391a14SAngeloGioacchino Del Regno 	.blendstage_base = { /* offsets relative to mixer base */
51294391a14SAngeloGioacchino Del Regno 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98,
51394391a14SAngeloGioacchino Del Regno 		0xb0, 0xc8, 0xe0, 0xf8, 0x110
51494391a14SAngeloGioacchino Del Regno 	},
51594391a14SAngeloGioacchino Del Regno };
51694391a14SAngeloGioacchino Del Regno 
5177bdc0c4bSKalyan Thota /* SC7180 */
5187bdc0c4bSKalyan Thota 
5197bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = {
5207bdc0c4bSKalyan Thota 	.maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
5217bdc0c4bSKalyan Thota 	.maxblendstages = 7, /* excluding base layer */
5227bdc0c4bSKalyan Thota 	.blendstage_base = { /* offsets relative to mixer base */
5237bdc0c4bSKalyan Thota 		0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0
5247bdc0c4bSKalyan Thota 	},
5257bdc0c4bSKalyan Thota };
5267bdc0c4bSKalyan Thota 
5275334087eSLoic Poulain /* QCM2290 */
5285334087eSLoic Poulain 
5295334087eSLoic Poulain static const struct dpu_lm_sub_blks qcm2290_lm_sblk = {
530da06be8bSDmitry Baryshkov 	.maxwidth = DEFAULT_DPU_LINE_WIDTH,
5315334087eSLoic Poulain 	.maxblendstages = 4, /* excluding base layer */
5325334087eSLoic Poulain 	.blendstage_base = { /* offsets relative to mixer base */
5335334087eSLoic Poulain 		0x20, 0x38, 0x50, 0x68
5345334087eSLoic Poulain 	},
5355334087eSLoic Poulain };
5365334087eSLoic Poulain 
53725fdd593SJeykumar Sankaran /*************************************************************
538e47616dfSKalyan Thota  * DSPP sub blocks config
539e47616dfSKalyan Thota  *************************************************************/
54094391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
54194391a14SAngeloGioacchino Del Regno 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
54294391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
54394391a14SAngeloGioacchino Del Regno 	.gc = { .id = DPU_DSPP_GC, .base = 0x17c0,
54494391a14SAngeloGioacchino Del Regno 		.len = 0x90, .version = 0x10007},
54594391a14SAngeloGioacchino Del Regno };
54694391a14SAngeloGioacchino Del Regno 
5474259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
5484259ff7aSKalyan Thota 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
5494259ff7aSKalyan Thota 		.len = 0x90, .version = 0x10000},
5504259ff7aSKalyan Thota };
5514259ff7aSKalyan Thota 
55205ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = {
55305ae91d9SDmitry Baryshkov 	.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
55405ae91d9SDmitry Baryshkov 		.len = 0x90, .version = 0x40000},
55505ae91d9SDmitry Baryshkov };
55605ae91d9SDmitry Baryshkov 
557862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \
558e47616dfSKalyan Thota 		{\
559e47616dfSKalyan Thota 		.name = _name, .id = _id, \
560e47616dfSKalyan Thota 		.base = _base, .len = 0x1800, \
561862314bcSAngeloGioacchino Del Regno 		.features = _mask, \
56205ae91d9SDmitry Baryshkov 		.sblk = _sblk \
563e47616dfSKalyan Thota 		}
564e47616dfSKalyan Thota 
565e47616dfSKalyan Thota /*************************************************************
56625fdd593SJeykumar Sankaran  * PINGPONG sub blocks config
56725fdd593SJeykumar Sankaran  *************************************************************/
56825fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = {
56925fdd593SJeykumar Sankaran 	.te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0,
57025fdd593SJeykumar Sankaran 		.version = 0x1},
57125fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
57225fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
57325fdd593SJeykumar Sankaran };
57425fdd593SJeykumar Sankaran 
57525fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = {
57625fdd593SJeykumar Sankaran 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0,
57725fdd593SJeykumar Sankaran 		.len = 0x20, .version = 0x10000},
57825fdd593SJeykumar Sankaran };
57925fdd593SJeykumar Sankaran 
580591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
581591e34a0SKrishna Manikandan 	.dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0,
582591e34a0SKrishna Manikandan 	.len = 0x20, .version = 0x20000},
583591e34a0SKrishna Manikandan };
584591e34a0SKrishna Manikandan 
585efcd0107SNeil Armstrong #define PP_BLK_DIPHER(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
586efcd0107SNeil Armstrong 	{\
587efcd0107SNeil Armstrong 	.name = _name, .id = _id, \
588efcd0107SNeil Armstrong 	.base = _base, .len = 0, \
589efcd0107SNeil Armstrong 	.features = BIT(DPU_PINGPONG_DITHER), \
590efcd0107SNeil Armstrong 	.merge_3d = _merge_3d, \
591efcd0107SNeil Armstrong 	.sblk = &_sblk, \
592efcd0107SNeil Armstrong 	.intr_done = _done, \
593efcd0107SNeil Armstrong 	.intr_rdptr = _rdptr, \
594efcd0107SNeil Armstrong 	}
595667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
59625fdd593SJeykumar Sankaran 	{\
59725fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
59825fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
59925fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_SPLIT_MASK, \
6004369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
601667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
602667e9985SDmitry Baryshkov 	.intr_done = _done, \
603667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
60425fdd593SJeykumar Sankaran 	}
605667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \
60625fdd593SJeykumar Sankaran 	{\
60725fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
60825fdd593SJeykumar Sankaran 	.base = _base, .len = 0xd4, \
60925fdd593SJeykumar Sankaran 	.features = PINGPONG_SDM845_MASK, \
6104369c93cSDmitry Baryshkov 	.merge_3d = _merge_3d, \
611667e9985SDmitry Baryshkov 	.sblk = &_sblk, \
612667e9985SDmitry Baryshkov 	.intr_done = _done, \
613667e9985SDmitry Baryshkov 	.intr_rdptr = _rdptr, \
61425fdd593SJeykumar Sankaran 	}
61525fdd593SJeykumar Sankaran 
6164369c93cSDmitry Baryshkov /*************************************************************
6174369c93cSDmitry Baryshkov  * MERGE_3D sub blocks config
6184369c93cSDmitry Baryshkov  *************************************************************/
6194369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \
6204369c93cSDmitry Baryshkov 	{\
6214369c93cSDmitry Baryshkov 	.name = _name, .id = _id, \
6224369c93cSDmitry Baryshkov 	.base = _base, .len = 0x100, \
6234369c93cSDmitry Baryshkov 	.features = MERGE_3D_SM8150_MASK, \
6244369c93cSDmitry Baryshkov 	.sblk = NULL \
6254369c93cSDmitry Baryshkov 	}
6264369c93cSDmitry Baryshkov 
6277c5ab05eSVinod Koul /*************************************************************
6287c5ab05eSVinod Koul  * DSC sub blocks config
6297c5ab05eSVinod Koul  *************************************************************/
6309da5daa0SMarijn Suijten #define DSC_BLK(_name, _id, _base, _features) \
6317c5ab05eSVinod Koul 	{\
6327c5ab05eSVinod Koul 	.name = _name, .id = _id, \
6337c5ab05eSVinod Koul 	.base = _base, .len = 0x140, \
6349da5daa0SMarijn Suijten 	.features = _features, \
6357c5ab05eSVinod Koul 	}
6367c5ab05eSVinod Koul 
63725fdd593SJeykumar Sankaran /*************************************************************
63825fdd593SJeykumar Sankaran  * INTF sub blocks config
63925fdd593SJeykumar Sankaran  *************************************************************/
6408399a5ffSKonrad Dybcio #define INTF_BLK(_name, _id, _base, _len, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \
64125fdd593SJeykumar Sankaran 	{\
64225fdd593SJeykumar Sankaran 	.name = _name, .id = _id, \
6438399a5ffSKonrad Dybcio 	.base = _base, .len = _len, \
644cace3ac4SJonathan Marek 	.features = _features, \
64525fdd593SJeykumar Sankaran 	.type = _type, \
64625fdd593SJeykumar Sankaran 	.controller_id = _ctrl_id, \
647667e9985SDmitry Baryshkov 	.prog_fetch_lines_worst_case = _progfetch, \
648667e9985SDmitry Baryshkov 	.intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \
649667e9985SDmitry Baryshkov 	.intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \
65025fdd593SJeykumar Sankaran 	}
65125fdd593SJeykumar Sankaran 
65225fdd593SJeykumar Sankaran /*************************************************************
65353324b99SAbhinav Kumar  * Writeback blocks config
65453324b99SAbhinav Kumar  *************************************************************/
65553324b99SAbhinav Kumar #define WB_BLK(_name, _id, _base, _features, _clk_ctrl, \
656a370cc39SAbhinav Kumar 		__xin_id, vbif_id, _reg, _max_linewidth, _wb_done_bit) \
65753324b99SAbhinav Kumar 	{ \
65853324b99SAbhinav Kumar 	.name = _name, .id = _id, \
65953324b99SAbhinav Kumar 	.base = _base, .len = 0x2c8, \
66053324b99SAbhinav Kumar 	.features = _features, \
66153324b99SAbhinav Kumar 	.format_list = wb2_formats, \
66253324b99SAbhinav Kumar 	.num_formats = ARRAY_SIZE(wb2_formats), \
66353324b99SAbhinav Kumar 	.clk_ctrl = _clk_ctrl, \
66453324b99SAbhinav Kumar 	.xin_id = __xin_id, \
66553324b99SAbhinav Kumar 	.vbif_idx = vbif_id, \
666a370cc39SAbhinav Kumar 	.maxlinewidth = _max_linewidth, \
66753324b99SAbhinav Kumar 	.intr_wb_done = DPU_IRQ_IDX(_reg, _wb_done_bit) \
66853324b99SAbhinav Kumar 	}
66953324b99SAbhinav Kumar 
67053324b99SAbhinav Kumar /*************************************************************
67125fdd593SJeykumar Sankaran  * VBIF sub blocks config
67225fdd593SJeykumar Sankaran  *************************************************************/
67325fdd593SJeykumar Sankaran /* VBIF QOS remap */
67494391a14SAngeloGioacchino Del Regno static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2};
67594391a14SAngeloGioacchino Del Regno static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1};
676abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6};
677abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3};
67825fdd593SJeykumar Sankaran 
67994391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
68094391a14SAngeloGioacchino Del Regno 	{
68194391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 30,
68294391a14SAngeloGioacchino Del Regno 		.ot_limit = 2,
68394391a14SAngeloGioacchino Del Regno 	},
68494391a14SAngeloGioacchino Del Regno 	{
68594391a14SAngeloGioacchino Del Regno 		.pps = 1088 * 1920 * 60,
68694391a14SAngeloGioacchino Del Regno 		.ot_limit = 6,
68794391a14SAngeloGioacchino Del Regno 	},
68894391a14SAngeloGioacchino Del Regno 	{
68994391a14SAngeloGioacchino Del Regno 		.pps = 3840 * 2160 * 30,
69094391a14SAngeloGioacchino Del Regno 		.ot_limit = 16,
69194391a14SAngeloGioacchino Del Regno 	},
69294391a14SAngeloGioacchino Del Regno };
69394391a14SAngeloGioacchino Del Regno 
69494391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_cfg msm8998_vbif[] = {
69594391a14SAngeloGioacchino Del Regno 	{
696606f015bSDmitry Baryshkov 	.name = "vbif_rt", .id = VBIF_RT,
69794391a14SAngeloGioacchino Del Regno 	.base = 0, .len = 0x1040,
69894391a14SAngeloGioacchino Del Regno 	.default_ot_rd_limit = 32,
69994391a14SAngeloGioacchino Del Regno 	.default_ot_wr_limit = 32,
70094391a14SAngeloGioacchino Del Regno 	.features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM),
70194391a14SAngeloGioacchino Del Regno 	.xin_halt_timeout = 0x4000,
702c8744315SDmitry Baryshkov 	.qos_rp_remap_size = 0x20,
70394391a14SAngeloGioacchino Del Regno 	.dynamic_ot_rd_tbl = {
70494391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
70594391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
70694391a14SAngeloGioacchino Del Regno 		},
70794391a14SAngeloGioacchino Del Regno 	.dynamic_ot_wr_tbl = {
70894391a14SAngeloGioacchino Del Regno 		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
70994391a14SAngeloGioacchino Del Regno 		.cfg = msm8998_ot_rdwr_cfg,
71094391a14SAngeloGioacchino Del Regno 		},
71194391a14SAngeloGioacchino Del Regno 	.qos_rt_tbl = {
71294391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl),
71394391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_rt_pri_lvl,
71494391a14SAngeloGioacchino Del Regno 		},
71594391a14SAngeloGioacchino Del Regno 	.qos_nrt_tbl = {
71694391a14SAngeloGioacchino Del Regno 		.npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl),
71794391a14SAngeloGioacchino Del Regno 		.priority_lvl = msm8998_nrt_pri_lvl,
71894391a14SAngeloGioacchino Del Regno 		},
71994391a14SAngeloGioacchino Del Regno 	.memtype_count = 14,
72094391a14SAngeloGioacchino Del Regno 	.memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
72194391a14SAngeloGioacchino Del Regno 	},
72294391a14SAngeloGioacchino Del Regno };
72394391a14SAngeloGioacchino Del Regno 
724abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = {
72525fdd593SJeykumar Sankaran 	{
726606f015bSDmitry Baryshkov 	.name = "vbif_rt", .id = VBIF_RT,
72725fdd593SJeykumar Sankaran 	.base = 0, .len = 0x1040,
72825fdd593SJeykumar Sankaran 	.features = BIT(DPU_VBIF_QOS_REMAP),
72925fdd593SJeykumar Sankaran 	.xin_halt_timeout = 0x4000,
730c8744315SDmitry Baryshkov 	.qos_rp_remap_size = 0x40,
73125fdd593SJeykumar Sankaran 	.qos_rt_tbl = {
73225fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
73325fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_rt_pri_lvl,
73425fdd593SJeykumar Sankaran 		},
73525fdd593SJeykumar Sankaran 	.qos_nrt_tbl = {
73625fdd593SJeykumar Sankaran 		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
73725fdd593SJeykumar Sankaran 		.priority_lvl = sdm845_nrt_pri_lvl,
73825fdd593SJeykumar Sankaran 		},
73925fdd593SJeykumar Sankaran 	.memtype_count = 14,
74025fdd593SJeykumar Sankaran 	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
74125fdd593SJeykumar Sankaran 	},
74225fdd593SJeykumar Sankaran };
74325fdd593SJeykumar Sankaran 
7444a352c2fSBjorn Andersson static const struct dpu_reg_dma_cfg sc8280xp_regdma = {
7454a352c2fSBjorn Andersson 	.base = 0x0,
7464a352c2fSBjorn Andersson 	.version = 0x00020000,
7474a352c2fSBjorn Andersson 	.trigger_sel_off = 0x119c,
7484a352c2fSBjorn Andersson 	.xin_id = 7,
7494a352c2fSBjorn Andersson 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
7504a352c2fSBjorn Andersson };
7514a352c2fSBjorn Andersson 
752abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = {
75325fdd593SJeykumar Sankaran 	.base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c
75425fdd593SJeykumar Sankaran };
75525fdd593SJeykumar Sankaran 
756386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = {
757386fced3SJonathan Marek 	.base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c
758386fced3SJonathan Marek };
759386fced3SJonathan Marek 
760af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = {
761af776a3eSJonathan Marek 	.base = 0x0,
762af776a3eSJonathan Marek 	.version = 0x00010002,
763af776a3eSJonathan Marek 	.trigger_sel_off = 0x119c,
764af776a3eSJonathan Marek 	.xin_id = 7,
765af776a3eSJonathan Marek 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
766af776a3eSJonathan Marek };
767af776a3eSJonathan Marek 
7680e91bcbbSRobert Foss static const struct dpu_reg_dma_cfg sm8350_regdma = {
7690e91bcbbSRobert Foss 	.base = 0x400,
7700e91bcbbSRobert Foss 	.version = 0x00020000,
7710e91bcbbSRobert Foss 	.trigger_sel_off = 0x119c,
7720e91bcbbSRobert Foss 	.xin_id = 7,
7730e91bcbbSRobert Foss 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
7740e91bcbbSRobert Foss };
7750e91bcbbSRobert Foss 
776100d7ef6SDmitry Baryshkov static const struct dpu_reg_dma_cfg sm8450_regdma = {
777100d7ef6SDmitry Baryshkov 	.base = 0x0,
778100d7ef6SDmitry Baryshkov 	.version = 0x00020000,
779100d7ef6SDmitry Baryshkov 	.trigger_sel_off = 0x119c,
780100d7ef6SDmitry Baryshkov 	.xin_id = 7,
781100d7ef6SDmitry Baryshkov 	.clk_ctrl = DPU_CLK_CTRL_REG_DMA,
782100d7ef6SDmitry Baryshkov };
783100d7ef6SDmitry Baryshkov 
78425fdd593SJeykumar Sankaran /*************************************************************
78525fdd593SJeykumar Sankaran  * PERF data config
78625fdd593SJeykumar Sankaran  *************************************************************/
78725fdd593SJeykumar Sankaran 
78825fdd593SJeykumar Sankaran /* SSPP QOS LUTs */
78994391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_linear[] = {
79094391a14SAngeloGioacchino Del Regno 	{.fl = 4,  .lut = 0x1b},
79194391a14SAngeloGioacchino Del Regno 	{.fl = 5,  .lut = 0x5b},
79294391a14SAngeloGioacchino Del Regno 	{.fl = 6,  .lut = 0x15b},
79394391a14SAngeloGioacchino Del Regno 	{.fl = 7,  .lut = 0x55b},
79494391a14SAngeloGioacchino Del Regno 	{.fl = 8,  .lut = 0x155b},
79594391a14SAngeloGioacchino Del Regno 	{.fl = 9,  .lut = 0x555b},
79694391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1555b},
79794391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5555b},
79894391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15555b},
79994391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55555b},
80094391a14SAngeloGioacchino Del Regno 	{.fl = 14, .lut = 0},
80194391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1b},
80294391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0}
80394391a14SAngeloGioacchino Del Regno };
80494391a14SAngeloGioacchino Del Regno 
805abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = {
80625fdd593SJeykumar Sankaran 	{.fl = 4, .lut = 0x357},
80725fdd593SJeykumar Sankaran 	{.fl = 5, .lut = 0x3357},
80825fdd593SJeykumar Sankaran 	{.fl = 6, .lut = 0x23357},
80925fdd593SJeykumar Sankaran 	{.fl = 7, .lut = 0x223357},
81025fdd593SJeykumar Sankaran 	{.fl = 8, .lut = 0x2223357},
81125fdd593SJeykumar Sankaran 	{.fl = 9, .lut = 0x22223357},
81225fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x222223357},
81325fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x2222223357},
81425fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x22222223357},
81525fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x222222223357},
81625fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1222222223357},
81725fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x11222222223357}
81825fdd593SJeykumar Sankaran };
81925fdd593SJeykumar Sankaran 
82094391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = {
82194391a14SAngeloGioacchino Del Regno 	{.fl = 10, .lut = 0x1aaff},
82294391a14SAngeloGioacchino Del Regno 	{.fl = 11, .lut = 0x5aaff},
82394391a14SAngeloGioacchino Del Regno 	{.fl = 12, .lut = 0x15aaff},
82494391a14SAngeloGioacchino Del Regno 	{.fl = 13, .lut = 0x55aaff},
82594391a14SAngeloGioacchino Del Regno 	{.fl = 1,  .lut = 0x1aaff},
82694391a14SAngeloGioacchino Del Regno 	{.fl = 0,  .lut = 0},
82794391a14SAngeloGioacchino Del Regno };
82894391a14SAngeloGioacchino Del Regno 
8297bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
8307bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011222222335777},
8317bdc0c4bSKalyan Thota };
8327bdc0c4bSKalyan Thota 
833386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = {
834386fced3SJonathan Marek 	{.fl = 0, .lut = 0x0011222222223357 },
835386fced3SJonathan Marek };
836386fced3SJonathan Marek 
837f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_linear[] = {
838f3af2d6eSRob Clark 	{.fl = 4, .lut = 0x0000000000000357 },
839f3af2d6eSRob Clark };
840f3af2d6eSRob Clark 
8415334087eSLoic Poulain static const struct dpu_qos_lut_entry qcm2290_qos_linear[] = {
8425334087eSLoic Poulain 	{.fl = 0, .lut = 0x0011222222335777},
8435334087eSLoic Poulain };
8445334087eSLoic Poulain 
845abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = {
84625fdd593SJeykumar Sankaran 	{.fl = 10, .lut = 0x344556677},
84725fdd593SJeykumar Sankaran 	{.fl = 11, .lut = 0x3344556677},
84825fdd593SJeykumar Sankaran 	{.fl = 12, .lut = 0x23344556677},
84925fdd593SJeykumar Sankaran 	{.fl = 13, .lut = 0x223344556677},
85025fdd593SJeykumar Sankaran 	{.fl = 14, .lut = 0x1223344556677},
85125fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x112233344556677},
85225fdd593SJeykumar Sankaran };
85325fdd593SJeykumar Sankaran 
8547bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
8557bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0011223344556677},
8567bdc0c4bSKalyan Thota };
8577bdc0c4bSKalyan Thota 
858f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
859f3af2d6eSRob Clark 	{.fl = 10, .lut = 0x0000000344556677},
860f3af2d6eSRob Clark };
861f3af2d6eSRob Clark 
86294391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = {
86394391a14SAngeloGioacchino Del Regno 	{.fl = 0, .lut = 0x0},
86494391a14SAngeloGioacchino Del Regno };
86594391a14SAngeloGioacchino Del Regno 
866abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = {
86725fdd593SJeykumar Sankaran 	{.fl = 0, .lut = 0x0},
86825fdd593SJeykumar Sankaran };
86925fdd593SJeykumar Sankaran 
8707bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
8717bdc0c4bSKalyan Thota 	{.fl = 0, .lut = 0x0},
8727bdc0c4bSKalyan Thota };
8737bdc0c4bSKalyan Thota 
87425fdd593SJeykumar Sankaran /*************************************************************
875de7d480fSDmitry Baryshkov  * Hardware catalog
87625fdd593SJeykumar Sankaran  *************************************************************/
87725fdd593SJeykumar Sankaran 
8781c611c48SDmitry Baryshkov #include "catalog/dpu_3_0_msm8998.h"
8791c611c48SDmitry Baryshkov 
880460c410fSDmitry Baryshkov #include "catalog/dpu_4_0_sdm845.h"
881460c410fSDmitry Baryshkov 
88225035306SDmitry Baryshkov #include "catalog/dpu_5_0_sm8150.h"
88397e2c803SDmitry Baryshkov #include "catalog/dpu_5_1_sc8180x.h"
884f3af2d6eSRob Clark 
8852f36168eSDmitry Baryshkov #include "catalog/dpu_6_0_sm8250.h"
886c9cd1552SDmitry Baryshkov #include "catalog/dpu_6_2_sc7180.h"
88701f2e9a7SDmitry Baryshkov #include "catalog/dpu_6_3_sm6115.h"
888*5ce22484SDmitry Baryshkov #include "catalog/dpu_6_5_qcm2290.h"
88901f2e9a7SDmitry Baryshkov 
890b8ece0c6SDmitry Baryshkov #include "catalog/dpu_7_0_sm8350.h"
891f0f2c32aSDmitry Baryshkov #include "catalog/dpu_7_2_sc7280.h"
892f0f2c32aSDmitry Baryshkov 
893225978f4SDmitry Baryshkov #include "catalog/dpu_8_0_sc8280xp.h"
8949cc54793SDmitry Baryshkov #include "catalog/dpu_8_1_sm8450.h"
8959cc54793SDmitry Baryshkov 
8969cc54793SDmitry Baryshkov #include "catalog/dpu_9_0_sm8550.h"
8979cc54793SDmitry Baryshkov 
898abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = {
899de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_300, .dpu_cfg = &msm8998_dpu_cfg},
900de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_301, .dpu_cfg = &msm8998_dpu_cfg},
901de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_400, .dpu_cfg = &sdm845_dpu_cfg},
902de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_401, .dpu_cfg = &sdm845_dpu_cfg},
903de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_500, .dpu_cfg = &sm8150_dpu_cfg},
904de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_501, .dpu_cfg = &sm8150_dpu_cfg},
905de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_510, .dpu_cfg = &sc8180x_dpu_cfg},
906de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_600, .dpu_cfg = &sm8250_dpu_cfg},
907de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_620, .dpu_cfg = &sc7180_dpu_cfg},
9083581b706SAdam Skladowski 	{ .hw_rev = DPU_HW_VER_630, .dpu_cfg = &sm6115_dpu_cfg},
909de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_650, .dpu_cfg = &qcm2290_dpu_cfg},
9100e91bcbbSRobert Foss 	{ .hw_rev = DPU_HW_VER_700, .dpu_cfg = &sm8350_dpu_cfg},
911de7d480fSDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_720, .dpu_cfg = &sc7280_dpu_cfg},
9124a352c2fSBjorn Andersson 	{ .hw_rev = DPU_HW_VER_800, .dpu_cfg = &sc8280xp_dpu_cfg},
913100d7ef6SDmitry Baryshkov 	{ .hw_rev = DPU_HW_VER_810, .dpu_cfg = &sm8450_dpu_cfg},
914efcd0107SNeil Armstrong 	{ .hw_rev = DPU_HW_VER_900, .dpu_cfg = &sm8550_dpu_cfg},
91525fdd593SJeykumar Sankaran };
91625fdd593SJeykumar Sankaran 
917de7d480fSDmitry Baryshkov const struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev)
91825fdd593SJeykumar Sankaran {
91925fdd593SJeykumar Sankaran 	int i;
92025fdd593SJeykumar Sankaran 
92125fdd593SJeykumar Sankaran 	for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) {
922de7d480fSDmitry Baryshkov 		if (cfg_handler[i].hw_rev == hw_rev)
923de7d480fSDmitry Baryshkov 			return cfg_handler[i].dpu_cfg;
92425fdd593SJeykumar Sankaran 	}
92525fdd593SJeykumar Sankaran 
92625fdd593SJeykumar Sankaran 	DPU_ERROR("unsupported chipset id:%X\n", hw_rev);
92732084967SDmitry Baryshkov 
92825fdd593SJeykumar Sankaran 	return ERR_PTR(-ENODEV);
92925fdd593SJeykumar Sankaran }
93025fdd593SJeykumar Sankaran 
931