1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (C) 2020 Intel Corporation
5 #include <linux/string.h>
8 #include "ipu-fw-psys.h"
9 #include "ipu6-platform-resources.h"
10 #include "ipu6ep-platform-resources.h"
15 * Cell types by cell IDs
17 const u8 ipu6ep_fw_psys_cell_types
[IPU6EP_FW_PSYS_N_CELL_ID
] = {
18 IPU6_FW_PSYS_SP_CTRL_TYPE_ID
,
19 IPU6_FW_PSYS_VP_TYPE_ID
,
20 IPU6_FW_PSYS_ACC_PSA_TYPE_ID
,
21 IPU6_FW_PSYS_ACC_PSA_TYPE_ID
,
22 IPU6_FW_PSYS_ACC_PSA_TYPE_ID
,
23 IPU6_FW_PSYS_ACC_PSA_TYPE_ID
,
24 IPU6_FW_PSYS_ACC_OSA_TYPE_ID
,
25 IPU6_FW_PSYS_ACC_OSA_TYPE_ID
,
26 IPU6_FW_PSYS_ACC_OSA_TYPE_ID
,
27 IPU6_FW_PSYS_ACC_PSA_TYPE_ID
,
28 IPU6_FW_PSYS_ACC_PSA_TYPE_ID
,
29 IPU6_FW_PSYS_ACC_PSA_TYPE_ID
,
30 IPU6_FW_PSYS_ACC_PSA_TYPE_ID
,
31 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
32 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
33 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
34 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
35 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
36 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
37 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
38 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
39 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
40 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
41 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
, /* AF */
42 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
, /* X2B_MD */
43 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
, /* X2B_SVE_RGBIR */
44 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
, /* PAF */
45 IPU6_FW_PSYS_GDC_TYPE_ID
,
46 IPU6_FW_PSYS_TNR_TYPE_ID
,
49 const u16 ipu6ep_fw_num_dev_channels
[IPU6_FW_PSYS_N_DEV_CHN_ID
] = {
50 IPU6_FW_PSYS_DEV_CHN_DMA_EXT0_MAX_SIZE
,
51 IPU6_FW_PSYS_DEV_CHN_DMA_EXT1_READ_MAX_SIZE
,
52 IPU6_FW_PSYS_DEV_CHN_DMA_EXT1_WRITE_MAX_SIZE
,
53 IPU6_FW_PSYS_DEV_CHN_DMA_INTERNAL_MAX_SIZE
,
54 IPU6_FW_PSYS_DEV_CHN_DMA_ISA_MAX_SIZE
,
57 const u16 ipu6ep_fw_psys_mem_size
[IPU6_FW_PSYS_N_MEM_ID
] = {
58 IPU6_FW_PSYS_VMEM0_MAX_SIZE
,
59 IPU6_FW_PSYS_TRANSFER_VMEM0_MAX_SIZE
,
60 IPU6_FW_PSYS_TRANSFER_VMEM1_MAX_SIZE
,
61 IPU6_FW_PSYS_LB_VMEM_MAX_SIZE
,
62 IPU6_FW_PSYS_BAMEM0_MAX_SIZE
,
63 IPU6_FW_PSYS_DMEM0_MAX_SIZE
,
64 IPU6_FW_PSYS_DMEM1_MAX_SIZE
,
65 IPU6_FW_PSYS_DMEM2_MAX_SIZE
,
66 IPU6_FW_PSYS_DMEM3_MAX_SIZE
,
67 IPU6_FW_PSYS_PMEM0_MAX_SIZE
70 const u16 ipu6ep_fw_psys_dfms
[IPU6_FW_PSYS_N_DEV_DFM_ID
] = {
71 IPU6_FW_PSYS_DEV_DFM_BB_FULL_PORT_ID_MAX_SIZE
,
72 IPU6_FW_PSYS_DEV_DFM_BB_EMPTY_PORT_ID_MAX_SIZE
,
73 IPU6_FW_PSYS_DEV_DFM_ISL_FULL_PORT_ID_MAX_SIZE
,
74 IPU6_FW_PSYS_DEV_DFM_ISL_EMPTY_PORT_ID_MAX_SIZE
,
75 IPU6_FW_PSYS_DEV_DFM_LB_FULL_PORT_ID_MAX_SIZE
,
76 IPU6_FW_PSYS_DEV_DFM_LB_EMPTY_PORT_ID_MAX_SIZE
,
80 ipu6ep_fw_psys_c_mem
[IPU6EP_FW_PSYS_N_CELL_ID
][IPU6_FW_PSYS_N_MEM_TYPE_ID
] = {
82 /* IPU6_FW_PSYS_SP0_ID */
83 IPU6_FW_PSYS_N_MEM_ID
,
84 IPU6_FW_PSYS_N_MEM_ID
,
85 IPU6_FW_PSYS_N_MEM_ID
,
86 IPU6_FW_PSYS_DMEM0_ID
,
87 IPU6_FW_PSYS_N_MEM_ID
,
88 IPU6_FW_PSYS_N_MEM_ID
,
89 IPU6_FW_PSYS_N_MEM_ID
,
92 /* IPU6_FW_PSYS_SP1_ID */
93 IPU6_FW_PSYS_N_MEM_ID
,
94 IPU6_FW_PSYS_N_MEM_ID
,
95 IPU6_FW_PSYS_N_MEM_ID
,
96 IPU6_FW_PSYS_DMEM1_ID
,
97 IPU6_FW_PSYS_N_MEM_ID
,
98 IPU6_FW_PSYS_N_MEM_ID
,
99 IPU6_FW_PSYS_N_MEM_ID
,
102 /* IPU6_FW_PSYS_VP0_ID */
103 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
104 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
105 IPU6_FW_PSYS_LB_VMEM_ID
,
106 IPU6_FW_PSYS_DMEM3_ID
,
107 IPU6_FW_PSYS_VMEM0_ID
,
108 IPU6_FW_PSYS_BAMEM0_ID
,
109 IPU6_FW_PSYS_PMEM0_ID
,
112 /* IPU6_FW_PSYS_ACC1_ID BNLM */
113 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
114 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
115 IPU6_FW_PSYS_LB_VMEM_ID
,
116 IPU6_FW_PSYS_N_MEM_ID
,
117 IPU6_FW_PSYS_N_MEM_ID
,
118 IPU6_FW_PSYS_N_MEM_ID
,
119 IPU6_FW_PSYS_N_MEM_ID
,
122 /* IPU6_FW_PSYS_ACC2_ID DM */
123 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
124 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
125 IPU6_FW_PSYS_LB_VMEM_ID
,
126 IPU6_FW_PSYS_N_MEM_ID
,
127 IPU6_FW_PSYS_N_MEM_ID
,
128 IPU6_FW_PSYS_N_MEM_ID
,
129 IPU6_FW_PSYS_N_MEM_ID
,
132 /* IPU6_FW_PSYS_ACC3_ID ACM */
133 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
134 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
135 IPU6_FW_PSYS_LB_VMEM_ID
,
136 IPU6_FW_PSYS_N_MEM_ID
,
137 IPU6_FW_PSYS_N_MEM_ID
,
138 IPU6_FW_PSYS_N_MEM_ID
,
139 IPU6_FW_PSYS_N_MEM_ID
,
142 /* IPU6_FW_PSYS_ACC4_ID GTC YUV1 */
143 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
144 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
145 IPU6_FW_PSYS_LB_VMEM_ID
,
146 IPU6_FW_PSYS_N_MEM_ID
,
147 IPU6_FW_PSYS_N_MEM_ID
,
148 IPU6_FW_PSYS_N_MEM_ID
,
149 IPU6_FW_PSYS_N_MEM_ID
,
152 /* IPU6_FW_PSYS_ACC5_ID OFS pin main */
153 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
154 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
155 IPU6_FW_PSYS_N_MEM_ID
,
156 IPU6_FW_PSYS_N_MEM_ID
,
157 IPU6_FW_PSYS_N_MEM_ID
,
158 IPU6_FW_PSYS_N_MEM_ID
,
159 IPU6_FW_PSYS_N_MEM_ID
,
162 /* IPU6_FW_PSYS_ACC6_ID OFS pin display */
163 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
164 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
165 IPU6_FW_PSYS_N_MEM_ID
,
166 IPU6_FW_PSYS_N_MEM_ID
,
167 IPU6_FW_PSYS_N_MEM_ID
,
168 IPU6_FW_PSYS_N_MEM_ID
,
169 IPU6_FW_PSYS_N_MEM_ID
,
172 /* IPU6_FW_PSYS_ACC7_ID OFS pin pp */
173 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
174 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
175 IPU6_FW_PSYS_N_MEM_ID
,
176 IPU6_FW_PSYS_N_MEM_ID
,
177 IPU6_FW_PSYS_N_MEM_ID
,
178 IPU6_FW_PSYS_N_MEM_ID
,
179 IPU6_FW_PSYS_N_MEM_ID
,
182 /* IPU6_FW_PSYS_ACC8_ID GAMMASTAR */
183 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
184 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
185 IPU6_FW_PSYS_LB_VMEM_ID
,
186 IPU6_FW_PSYS_N_MEM_ID
,
187 IPU6_FW_PSYS_N_MEM_ID
,
188 IPU6_FW_PSYS_N_MEM_ID
,
189 IPU6_FW_PSYS_N_MEM_ID
,
192 /* IPU6_FW_PSYS_ACC9_ID GLTM */
193 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
194 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
195 IPU6_FW_PSYS_LB_VMEM_ID
,
196 IPU6_FW_PSYS_N_MEM_ID
,
197 IPU6_FW_PSYS_N_MEM_ID
,
198 IPU6_FW_PSYS_N_MEM_ID
,
199 IPU6_FW_PSYS_N_MEM_ID
,
202 /* IPU6_FW_PSYS_ACC10_ID XNR */
203 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
204 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
205 IPU6_FW_PSYS_LB_VMEM_ID
,
206 IPU6_FW_PSYS_N_MEM_ID
,
207 IPU6_FW_PSYS_N_MEM_ID
,
208 IPU6_FW_PSYS_N_MEM_ID
,
209 IPU6_FW_PSYS_N_MEM_ID
,
212 /* IPU6_FW_PSYS_ISA_ICA_ID */
213 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
214 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
215 IPU6_FW_PSYS_LB_VMEM_ID
,
216 IPU6_FW_PSYS_N_MEM_ID
,
217 IPU6_FW_PSYS_N_MEM_ID
,
218 IPU6_FW_PSYS_N_MEM_ID
,
219 IPU6_FW_PSYS_N_MEM_ID
,
222 /* IPU6_FW_PSYS_ISA_LSC_ID */
223 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
224 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
225 IPU6_FW_PSYS_LB_VMEM_ID
,
226 IPU6_FW_PSYS_N_MEM_ID
,
227 IPU6_FW_PSYS_N_MEM_ID
,
228 IPU6_FW_PSYS_N_MEM_ID
,
229 IPU6_FW_PSYS_N_MEM_ID
,
232 /* IPU6_FW_PSYS_ISA_DPC_ID */
233 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
234 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
235 IPU6_FW_PSYS_LB_VMEM_ID
,
236 IPU6_FW_PSYS_N_MEM_ID
,
237 IPU6_FW_PSYS_N_MEM_ID
,
238 IPU6_FW_PSYS_N_MEM_ID
,
239 IPU6_FW_PSYS_N_MEM_ID
,
242 /* IPU6_FW_PSYS_ISA_SIS_A_ID */
243 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
244 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
245 IPU6_FW_PSYS_LB_VMEM_ID
,
246 IPU6_FW_PSYS_N_MEM_ID
,
247 IPU6_FW_PSYS_N_MEM_ID
,
248 IPU6_FW_PSYS_N_MEM_ID
,
249 IPU6_FW_PSYS_N_MEM_ID
,
252 /* IPU6_FW_PSYS_ISA_SIS_B_ID */
253 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
254 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
255 IPU6_FW_PSYS_LB_VMEM_ID
,
256 IPU6_FW_PSYS_N_MEM_ID
,
257 IPU6_FW_PSYS_N_MEM_ID
,
258 IPU6_FW_PSYS_N_MEM_ID
,
259 IPU6_FW_PSYS_N_MEM_ID
,
262 /* IPU6_FW_PSYS_ISA_B2B_ID */
263 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
264 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
265 IPU6_FW_PSYS_LB_VMEM_ID
,
266 IPU6_FW_PSYS_N_MEM_ID
,
267 IPU6_FW_PSYS_N_MEM_ID
,
268 IPU6_FW_PSYS_N_MEM_ID
,
269 IPU6_FW_PSYS_N_MEM_ID
,
272 /* IPU6_FW_PSYS_ISA_B2R_ID and ISA_R2I_SIE */
273 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
274 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
275 IPU6_FW_PSYS_LB_VMEM_ID
,
276 IPU6_FW_PSYS_N_MEM_ID
,
277 IPU6_FW_PSYS_N_MEM_ID
,
278 IPU6_FW_PSYS_N_MEM_ID
,
279 IPU6_FW_PSYS_N_MEM_ID
,
282 /* IPU6_FW_PSYS_ISA_R2I_DS_A_ID */
283 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
284 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
285 IPU6_FW_PSYS_LB_VMEM_ID
,
286 IPU6_FW_PSYS_N_MEM_ID
,
287 IPU6_FW_PSYS_N_MEM_ID
,
288 IPU6_FW_PSYS_N_MEM_ID
,
289 IPU6_FW_PSYS_N_MEM_ID
,
292 /* IPU6_FW_PSYS_ISA_AWB_ID */
293 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
294 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
295 IPU6_FW_PSYS_LB_VMEM_ID
,
296 IPU6_FW_PSYS_N_MEM_ID
,
297 IPU6_FW_PSYS_N_MEM_ID
,
298 IPU6_FW_PSYS_N_MEM_ID
,
299 IPU6_FW_PSYS_N_MEM_ID
,
302 /* IPU6_FW_PSYS_ISA_AE_ID */
303 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
304 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
305 IPU6_FW_PSYS_LB_VMEM_ID
,
306 IPU6_FW_PSYS_N_MEM_ID
,
307 IPU6_FW_PSYS_N_MEM_ID
,
308 IPU6_FW_PSYS_N_MEM_ID
,
309 IPU6_FW_PSYS_N_MEM_ID
,
312 /* IPU6_FW_PSYS_ISA_AF_ID */
313 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
314 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
315 IPU6_FW_PSYS_LB_VMEM_ID
,
316 IPU6_FW_PSYS_N_MEM_ID
,
317 IPU6_FW_PSYS_N_MEM_ID
,
318 IPU6_FW_PSYS_N_MEM_ID
,
319 IPU6_FW_PSYS_N_MEM_ID
,
322 /* IPU6_FW_PSYS_ISA_X2B_MD_ID */
323 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
324 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
325 IPU6_FW_PSYS_LB_VMEM_ID
,
326 IPU6_FW_PSYS_N_MEM_ID
,
327 IPU6_FW_PSYS_N_MEM_ID
,
328 IPU6_FW_PSYS_N_MEM_ID
,
329 IPU6_FW_PSYS_N_MEM_ID
,
332 /* IPU6_FW_PSYS_ISA_X2B_SVE_RGBIR_ID */
333 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
334 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
335 IPU6_FW_PSYS_LB_VMEM_ID
,
336 IPU6_FW_PSYS_N_MEM_ID
,
337 IPU6_FW_PSYS_N_MEM_ID
,
338 IPU6_FW_PSYS_N_MEM_ID
,
339 IPU6_FW_PSYS_N_MEM_ID
,
342 /* IPU6_FW_PSYS_ISA_PAF_ID */
343 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
344 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
345 IPU6_FW_PSYS_LB_VMEM_ID
,
346 IPU6_FW_PSYS_N_MEM_ID
,
347 IPU6_FW_PSYS_N_MEM_ID
,
348 IPU6_FW_PSYS_N_MEM_ID
,
349 IPU6_FW_PSYS_N_MEM_ID
,
352 /* IPU6_FW_PSYS_BB_ACC_GDC0_ID */
353 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
354 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
355 IPU6_FW_PSYS_N_MEM_ID
,
356 IPU6_FW_PSYS_N_MEM_ID
,
357 IPU6_FW_PSYS_N_MEM_ID
,
358 IPU6_FW_PSYS_N_MEM_ID
,
359 IPU6_FW_PSYS_N_MEM_ID
,
362 /* IPU6_FW_PSYS_BB_ACC_TNR_ID */
363 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
364 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
365 IPU6_FW_PSYS_N_MEM_ID
,
366 IPU6_FW_PSYS_N_MEM_ID
,
367 IPU6_FW_PSYS_N_MEM_ID
,
368 IPU6_FW_PSYS_N_MEM_ID
,
369 IPU6_FW_PSYS_N_MEM_ID
,
373 static const struct ipu_fw_resource_definitions ipu6ep_defs
= {
374 .cells
= ipu6ep_fw_psys_cell_types
,
375 .num_cells
= IPU6EP_FW_PSYS_N_CELL_ID
,
376 .num_cells_type
= IPU6_FW_PSYS_N_CELL_TYPE_ID
,
378 .dev_channels
= ipu6ep_fw_num_dev_channels
,
379 .num_dev_channels
= IPU6_FW_PSYS_N_DEV_CHN_ID
,
381 .num_ext_mem_types
= IPU6_FW_PSYS_N_DATA_MEM_TYPE_ID
,
382 .num_ext_mem_ids
= IPU6_FW_PSYS_N_MEM_ID
,
383 .ext_mem_ids
= ipu6ep_fw_psys_mem_size
,
385 .num_dfm_ids
= IPU6_FW_PSYS_N_DEV_DFM_ID
,
387 .dfms
= ipu6ep_fw_psys_dfms
,
389 .cell_mem_row
= IPU6_FW_PSYS_N_MEM_TYPE_ID
,
390 .cell_mem
= &ipu6ep_fw_psys_c_mem
[0][0],
393 const struct ipu_fw_resource_definitions
*ipu6ep_res_defs
= &ipu6ep_defs
;