1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2010-2011 Freescale Semiconductor, Inc.
4 * Author: Dipen Dudhat <dipen.dudhat@freescale.com>
11 struct ifc_regs ifc_cfg_default_boot[CONFIG_SYS_FSL_IFC_BANK_COUNT] = {
14 #if defined(CONFIG_SYS_CSPR0) && defined(CONFIG_SYS_CSOR0)
16 #ifdef CONFIG_SYS_CSPR0_EXT
21 #ifdef CONFIG_SYS_AMASK0
33 #ifdef CONFIG_SYS_CSOR0_EXT
38 #ifdef CONFIG_SYS_CSPR0_FINAL
39 CONFIG_SYS_CSPR0_FINAL,
43 #ifdef CONFIG_SYS_AMASK0_FINAL
44 CONFIG_SYS_AMASK0_FINAL,
51 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 2
54 #if defined(CONFIG_SYS_CSPR1) && defined(CONFIG_SYS_CSOR1)
56 #ifdef CONFIG_SYS_CSPR1_EXT
61 #ifdef CONFIG_SYS_AMASK1
73 #ifdef CONFIG_SYS_CSOR1_EXT
78 #ifdef CONFIG_SYS_CSPR1_FINAL
79 CONFIG_SYS_CSPR1_FINAL,
83 #ifdef CONFIG_SYS_AMASK1_FINAL
84 CONFIG_SYS_AMASK1_FINAL,
92 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 3
95 #if defined(CONFIG_SYS_CSPR2) && defined(CONFIG_SYS_CSOR2)
97 #ifdef CONFIG_SYS_CSPR2_EXT
102 #ifdef CONFIG_SYS_AMASK2
109 CONFIG_SYS_CS2_FTIM0,
110 CONFIG_SYS_CS2_FTIM1,
111 CONFIG_SYS_CS2_FTIM2,
112 CONFIG_SYS_CS2_FTIM3,
114 #ifdef CONFIG_SYS_CSOR2_EXT
115 CONFIG_SYS_CSOR2_EXT,
119 #ifdef CONFIG_SYS_CSPR2_FINAL
120 CONFIG_SYS_CSPR2_FINAL,
124 #ifdef CONFIG_SYS_AMASK2_FINAL
125 CONFIG_SYS_AMASK2_FINAL,
133 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 4
136 #if defined(CONFIG_SYS_CSPR3) && defined(CONFIG_SYS_CSOR3)
138 #ifdef CONFIG_SYS_CSPR3_EXT
139 CONFIG_SYS_CSPR3_EXT,
143 #ifdef CONFIG_SYS_AMASK3
150 CONFIG_SYS_CS3_FTIM0,
151 CONFIG_SYS_CS3_FTIM1,
152 CONFIG_SYS_CS3_FTIM2,
153 CONFIG_SYS_CS3_FTIM3,
155 #ifdef CONFIG_SYS_CSOR3_EXT
156 CONFIG_SYS_CSOR3_EXT,
160 #ifdef CONFIG_SYS_CSPR3_FINAL
161 CONFIG_SYS_CSPR3_FINAL,
165 #ifdef CONFIG_SYS_AMASK3_FINAL
166 CONFIG_SYS_AMASK3_FINAL,
174 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 5
177 #if defined(CONFIG_SYS_CSPR4) && defined(CONFIG_SYS_CSOR4)
179 #ifdef CONFIG_SYS_CSPR4_EXT
180 CONFIG_SYS_CSPR4_EXT,
184 #ifdef CONFIG_SYS_AMASK4
191 CONFIG_SYS_CS4_FTIM0,
192 CONFIG_SYS_CS4_FTIM1,
193 CONFIG_SYS_CS4_FTIM2,
194 CONFIG_SYS_CS4_FTIM3,
196 #ifdef CONFIG_SYS_CSOR4_EXT
197 CONFIG_SYS_CSOR4_EXT,
201 #ifdef CONFIG_SYS_CSPR4_FINAL
202 CONFIG_SYS_CSPR4_FINAL,
206 #ifdef CONFIG_SYS_AMASK4_FINAL
207 CONFIG_SYS_AMASK4_FINAL,
215 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 6
218 #if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5)
220 #ifdef CONFIG_SYS_CSPR5_EXT
221 CONFIG_SYS_CSPR5_EXT,
225 #ifdef CONFIG_SYS_AMASK5
232 CONFIG_SYS_CS5_FTIM0,
233 CONFIG_SYS_CS5_FTIM1,
234 CONFIG_SYS_CS5_FTIM2,
235 CONFIG_SYS_CS5_FTIM3,
237 #ifdef CONFIG_SYS_CSOR5_EXT
238 CONFIG_SYS_CSOR5_EXT,
242 #ifdef CONFIG_SYS_CSPR5_FINAL
243 CONFIG_SYS_CSPR5_FINAL,
247 #ifdef CONFIG_SYS_AMASK5_FINAL
248 CONFIG_SYS_AMASK5_FINAL,
256 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 7
259 #if defined(CONFIG_SYS_CSPR6) && defined(CONFIG_SYS_CSOR6)
261 #ifdef CONFIG_SYS_CSPR6_EXT
262 CONFIG_SYS_CSPR6_EXT,
266 #ifdef CONFIG_SYS_AMASK6
273 CONFIG_SYS_CS6_FTIM0,
274 CONFIG_SYS_CS6_FTIM1,
275 CONFIG_SYS_CS6_FTIM2,
276 CONFIG_SYS_CS6_FTIM3,
278 #ifdef CONFIG_SYS_CSOR6_EXT
279 CONFIG_SYS_CSOR6_EXT,
283 #ifdef CONFIG_SYS_CSPR6_FINAL
284 CONFIG_SYS_CSPR6_FINAL,
288 #ifdef CONFIG_SYS_AMASK6_FINAL
289 CONFIG_SYS_AMASK6_FINAL,
297 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 8
300 #if defined(CONFIG_SYS_CSPR7) && defined(CONFIG_SYS_CSOR7)
302 #ifdef CONFIG_SYS_CSPR7_EXT
303 CONFIG_SYS_CSPR7_EXT,
307 #ifdef CONFIG_SYS_AMASK7
313 #ifdef CONFIG_SYS_CSOR7_EXT
314 CONFIG_SYS_CSOR7_EXT,
319 CONFIG_SYS_CS7_FTIM0,
320 CONFIG_SYS_CS7_FTIM1,
321 CONFIG_SYS_CS7_FTIM2,
322 CONFIG_SYS_CS7_FTIM3,
324 #ifdef CONFIG_SYS_CSPR7_FINAL
325 CONFIG_SYS_CSPR7_FINAL,
329 #ifdef CONFIG_SYS_AMASK7_FINAL
330 CONFIG_SYS_AMASK7_FINAL,
339 __weak void ifc_cfg_boot_info(struct ifc_regs_info *regs_info)
341 regs_info->regs = ifc_cfg_default_boot;
342 regs_info->cs_size = CONFIG_SYS_FSL_IFC_BANK_COUNT;
346 void print_ifc_regs(void)
350 printf("IFC Controller Registers\n");
351 for (i = 0; i < CONFIG_SYS_FSL_IFC_BANK_COUNT; i++) {
352 printf("CSPR%d:0x%08X\tAMASK%d:0x%08X\tCSOR%d:0x%08X\n",
353 i, get_ifc_cspr(i), i, get_ifc_amask(i),
355 for (j = 0; j < 4; j++)
356 printf("IFC_FTIM%d:0x%08X\n", j, get_ifc_ftim(i, j));
360 #ifdef CONFIG_TFABOOT
361 void init_early_memctl_regs(void)
364 struct ifc_regs *regs;
365 struct ifc_regs_info regs_info = {0};
367 ifc_cfg_boot_info(®s_info);
368 regs = regs_info.regs;
370 for (i = 0 ; i < regs_info.cs_size; i++) {
371 if (regs[i].pr && (regs[i].pr & CSPR_V)) {
372 /* skip setting cspr/csor_ext in below condition */
373 if (!(CONFIG_IS_ENABLED(A003399_NOR_WORKAROUND) &&
375 ((regs[0].pr & CSPR_MSEL) == CSPR_MSEL_NOR))) {
377 set_ifc_cspr_ext(i, regs[i].pr_ext);
379 set_ifc_csor_ext(i, regs[i].or_ext);
382 for (j = 0; j < ARRAY_SIZE(regs->ftim); j++)
383 set_ifc_ftim(i, j, regs[i].ftim[j]);
385 set_ifc_csor(i, regs[i].or);
386 set_ifc_amask(i, regs[i].amask);
387 set_ifc_cspr(i, regs[i].pr);
392 void init_final_memctl_regs(void)
395 struct ifc_regs *regs;
396 struct ifc_regs_info regs_info;
398 ifc_cfg_boot_info(®s_info);
399 regs = regs_info.regs;
401 for (i = 0 ; i < regs_info.cs_size && i < ARRAY_SIZE(regs->ftim); i++) {
402 if (!(regs[i].pr_final & CSPR_V))
404 if (regs[i].pr_final)
405 set_ifc_cspr(i, regs[i].pr_final);
406 if (regs[i].amask_final)
407 set_ifc_amask(i, (i == 1) ? regs[i].amask_final :
412 void init_early_memctl_regs(void)
414 #if defined(CONFIG_SYS_CSPR0) && defined(CONFIG_SYS_CSOR0)
415 set_ifc_ftim(IFC_CS0, IFC_FTIM0, CONFIG_SYS_CS0_FTIM0);
416 set_ifc_ftim(IFC_CS0, IFC_FTIM1, CONFIG_SYS_CS0_FTIM1);
417 set_ifc_ftim(IFC_CS0, IFC_FTIM2, CONFIG_SYS_CS0_FTIM2);
418 set_ifc_ftim(IFC_CS0, IFC_FTIM3, CONFIG_SYS_CS0_FTIM3);
420 #ifndef CONFIG_A003399_NOR_WORKAROUND
421 #ifdef CONFIG_SYS_CSPR0_EXT
422 set_ifc_cspr_ext(IFC_CS0, CONFIG_SYS_CSPR0_EXT);
424 #ifdef CONFIG_SYS_CSOR0_EXT
425 set_ifc_csor_ext(IFC_CS0, CONFIG_SYS_CSOR0_EXT);
427 set_ifc_cspr(IFC_CS0, CONFIG_SYS_CSPR0);
428 set_ifc_amask(IFC_CS0, CONFIG_SYS_AMASK0);
429 set_ifc_csor(IFC_CS0, CONFIG_SYS_CSOR0);
433 #ifdef CONFIG_SYS_CSPR1_EXT
434 set_ifc_cspr_ext(IFC_CS1, CONFIG_SYS_CSPR1_EXT);
436 #ifdef CONFIG_SYS_CSOR1_EXT
437 set_ifc_csor_ext(IFC_CS1, CONFIG_SYS_CSOR1_EXT);
439 #if defined(CONFIG_SYS_CSPR1) && defined(CONFIG_SYS_CSOR1)
440 set_ifc_ftim(IFC_CS1, IFC_FTIM0, CONFIG_SYS_CS1_FTIM0);
441 set_ifc_ftim(IFC_CS1, IFC_FTIM1, CONFIG_SYS_CS1_FTIM1);
442 set_ifc_ftim(IFC_CS1, IFC_FTIM2, CONFIG_SYS_CS1_FTIM2);
443 set_ifc_ftim(IFC_CS1, IFC_FTIM3, CONFIG_SYS_CS1_FTIM3);
445 set_ifc_csor(IFC_CS1, CONFIG_SYS_CSOR1);
446 set_ifc_amask(IFC_CS1, CONFIG_SYS_AMASK1);
447 set_ifc_cspr(IFC_CS1, CONFIG_SYS_CSPR1);
450 #ifdef CONFIG_SYS_CSPR2_EXT
451 set_ifc_cspr_ext(IFC_CS2, CONFIG_SYS_CSPR2_EXT);
453 #ifdef CONFIG_SYS_CSOR2_EXT
454 set_ifc_csor_ext(IFC_CS2, CONFIG_SYS_CSOR2_EXT);
456 #if defined(CONFIG_SYS_CSPR2) && defined(CONFIG_SYS_CSOR2)
457 set_ifc_ftim(IFC_CS2, IFC_FTIM0, CONFIG_SYS_CS2_FTIM0);
458 set_ifc_ftim(IFC_CS2, IFC_FTIM1, CONFIG_SYS_CS2_FTIM1);
459 set_ifc_ftim(IFC_CS2, IFC_FTIM2, CONFIG_SYS_CS2_FTIM2);
460 set_ifc_ftim(IFC_CS2, IFC_FTIM3, CONFIG_SYS_CS2_FTIM3);
462 set_ifc_csor(IFC_CS2, CONFIG_SYS_CSOR2);
463 set_ifc_amask(IFC_CS2, CONFIG_SYS_AMASK2);
464 set_ifc_cspr(IFC_CS2, CONFIG_SYS_CSPR2);
467 #ifdef CONFIG_SYS_CSPR3_EXT
468 set_ifc_cspr_ext(IFC_CS3, CONFIG_SYS_CSPR3_EXT);
470 #ifdef CONFIG_SYS_CSOR3_EXT
471 set_ifc_csor_ext(IFC_CS3, CONFIG_SYS_CSOR3_EXT);
473 #if defined(CONFIG_SYS_CSPR3) && defined(CONFIG_SYS_CSOR3)
474 set_ifc_ftim(IFC_CS3, IFC_FTIM0, CONFIG_SYS_CS3_FTIM0);
475 set_ifc_ftim(IFC_CS3, IFC_FTIM1, CONFIG_SYS_CS3_FTIM1);
476 set_ifc_ftim(IFC_CS3, IFC_FTIM2, CONFIG_SYS_CS3_FTIM2);
477 set_ifc_ftim(IFC_CS3, IFC_FTIM3, CONFIG_SYS_CS3_FTIM3);
479 set_ifc_cspr(IFC_CS3, CONFIG_SYS_CSPR3);
480 set_ifc_amask(IFC_CS3, CONFIG_SYS_AMASK3);
481 set_ifc_csor(IFC_CS3, CONFIG_SYS_CSOR3);
484 #ifdef CONFIG_SYS_CSPR4_EXT
485 set_ifc_cspr_ext(IFC_CS4, CONFIG_SYS_CSPR4_EXT);
487 #ifdef CONFIG_SYS_CSOR4_EXT
488 set_ifc_csor_ext(IFC_CS4, CONFIG_SYS_CSOR4_EXT);
490 #if defined(CONFIG_SYS_CSPR4) && defined(CONFIG_SYS_CSOR4)
491 set_ifc_ftim(IFC_CS4, IFC_FTIM0, CONFIG_SYS_CS4_FTIM0);
492 set_ifc_ftim(IFC_CS4, IFC_FTIM1, CONFIG_SYS_CS4_FTIM1);
493 set_ifc_ftim(IFC_CS4, IFC_FTIM2, CONFIG_SYS_CS4_FTIM2);
494 set_ifc_ftim(IFC_CS4, IFC_FTIM3, CONFIG_SYS_CS4_FTIM3);
496 set_ifc_cspr(IFC_CS4, CONFIG_SYS_CSPR4);
497 set_ifc_amask(IFC_CS4, CONFIG_SYS_AMASK4);
498 set_ifc_csor(IFC_CS4, CONFIG_SYS_CSOR4);
501 #ifdef CONFIG_SYS_CSPR5_EXT
502 set_ifc_cspr_ext(IFC_CS5, CONFIG_SYS_CSPR5_EXT);
504 #ifdef CONFIG_SYS_CSOR5_EXT
505 set_ifc_csor_ext(IFC_CS5, CONFIG_SYS_CSOR5_EXT);
507 #if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5)
508 set_ifc_ftim(IFC_CS5, IFC_FTIM0, CONFIG_SYS_CS5_FTIM0);
509 set_ifc_ftim(IFC_CS5, IFC_FTIM1, CONFIG_SYS_CS5_FTIM1);
510 set_ifc_ftim(IFC_CS5, IFC_FTIM2, CONFIG_SYS_CS5_FTIM2);
511 set_ifc_ftim(IFC_CS5, IFC_FTIM3, CONFIG_SYS_CS5_FTIM3);
513 set_ifc_cspr(IFC_CS5, CONFIG_SYS_CSPR5);
514 set_ifc_amask(IFC_CS5, CONFIG_SYS_AMASK5);
515 set_ifc_csor(IFC_CS5, CONFIG_SYS_CSOR5);
518 #ifdef CONFIG_SYS_CSPR6_EXT
519 set_ifc_cspr_ext(IFC_CS6, CONFIG_SYS_CSPR6_EXT);
521 #ifdef CONFIG_SYS_CSOR6_EXT
522 set_ifc_csor_ext(IFC_CS6, CONFIG_SYS_CSOR6_EXT);
524 #if defined(CONFIG_SYS_CSPR6) && defined(CONFIG_SYS_CSOR6)
525 set_ifc_ftim(IFC_CS6, IFC_FTIM0, CONFIG_SYS_CS6_FTIM0);
526 set_ifc_ftim(IFC_CS6, IFC_FTIM1, CONFIG_SYS_CS6_FTIM1);
527 set_ifc_ftim(IFC_CS6, IFC_FTIM2, CONFIG_SYS_CS6_FTIM2);
528 set_ifc_ftim(IFC_CS6, IFC_FTIM3, CONFIG_SYS_CS6_FTIM3);
530 set_ifc_cspr(IFC_CS6, CONFIG_SYS_CSPR6);
531 set_ifc_amask(IFC_CS6, CONFIG_SYS_AMASK6);
532 set_ifc_csor(IFC_CS6, CONFIG_SYS_CSOR6);
535 #ifdef CONFIG_SYS_CSPR7_EXT
536 set_ifc_cspr_ext(IFC_CS7, CONFIG_SYS_CSPR7_EXT);
538 #ifdef CONFIG_SYS_CSOR7_EXT
539 set_ifc_csor_ext(IFC_CS7, CONFIG_SYS_CSOR7_EXT);
541 #if defined(CONFIG_SYS_CSPR7) && defined(CONFIG_SYS_CSOR7)
542 set_ifc_ftim(IFC_CS7, IFC_FTIM0, CONFIG_SYS_CS7_FTIM0);
543 set_ifc_ftim(IFC_CS7, IFC_FTIM1, CONFIG_SYS_CS7_FTIM1);
544 set_ifc_ftim(IFC_CS7, IFC_FTIM2, CONFIG_SYS_CS7_FTIM2);
545 set_ifc_ftim(IFC_CS7, IFC_FTIM3, CONFIG_SYS_CS7_FTIM3);
547 set_ifc_cspr(IFC_CS7, CONFIG_SYS_CSPR7);
548 set_ifc_amask(IFC_CS7, CONFIG_SYS_AMASK7);
549 set_ifc_csor(IFC_CS7, CONFIG_SYS_CSOR7);
553 void init_final_memctl_regs(void)
555 #ifdef CONFIG_SYS_CSPR0_FINAL
556 set_ifc_cspr(IFC_CS0, CONFIG_SYS_CSPR0_FINAL);
558 #ifdef CONFIG_SYS_AMASK0_FINAL
559 set_ifc_amask(IFC_CS0, CONFIG_SYS_AMASK0);
561 #ifdef CONFIG_SYS_CSPR1_FINAL
562 set_ifc_cspr(IFC_CS1, CONFIG_SYS_CSPR1_FINAL);
564 #ifdef CONFIG_SYS_AMASK1_FINAL
565 set_ifc_amask(IFC_CS1, CONFIG_SYS_AMASK1_FINAL);
567 #ifdef CONFIG_SYS_CSPR2_FINAL
568 set_ifc_cspr(IFC_CS2, CONFIG_SYS_CSPR2_FINAL);
570 #ifdef CONFIG_SYS_AMASK2_FINAL
571 set_ifc_amask(IFC_CS2, CONFIG_SYS_AMASK2);
573 #ifdef CONFIG_SYS_CSPR3_FINAL
574 set_ifc_cspr(IFC_CS3, CONFIG_SYS_CSPR3_FINAL);
576 #ifdef CONFIG_SYS_AMASK3_FINAL
577 set_ifc_amask(IFC_CS3, CONFIG_SYS_AMASK3);