blob: 1cc63ffde1a5907de9341bbcd6d9e82269038139 [file] [log] [blame]
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -08001/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
Narendra Muppalla1b0b3352015-09-29 10:16:51 -07002 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#include "sde_hw_catalog.h"
14#include "sde_hw_mdss.h"
15#include "sde_hwio.h"
16
17/* VIG layer capability */
18#define VIG_17X_MASK \
Clarence Ipe78efb72016-06-24 18:35:21 -040019 (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_SCALER_QSEED2) |\
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -080020 BIT(SDE_SSPP_CSC) | BIT(SDE_SSPP_HSIC) |\
21 BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) |\
22 BIT(SDE_SSPP_MEMCOLOR) | BIT(SDE_SSPP_QOS))
Narendra Muppalla1b0b3352015-09-29 10:16:51 -070023
24/* RGB layer capability */
25#define RGB_17X_MASK \
Clarence Ipe78efb72016-06-24 18:35:21 -040026 (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_SCALER_RGB) |\
Alan Kwong1a00e4d2016-07-18 09:42:30 -040027 BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) | BIT(SDE_SSPP_QOS))
Narendra Muppalla1b0b3352015-09-29 10:16:51 -070028
29/* DMA layer capability */
30#define DMA_17X_MASK \
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -080031 (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) |\
32 BIT(SDE_SSPP_QOS))
Narendra Muppalla1b0b3352015-09-29 10:16:51 -070033
34/* Cursor layer capability */
35#define CURSOR_17X_MASK (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_CURSOR))
36
37#define MIXER_17X_MASK (BIT(SDE_MIXER_SOURCESPLIT) |\
38 BIT(SDE_MIXER_GC))
39
40#define DSPP_17X_MASK \
41 (BIT(SDE_DSPP_IGC) | BIT(SDE_DSPP_PCC) |\
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -080042 BIT(SDE_DSPP_GC) | BIT(SDE_DSPP_HSIC) | BIT(SDE_DSPP_GAMUT) |\
43 BIT(SDE_DSPP_DITHER) | BIT(SDE_DSPP_HIST) | BIT(SDE_DSPP_MEMCOLOR) |\
Gopikrishnaiah Anandanb67b0d12016-06-23 11:43:08 -070044 BIT(SDE_DSPP_SIXZONE) | BIT(SDE_DSPP_AD) | BIT(SDE_DSPP_VLUT))
Narendra Muppalla1b0b3352015-09-29 10:16:51 -070045
46#define PINGPONG_17X_MASK \
47 (BIT(SDE_PINGPONG_TE) | BIT(SDE_PINGPONG_DSC))
48
49#define PINGPONG_17X_SPLIT_MASK \
50 (PINGPONG_17X_MASK | BIT(SDE_PINGPONG_SPLIT) |\
51 BIT(SDE_PINGPONG_TE2))
52
53#define WB01_17X_MASK \
54 (BIT(SDE_WB_LINE_MODE) | BIT(SDE_WB_BLOCK_MODE) |\
55 BIT(SDE_WB_CSC) | BIT(SDE_WB_CHROMA_DOWN) | BIT(SDE_WB_DOWNSCALE) |\
56 BIT(SDE_WB_DITHER) | BIT(SDE_WB_TRAFFIC_SHAPER) |\
Alan Kwong3232ca52016-07-29 02:27:47 -040057 BIT(SDE_WB_UBWC_1_0) | BIT(SDE_WB_YUV_CONFIG))
Narendra Muppalla1b0b3352015-09-29 10:16:51 -070058
59#define WB2_17X_MASK \
Alan Kwong3232ca52016-07-29 02:27:47 -040060 (BIT(SDE_WB_LINE_MODE) | BIT(SDE_WB_TRAFFIC_SHAPER) |\
61 BIT(SDE_WB_YUV_CONFIG))
Narendra Muppalla1b0b3352015-09-29 10:16:51 -070062
Clarence Ip4c1d9772016-06-26 09:35:38 -040063#define DECIMATION_17X_MAX_H 4
64#define DECIMATION_17X_MAX_V 4
65
Alan Kwong5d324e42016-07-28 22:56:18 -040066#define RES_1080p ((u64)(1088*1920))
67#define RES_UHD ((u64)(3840*2160))
68
Clarence Ipea3d6262016-07-15 16:20:11 -040069static const struct sde_format_extended plane_formats[] = {
70 {DRM_FORMAT_ARGB8888, 0},
71 {DRM_FORMAT_ABGR8888, 0},
72 {DRM_FORMAT_RGBA8888, 0},
73 {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED},
74 {DRM_FORMAT_BGRA8888, 0},
75 {DRM_FORMAT_XRGB8888, 0},
76 {DRM_FORMAT_RGBX8888, 0},
77 {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED},
78 {DRM_FORMAT_RGB888, 0},
79 {DRM_FORMAT_BGR888, 0},
80 {DRM_FORMAT_RGB565, 0},
81 {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED},
82 {DRM_FORMAT_BGR565, 0},
83 {DRM_FORMAT_ARGB1555, 0},
84 {DRM_FORMAT_ABGR1555, 0},
85 {DRM_FORMAT_RGBA5551, 0},
86 {DRM_FORMAT_BGRA5551, 0},
87 {DRM_FORMAT_XRGB1555, 0},
88 {DRM_FORMAT_XBGR1555, 0},
89 {DRM_FORMAT_RGBX5551, 0},
90 {DRM_FORMAT_BGRX5551, 0},
91 {DRM_FORMAT_ARGB4444, 0},
92 {DRM_FORMAT_ABGR4444, 0},
93 {DRM_FORMAT_RGBA4444, 0},
94 {DRM_FORMAT_BGRA4444, 0},
95 {DRM_FORMAT_XRGB4444, 0},
96 {DRM_FORMAT_XBGR4444, 0},
97 {DRM_FORMAT_RGBX4444, 0},
98 {DRM_FORMAT_BGRX4444, 0},
99 {0, 0},
100};
101
102static const struct sde_format_extended plane_formats_yuv[] = {
103 {DRM_FORMAT_ARGB8888, 0},
104 {DRM_FORMAT_ABGR8888, 0},
105 {DRM_FORMAT_RGBA8888, 0},
106 {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED},
107 {DRM_FORMAT_BGRA8888, 0},
108 {DRM_FORMAT_XRGB8888, 0},
109 {DRM_FORMAT_RGBX8888, 0},
110 {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED},
111 {DRM_FORMAT_RGB888, 0},
112 {DRM_FORMAT_BGR888, 0},
113 {DRM_FORMAT_RGB565, 0},
114 {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED},
115 {DRM_FORMAT_BGR565, 0},
116 {DRM_FORMAT_ARGB1555, 0},
117 {DRM_FORMAT_ABGR1555, 0},
118 {DRM_FORMAT_RGBA5551, 0},
119 {DRM_FORMAT_BGRA5551, 0},
120 {DRM_FORMAT_XRGB1555, 0},
121 {DRM_FORMAT_XBGR1555, 0},
122 {DRM_FORMAT_RGBX5551, 0},
123 {DRM_FORMAT_BGRX5551, 0},
124 {DRM_FORMAT_ARGB4444, 0},
125 {DRM_FORMAT_ABGR4444, 0},
126 {DRM_FORMAT_RGBA4444, 0},
127 {DRM_FORMAT_BGRA4444, 0},
128 {DRM_FORMAT_XRGB4444, 0},
129 {DRM_FORMAT_XBGR4444, 0},
130 {DRM_FORMAT_RGBX4444, 0},
131 {DRM_FORMAT_BGRX4444, 0},
132
133 {DRM_FORMAT_NV12, 0},
134 {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED},
135 {DRM_FORMAT_NV21, 0},
136 {DRM_FORMAT_NV16, 0},
137 {DRM_FORMAT_NV61, 0},
138 {DRM_FORMAT_VYUY, 0},
139 {DRM_FORMAT_UYVY, 0},
140 {DRM_FORMAT_YUYV, 0},
141 {DRM_FORMAT_YVYU, 0},
142 {DRM_FORMAT_YUV420, 0},
143 {DRM_FORMAT_YVU420, 0},
144 {0, 0},
145};
146
Alan Kwongbb27c092016-07-20 16:41:25 -0400147static const struct sde_format_extended wb0_formats[] = {
148 {DRM_FORMAT_RGB565, 0},
149 {DRM_FORMAT_RGB888, 0},
150 {DRM_FORMAT_ARGB8888, 0},
151 {DRM_FORMAT_RGBA8888, 0},
152 {DRM_FORMAT_XRGB8888, 0},
153 {DRM_FORMAT_RGBX8888, 0},
154 {DRM_FORMAT_ARGB1555, 0},
155 {DRM_FORMAT_RGBA5551, 0},
156 {DRM_FORMAT_XRGB1555, 0},
157 {DRM_FORMAT_RGBX5551, 0},
158 {DRM_FORMAT_ARGB4444, 0},
159 {DRM_FORMAT_RGBA4444, 0},
160 {DRM_FORMAT_RGBX4444, 0},
161 {DRM_FORMAT_XRGB4444, 0},
162
163 {DRM_FORMAT_BGR565, 0},
164 {DRM_FORMAT_BGR888, 0},
165 {DRM_FORMAT_ABGR8888, 0},
166 {DRM_FORMAT_BGRA8888, 0},
167 {DRM_FORMAT_BGRX8888, 0},
168 {DRM_FORMAT_ABGR1555, 0},
169 {DRM_FORMAT_BGRA5551, 0},
170 {DRM_FORMAT_XBGR1555, 0},
171 {DRM_FORMAT_BGRX5551, 0},
172 {DRM_FORMAT_ABGR4444, 0},
173 {DRM_FORMAT_BGRA4444, 0},
174 {DRM_FORMAT_BGRX4444, 0},
175 {DRM_FORMAT_XBGR4444, 0},
176
177 {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED},
178 {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED},
179 {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED},
180
181 {DRM_FORMAT_YUV420, 0},
182 {DRM_FORMAT_NV12, 0},
183 {DRM_FORMAT_NV16, 0},
184 {DRM_FORMAT_YUYV, 0},
185
186 {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED},
187 {DRM_FORMAT_AYUV, DRM_FORMAT_MOD_QCOM_COMPRESSED},
188
189 {0, 0},
190};
191
192static const struct sde_format_extended wb2_formats[] = {
193 {DRM_FORMAT_RGB565, 0},
194 {DRM_FORMAT_RGB888, 0},
195 {DRM_FORMAT_ARGB8888, 0},
196 {DRM_FORMAT_RGBA8888, 0},
197 {DRM_FORMAT_XRGB8888, 0},
198 {DRM_FORMAT_RGBX8888, 0},
199 {DRM_FORMAT_ARGB1555, 0},
200 {DRM_FORMAT_RGBA5551, 0},
201 {DRM_FORMAT_XRGB1555, 0},
202 {DRM_FORMAT_RGBX5551, 0},
203 {DRM_FORMAT_ARGB4444, 0},
204 {DRM_FORMAT_RGBA4444, 0},
205 {DRM_FORMAT_RGBX4444, 0},
206 {DRM_FORMAT_XRGB4444, 0},
207
208 {DRM_FORMAT_BGR565, 0},
209 {DRM_FORMAT_BGR888, 0},
210 {DRM_FORMAT_ABGR8888, 0},
211 {DRM_FORMAT_BGRA8888, 0},
212 {DRM_FORMAT_BGRX8888, 0},
213 {DRM_FORMAT_ABGR1555, 0},
214 {DRM_FORMAT_BGRA5551, 0},
215 {DRM_FORMAT_XBGR1555, 0},
216 {DRM_FORMAT_BGRX5551, 0},
217 {DRM_FORMAT_ABGR4444, 0},
218 {DRM_FORMAT_BGRA4444, 0},
219 {DRM_FORMAT_BGRX4444, 0},
220 {DRM_FORMAT_XBGR4444, 0},
221
222 {DRM_FORMAT_YUV420, 0},
223 {DRM_FORMAT_NV12, 0},
224 {DRM_FORMAT_NV16, 0},
225 {DRM_FORMAT_YUYV, 0},
226
227 {0, 0},
228};
229
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700230/**
231 * set_cfg_1xx_init(): populate sde sub-blocks reg offsets and instance counts
232 */
233static inline int set_cfg_1xx_init(struct sde_mdss_cfg *cfg)
234{
235
236 /* Layer capability */
Clarence Ipea3d6262016-07-15 16:20:11 -0400237 static const struct sde_sspp_sub_blks vig_layer = {
238 .maxlinewidth = 2560,
Alan Kwong1a00e4d2016-07-18 09:42:30 -0400239 .danger_lut_linear = 0x000f,
240 .safe_lut_linear = 0xfffc,
241 .danger_lut_tile = 0xffff,
242 .safe_lut_tile = 0xff00,
243 .danger_lut_nrt = 0x0,
244 .safe_lut_nrt = 0xffff,
245 .creq_lut_nrt = 0x0,
246 .creq_vblank = 0x2,
247 .danger_vblank = 0,
248 .pixel_ram_size = 50 * 1024,
Clarence Ipea3d6262016-07-15 16:20:11 -0400249 .maxdwnscale = 4, .maxupscale = 20,
250 .maxhdeciexp = DECIMATION_17X_MAX_H,
251 .maxvdeciexp = DECIMATION_17X_MAX_V,
252 .src_blk = {.id = SDE_SSPP_SRC,
253 .base = 0x00, .len = 0x150,},
254 .scaler_blk = {.id = SDE_SSPP_SCALER_QSEED2,
255 .base = 0x200, .len = 0x70,},
256 .csc_blk = {.id = SDE_SSPP_CSC,
257 .base = 0x320, .len = 0x44,},
Clarence Ipea3d6262016-07-15 16:20:11 -0400258 .format_list = plane_formats_yuv,
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -0800259 .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0,
260 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
261 .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0,
262 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
263 .hsic = {.id = SDE_SSPP_HSIC, .base = 0x0, .len = 0x0,
264 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
265 .memcolor = {.id = SDE_SSPP_MEMCOLOR, .base = 0x0, .len = 0x0,
266 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
Clarence Ipea3d6262016-07-15 16:20:11 -0400267 };
268
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700269 static const struct sde_sspp_sub_blks layer = {
270 .maxlinewidth = 2560,
Alan Kwong1a00e4d2016-07-18 09:42:30 -0400271 .danger_lut_linear = 0x000f,
272 .safe_lut_linear = 0xfffc,
273 .danger_lut_tile = 0xffff,
274 .safe_lut_tile = 0xff00,
275 .danger_lut_nrt = 0x0,
276 .safe_lut_nrt = 0xffff,
277 .creq_lut_nrt = 0x0,
278 .creq_vblank = 0x2,
279 .danger_vblank = 0,
280 .pixel_ram_size = 50 * 1024,
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700281 .maxdwnscale = 4, .maxupscale = 20,
Clarence Ip4c1d9772016-06-26 09:35:38 -0400282 .maxhdeciexp = DECIMATION_17X_MAX_H,
283 .maxvdeciexp = DECIMATION_17X_MAX_V,
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700284 .src_blk = {.id = SDE_SSPP_SRC,
285 .base = 0x00, .len = 0x150,},
Clarence Ipe78efb72016-06-24 18:35:21 -0400286 .scaler_blk = {.id = SDE_SSPP_SCALER_QSEED2,
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700287 .base = 0x200, .len = 0x70,},
288 .csc_blk = {.id = SDE_SSPP_CSC,
289 .base = 0x320, .len = 0x44,},
Clarence Ipea3d6262016-07-15 16:20:11 -0400290 .format_list = plane_formats,
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -0800291 .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0,
292 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
293 .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0,
294 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700295 };
296
297 static const struct sde_sspp_sub_blks dma = {
298 .maxlinewidth = 2560,
Alan Kwong1a00e4d2016-07-18 09:42:30 -0400299 .danger_lut_linear = 0x000f,
300 .safe_lut_linear = 0xfffc,
301 .danger_lut_tile = 0xffff,
302 .safe_lut_tile = 0xff00,
303 .danger_lut_nrt = 0x0,
304 .safe_lut_nrt = 0xffff,
305 .creq_lut_nrt = 0x0,
306 .creq_vblank = 0x2,
307 .danger_vblank = 0,
308 .pixel_ram_size = 50 * 1024,
Clarence Ipf900f7a2016-02-09 18:18:05 -0500309 .maxdwnscale = 1, .maxupscale = 1,
Clarence Ip4c1d9772016-06-26 09:35:38 -0400310 .maxhdeciexp = DECIMATION_17X_MAX_H,
311 .maxvdeciexp = DECIMATION_17X_MAX_V,
312 .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,},
Clarence Ipe78efb72016-06-24 18:35:21 -0400313 .scaler_blk = {.id = 0, .base = 0x00, .len = 0x0,},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700314 .csc_blk = {.id = 0, .base = 0x00, .len = 0x0,},
Clarence Ipea3d6262016-07-15 16:20:11 -0400315 .format_list = plane_formats,
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -0800316 .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0,
317 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
318 .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0,
319 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700320 };
321
322 static const struct sde_sspp_sub_blks cursor = {
323 .maxlinewidth = 128,
Clarence Ipf900f7a2016-02-09 18:18:05 -0500324 .maxdwnscale = 1, .maxupscale = 1,
Clarence Ipdedbba92016-09-27 17:43:10 -0400325 .maxhdeciexp = 0,
326 .maxvdeciexp = 0,
Clarence Ip4c1d9772016-06-26 09:35:38 -0400327 .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,},
Clarence Ipe78efb72016-06-24 18:35:21 -0400328 .scaler_blk = {.id = 0, .base = 0x00, .len = 0x0,},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700329 .csc_blk = {.id = 0, .base = 0x00, .len = 0x0,},
Clarence Ipea3d6262016-07-15 16:20:11 -0400330 .format_list = plane_formats,
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700331 };
332
333 /* MIXER capability */
334 static const struct sde_lm_sub_blks lm = {
335 .maxwidth = 2560,
336 .maxblendstages = 7, /* excluding base layer */
337 .blendstage_base = { /* offsets relative to mixer base */
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -0800338 0x20, 0x50, 0x80, 0xB0, 0x230, 0x260, 0x290 },
339 .gc = {.id = SDE_DSPP_GC, .base = 0x0, .len = 0x0,
340 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700341 };
342
343 /* DSPP capability */
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400344 static const struct sde_dspp_sub_blks dspp = {
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -0800345 .igc = {.id = SDE_DSPP_IGC, .base = 0x0, .len = 0x0,
346 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
Gopikrishnaiah Anandan41980b42016-06-21 16:01:33 -0700347 .pcc = {.id = SDE_DSPP_PCC, .base = 0x0, .len = 0x0,
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -0800348 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
349 .gamut = {.id = SDE_DSPP_GAMUT, .base = 0x0, .len = 0x0,
350 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
351 .dither = {.id = SDE_DSPP_DITHER, .base = 0x0, .len = 0x0,
352 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
353 .hsic = {.id = SDE_DSPP_HSIC, .base = 0x00, .len = 0x0,
354 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
355 .memcolor = {.id = SDE_DSPP_MEMCOLOR, .base = 0x00, .len = 0x0,
356 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
357 .sixzone = {.id = SDE_DSPP_SIXZONE, .base = 0x00, .len = 0x0,
358 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700359 .hist = {.id = SDE_DSPP_HIST, .base = 0x00, .len = 0x0,
Gopikrishnaiah Anandane3842f32015-11-05 12:18:41 -0800360 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
361 .gc = {.id = SDE_DSPP_GC, .base = 0x0, .len = 0x0,
362 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
Gopikrishnaiah Anandan41980b42016-06-21 16:01:33 -0700363 .ad = {.id = SDE_DSPP_AD, .base = 0x00, .len = 0x0,
364 .version = SDE_COLOR_PROCESS_VER(0x3, 0x0)},
Gopikrishnaiah Anandanb67b0d12016-06-23 11:43:08 -0700365 .vlut = {.id = SDE_DSPP_VLUT, .base = 0x1400, .len = 0x0,
366 .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700367 };
368
369 /* PINGPONG capability */
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400370 static const struct sde_pingpong_sub_blks pingpong = {
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700371 .te = {.id = SDE_PINGPONG_TE, .base = 0x0000, .len = 0x0,
372 .version = 0x1},
373 .te2 = {.id = SDE_PINGPONG_TE2, .base = 0x2000, .len = 0x0,
374 .version = 0x1},
375 .dsc = {.id = SDE_PINGPONG_DSC, .base = 0x10000, .len = 0x0,
376 .version = 0x1},
377 };
378
Alan Kwongbb27c092016-07-20 16:41:25 -0400379 /* Writeback 0/1 capability */
380 static const struct sde_wb_sub_blocks wb0 = {
381 .maxlinewidth = 2048,
382 };
383
384 /* Writeback 2 capability */
385 static const struct sde_wb_sub_blocks wb2 = {
386 .maxlinewidth = 4096,
387 };
388
Alan Kwong5d324e42016-07-28 22:56:18 -0400389 static const struct sde_vbif_dynamic_ot_cfg dynamic_ot_cfg[] = {
390 {RES_1080p * 30, 2},
391 {RES_1080p * 60, 4},
392 {RES_UHD * 30, 16},
393 };
394
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700395 /* Setup Register maps and defaults */
396 *cfg = (struct sde_mdss_cfg){
Ben Chan78647cd2016-06-26 22:02:47 -0400397 .mdss_count = 1,
398 .mdss = {
399 {.id = MDP_TOP, .base = 0x00000000, .features = 0}
400 },
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700401 .mdp_count = 1,
402 .mdp = {
403 {.id = MDP_TOP, .base = 0x00001000, .features = 0,
Alan Kwong5d324e42016-07-28 22:56:18 -0400404 .highest_bank_bit = 0x2,
405 .clk_ctrls[SDE_CLK_CTRL_VIG0] = {
406 .reg_off = 0x2AC, .bit_off = 0},
407 .clk_ctrls[SDE_CLK_CTRL_VIG1] = {
408 .reg_off = 0x2B4, .bit_off = 0},
409 .clk_ctrls[SDE_CLK_CTRL_VIG2] = {
410 .reg_off = 0x2BC, .bit_off = 0},
411 .clk_ctrls[SDE_CLK_CTRL_VIG3] = {
412 .reg_off = 0x2C4, .bit_off = 0},
413 .clk_ctrls[SDE_CLK_CTRL_RGB0] = {
414 .reg_off = 0x2AC, .bit_off = 4},
415 .clk_ctrls[SDE_CLK_CTRL_RGB1] = {
416 .reg_off = 0x2B4, .bit_off = 4},
417 .clk_ctrls[SDE_CLK_CTRL_RGB2] = {
418 .reg_off = 0x2BC, .bit_off = 4},
419 .clk_ctrls[SDE_CLK_CTRL_RGB3] = {
420 .reg_off = 0x2C4, .bit_off = 4},
421 .clk_ctrls[SDE_CLK_CTRL_DMA0] = {
422 .reg_off = 0x2AC, .bit_off = 8},
423 .clk_ctrls[SDE_CLK_CTRL_DMA1] = {
424 .reg_off = 0x2B4, .bit_off = 8},
425 .clk_ctrls[SDE_CLK_CTRL_CURSOR0] = {
426 .reg_off = 0x3A8, .bit_off = 16},
427 .clk_ctrls[SDE_CLK_CTRL_CURSOR1] = {
428 .reg_off = 0x3B0, .bit_off = 16},
429 .clk_ctrls[SDE_CLK_CTRL_WB0] = {
430 .reg_off = 0x2BC, .bit_off = 8},
431 .clk_ctrls[SDE_CLK_CTRL_WB1] = {
432 .reg_off = 0x2BC, .bit_off = 12},
433 .clk_ctrls[SDE_CLK_CTRL_WB2] = {
434 .reg_off = 0x2BC, .bit_off = 16},
435 },
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700436 },
437 .ctl_count = 5,
438 .ctl = {
Lloyd Atkinsoncf8996b2016-08-23 09:34:13 -0400439 {.id = CTL_0,
440 .base = 0x00002000,
441 .features = BIT(SDE_CTL_SPLIT_DISPLAY) |
442 BIT(SDE_CTL_PINGPONG_SPLIT) },
443 {.id = CTL_1,
444 .base = 0x00002200,
445 .features = BIT(SDE_CTL_SPLIT_DISPLAY) },
446 {.id = CTL_2,
447 .base = 0x00002400},
448 {.id = CTL_3,
449 .base = 0x00002600},
450 {.id = CTL_4,
451 .base = 0x00002800},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700452 },
453 /* 4 VIG, + 4 RGB + 2 DMA + 2 CURSOR */
454 .sspp_count = 12,
455 .sspp = {
456 {.id = SSPP_VIG0, .base = 0x00005000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400457 .features = VIG_17X_MASK, .sblk = &vig_layer,
458 .xin_id = 0,
459 .clk_ctrl = SDE_CLK_CTRL_VIG0},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700460 {.id = SSPP_VIG1, .base = 0x00007000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400461 .features = VIG_17X_MASK, .sblk = &vig_layer,
462 .xin_id = 4,
463 .clk_ctrl = SDE_CLK_CTRL_VIG1},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700464 {.id = SSPP_VIG2, .base = 0x00009000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400465 .features = VIG_17X_MASK, .sblk = &vig_layer,
466 .xin_id = 8,
467 .clk_ctrl = SDE_CLK_CTRL_VIG2},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700468 {.id = SSPP_VIG3, .base = 0x0000b000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400469 .features = VIG_17X_MASK, .sblk = &vig_layer,
470 .xin_id = 12,
471 .clk_ctrl = SDE_CLK_CTRL_VIG3},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700472
Abhijit Kulkarni3e3e0d22016-06-24 17:56:13 -0400473 {.id = SSPP_RGB0, .base = 0x00015000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400474 .features = RGB_17X_MASK, .sblk = &layer,
475 .xin_id = 1,
476 .clk_ctrl = SDE_CLK_CTRL_RGB0},
Abhijit Kulkarni3e3e0d22016-06-24 17:56:13 -0400477 {.id = SSPP_RGB1, .base = 0x00017000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400478 .features = RGB_17X_MASK, .sblk = &layer,
479 .xin_id = 5,
480 .clk_ctrl = SDE_CLK_CTRL_RGB1},
Abhijit Kulkarni3e3e0d22016-06-24 17:56:13 -0400481 {.id = SSPP_RGB2, .base = 0x00019000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400482 .features = RGB_17X_MASK, .sblk = &layer,
483 .xin_id = 9,
484 .clk_ctrl = SDE_CLK_CTRL_RGB2},
Abhijit Kulkarni3e3e0d22016-06-24 17:56:13 -0400485 {.id = SSPP_RGB3, .base = 0x0001B000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400486 .features = RGB_17X_MASK, .sblk = &layer,
487 .xin_id = 13,
488 .clk_ctrl = SDE_CLK_CTRL_RGB3},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700489
490 {.id = SSPP_DMA0, .base = 0x00025000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400491 .features = DMA_17X_MASK, .sblk = &dma,
492 .xin_id = 2,
493 .clk_ctrl = SDE_CLK_CTRL_DMA0},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700494 {.id = SSPP_DMA1, .base = 0x00027000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400495 .features = DMA_17X_MASK, .sblk = &dma,
496 .xin_id = 10,
497 .clk_ctrl = SDE_CLK_CTRL_DMA1},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700498
499 {.id = SSPP_CURSOR0, .base = 0x00035000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400500 .features = CURSOR_17X_MASK, .sblk = &cursor,
501 .xin_id = 7,
502 .clk_ctrl = SDE_CLK_CTRL_CURSOR0},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700503 {.id = SSPP_CURSOR1, .base = 0x00037000,
Alan Kwong5d324e42016-07-28 22:56:18 -0400504 .features = CURSOR_17X_MASK, .sblk = &cursor,
505 .xin_id = 7,
506 .clk_ctrl = SDE_CLK_CTRL_CURSOR1},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700507 },
508 .mixer_count = 6,
509 .mixer = {
510 {.id = LM_0, .base = 0x00045000,
511 .features = MIXER_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400512 .sblk = &lm,
513 .dspp = DSPP_0,
514 .pingpong = PINGPONG_0,
515 .lm_pair_mask = (1 << LM_1) },
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700516 {.id = LM_1, .base = 0x00046000,
517 .features = MIXER_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400518 .sblk = &lm,
519 .dspp = DSPP_1,
520 .pingpong = PINGPONG_1,
521 .lm_pair_mask = (1 << LM_0) },
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700522 {.id = LM_2, .base = 0x00047000,
523 .features = MIXER_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400524 .sblk = &lm,
525 .dspp = DSPP_MAX,
526 .pingpong = PINGPONG_2,
527 .lm_pair_mask = (1 << LM_5) },
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700528 {.id = LM_3, .base = 0x00048000,
529 .features = MIXER_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400530 .sblk = &lm,
531 .dspp = DSPP_MAX,
532 .pingpong = PINGPONG_MAX},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700533 {.id = LM_4, .base = 0x00049000,
534 .features = MIXER_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400535 .sblk = &lm,
536 .dspp = DSPP_MAX,
537 .pingpong = PINGPONG_MAX},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700538 {.id = LM_5, .base = 0x0004a000,
539 .features = MIXER_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400540 .sblk = &lm,
541 .dspp = DSPP_MAX,
542 .pingpong = PINGPONG_3,
543 .lm_pair_mask = (1 << LM_2) },
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700544 },
545 .dspp_count = 2,
546 .dspp = {
547 {.id = DSPP_0, .base = 0x00055000,
548 .features = DSPP_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400549 .sblk = &dspp},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700550 {.id = DSPP_1, .base = 0x00057000,
551 .features = DSPP_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400552 .sblk = &dspp},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700553 },
554 .pingpong_count = 4,
555 .pingpong = {
556 {.id = PINGPONG_0, .base = 0x00071000,
557 .features = PINGPONG_17X_SPLIT_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400558 .sblk = &pingpong},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700559 {.id = PINGPONG_1, .base = 0x00071800,
560 .features = PINGPONG_17X_SPLIT_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400561 .sblk = &pingpong},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700562 {.id = PINGPONG_2, .base = 0x00072000,
563 .features = PINGPONG_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400564 .sblk = &pingpong},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700565 {.id = PINGPONG_3, .base = 0x00072800,
566 .features = PINGPONG_17X_MASK,
Lloyd Atkinson350bb412016-07-06 10:47:29 -0400567 .sblk = &pingpong},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700568 },
569 .cdm_count = 1,
570 .cdm = {
571 {.id = CDM_0, .base = 0x0007A200, .features = 0,
Lloyd Atkinson6b3b9dd2016-08-10 18:45:31 -0400572 .intf_connect = BIT(INTF_3),
573 .wb_connect = BIT(WB_2),}
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700574 },
575 .intf_count = 4,
576 .intf = {
577 {.id = INTF_0, .base = 0x0006B000,
Lloyd Atkinsonf30546e2016-06-26 10:08:25 -0400578 .type = INTF_NONE, .controller_id = 0,
579 .prog_fetch_lines_worst_case = 21},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700580 {.id = INTF_1, .base = 0x0006B800,
Lloyd Atkinsonf30546e2016-06-26 10:08:25 -0400581 .type = INTF_DSI, .controller_id = 0,
582 .prog_fetch_lines_worst_case = 21},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700583 {.id = INTF_2, .base = 0x0006C000,
Lloyd Atkinsonf30546e2016-06-26 10:08:25 -0400584 .type = INTF_DSI, .controller_id = 1,
585 .prog_fetch_lines_worst_case = 21},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700586 {.id = INTF_3, .base = 0x0006C800,
Lloyd Atkinsonf30546e2016-06-26 10:08:25 -0400587 .type = INTF_HDMI, .controller_id = 0,
588 .prog_fetch_lines_worst_case = 21},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700589 },
590 .wb_count = 3,
591 .wb = {
592 {.id = WB_0, .base = 0x00065000,
Alan Kwongbb27c092016-07-20 16:41:25 -0400593 .features = WB01_17X_MASK,
594 .sblk = &wb0,
Alan Kwong5d324e42016-07-28 22:56:18 -0400595 .format_list = wb0_formats,
596 .vbif_idx = VBIF_NRT,
597 .xin_id = 3,
598 .clk_ctrl = SDE_CLK_CTRL_WB0},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700599 {.id = WB_1, .base = 0x00065800,
Alan Kwongbb27c092016-07-20 16:41:25 -0400600 .features = WB01_17X_MASK,
601 .sblk = &wb0,
Alan Kwong5d324e42016-07-28 22:56:18 -0400602 .format_list = wb0_formats,
603 .vbif_idx = VBIF_NRT,
604 .xin_id = 11,
605 .clk_ctrl = SDE_CLK_CTRL_WB1},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700606 {.id = WB_2, .base = 0x00066000,
Alan Kwongbb27c092016-07-20 16:41:25 -0400607 .features = WB2_17X_MASK,
608 .sblk = &wb2,
Alan Kwong5d324e42016-07-28 22:56:18 -0400609 .format_list = wb2_formats,
610 .vbif_idx = VBIF_NRT,
611 .xin_id = 6,
612 .clk_ctrl = SDE_CLK_CTRL_WB2},
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700613 },
Alan Kwong5d324e42016-07-28 22:56:18 -0400614 .vbif_count = 2,
615 .vbif = {
616 {.id = VBIF_0,
617 .base = 0, /* 0x000B0000 */
618 .features = BIT(SDE_VBIF_QOS_OTLIM),
619 .default_ot_rd_limit = 32,
620 .default_ot_wr_limit = 16,
621 .xin_halt_timeout = 0x4000,
622 .dynamic_ot_rd_tbl = {
623 .count = ARRAY_SIZE(dynamic_ot_cfg),
624 .cfg = dynamic_ot_cfg},
625 .dynamic_ot_wr_tbl = {
626 .count = ARRAY_SIZE(dynamic_ot_cfg),
627 .cfg = dynamic_ot_cfg},
628 },
629 {.id = VBIF_1,
630 .base = 0, /* 0x000B8000 */
631 .features = BIT(SDE_VBIF_QOS_OTLIM),
632 .default_ot_rd_limit = 32,
633 .default_ot_wr_limit = 16,
634 .xin_halt_timeout = 0x4000,
635 .dynamic_ot_rd_tbl = {
636 .count = ARRAY_SIZE(dynamic_ot_cfg),
637 .cfg = dynamic_ot_cfg},
638 .dynamic_ot_wr_tbl = {
639 .count = ARRAY_SIZE(dynamic_ot_cfg),
640 .cfg = dynamic_ot_cfg},
641 },
642 },
Narendra Muppalla1b0b3352015-09-29 10:16:51 -0700643 };
644 return 0;
645}
646
647/**
648 * sde_mdp_cfg_170_init(): Populate the sde sub-blocks catalog information
649 */
650struct sde_mdss_cfg *sde_mdss_cfg_170_init(u32 step)
651{
652 struct sde_mdss_cfg *m = NULL;
653
654 /*
655 * This function, for each sub-block sets,
656 * instance count, IO regions,
657 * default capabilities and this version capabilities,
658 * Additional catalog items
659 */
660
661 m = kzalloc(sizeof(*m), GFP_KERNEL);
662 if (!m)
663 return NULL;
664
665 set_cfg_1xx_init(m);
666 m->hwversion = SDE_HW_VER(1, 7, step);
667
668 return m;
669}