File Index
Files and directories
Sign in
FILE

dpu_hw_catalog.c

File preview with syntax highlighting.

linux-6.19.14/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c C
  1// SPDX-License-Identifier: GPL-2.0-only
  2/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
  3 * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  4 */
  5
  6#define pr_fmt(fmt)	"[drm:%s:%d] " fmt, __func__, __LINE__
  7#include <linux/slab.h>
  8#include <linux/of_address.h>
  9#include <linux/platform_device.h>
 10#include "dpu_hw_mdss.h"
 11#include "dpu_hw_interrupts.h"
 12#include "dpu_hw_catalog.h"
 13#include "dpu_kms.h"
 14
 15#define VIG_BASE_MASK \
 16	(BIT(DPU_SSPP_QOS) |\
 17	BIT(DPU_SSPP_CDP) |\
 18	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_EXCL_RECT))
 19
 20#define VIG_MASK \
 21	(VIG_BASE_MASK | \
 22	BIT(DPU_SSPP_CSC_10BIT))
 23
 24#define VIG_MSM8953_MASK \
 25	(BIT(DPU_SSPP_QOS) |\
 26	 BIT(DPU_SSPP_SCALER_QSEED2) |\
 27	 BIT(DPU_SSPP_CSC))
 28
 29#define VIG_MSM8996_MASK \
 30	(BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_CDP) |\
 31	 BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_SCALER_QSEED2) |\
 32	 BIT(DPU_SSPP_CSC))
 33
 34#define VIG_MSM8998_MASK \
 35	(VIG_MASK | BIT(DPU_SSPP_SCALER_QSEED3_COMPATIBLE))
 36
 37#define VIG_SDM845_MASK_NO_SDMA \
 38	(VIG_MASK | BIT(DPU_SSPP_SCALER_QSEED3_COMPATIBLE))
 39
 40#define VIG_SDM845_MASK_SDMA \
 41	(VIG_SDM845_MASK_NO_SDMA | BIT(DPU_SSPP_SMART_DMA_V2))
 42
 43#define VIG_QCM2290_MASK (VIG_BASE_MASK)
 44
 45#define DMA_MSM8953_MASK \
 46	(BIT(DPU_SSPP_QOS))
 47
 48#define DMA_MSM8996_MASK \
 49	(BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_CDP))
 50
 51#define DMA_MSM8998_MASK \
 52	(BIT(DPU_SSPP_QOS) |\
 53	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
 54	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
 55
 56#define VIG_SC7280_MASK \
 57	(VIG_SDM845_MASK_NO_SDMA | BIT(DPU_SSPP_INLINE_ROTATION))
 58
 59#define VIG_SC7280_MASK_SDMA \
 60	(VIG_SC7280_MASK | BIT(DPU_SSPP_SMART_DMA_V2))
 61
 62#define DMA_SDM845_MASK_NO_SDMA \
 63	(BIT(DPU_SSPP_QOS) | \
 64	BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\
 65	BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT))
 66
 67#define DMA_CURSOR_SDM845_MASK_NO_SDMA \
 68	(DMA_SDM845_MASK_NO_SDMA | BIT(DPU_SSPP_CURSOR))
 69
 70#define DMA_SDM845_MASK_SDMA \
 71	(DMA_SDM845_MASK_NO_SDMA | BIT(DPU_SSPP_SMART_DMA_V2))
 72
 73#define DMA_CURSOR_SDM845_MASK_SDMA \
 74	(DMA_CURSOR_SDM845_MASK_NO_SDMA | BIT(DPU_SSPP_SMART_DMA_V2))
 75
 76#define DMA_CURSOR_MSM8996_MASK \
 77	(DMA_MSM8996_MASK | BIT(DPU_SSPP_CURSOR))
 78
 79#define DMA_CURSOR_MSM8998_MASK \
 80	(DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR))
 81
 82#define RGB_MSM8953_MASK \
 83	(BIT(DPU_SSPP_QOS))
 84
 85#define RGB_MSM8996_MASK \
 86	(BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_CDP) |\
 87	 BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_SCALER_RGB))
 88
 89#define MIXER_MSM8998_MASK \
 90	(BIT(DPU_MIXER_SOURCESPLIT))
 91
 92#define WB_SDM845_MASK (BIT(DPU_WB_LINE_MODE) | \
 93			 BIT(DPU_WB_UBWC) | \
 94			 BIT(DPU_WB_YUV_CONFIG) | \
 95			 BIT(DPU_WB_PIPE_ALPHA) | \
 96			 BIT(DPU_WB_XY_ROI_OFFSET) | \
 97			 BIT(DPU_WB_QOS) | \
 98			 BIT(DPU_WB_QOS_8LVL) | \
 99			 BIT(DPU_WB_CDP))
