3 * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
5 * SPDX-License-Identifier: GPL-2.0+
9 #include <asm/ppc4xx.h>
10 #include <asm/processor.h>
13 * include common flash code (for esd boards)
15 #include "../common/flash.c"
17 /*-----------------------------------------------------------------------
20 static ulong flash_get_size (vu_long *addr, flash_info_t *info);
21 static void flash_get_offsets (ulong base, flash_info_t *info);
23 /*-----------------------------------------------------------------------
26 unsigned long flash_init (void)
28 unsigned long size_b0, size_b1;
31 /* Init: no FLASHes known */
32 for (i=0; i<CONFIG_SYS_MAX_FLASH_BANKS; ++i) {
33 flash_info[i].flash_id = FLASH_UNKNOWN;
36 size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
38 if (flash_info[0].flash_id == FLASH_UNKNOWN) {
39 printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",
40 size_b0, size_b0<<20);
43 size_b1 = flash_get_size((vu_long *)FLASH_BASE1_PRELIM, &flash_info[1]);
45 if (size_b1 > size_b0) {
47 "Bank 1 (0x%08lx = %ld MB) > Bank 0 (0x%08lx = %ld MB)\n",
51 flash_info[0].flash_id = FLASH_UNKNOWN;
52 flash_info[1].flash_id = FLASH_UNKNOWN;
53 flash_info[0].sector_count = -1;
54 flash_info[1].sector_count = -1;
55 flash_info[0].size = 0;
56 flash_info[1].size = 0;
60 /* Re-do sizing to get full correct info */
61 size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
63 flash_get_offsets (FLASH_BASE0_PRELIM, &flash_info[0]);
65 /* monitor protection ON by default */
66 flash_protect(FLAG_PROTECT_SET,
67 FLASH_BASE0_PRELIM+size_b0-monitor_flash_len,
68 FLASH_BASE0_PRELIM+size_b0-1,
72 /* Re-do sizing to get full correct info */
73 size_b1 = flash_get_size((vu_long *)(FLASH_BASE0_PRELIM + size_b0),
76 flash_get_offsets (FLASH_BASE0_PRELIM + size_b0, &flash_info[1]);
78 /* monitor protection ON by default */
79 flash_protect(FLAG_PROTECT_SET,
80 FLASH_BASE0_PRELIM+size_b0+size_b1-monitor_flash_len,
81 FLASH_BASE0_PRELIM+size_b0+size_b1-1,
83 /* monitor protection OFF by default (one is enough) */
84 flash_protect(FLAG_PROTECT_CLEAR,
85 FLASH_BASE0_PRELIM+size_b0-monitor_flash_len,
86 FLASH_BASE0_PRELIM+size_b0-1,
89 flash_info[1].flash_id = FLASH_UNKNOWN;
90 flash_info[1].sector_count = -1;
93 flash_info[0].size = size_b0;
94 flash_info[1].size = size_b1;
96 return (size_b0 + size_b1);