]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - drivers/media/pci/intel/ipu6/ipu6ep-fw-resources.c
ca2ab3967e5c099356d6219aa165506f6a28f617
[mirror_ubuntu-jammy-kernel.git] / drivers / media / pci / intel / ipu6 / ipu6ep-fw-resources.c
1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (C) 2020 Intel Corporation
3
4 #include <linux/err.h>
5 #include <linux/string.h>
6
7 #include "ipu-psys.h"
8 #include "ipu-fw-psys.h"
9 #include "ipu6-platform-resources.h"
10 #include "ipu6ep-platform-resources.h"
11
12 /* resources table */
13
14 /*
15 * Cell types by cell IDs
16 */
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,
47 };
48
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,
55 };
56
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
68 };
69
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,
77 };
78
79 const u8
80 ipu6ep_fw_psys_c_mem[IPU6EP_FW_PSYS_N_CELL_ID][IPU6_FW_PSYS_N_MEM_TYPE_ID] = {
81 {
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,
90 },
91 {
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,
100 },
101 {
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,
110 },
111 {
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,
120 },
121 {
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,
130 },
131 {
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,
140 },
141 {
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,
150 },
151 {
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,
160 },
161 {
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,
170 },
171 {
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,
180 },
181 {
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,
190 },
191 {
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,
200 },
201 {
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,
210 },
211 {
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,
220 },
221 {
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,
230 },
231 {
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,
240 },
241 {
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,
250 },
251 {
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,
260 },
261 {
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,
270 },
271 {
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,
280 },
281 {
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,
290 },
291 {
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,
300 },
301 {
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,
310 },
311 {
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,
320 },
321 {
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,
330 },
331 {
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,
340 },
341 {
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,
350 },
351 {
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,
360 },
361 {
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,
370 }
371 };
372
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,
377
378 .dev_channels = ipu6ep_fw_num_dev_channels,
379 .num_dev_channels = IPU6_FW_PSYS_N_DEV_CHN_ID,
380
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,
384
385 .num_dfm_ids = IPU6_FW_PSYS_N_DEV_DFM_ID,
386
387 .dfms = ipu6ep_fw_psys_dfms,
388
389 .cell_mem_row = IPU6_FW_PSYS_N_MEM_TYPE_ID,
390 .cell_mem = &ipu6ep_fw_psys_c_mem[0][0],
391 };
392
393 const struct ipu_fw_resource_definitions *ipu6ep_res_defs = &ipu6ep_defs;