1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (C) 2015 - 2021 Intel Corporation
5 #include <linux/string.h>
8 #include "ipu-fw-psys.h"
9 #include "ipu6-platform-resources.h"
14 * Cell types by cell IDs
16 const u8 ipu6_fw_psys_cell_types
[IPU6_FW_PSYS_N_CELL_ID
] = {
17 IPU6_FW_PSYS_SP_CTRL_TYPE_ID
,
18 IPU6_FW_PSYS_VP_TYPE_ID
,
19 IPU6_FW_PSYS_ACC_PSA_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_OSA_TYPE_ID
,
24 IPU6_FW_PSYS_ACC_OSA_TYPE_ID
,
25 IPU6_FW_PSYS_ACC_OSA_TYPE_ID
,
26 IPU6_FW_PSYS_ACC_PSA_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_ISA_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
,
42 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
,
43 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
, /* X2B_MD */
44 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
, /* ICA_MEDIUM */
45 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
, /* X2B_SVE_RGBIR */
46 IPU6_FW_PSYS_ACC_ISA_TYPE_ID
, /* PAF */
47 IPU6_FW_PSYS_GDC_TYPE_ID
,
48 IPU6_FW_PSYS_TNR_TYPE_ID
,
51 const u16 ipu6_fw_num_dev_channels
[IPU6_FW_PSYS_N_DEV_CHN_ID
] = {
52 IPU6_FW_PSYS_DEV_CHN_DMA_EXT0_MAX_SIZE
,
53 IPU6_FW_PSYS_DEV_CHN_DMA_EXT1_READ_MAX_SIZE
,
54 IPU6_FW_PSYS_DEV_CHN_DMA_EXT1_WRITE_MAX_SIZE
,
55 IPU6_FW_PSYS_DEV_CHN_DMA_INTERNAL_MAX_SIZE
,
56 IPU6_FW_PSYS_DEV_CHN_DMA_ISA_MAX_SIZE
,
59 const u16 ipu6_fw_psys_mem_size
[IPU6_FW_PSYS_N_MEM_ID
] = {
60 IPU6_FW_PSYS_VMEM0_MAX_SIZE
,
61 IPU6_FW_PSYS_TRANSFER_VMEM0_MAX_SIZE
,
62 IPU6_FW_PSYS_TRANSFER_VMEM1_MAX_SIZE
,
63 IPU6_FW_PSYS_LB_VMEM_MAX_SIZE
,
64 IPU6_FW_PSYS_BAMEM0_MAX_SIZE
,
65 IPU6_FW_PSYS_DMEM0_MAX_SIZE
,
66 IPU6_FW_PSYS_DMEM1_MAX_SIZE
,
67 IPU6_FW_PSYS_DMEM2_MAX_SIZE
,
68 IPU6_FW_PSYS_DMEM3_MAX_SIZE
,
69 IPU6_FW_PSYS_PMEM0_MAX_SIZE
72 const u16 ipu6_fw_psys_dfms
[IPU6_FW_PSYS_N_DEV_DFM_ID
] = {
73 IPU6_FW_PSYS_DEV_DFM_BB_FULL_PORT_ID_MAX_SIZE
,
74 IPU6_FW_PSYS_DEV_DFM_BB_EMPTY_PORT_ID_MAX_SIZE
,
75 IPU6_FW_PSYS_DEV_DFM_ISL_FULL_PORT_ID_MAX_SIZE
,
76 IPU6_FW_PSYS_DEV_DFM_ISL_EMPTY_PORT_ID_MAX_SIZE
,
77 IPU6_FW_PSYS_DEV_DFM_LB_FULL_PORT_ID_MAX_SIZE
,
78 IPU6_FW_PSYS_DEV_DFM_LB_EMPTY_PORT_ID_MAX_SIZE
,
82 ipu6_fw_psys_c_mem
[IPU6_FW_PSYS_N_CELL_ID
][IPU6_FW_PSYS_N_MEM_TYPE_ID
] = {
84 /* IPU6_FW_PSYS_SP0_ID */
85 IPU6_FW_PSYS_N_MEM_ID
,
86 IPU6_FW_PSYS_N_MEM_ID
,
87 IPU6_FW_PSYS_N_MEM_ID
,
88 IPU6_FW_PSYS_DMEM0_ID
,
89 IPU6_FW_PSYS_N_MEM_ID
,
90 IPU6_FW_PSYS_N_MEM_ID
,
91 IPU6_FW_PSYS_N_MEM_ID
,
94 /* IPU6_FW_PSYS_SP1_ID */
95 IPU6_FW_PSYS_N_MEM_ID
,
96 IPU6_FW_PSYS_N_MEM_ID
,
97 IPU6_FW_PSYS_N_MEM_ID
,
98 IPU6_FW_PSYS_DMEM1_ID
,
99 IPU6_FW_PSYS_N_MEM_ID
,
100 IPU6_FW_PSYS_N_MEM_ID
,
101 IPU6_FW_PSYS_N_MEM_ID
,
104 /* IPU6_FW_PSYS_VP0_ID */
105 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
106 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
107 IPU6_FW_PSYS_LB_VMEM_ID
,
108 IPU6_FW_PSYS_DMEM3_ID
,
109 IPU6_FW_PSYS_VMEM0_ID
,
110 IPU6_FW_PSYS_BAMEM0_ID
,
111 IPU6_FW_PSYS_PMEM0_ID
,
114 /* IPU6_FW_PSYS_ACC1_ID BNLM */
115 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
116 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
117 IPU6_FW_PSYS_LB_VMEM_ID
,
118 IPU6_FW_PSYS_N_MEM_ID
,
119 IPU6_FW_PSYS_N_MEM_ID
,
120 IPU6_FW_PSYS_N_MEM_ID
,
121 IPU6_FW_PSYS_N_MEM_ID
,
124 /* IPU6_FW_PSYS_ACC2_ID DM */
125 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
126 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
127 IPU6_FW_PSYS_LB_VMEM_ID
,
128 IPU6_FW_PSYS_N_MEM_ID
,
129 IPU6_FW_PSYS_N_MEM_ID
,
130 IPU6_FW_PSYS_N_MEM_ID
,
131 IPU6_FW_PSYS_N_MEM_ID
,
134 /* IPU6_FW_PSYS_ACC3_ID ACM */
135 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
136 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
137 IPU6_FW_PSYS_LB_VMEM_ID
,
138 IPU6_FW_PSYS_N_MEM_ID
,
139 IPU6_FW_PSYS_N_MEM_ID
,
140 IPU6_FW_PSYS_N_MEM_ID
,
141 IPU6_FW_PSYS_N_MEM_ID
,
144 /* IPU6_FW_PSYS_ACC4_ID GTC YUV1 */
145 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
146 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
147 IPU6_FW_PSYS_LB_VMEM_ID
,
148 IPU6_FW_PSYS_N_MEM_ID
,
149 IPU6_FW_PSYS_N_MEM_ID
,
150 IPU6_FW_PSYS_N_MEM_ID
,
151 IPU6_FW_PSYS_N_MEM_ID
,
154 /* IPU6_FW_PSYS_ACC5_ID OFS pin main */
155 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
156 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
157 IPU6_FW_PSYS_N_MEM_ID
,
158 IPU6_FW_PSYS_N_MEM_ID
,
159 IPU6_FW_PSYS_N_MEM_ID
,
160 IPU6_FW_PSYS_N_MEM_ID
,
161 IPU6_FW_PSYS_N_MEM_ID
,
164 /* IPU6_FW_PSYS_ACC6_ID OFS pin display */
165 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
166 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
167 IPU6_FW_PSYS_N_MEM_ID
,
168 IPU6_FW_PSYS_N_MEM_ID
,
169 IPU6_FW_PSYS_N_MEM_ID
,
170 IPU6_FW_PSYS_N_MEM_ID
,
171 IPU6_FW_PSYS_N_MEM_ID
,
174 /* IPU6_FW_PSYS_ACC7_ID OFS pin pp */
175 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
176 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
177 IPU6_FW_PSYS_N_MEM_ID
,
178 IPU6_FW_PSYS_N_MEM_ID
,
179 IPU6_FW_PSYS_N_MEM_ID
,
180 IPU6_FW_PSYS_N_MEM_ID
,
181 IPU6_FW_PSYS_N_MEM_ID
,
184 /* IPU6_FW_PSYS_ACC8_ID GAMMASTAR */
185 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
186 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
187 IPU6_FW_PSYS_LB_VMEM_ID
,
188 IPU6_FW_PSYS_N_MEM_ID
,
189 IPU6_FW_PSYS_N_MEM_ID
,
190 IPU6_FW_PSYS_N_MEM_ID
,
191 IPU6_FW_PSYS_N_MEM_ID
,
194 /* IPU6_FW_PSYS_ACC9_ID GLTM */
195 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
196 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
197 IPU6_FW_PSYS_LB_VMEM_ID
,
198 IPU6_FW_PSYS_N_MEM_ID
,
199 IPU6_FW_PSYS_N_MEM_ID
,
200 IPU6_FW_PSYS_N_MEM_ID
,
201 IPU6_FW_PSYS_N_MEM_ID
,
204 /* IPU6_FW_PSYS_ACC10_ID XNR */
205 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
206 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
207 IPU6_FW_PSYS_LB_VMEM_ID
,
208 IPU6_FW_PSYS_N_MEM_ID
,
209 IPU6_FW_PSYS_N_MEM_ID
,
210 IPU6_FW_PSYS_N_MEM_ID
,
211 IPU6_FW_PSYS_N_MEM_ID
,
214 /* IPU6_FW_PSYS_ISA_ICA_ID */
215 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
216 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
217 IPU6_FW_PSYS_LB_VMEM_ID
,
218 IPU6_FW_PSYS_N_MEM_ID
,
219 IPU6_FW_PSYS_N_MEM_ID
,
220 IPU6_FW_PSYS_N_MEM_ID
,
221 IPU6_FW_PSYS_N_MEM_ID
,
224 /* IPU6_FW_PSYS_ISA_LSC_ID */
225 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
226 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
227 IPU6_FW_PSYS_LB_VMEM_ID
,
228 IPU6_FW_PSYS_N_MEM_ID
,
229 IPU6_FW_PSYS_N_MEM_ID
,
230 IPU6_FW_PSYS_N_MEM_ID
,
231 IPU6_FW_PSYS_N_MEM_ID
,
234 /* IPU6_FW_PSYS_ISA_DPC_ID */
235 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
236 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
237 IPU6_FW_PSYS_LB_VMEM_ID
,
238 IPU6_FW_PSYS_N_MEM_ID
,
239 IPU6_FW_PSYS_N_MEM_ID
,
240 IPU6_FW_PSYS_N_MEM_ID
,
241 IPU6_FW_PSYS_N_MEM_ID
,
244 /* IPU6_FW_PSYS_ISA_SIS_A_ID */
245 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
246 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
247 IPU6_FW_PSYS_LB_VMEM_ID
,
248 IPU6_FW_PSYS_N_MEM_ID
,
249 IPU6_FW_PSYS_N_MEM_ID
,
250 IPU6_FW_PSYS_N_MEM_ID
,
251 IPU6_FW_PSYS_N_MEM_ID
,
254 /* IPU6_FW_PSYS_ISA_SIS_B_ID */
255 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
256 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
257 IPU6_FW_PSYS_LB_VMEM_ID
,
258 IPU6_FW_PSYS_N_MEM_ID
,
259 IPU6_FW_PSYS_N_MEM_ID
,
260 IPU6_FW_PSYS_N_MEM_ID
,
261 IPU6_FW_PSYS_N_MEM_ID
,
264 /* IPU6_FW_PSYS_ISA_B2B_ID */
265 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
266 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
267 IPU6_FW_PSYS_LB_VMEM_ID
,
268 IPU6_FW_PSYS_N_MEM_ID
,
269 IPU6_FW_PSYS_N_MEM_ID
,
270 IPU6_FW_PSYS_N_MEM_ID
,
271 IPU6_FW_PSYS_N_MEM_ID
,
274 /* IPU6_FW_PSYS_ISA_B2R_ID and ISA_R2I_SIE */
275 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
276 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
277 IPU6_FW_PSYS_LB_VMEM_ID
,
278 IPU6_FW_PSYS_N_MEM_ID
,
279 IPU6_FW_PSYS_N_MEM_ID
,
280 IPU6_FW_PSYS_N_MEM_ID
,
281 IPU6_FW_PSYS_N_MEM_ID
,
284 /* IPU6_FW_PSYS_ISA_R2I_DS_A_ID */
285 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
286 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
287 IPU6_FW_PSYS_LB_VMEM_ID
,
288 IPU6_FW_PSYS_N_MEM_ID
,
289 IPU6_FW_PSYS_N_MEM_ID
,
290 IPU6_FW_PSYS_N_MEM_ID
,
291 IPU6_FW_PSYS_N_MEM_ID
,
294 /* IPU6_FW_PSYS_ISA_R2I_DS_B_ID */
295 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
296 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
297 IPU6_FW_PSYS_LB_VMEM_ID
,
298 IPU6_FW_PSYS_N_MEM_ID
,
299 IPU6_FW_PSYS_N_MEM_ID
,
300 IPU6_FW_PSYS_N_MEM_ID
,
301 IPU6_FW_PSYS_N_MEM_ID
,
304 /* IPU6_FW_PSYS_ISA_AWB_ID */
305 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
306 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
307 IPU6_FW_PSYS_LB_VMEM_ID
,
308 IPU6_FW_PSYS_N_MEM_ID
,
309 IPU6_FW_PSYS_N_MEM_ID
,
310 IPU6_FW_PSYS_N_MEM_ID
,
311 IPU6_FW_PSYS_N_MEM_ID
,
314 /* IPU6_FW_PSYS_ISA_AE_ID */
315 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
316 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
317 IPU6_FW_PSYS_LB_VMEM_ID
,
318 IPU6_FW_PSYS_N_MEM_ID
,
319 IPU6_FW_PSYS_N_MEM_ID
,
320 IPU6_FW_PSYS_N_MEM_ID
,
321 IPU6_FW_PSYS_N_MEM_ID
,
324 /* IPU6_FW_PSYS_ISA_AF_ID */
325 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
326 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
327 IPU6_FW_PSYS_LB_VMEM_ID
,
328 IPU6_FW_PSYS_N_MEM_ID
,
329 IPU6_FW_PSYS_N_MEM_ID
,
330 IPU6_FW_PSYS_N_MEM_ID
,
331 IPU6_FW_PSYS_N_MEM_ID
,
334 /* IPU6_FW_PSYS_ISA_DOL_ID */
335 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
336 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
337 IPU6_FW_PSYS_LB_VMEM_ID
,
338 IPU6_FW_PSYS_N_MEM_ID
,
339 IPU6_FW_PSYS_N_MEM_ID
,
340 IPU6_FW_PSYS_N_MEM_ID
,
341 IPU6_FW_PSYS_N_MEM_ID
,
344 /* IPU6_FW_PSYS_ISA_X2B_MD_ID */
345 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
346 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
347 IPU6_FW_PSYS_LB_VMEM_ID
,
348 IPU6_FW_PSYS_N_MEM_ID
,
349 IPU6_FW_PSYS_N_MEM_ID
,
350 IPU6_FW_PSYS_N_MEM_ID
,
351 IPU6_FW_PSYS_N_MEM_ID
,
354 /* IPU6_FW_PSYS_ISA_ICA_MEDIUM_ID */
355 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
356 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
357 IPU6_FW_PSYS_LB_VMEM_ID
,
358 IPU6_FW_PSYS_N_MEM_ID
,
359 IPU6_FW_PSYS_N_MEM_ID
,
360 IPU6_FW_PSYS_N_MEM_ID
,
361 IPU6_FW_PSYS_N_MEM_ID
,
364 /* IPU6_FW_PSYS_ISA_X2B_SVE_RGBIR_ID */
365 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
366 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
367 IPU6_FW_PSYS_LB_VMEM_ID
,
368 IPU6_FW_PSYS_N_MEM_ID
,
369 IPU6_FW_PSYS_N_MEM_ID
,
370 IPU6_FW_PSYS_N_MEM_ID
,
371 IPU6_FW_PSYS_N_MEM_ID
,
374 /* IPU6_FW_PSYS_ISA_PAF_ID */
375 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
376 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
377 IPU6_FW_PSYS_LB_VMEM_ID
,
378 IPU6_FW_PSYS_N_MEM_ID
,
379 IPU6_FW_PSYS_N_MEM_ID
,
380 IPU6_FW_PSYS_N_MEM_ID
,
381 IPU6_FW_PSYS_N_MEM_ID
,
384 /* IPU6_FW_PSYS_BB_ACC_GDC0_ID */
385 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
386 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
387 IPU6_FW_PSYS_N_MEM_ID
,
388 IPU6_FW_PSYS_N_MEM_ID
,
389 IPU6_FW_PSYS_N_MEM_ID
,
390 IPU6_FW_PSYS_N_MEM_ID
,
391 IPU6_FW_PSYS_N_MEM_ID
,
394 /* IPU6_FW_PSYS_BB_ACC_TNR_ID */
395 IPU6_FW_PSYS_TRANSFER_VMEM0_ID
,
396 IPU6_FW_PSYS_TRANSFER_VMEM1_ID
,
397 IPU6_FW_PSYS_N_MEM_ID
,
398 IPU6_FW_PSYS_N_MEM_ID
,
399 IPU6_FW_PSYS_N_MEM_ID
,
400 IPU6_FW_PSYS_N_MEM_ID
,
401 IPU6_FW_PSYS_N_MEM_ID
,
405 static const struct ipu_fw_resource_definitions ipu6_defs
= {
406 .cells
= ipu6_fw_psys_cell_types
,
407 .num_cells
= IPU6_FW_PSYS_N_CELL_ID
,
408 .num_cells_type
= IPU6_FW_PSYS_N_CELL_TYPE_ID
,
410 .dev_channels
= ipu6_fw_num_dev_channels
,
411 .num_dev_channels
= IPU6_FW_PSYS_N_DEV_CHN_ID
,
413 .num_ext_mem_types
= IPU6_FW_PSYS_N_DATA_MEM_TYPE_ID
,
414 .num_ext_mem_ids
= IPU6_FW_PSYS_N_MEM_ID
,
415 .ext_mem_ids
= ipu6_fw_psys_mem_size
,
417 .num_dfm_ids
= IPU6_FW_PSYS_N_DEV_DFM_ID
,
419 .dfms
= ipu6_fw_psys_dfms
,
421 .cell_mem_row
= IPU6_FW_PSYS_N_MEM_TYPE_ID
,
422 .cell_mem
= &ipu6_fw_psys_c_mem
[0][0],
425 const struct ipu_fw_resource_definitions
*ipu6_res_defs
= &ipu6_defs
;
427 /********** Generic resource handling **********/
429 int ipu6_fw_psys_set_proc_dev_chn(struct ipu_fw_psys_process
*ptr
, u16 offset
,
432 struct ipu6_fw_psys_process_ext
*pm_ext
;
435 ps_ext_offset
= ptr
->process_extension_offset
;
439 pm_ext
= (struct ipu6_fw_psys_process_ext
*)((u8
*)ptr
+ ps_ext_offset
);
441 pm_ext
->dev_chn_offset
[offset
] = value
;
446 int ipu6_fw_psys_set_proc_dfm_bitmap(struct ipu_fw_psys_process
*ptr
,
450 struct ipu6_fw_psys_process_ext
*pm_ext
;
453 ps_ext_offset
= ptr
->process_extension_offset
;
457 pm_ext
= (struct ipu6_fw_psys_process_ext
*)((u8
*)ptr
+ ps_ext_offset
);
459 pm_ext
->dfm_port_bitmap
[id
] = bitmap
;
460 pm_ext
->dfm_active_port_bitmap
[id
] = active_bitmap
;
465 int ipu6_fw_psys_set_process_ext_mem(struct ipu_fw_psys_process
*ptr
,
466 u16 type_id
, u16 mem_id
, u16 offset
)
468 struct ipu6_fw_psys_process_ext
*pm_ext
;
471 ps_ext_offset
= ptr
->process_extension_offset
;
475 pm_ext
= (struct ipu6_fw_psys_process_ext
*)((u8
*)ptr
+ ps_ext_offset
);
477 pm_ext
->ext_mem_offset
[type_id
] = offset
;
478 pm_ext
->ext_mem_id
[type_id
] = mem_id
;
483 static struct ipu_fw_psys_program_manifest
*
484 get_program_manifest(const struct ipu_fw_psys_program_group_manifest
*manifest
,
485 const unsigned int program_index
)
487 struct ipu_fw_psys_program_manifest
*prg_manifest_base
;
488 u8
*program_manifest
= NULL
;
492 program_count
= manifest
->program_count
;
494 prg_manifest_base
= (struct ipu_fw_psys_program_manifest
*)
495 ((char *)manifest
+ manifest
->program_manifest_offset
);
496 if (program_index
< program_count
) {
497 program_manifest
= (u8
*)prg_manifest_base
;
498 for (i
= 0; i
< program_index
; i
++)
500 ((struct ipu_fw_psys_program_manifest
*)
501 program_manifest
)->size
;
504 return (struct ipu_fw_psys_program_manifest
*)program_manifest
;
507 int ipu6_fw_psys_get_program_manifest_by_process(
508 struct ipu_fw_generic_program_manifest
*gen_pm
,
509 const struct ipu_fw_psys_program_group_manifest
*pg_manifest
,
510 struct ipu_fw_psys_process
*process
)
512 u32 program_id
= process
->program_idx
;
513 struct ipu_fw_psys_program_manifest
*pm
;
514 struct ipu6_fw_psys_program_manifest_ext
*pm_ext
;
516 pm
= get_program_manifest(pg_manifest
, program_id
);
521 if (pm
->program_extension_offset
) {
522 pm_ext
= (struct ipu6_fw_psys_program_manifest_ext
*)
523 ((u8
*)pm
+ pm
->program_extension_offset
);
525 gen_pm
->dev_chn_size
= pm_ext
->dev_chn_size
;
526 gen_pm
->dev_chn_offset
= pm_ext
->dev_chn_offset
;
527 gen_pm
->ext_mem_size
= pm_ext
->ext_mem_size
;
528 gen_pm
->ext_mem_offset
= (u16
*)pm_ext
->ext_mem_offset
;
529 gen_pm
->is_dfm_relocatable
= pm_ext
->is_dfm_relocatable
;
530 gen_pm
->dfm_port_bitmap
= pm_ext
->dfm_port_bitmap
;
531 gen_pm
->dfm_active_port_bitmap
=
532 pm_ext
->dfm_active_port_bitmap
;
535 memcpy(gen_pm
->cells
, pm
->cells
, sizeof(pm
->cells
));
536 gen_pm
->cell_id
= pm
->cells
[0];
537 gen_pm
->cell_type_id
= pm
->cell_type_id
;
542 void ipu6_fw_psys_pg_dump(struct ipu_psys
*psys
,
543 struct ipu_psys_kcmd
*kcmd
, const char *note
)
545 struct ipu_fw_psys_process_group
*pg
= kcmd
->kpg
->pg
;
547 u8 processes
= pg
->process_count
;
548 u16
*process_offset_table
= (u16
*)((char *)pg
+ pg
->processes_offset
);
549 unsigned int p
, chn
, mem
, mem_id
;
550 unsigned int mem_type
, max_mem_id
, dev_chn
;
552 if (ipu_ver
== IPU_VER_6SE
) {
553 mem_type
= IPU6SE_FW_PSYS_N_DATA_MEM_TYPE_ID
;
554 max_mem_id
= IPU6SE_FW_PSYS_N_MEM_ID
;
555 dev_chn
= IPU6SE_FW_PSYS_N_DEV_CHN_ID
;
556 } else if (ipu_ver
== IPU_VER_6
|| ipu_ver
== IPU_VER_6EP
) {
557 mem_type
= IPU6_FW_PSYS_N_DATA_MEM_TYPE_ID
;
558 max_mem_id
= IPU6_FW_PSYS_N_MEM_ID
;
559 dev_chn
= IPU6_FW_PSYS_N_DEV_CHN_ID
;
561 WARN(1, "%s ipu_ver:[%u] is unsupported!\n", __func__
, ipu_ver
);
565 dev_dbg(&psys
->adev
->dev
, "%s %s pgid %i has %i processes:\n",
566 __func__
, note
, pgid
, processes
);
568 for (p
= 0; p
< processes
; p
++) {
569 struct ipu_fw_psys_process
*process
=
570 (struct ipu_fw_psys_process
*)
571 ((char *)pg
+ process_offset_table
[p
]);
572 struct ipu6_fw_psys_process_ext
*pm_ext
=
573 (struct ipu6_fw_psys_process_ext
*)((u8
*)process
574 + process
->process_extension_offset
);
575 dev_dbg(&psys
->adev
->dev
, "\t process %i size=%u",
577 if (!process
->process_extension_offset
)
580 for (mem
= 0; mem
< mem_type
; mem
++) {
581 mem_id
= pm_ext
->ext_mem_id
[mem
];
582 if (mem_id
!= max_mem_id
)
583 dev_dbg(&psys
->adev
->dev
,
584 "\t mem type %u id %d offset=0x%x",
586 pm_ext
->ext_mem_offset
[mem
]);
588 for (chn
= 0; chn
< dev_chn
; chn
++) {
589 if (pm_ext
->dev_chn_offset
[chn
] != (u16
)(-1))
590 dev_dbg(&psys
->adev
->dev
,
591 "\t dev_chn[%u]=0x%x\n",
592 chn
, pm_ext
->dev_chn_offset
[chn
]);