1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2010-2011 Freescale Semiconductor, Inc.
4 * Author: Dipen Dudhat <dipen.dudhat@freescale.com>
10 struct ifc_regs ifc_cfg_default_boot[CONFIG_SYS_FSL_IFC_BANK_COUNT] = {
13 #if defined(CONFIG_SYS_CSPR0) && defined(CONFIG_SYS_CSOR0)
15 #ifdef CONFIG_SYS_CSPR0_EXT
20 #ifdef CONFIG_SYS_AMASK0
32 #ifdef CONFIG_SYS_CSOR0_EXT
37 #ifdef CONFIG_SYS_CSPR0_FINAL
38 CONFIG_SYS_CSPR0_FINAL,
42 #ifdef CONFIG_SYS_AMASK0_FINAL
43 CONFIG_SYS_AMASK0_FINAL,
50 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 2
53 #if defined(CONFIG_SYS_CSPR1) && defined(CONFIG_SYS_CSOR1)
55 #ifdef CONFIG_SYS_CSPR1_EXT
60 #ifdef CONFIG_SYS_AMASK1
72 #ifdef CONFIG_SYS_CSOR1_EXT
77 #ifdef CONFIG_SYS_CSPR1_FINAL
78 CONFIG_SYS_CSPR1_FINAL,
82 #ifdef CONFIG_SYS_AMASK1_FINAL
83 CONFIG_SYS_AMASK1_FINAL,
91 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 3
94 #if defined(CONFIG_SYS_CSPR2) && defined(CONFIG_SYS_CSOR2)
96 #ifdef CONFIG_SYS_CSPR2_EXT
101 #ifdef CONFIG_SYS_AMASK2
108 CONFIG_SYS_CS2_FTIM0,
109 CONFIG_SYS_CS2_FTIM1,
110 CONFIG_SYS_CS2_FTIM2,
111 CONFIG_SYS_CS2_FTIM3,
113 #ifdef CONFIG_SYS_CSOR2_EXT
114 CONFIG_SYS_CSOR2_EXT,
118 #ifdef CONFIG_SYS_CSPR2_FINAL
119 CONFIG_SYS_CSPR2_FINAL,
123 #ifdef CONFIG_SYS_AMASK2_FINAL
124 CONFIG_SYS_AMASK2_FINAL,
132 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 4
135 #if defined(CONFIG_SYS_CSPR3) && defined(CONFIG_SYS_CSOR3)
137 #ifdef CONFIG_SYS_CSPR3_EXT
138 CONFIG_SYS_CSPR3_EXT,
142 #ifdef CONFIG_SYS_AMASK3
149 CONFIG_SYS_CS3_FTIM0,
150 CONFIG_SYS_CS3_FTIM1,
151 CONFIG_SYS_CS3_FTIM2,
152 CONFIG_SYS_CS3_FTIM3,
154 #ifdef CONFIG_SYS_CSOR3_EXT
155 CONFIG_SYS_CSOR3_EXT,
159 #ifdef CONFIG_SYS_CSPR3_FINAL
160 CONFIG_SYS_CSPR3_FINAL,
164 #ifdef CONFIG_SYS_AMASK3_FINAL
165 CONFIG_SYS_AMASK3_FINAL,
173 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 5
176 #if defined(CONFIG_SYS_CSPR4) && defined(CONFIG_SYS_CSOR4)
178 #ifdef CONFIG_SYS_CSPR4_EXT
179 CONFIG_SYS_CSPR4_EXT,
183 #ifdef CONFIG_SYS_AMASK4
190 CONFIG_SYS_CS4_FTIM0,
191 CONFIG_SYS_CS4_FTIM1,
192 CONFIG_SYS_CS4_FTIM2,
193 CONFIG_SYS_CS4_FTIM3,
195 #ifdef CONFIG_SYS_CSOR4_EXT
196 CONFIG_SYS_CSOR4_EXT,
200 #ifdef CONFIG_SYS_CSPR4_FINAL
201 CONFIG_SYS_CSPR4_FINAL,
205 #ifdef CONFIG_SYS_AMASK4_FINAL
206 CONFIG_SYS_AMASK4_FINAL,
214 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 6
217 #if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5)
219 #ifdef CONFIG_SYS_CSPR5_EXT
220 CONFIG_SYS_CSPR5_EXT,
224 #ifdef CONFIG_SYS_AMASK5
231 CONFIG_SYS_CS5_FTIM0,
232 CONFIG_SYS_CS5_FTIM1,
233 CONFIG_SYS_CS5_FTIM2,
234 CONFIG_SYS_CS5_FTIM3,
236 #ifdef CONFIG_SYS_CSOR5_EXT
237 CONFIG_SYS_CSOR5_EXT,
241 #ifdef CONFIG_SYS_CSPR5_FINAL
242 CONFIG_SYS_CSPR5_FINAL,
246 #ifdef CONFIG_SYS_AMASK5_FINAL
247 CONFIG_SYS_AMASK5_FINAL,
255 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 7
258 #if defined(CONFIG_SYS_CSPR6) && defined(CONFIG_SYS_CSOR6)
260 #ifdef CONFIG_SYS_CSPR6_EXT
261 CONFIG_SYS_CSPR6_EXT,
265 #ifdef CONFIG_SYS_AMASK6
272 CONFIG_SYS_CS6_FTIM0,
273 CONFIG_SYS_CS6_FTIM1,
274 CONFIG_SYS_CS6_FTIM2,
275 CONFIG_SYS_CS6_FTIM3,
277 #ifdef CONFIG_SYS_CSOR6_EXT
278 CONFIG_SYS_CSOR6_EXT,
282 #ifdef CONFIG_SYS_CSPR6_FINAL
283 CONFIG_SYS_CSPR6_FINAL,
287 #ifdef CONFIG_SYS_AMASK6_FINAL
288 CONFIG_SYS_AMASK6_FINAL,
296 #if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 8
299 #if defined(CONFIG_SYS_CSPR7) && defined(CONFIG_SYS_CSOR7)
301 #ifdef CONFIG_SYS_CSPR7_EXT
302 CONFIG_SYS_CSPR7_EXT,
306 #ifdef CONFIG_SYS_AMASK7
312 #ifdef CONFIG_SYS_CSOR7_EXT
313 CONFIG_SYS_CSOR7_EXT,
318 CONFIG_SYS_CS7_FTIM0,
319 CONFIG_SYS_CS7_FTIM1,
320 CONFIG_SYS_CS7_FTIM2,
321 CONFIG_SYS_CS7_FTIM3,
323 #ifdef CONFIG_SYS_CSPR7_FINAL
324 CONFIG_SYS_CSPR7_FINAL,
328 #ifdef CONFIG_SYS_AMASK7_FINAL
329 CONFIG_SYS_AMASK7_FINAL,
338 __weak void ifc_cfg_boot_info(struct ifc_regs_info *regs_info)
340 regs_info->regs = ifc_cfg_default_boot;
341 regs_info->cs_size = CONFIG_SYS_FSL_IFC_BANK_COUNT;
344 void print_ifc_regs(void)
348 printf("IFC Controller Registers\n");
349 for (i = 0; i < CONFIG_SYS_FSL_IFC_BANK_COUNT; i++) {
350 printf("CSPR%d:0x%08X\tAMASK%d:0x%08X\tCSOR%d:0x%08X\n",
351 i, get_ifc_cspr(i), i, get_ifc_amask(i),
353 for (j = 0; j < 4; j++)
354 printf("IFC_FTIM%d:0x%08X\n", j, get_ifc_ftim(i, j));
358 void init_early_memctl_regs(void)
361 struct ifc_regs *regs;
362 struct ifc_regs_info regs_info = {0};
364 ifc_cfg_boot_info(®s_info);
365 regs = regs_info.regs;
367 for (i = 0 ; i < regs_info.cs_size; i++) {
368 if (regs[i].pr && (regs[i].pr & CSPR_V)) {
369 /* skip setting cspr/csor_ext in below condition */
370 if (!(CONFIG_IS_ENABLED(A003399_NOR_WORKAROUND) &&
372 ((regs[0].pr & CSPR_MSEL) == CSPR_MSEL_NOR))) {
374 set_ifc_cspr_ext(i, regs[i].pr_ext);
376 set_ifc_csor_ext(i, regs[i].or_ext);
379 for (j = 0; j < ARRAY_SIZE(regs->ftim); j++)
380 set_ifc_ftim(i, j, regs[i].ftim[j]);
382 set_ifc_csor(i, regs[i].or);
383 set_ifc_amask(i, regs[i].amask);
384 set_ifc_cspr(i, regs[i].pr);
389 void init_final_memctl_regs(void)
392 struct ifc_regs *regs;
393 struct ifc_regs_info regs_info;
395 ifc_cfg_boot_info(®s_info);
396 regs = regs_info.regs;
398 for (i = 0 ; i < regs_info.cs_size && i < ARRAY_SIZE(regs->ftim); i++) {
399 if (!(regs[i].pr_final & CSPR_V))
401 if (regs[i].pr_final)
402 set_ifc_cspr(i, regs[i].pr_final);
403 if (regs[i].amask_final)
404 set_ifc_amask(i, (i == 1) ? regs[i].amask_final :