1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2010-2011 Freescale Semiconductor, Inc.
12 struct ifc_regs ifc_cfg_default_boot[CONFIG_SYS_FSL_IFC_BANK_COUNT] = {
15 #if defined(CFG_SYS_CSPR0) && defined(CFG_SYS_CSOR0)
17 #ifdef CFG_SYS_CSPR0_EXT
34 #ifdef CFG_SYS_CSOR0_EXT
39 #ifdef CFG_SYS_CSPR0_FINAL
44 #ifdef CFG_SYS_AMASK0_FINAL
52 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 2
55 #if defined(CFG_SYS_CSPR1) && defined(CFG_SYS_CSOR1)
57 #ifdef CFG_SYS_CSPR1_EXT
74 #ifdef CFG_SYS_CSOR1_EXT
79 #ifdef CFG_SYS_CSPR1_FINAL
84 #ifdef CFG_SYS_AMASK1_FINAL
93 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 3
96 #if defined(CFG_SYS_CSPR2) && defined(CFG_SYS_CSOR2)
98 #ifdef CFG_SYS_CSPR2_EXT
103 #ifdef CFG_SYS_AMASK2
115 #ifdef CFG_SYS_CSOR2_EXT
120 #ifdef CFG_SYS_CSPR2_FINAL
125 #ifdef CFG_SYS_AMASK2_FINAL
126 CFG_SYS_AMASK2_FINAL,
134 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 4
137 #if defined(CFG_SYS_CSPR3) && defined(CFG_SYS_CSOR3)
139 #ifdef CFG_SYS_CSPR3_EXT
144 #ifdef CFG_SYS_AMASK3
156 #ifdef CFG_SYS_CSOR3_EXT
161 #ifdef CFG_SYS_CSPR3_FINAL
166 #ifdef CFG_SYS_AMASK3_FINAL
167 CFG_SYS_AMASK3_FINAL,
175 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 5
178 #if defined(CFG_SYS_CSPR4) && defined(CFG_SYS_CSOR4)
180 #ifdef CFG_SYS_CSPR4_EXT
185 #ifdef CFG_SYS_AMASK4
197 #ifdef CFG_SYS_CSOR4_EXT
202 #ifdef CFG_SYS_CSPR4_FINAL
207 #ifdef CFG_SYS_AMASK4_FINAL
208 CFG_SYS_AMASK4_FINAL,
216 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 6
219 #if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5)
221 #ifdef CONFIG_SYS_CSPR5_EXT
222 CONFIG_SYS_CSPR5_EXT,
226 #ifdef CONFIG_SYS_AMASK5
233 CONFIG_SYS_CS5_FTIM0,
234 CONFIG_SYS_CS5_FTIM1,
235 CONFIG_SYS_CS5_FTIM2,
236 CONFIG_SYS_CS5_FTIM3,
238 #ifdef CONFIG_SYS_CSOR5_EXT
239 CONFIG_SYS_CSOR5_EXT,
243 #ifdef CONFIG_SYS_CSPR5_FINAL
244 CONFIG_SYS_CSPR5_FINAL,
248 #ifdef CONFIG_SYS_AMASK5_FINAL
249 CONFIG_SYS_AMASK5_FINAL,
257 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 7
260 #if defined(CFG_SYS_CSPR6) && defined(CFG_SYS_CSOR6)
262 #ifdef CFG_SYS_CSPR6_EXT
267 #ifdef CFG_SYS_AMASK6
279 #ifdef CFG_SYS_CSOR6_EXT
284 #ifdef CFG_SYS_CSPR6_FINAL
289 #ifdef CFG_SYS_AMASK6_FINAL
290 CFG_SYS_AMASK6_FINAL,
298 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 8
301 #if defined(CFG_SYS_CSPR7) && defined(CFG_SYS_CSOR7)
303 #ifdef CFG_SYS_CSPR7_EXT
308 #ifdef CFG_SYS_AMASK7
314 #ifdef CFG_SYS_CSOR7_EXT
325 #ifdef CFG_SYS_CSPR7_FINAL
330 #ifdef CFG_SYS_AMASK7_FINAL
331 CFG_SYS_AMASK7_FINAL,
340 __weak void ifc_cfg_boot_info(struct ifc_regs_info *regs_info)
342 regs_info->regs = ifc_cfg_default_boot;
343 regs_info->cs_size = CONFIG_SYS_FSL_IFC_BANK_COUNT;
347 void print_ifc_regs(void)
351 printf("IFC Controller Registers\n");
352 for (i = 0; i < CONFIG_SYS_FSL_IFC_BANK_COUNT; i++) {
353 printf("CSPR%d:0x%08X\tAMASK%d:0x%08X\tCSOR%d:0x%08X\n",
354 i, get_ifc_cspr(i), i, get_ifc_amask(i),
356 for (j = 0; j < 4; j++)
357 printf("IFC_FTIM%d:0x%08X\n", j, get_ifc_ftim(i, j));
361 #ifdef CONFIG_TFABOOT
362 void init_early_memctl_regs(void)
365 struct ifc_regs *regs;
366 struct ifc_regs_info regs_info = {0};
368 ifc_cfg_boot_info(®s_info);
369 regs = regs_info.regs;
371 for (i = 0 ; i < regs_info.cs_size; i++) {
372 if (regs[i].pr && (regs[i].pr & CSPR_V)) {
373 /* skip setting cspr/csor_ext in below condition */
374 if (!(IS_ENABLED(CONFIG_A003399_NOR_WORKAROUND) &&
376 ((regs[0].pr & CSPR_MSEL) == CSPR_MSEL_NOR))) {
378 set_ifc_cspr_ext(i, regs[i].pr_ext);
380 set_ifc_csor_ext(i, regs[i].or_ext);
383 for (j = 0; j < ARRAY_SIZE(regs->ftim); j++)
384 set_ifc_ftim(i, j, regs[i].ftim[j]);
386 set_ifc_csor(i, regs[i].or);
387 set_ifc_amask(i, regs[i].amask);
388 set_ifc_cspr(i, regs[i].pr);
393 void init_final_memctl_regs(void)
396 struct ifc_regs *regs;
397 struct ifc_regs_info regs_info;
399 ifc_cfg_boot_info(®s_info);
400 regs = regs_info.regs;
402 for (i = 0 ; i < regs_info.cs_size && i < ARRAY_SIZE(regs->ftim); i++) {
403 if (!(regs[i].pr_final & CSPR_V))
405 if (regs[i].pr_final)
406 set_ifc_cspr(i, regs[i].pr_final);
407 if (regs[i].amask_final)
408 set_ifc_amask(i, (i == 1) ? regs[i].amask_final :
413 void init_early_memctl_regs(void)
415 #if defined(CFG_SYS_CSPR0) && defined(CFG_SYS_CSOR0)
416 set_ifc_ftim(IFC_CS0, IFC_FTIM0, CFG_SYS_CS0_FTIM0);
417 set_ifc_ftim(IFC_CS0, IFC_FTIM1, CFG_SYS_CS0_FTIM1);
418 set_ifc_ftim(IFC_CS0, IFC_FTIM2, CFG_SYS_CS0_FTIM2);
419 set_ifc_ftim(IFC_CS0, IFC_FTIM3, CFG_SYS_CS0_FTIM3);
421 #ifndef CONFIG_A003399_NOR_WORKAROUND
422 #ifdef CFG_SYS_CSPR0_EXT
423 set_ifc_cspr_ext(IFC_CS0, CFG_SYS_CSPR0_EXT);
425 #ifdef CFG_SYS_CSOR0_EXT
426 set_ifc_csor_ext(IFC_CS0, CFG_SYS_CSOR0_EXT);
428 set_ifc_cspr(IFC_CS0, CFG_SYS_CSPR0);
429 set_ifc_amask(IFC_CS0, CFG_SYS_AMASK0);
430 set_ifc_csor(IFC_CS0, CFG_SYS_CSOR0);
434 #ifdef CFG_SYS_CSPR1_EXT
435 set_ifc_cspr_ext(IFC_CS1, CFG_SYS_CSPR1_EXT);
437 #ifdef CFG_SYS_CSOR1_EXT
438 set_ifc_csor_ext(IFC_CS1, CFG_SYS_CSOR1_EXT);
440 #if defined(CFG_SYS_CSPR1) && defined(CFG_SYS_CSOR1)
441 set_ifc_ftim(IFC_CS1, IFC_FTIM0, CFG_SYS_CS1_FTIM0);
442 set_ifc_ftim(IFC_CS1, IFC_FTIM1, CFG_SYS_CS1_FTIM1);
443 set_ifc_ftim(IFC_CS1, IFC_FTIM2, CFG_SYS_CS1_FTIM2);
444 set_ifc_ftim(IFC_CS1, IFC_FTIM3, CFG_SYS_CS1_FTIM3);
446 set_ifc_csor(IFC_CS1, CFG_SYS_CSOR1);
447 set_ifc_amask(IFC_CS1, CFG_SYS_AMASK1);
448 set_ifc_cspr(IFC_CS1, CFG_SYS_CSPR1);
451 #ifdef CFG_SYS_CSPR2_EXT
452 set_ifc_cspr_ext(IFC_CS2, CFG_SYS_CSPR2_EXT);
454 #ifdef CFG_SYS_CSOR2_EXT
455 set_ifc_csor_ext(IFC_CS2, CFG_SYS_CSOR2_EXT);
457 #if defined(CFG_SYS_CSPR2) && defined(CFG_SYS_CSOR2)
458 set_ifc_ftim(IFC_CS2, IFC_FTIM0, CFG_SYS_CS2_FTIM0);
459 set_ifc_ftim(IFC_CS2, IFC_FTIM1, CFG_SYS_CS2_FTIM1);
460 set_ifc_ftim(IFC_CS2, IFC_FTIM2, CFG_SYS_CS2_FTIM2);
461 set_ifc_ftim(IFC_CS2, IFC_FTIM3, CFG_SYS_CS2_FTIM3);
463 set_ifc_csor(IFC_CS2, CFG_SYS_CSOR2);
464 set_ifc_amask(IFC_CS2, CFG_SYS_AMASK2);
465 set_ifc_cspr(IFC_CS2, CFG_SYS_CSPR2);
468 #ifdef CFG_SYS_CSPR3_EXT
469 set_ifc_cspr_ext(IFC_CS3, CFG_SYS_CSPR3_EXT);
471 #ifdef CFG_SYS_CSOR3_EXT
472 set_ifc_csor_ext(IFC_CS3, CFG_SYS_CSOR3_EXT);
474 #if defined(CFG_SYS_CSPR3) && defined(CFG_SYS_CSOR3)
475 set_ifc_ftim(IFC_CS3, IFC_FTIM0, CFG_SYS_CS3_FTIM0);
476 set_ifc_ftim(IFC_CS3, IFC_FTIM1, CFG_SYS_CS3_FTIM1);
477 set_ifc_ftim(IFC_CS3, IFC_FTIM2, CFG_SYS_CS3_FTIM2);
478 set_ifc_ftim(IFC_CS3, IFC_FTIM3, CFG_SYS_CS3_FTIM3);
480 set_ifc_cspr(IFC_CS3, CFG_SYS_CSPR3);
481 set_ifc_amask(IFC_CS3, CFG_SYS_AMASK3);
482 set_ifc_csor(IFC_CS3, CFG_SYS_CSOR3);
485 #ifdef CFG_SYS_CSPR4_EXT
486 set_ifc_cspr_ext(IFC_CS4, CFG_SYS_CSPR4_EXT);
488 #ifdef CFG_SYS_CSOR4_EXT
489 set_ifc_csor_ext(IFC_CS4, CFG_SYS_CSOR4_EXT);
491 #if defined(CFG_SYS_CSPR4) && defined(CFG_SYS_CSOR4)
492 set_ifc_ftim(IFC_CS4, IFC_FTIM0, CFG_SYS_CS4_FTIM0);
493 set_ifc_ftim(IFC_CS4, IFC_FTIM1, CFG_SYS_CS4_FTIM1);
494 set_ifc_ftim(IFC_CS4, IFC_FTIM2, CFG_SYS_CS4_FTIM2);
495 set_ifc_ftim(IFC_CS4, IFC_FTIM3, CFG_SYS_CS4_FTIM3);
497 set_ifc_cspr(IFC_CS4, CFG_SYS_CSPR4);
498 set_ifc_amask(IFC_CS4, CFG_SYS_AMASK4);
499 set_ifc_csor(IFC_CS4, CFG_SYS_CSOR4);
502 #ifdef CONFIG_SYS_CSPR5_EXT
503 set_ifc_cspr_ext(IFC_CS5, CONFIG_SYS_CSPR5_EXT);
505 #ifdef CONFIG_SYS_CSOR5_EXT
506 set_ifc_csor_ext(IFC_CS5, CONFIG_SYS_CSOR5_EXT);
508 #if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5)
509 set_ifc_ftim(IFC_CS5, IFC_FTIM0, CONFIG_SYS_CS5_FTIM0);
510 set_ifc_ftim(IFC_CS5, IFC_FTIM1, CONFIG_SYS_CS5_FTIM1);
511 set_ifc_ftim(IFC_CS5, IFC_FTIM2, CONFIG_SYS_CS5_FTIM2);
512 set_ifc_ftim(IFC_CS5, IFC_FTIM3, CONFIG_SYS_CS5_FTIM3);
514 set_ifc_cspr(IFC_CS5, CONFIG_SYS_CSPR5);
515 set_ifc_amask(IFC_CS5, CONFIG_SYS_AMASK5);
516 set_ifc_csor(IFC_CS5, CONFIG_SYS_CSOR5);
519 #ifdef CFG_SYS_CSPR6_EXT
520 set_ifc_cspr_ext(IFC_CS6, CFG_SYS_CSPR6_EXT);
522 #ifdef CFG_SYS_CSOR6_EXT
523 set_ifc_csor_ext(IFC_CS6, CFG_SYS_CSOR6_EXT);
525 #if defined(CFG_SYS_CSPR6) && defined(CFG_SYS_CSOR6)
526 set_ifc_ftim(IFC_CS6, IFC_FTIM0, CFG_SYS_CS6_FTIM0);
527 set_ifc_ftim(IFC_CS6, IFC_FTIM1, CFG_SYS_CS6_FTIM1);
528 set_ifc_ftim(IFC_CS6, IFC_FTIM2, CFG_SYS_CS6_FTIM2);
529 set_ifc_ftim(IFC_CS6, IFC_FTIM3, CFG_SYS_CS6_FTIM3);
531 set_ifc_cspr(IFC_CS6, CFG_SYS_CSPR6);
532 set_ifc_amask(IFC_CS6, CFG_SYS_AMASK6);
533 set_ifc_csor(IFC_CS6, CFG_SYS_CSOR6);
536 #ifdef CFG_SYS_CSPR7_EXT
537 set_ifc_cspr_ext(IFC_CS7, CFG_SYS_CSPR7_EXT);
539 #ifdef CFG_SYS_CSOR7_EXT
540 set_ifc_csor_ext(IFC_CS7, CFG_SYS_CSOR7_EXT);
542 #if defined(CFG_SYS_CSPR7) && defined(CFG_SYS_CSOR7)
543 set_ifc_ftim(IFC_CS7, IFC_FTIM0, CFG_SYS_CS7_FTIM0);
544 set_ifc_ftim(IFC_CS7, IFC_FTIM1, CFG_SYS_CS7_FTIM1);
545 set_ifc_ftim(IFC_CS7, IFC_FTIM2, CFG_SYS_CS7_FTIM2);
546 set_ifc_ftim(IFC_CS7, IFC_FTIM3, CFG_SYS_CS7_FTIM3);
548 set_ifc_cspr(IFC_CS7, CFG_SYS_CSPR7);
549 set_ifc_amask(IFC_CS7, CFG_SYS_AMASK7);
550 set_ifc_csor(IFC_CS7, CFG_SYS_CSOR7);
554 void init_final_memctl_regs(void)
556 #ifdef CFG_SYS_CSPR0_FINAL
557 set_ifc_cspr(IFC_CS0, CFG_SYS_CSPR0_FINAL);
559 #ifdef CFG_SYS_AMASK0_FINAL
560 set_ifc_amask(IFC_CS0, CFG_SYS_AMASK0);
562 #ifdef CFG_SYS_CSPR1_FINAL
563 set_ifc_cspr(IFC_CS1, CFG_SYS_CSPR1_FINAL);
565 #ifdef CFG_SYS_AMASK1_FINAL
566 set_ifc_amask(IFC_CS1, CFG_SYS_AMASK1_FINAL);
568 #ifdef CFG_SYS_CSPR2_FINAL
569 set_ifc_cspr(IFC_CS2, CFG_SYS_CSPR2_FINAL);
571 #ifdef CFG_SYS_AMASK2_FINAL
572 set_ifc_amask(IFC_CS2, CFG_SYS_AMASK2);
574 #ifdef CFG_SYS_CSPR3_FINAL
575 set_ifc_cspr(IFC_CS3, CFG_SYS_CSPR3_FINAL);
577 #ifdef CFG_SYS_AMASK3_FINAL
578 set_ifc_amask(IFC_CS3, CFG_SYS_AMASK3);