100
101#define DEFAULT_PIXEL_RAM_SIZE		(50 * 1024)
102#define DEFAULT_DPU_LINE_WIDTH		2048
103#define DEFAULT_DPU_OUTPUT_LINE_WIDTH	2560
104
105#define MAX_HORZ_DECIMATION	4
106#define MAX_VERT_DECIMATION	4
107
108#define STRCAT(X, Y) (X Y)
109
110static const uint32_t plane_formats[] = {
111	DRM_FORMAT_ARGB8888,
112	DRM_FORMAT_ABGR8888,
113	DRM_FORMAT_RGBA8888,
114	DRM_FORMAT_BGRA8888,
115	DRM_FORMAT_XRGB8888,
116	DRM_FORMAT_RGBX8888,
117	DRM_FORMAT_BGRX8888,
118	DRM_FORMAT_XBGR8888,
119	DRM_FORMAT_ARGB2101010,
120	DRM_FORMAT_XRGB2101010,
121	DRM_FORMAT_RGB888,
122	DRM_FORMAT_BGR888,
123	DRM_FORMAT_RGB565,
124	DRM_FORMAT_BGR565,
125	DRM_FORMAT_ARGB1555,
126	DRM_FORMAT_ABGR1555,
127	DRM_FORMAT_RGBA5551,
128	DRM_FORMAT_BGRA5551,
129	DRM_FORMAT_XRGB1555,
130	DRM_FORMAT_XBGR1555,
131	DRM_FORMAT_RGBX5551,
132	DRM_FORMAT_BGRX5551,
133	DRM_FORMAT_ARGB4444,
134	DRM_FORMAT_ABGR4444,
135	DRM_FORMAT_RGBA4444,
136	DRM_FORMAT_BGRA4444,
137	DRM_FORMAT_XRGB4444,
138	DRM_FORMAT_XBGR4444,
139	DRM_FORMAT_RGBX4444,
140	DRM_FORMAT_BGRX4444,
141};
142
143static const uint32_t plane_formats_yuv[] = {
144	DRM_FORMAT_ARGB8888,
145	DRM_FORMAT_ABGR8888,
146	DRM_FORMAT_RGBA8888,
147	DRM_FORMAT_BGRX8888,
148	DRM_FORMAT_BGRA8888,
149	DRM_FORMAT_ARGB2101010,
150	DRM_FORMAT_XRGB2101010,
151	DRM_FORMAT_XRGB8888,
152	DRM_FORMAT_XBGR8888,
153	DRM_FORMAT_RGBX8888,
154	DRM_FORMAT_RGB888,
155	DRM_FORMAT_BGR888,
156	DRM_FORMAT_RGB565,
157	DRM_FORMAT_BGR565,
158	DRM_FORMAT_ARGB1555,
159	DRM_FORMAT_ABGR1555,
160	DRM_FORMAT_RGBA5551,
161	DRM_FORMAT_BGRA5551,
162	DRM_FORMAT_XRGB1555,
163	DRM_FORMAT_XBGR1555,
164	DRM_FORMAT_RGBX5551,
165	DRM_FORMAT_BGRX5551,
166	DRM_FORMAT_ARGB4444,
167	DRM_FORMAT_ABGR4444,
168	DRM_FORMAT_RGBA4444,
169	DRM_FORMAT_BGRA4444,
170	DRM_FORMAT_XRGB4444,
171	DRM_FORMAT_XBGR4444,
172	DRM_FORMAT_RGBX4444,
173	DRM_FORMAT_BGRX4444,
174
175	DRM_FORMAT_P010,
176	DRM_FORMAT_NV12,
177	DRM_FORMAT_NV21,
178	DRM_FORMAT_NV16,
179	DRM_FORMAT_NV61,
180	DRM_FORMAT_VYUY,
181	DRM_FORMAT_UYVY,
182	DRM_FORMAT_YUYV,
183	DRM_FORMAT_YVYU,
184	DRM_FORMAT_YUV420,
185	DRM_FORMAT_YVU420,
186};
187
188static const u32 rotation_v2_formats[] = {
189	DRM_FORMAT_NV12,
190	/* TODO add formats after validation */
191};
192
193static const u32 wb2_formats_rgb_yuv[] = {
194	DRM_FORMAT_RGB565,
195	DRM_FORMAT_BGR565,
196	DRM_FORMAT_RGB888,
197	DRM_FORMAT_ARGB8888,
198	DRM_FORMAT_RGBA8888,
199	DRM_FORMAT_ABGR8888,
200	DRM_FORMAT_XRGB8888,
201	DRM_FORMAT_RGBX8888,
202	DRM_FORMAT_XBGR8888,
203	DRM_FORMAT_ARGB1555,
204	DRM_FORMAT_RGBA5551,
205	DRM_FORMAT_XRGB1555,
206	DRM_FORMAT_RGBX5551,
207	DRM_FORMAT_ARGB4444,
208	DRM_FORMAT_RGBA4444,
209	DRM_FORMAT_RGBX4444,
210	DRM_FORMAT_XRGB4444,
211	DRM_FORMAT_BGR888,
212	DRM_FORMAT_BGRA8888,
213	DRM_FORMAT_BGRX8888,
214	DRM_FORMAT_ABGR1555,
215	DRM_FORMAT_BGRA5551,
216	DRM_FORMAT_XBGR1555,
217	DRM_FORMAT_BGRX5551,
218	DRM_FORMAT_ABGR4444,
219	DRM_FORMAT_BGRA4444,
220	DRM_FORMAT_BGRX4444,
221	DRM_FORMAT_XBGR4444,
222	DRM_FORMAT_NV12,
223};
224
225/*************************************************************
226 * SSPP sub blocks config
227 *************************************************************/
228
229#define SSPP_SCALER_VER(maj, min) (((maj) << 16) | (min))
230
231/* SSPP common configuration */
232#define _VIG_SBLK(scaler_ver) \
233	{ \
234	.scaler_blk = {.name = "scaler", \
235		.version = scaler_ver, \
236		.base = 0xa00, .len = 0xa0,}, \
237	.csc_blk = {.name = "csc", \
238		.base = 0x1a00, .len = 0x100,}, \
239	.format_list = plane_formats_yuv, \
240	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
241	.rotation_cfg = NULL, \
242	}
243
244#define _VIG_SBLK_ROT(scaler_ver, rot_cfg) \
245	{ \
246	.scaler_blk = {.name = "scaler", \
247		.version = scaler_ver, \
248		.base = 0xa00, .len = 0xa0,}, \
249	.csc_blk = {.name = "csc", \
250		.base = 0x1a00, .len = 0x100,}, \
251	.format_list = plane_formats_yuv, \
252	.num_formats = ARRAY_SIZE(plane_formats_yuv), \
253	.rotation_cfg = rot_cfg, \
254	}
255
256#define _VIG_SBLK_NOSCALE() \
257	{ \
258	.format_list = plane_formats, \
259	.num_formats = ARRAY_SIZE(plane_formats), \
260	}
261
262/* qseed2 is not supported, so disabled scaling */
263#define _VIG_SBLK_QSEED2() \
264	{ \
265	.scaler_blk = {.name = "scaler", \
266		/* no version for qseed2 */ \
267		.base = 0x200, .len = 0xa0,}, \
268	.csc_blk = {.name = "csc", \
269		.base = 0x320, .len = 0x100,}, \
270	.format_list = plane_formats, \
271	.num_formats = ARRAY_SIZE(plane_formats), \
272	.rotation_cfg = NULL, \
273	}
274
275#define _RGB_SBLK() \
276	{ \
277	.scaler_blk = {.name = "scaler", \
278		.base = 0x200, .len = 0x28,}, \
279	.format_list = plane_formats, \
280	.num_formats = ARRAY_SIZE(plane_formats), \
281	}
282
283#define _DMA_SBLK() \
284	{ \
285	.format_list = plane_formats, \
286	.num_formats = ARRAY_SIZE(plane_formats), \
287	}
288
289static const struct dpu_rotation_cfg dpu_rot_sc7280_cfg_v2 = {
290	.rot_maxheight = 1088,
291	.rot_num_formats = ARRAY_SIZE(rotation_v2_formats),
292	.rot_format_list = rotation_v2_formats,
293};
294
295static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed2 =
296				_VIG_SBLK_QSEED2();
297
298static const struct dpu_sspp_sub_blks dpu_vig_sblk_noscale =
299				_VIG_SBLK_NOSCALE();
300
301static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_1_2 =
302				_VIG_SBLK(SSPP_SCALER_VER(1, 2));
303
304static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_1_3 =
305				_VIG_SBLK(SSPP_SCALER_VER(1, 3));
306
307static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_1_4 =
308				_VIG_SBLK(SSPP_SCALER_VER(1, 4));
309
310static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_2_4 =
311				_VIG_SBLK(SSPP_SCALER_VER(2, 4));
312
313static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_0 =
314				_VIG_SBLK(SSPP_SCALER_VER(3, 0));
315
316static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_0_rot_v2 =
317			_VIG_SBLK_ROT(SSPP_SCALER_VER(3, 0),
318				      &dpu_rot_sc7280_cfg_v2);
319
320static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_1 =
321				_VIG_SBLK(SSPP_SCALER_VER(3, 1));
322
323static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_2 =
324				_VIG_SBLK(SSPP_SCALER_VER(3, 2));
325
326static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_3 =
327				_VIG_SBLK(SSPP_SCALER_VER(3, 3));
328
329static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_4 =
330				_VIG_SBLK(SSPP_SCALER_VER(3, 4));
331
332static const struct dpu_sspp_sub_blks dpu_rgb_sblk = _RGB_SBLK();
333
334static const struct dpu_sspp_sub_blks dpu_dma_sblk = _DMA_SBLK();
335
336/*************************************************************
337 * MIXER sub blocks config
338 *************************************************************/
339
340static const struct dpu_lm_sub_blks msm8998_lm_sblk = {
341	.maxblendstages = 7, /* excluding base layer */
342	.blendstage_base = { /* offsets relative to mixer base */
343		0x20, 0x50, 0x80, 0xb0, 0x230,
344		0x260, 0x290
345	},
346};
347
348static const struct dpu_lm_sub_blks sdm845_lm_sblk = {
349	.maxblendstages = 11, /* excluding base layer */
350	.blendstage_base = { /* offsets relative to mixer base */
351		0x20, 0x38, 0x50, 0x68, 0x80, 0x98,
352		0xb0, 0xc8, 0xe0, 0xf8, 0x110
353	},
354};
355
356static const struct dpu_lm_sub_blks sc7180_lm_sblk = {
357	.maxblendstages = 7, /* excluding base layer */
358	.blendstage_base = { /* offsets relative to mixer base */
359		0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0
360	},
361};
362
363static const struct dpu_lm_sub_blks sm8750_lm_sblk = {
364	.maxblendstages = 11, /* excluding base layer */
365	.blendstage_base = { /* offsets relative to mixer base */
366		/* 0x40 + n*0x30 */
367		0x40, 0x70, 0xa0, 0xd0, 0x100, 0x130, 0x160, 0x190, 0x1c0,
368		0x1f0, 0x220
369	},
370};
371
372static const struct dpu_lm_sub_blks qcm2290_lm_sblk = {
373	.maxblendstages = 4, /* excluding base layer */
374	.blendstage_base = { /* offsets relative to mixer base */
375		0x20, 0x38, 0x50, 0x68
376	},
377};
378
379/*************************************************************
380 * DSPP sub blocks config
381 *************************************************************/
382static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
383	.pcc = {.name = "pcc", .base = 0x1700,
384		.len = 0x90, .version = 0x10007},
385};
386
387static const struct dpu_dspp_sub_blks sdm845_dspp_sblk = {
388	.pcc = {.name = "pcc", .base = 0x1700,
389		.len = 0x90, .version = 0x40000},
390};
391
392static const struct dpu_dspp_sub_blks sm8750_dspp_sblk = {
393	.pcc = {.name = "pcc", .base = 0x1700,
394		.len = 0x90, .version = 0x60000},
395};
396
397/*************************************************************
398 * PINGPONG sub blocks config
399 *************************************************************/
400
401static const struct dpu_pingpong_sub_blks msm8996_pp_sblk = {
402	/* No dither block */
403};
404
405static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = {
406	.dither = {.name = "dither", .base = 0x30e0,
407		.len = 0x20, .version = 0x10000},
408};
409
410static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
411	.dither = {.name = "dither", .base = 0xe0,
412	.len = 0x20, .version = 0x20000},
413};
414
415/*************************************************************
416 * DSC sub blocks config
417 *************************************************************/
418static const struct dpu_dsc_sub_blks dsc_sblk_0 = {
419	.enc = {.name = "enc", .base = 0x100, .len = 0x9c},
420	.ctl = {.name = "ctl", .base = 0xF00, .len = 0x10},
421};
422
423static const struct dpu_dsc_sub_blks dsc_sblk_1 = {
424	.enc = {.name = "enc", .base = 0x200, .len = 0x9c},
425	.ctl = {.name = "ctl", .base = 0xF80, .len = 0x10},
426};
427
428static const struct dpu_dsc_sub_blks sm8750_dsc_sblk_0 = {
429	.enc = {.name = "enc", .base = 0x100, .len = 0x100},
430	.ctl = {.name = "ctl", .base = 0xF00, .len = 0x24},
431};
432
433static const struct dpu_dsc_sub_blks sm8750_dsc_sblk_1 = {
434	.enc = {.name = "enc", .base = 0x200, .len = 0x100},
435	.ctl = {.name = "ctl", .base = 0xF80, .len = 0x24},
436};
437
438/*************************************************************
439 * CDM block config
440 *************************************************************/
441static const struct dpu_cdm_cfg dpu_cdm_1_x_4_x = {
442	.name = "cdm_0",
443	.id = CDM_0,
444	.len = 0x224,
445	.base = 0x79200,
446};
447
448static const struct dpu_cdm_cfg dpu_cdm_5_x = {
449	.name = "cdm_0",
450	.id = CDM_0,
451	.len = 0x228,
452	.base = 0x79200,
453};
454
455/*************************************************************
456 * VBIF sub blocks config
457 *************************************************************/
458/* VBIF QOS remap */
459static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2};
460static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1};
461static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6};
462static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3};
463static const u32 sm8650_rt_pri_lvl[] = {4, 4, 5, 5, 5, 5, 5, 6};
464
465static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
466	{
467		.pps = 1920 * 1080 * 30,
468		.ot_limit = 2,
469	},
470	{
471		.pps = 1920 * 1080 * 60,
472		.ot_limit = 4,
473	},
474	{
475		.pps = 3840 * 2160 * 30,
476		.ot_limit = 16,
477	},
478};
479
480static const struct dpu_vbif_cfg msm8996_vbif[] = {
481	{
482	.name = "vbif_rt", .id = VBIF_RT,
483	.base = 0, .len = 0x1040,
484	.default_ot_rd_limit = 32,
485	.default_ot_wr_limit = 16,
486	.features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM),
487	.xin_halt_timeout = 0x4000,
488	.qos_rp_remap_size = 0x20,
489	.dynamic_ot_rd_tbl = {
490		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
491		.cfg = msm8998_ot_rdwr_cfg,
492		},
493	.dynamic_ot_wr_tbl = {
494		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
495		.cfg = msm8998_ot_rdwr_cfg,
496		},
497	.qos_rt_tbl = {
498		.npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl),
499		.priority_lvl = msm8998_rt_pri_lvl,
500		},
501	.qos_nrt_tbl = {
502		.npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl),
503		.priority_lvl = msm8998_nrt_pri_lvl,
504		},
505	},
506};
507
508static const struct dpu_vbif_cfg msm8998_vbif[] = {
509	{
510	.name = "vbif_rt", .id = VBIF_RT,
511	.base = 0, .len = 0x1040,
512	.default_ot_rd_limit = 32,
513	.default_ot_wr_limit = 32,
514	.features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM),
515	.xin_halt_timeout = 0x4000,
516	.qos_rp_remap_size = 0x20,
517	.dynamic_ot_rd_tbl = {
518		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
519		.cfg = msm8998_ot_rdwr_cfg,
520		},
521	.dynamic_ot_wr_tbl = {
522		.count = ARRAY_SIZE(msm8998_ot_rdwr_cfg),
523		.cfg = msm8998_ot_rdwr_cfg,
524		},
525	.qos_rt_tbl = {
526		.npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl),
527		.priority_lvl = msm8998_rt_pri_lvl,
528		},
529	.qos_nrt_tbl = {
530		.npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl),
531		.priority_lvl = msm8998_nrt_pri_lvl,
532		},
533	.memtype_count = 14,
534	.memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
535	},
536};
537
538static const struct dpu_vbif_cfg sdm845_vbif[] = {
539	{
540	.name = "vbif_rt", .id = VBIF_RT,
541	.base = 0, .len = 0x1040,
542	.features = BIT(DPU_VBIF_QOS_REMAP),
543	.xin_halt_timeout = 0x4000,
544	.qos_rp_remap_size = 0x40,
545	.qos_rt_tbl = {
546		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
547		.priority_lvl = sdm845_rt_pri_lvl,
548		},
549	.qos_nrt_tbl = {
550		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
551		.priority_lvl = sdm845_nrt_pri_lvl,
552		},
553	.memtype_count = 14,
554	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
555	},
556};
557
558static const struct dpu_vbif_cfg sm8550_vbif[] = {
559	{
560	.name = "vbif_rt", .id = VBIF_RT,
561	.base = 0, .len = 0x1040,
562	.features = BIT(DPU_VBIF_QOS_REMAP),
563	.xin_halt_timeout = 0x4000,
564	.qos_rp_remap_size = 0x40,
565	.qos_rt_tbl = {
566		.npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl),
567		.priority_lvl = sdm845_rt_pri_lvl,
568		},
569	.qos_nrt_tbl = {
570		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
571		.priority_lvl = sdm845_nrt_pri_lvl,
572		},
573	.memtype_count = 16,
574	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
575	},
576};
577
578static const struct dpu_vbif_cfg sm8650_vbif[] = {
579	{
580	.name = "vbif_rt", .id = VBIF_RT,
581	.base = 0, .len = 0x1074,
582	.features = BIT(DPU_VBIF_QOS_REMAP),
583	.xin_halt_timeout = 0x4000,
584	.qos_rp_remap_size = 0x40,
585	.qos_rt_tbl = {
586		.npriority_lvl = ARRAY_SIZE(sm8650_rt_pri_lvl),
587		.priority_lvl = sm8650_rt_pri_lvl,
588		},
589	.qos_nrt_tbl = {
590		.npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl),
591		.priority_lvl = sdm845_nrt_pri_lvl,
592		},
593	.memtype_count = 16,
594	.memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
595	},
596};
597
598/*************************************************************
599 * PERF data config
600 *************************************************************/
601
602/* SSPP QOS LUTs */
603static const struct dpu_qos_lut_entry msm8998_qos_linear[] = {
604	{.fl = 4,  .lut = 0x1b},
605	{.fl = 5,  .lut = 0x5b},
606	{.fl = 6,  .lut = 0x15b},
607	{.fl = 7,  .lut = 0x55b},
608	{.fl = 8,  .lut = 0x155b},
609	{.fl = 9,  .lut = 0x555b},
610	{.fl = 10, .lut = 0x1555b},
611	{.fl = 11, .lut = 0x5555b},
612	{.fl = 12, .lut = 0x15555b},
613	{.fl = 0,  .lut = 0x55555b}
614};
615
616static const struct dpu_qos_lut_entry sdm845_qos_linear[] = {
617	{.fl = 4, .lut = 0x357},
618	{.fl = 5, .lut = 0x3357},
619	{.fl = 6, .lut = 0x23357},
620	{.fl = 7, .lut = 0x223357},
621	{.fl = 8, .lut = 0x2223357},
622	{.fl = 9, .lut = 0x22223357},
623	{.fl = 10, .lut = 0x222223357},
624	{.fl = 11, .lut = 0x2222223357},
625	{.fl = 12, .lut = 0x22222223357},
626	{.fl = 13, .lut = 0x222222223357},
627	{.fl = 14, .lut = 0x1222222223357},
628	{.fl = 0, .lut = 0x11222222223357}
629};
630
631static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = {
632	{.fl = 10, .lut = 0x1aaff},
633	{.fl = 11, .lut = 0x5aaff},
634	{.fl = 12, .lut = 0x15aaff},
635	{.fl = 0,  .lut = 0x55aaff},
636};
637
638static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
639	{.fl = 0, .lut = 0x0011222222335777},
640};
641
642static const struct dpu_qos_lut_entry sm6350_qos_linear_macrotile[] = {
643	{.fl = 0, .lut = 0x0011223445566777 },
644};
645
646static const struct dpu_qos_lut_entry sm8150_qos_linear[] = {
647	{.fl = 0, .lut = 0x0011222222223357 },
648};
649
650static const struct dpu_qos_lut_entry sc8180x_qos_linear[] = {
651	{.fl = 4, .lut = 0x0000000000000357 },
652};
653
654static const struct dpu_qos_lut_entry qcm2290_qos_linear[] = {
655	{.fl = 0, .lut = 0x0011222222335777},
656};
657
658static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = {
659	{.fl = 10, .lut = 0x344556677},
660	{.fl = 11, .lut = 0x3344556677},
661	{.fl = 12, .lut = 0x23344556677},
662	{.fl = 13, .lut = 0x223344556677},
663	{.fl = 14, .lut = 0x1223344556677},
664	{.fl = 0, .lut = 0x112233344556677},
665};
666
667static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
668	{.fl = 0, .lut = 0x0011223344556677},
669};
670
671static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
672	{.fl = 10, .lut = 0x0000000344556677},
673};
674
675static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = {
676	{.fl = 0, .lut = 0x0},
677};
678
679static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = {
680	{.fl = 0, .lut = 0x0},
681};
682
683static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
684	{.fl = 0, .lut = 0x0},
685};
686
687/*************************************************************
688 * Hardware catalog
689 *************************************************************/
690
691#include "catalog/dpu_1_7_msm8996.h"
692#include "catalog/dpu_1_14_msm8937.h"
693#include "catalog/dpu_1_15_msm8917.h"
694#include "catalog/dpu_1_16_msm8953.h"
695
696#include "catalog/dpu_3_0_msm8998.h"
697#include "catalog/dpu_3_2_sdm660.h"
698#include "catalog/dpu_3_3_sdm630.h"
699
700#include "catalog/dpu_4_0_sdm845.h"
701#include "catalog/dpu_4_1_sdm670.h"
702
703#include "catalog/dpu_5_0_sm8150.h"
704#include "catalog/dpu_5_1_sc8180x.h"
705#include "catalog/dpu_5_2_sm7150.h"
706#include "catalog/dpu_5_3_sm6150.h"
707#include "catalog/dpu_5_4_sm6125.h"
708
709#include "catalog/dpu_6_0_sm8250.h"
710#include "catalog/dpu_6_2_sc7180.h"
711#include "catalog/dpu_6_3_sm6115.h"
712#include "catalog/dpu_6_4_sm6350.h"
713#include "catalog/dpu_6_5_qcm2290.h"
714#include "catalog/dpu_6_9_sm6375.h"
715
716#include "catalog/dpu_7_0_sm8350.h"
717#include "catalog/dpu_7_2_sc7280.h"
718
719#include "catalog/dpu_8_0_sc8280xp.h"
720#include "catalog/dpu_8_1_sm8450.h"
721#include "catalog/dpu_8_4_sa8775p.h"
722
723#include "catalog/dpu_9_0_sm8550.h"
724#include "catalog/dpu_9_1_sar2130p.h"
725#include "catalog/dpu_9_2_x1e80100.h"
726
727#include "catalog/dpu_10_0_sm8650.h"
728#include "catalog/dpu_12_0_sm8750.h"
729#include "catalog/dpu_12_2_glymur.h"
~/ Read-only file preview.