mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-09 20:18:54 -04:00
CFI: allow for dynamically determined flash sizes and addresses
The CFI driver allowed only for static initializers in the CFG_FLASH_BANKS_LIST definition, i. e. it did not allow to map several flash banks contiguously if the bank sizes were not known in advance, which kind of violates U-Boot's design philosophy. (will be used for example by the TQM8xxL boards) Signed-off-by: Wolfgang Denk <wd@denx.de>
This commit is contained in:
parent
81091f58f0
commit
2a112b234d
@ -158,13 +158,13 @@ static uint flash_offset_cfi[2] = { FLASH_OFFSET_CFI, FLASH_OFFSET_CFI_ALT };
|
|||||||
|
|
||||||
/* use CFG_MAX_FLASH_BANKS_DETECT if defined */
|
/* use CFG_MAX_FLASH_BANKS_DETECT if defined */
|
||||||
#ifdef CFG_MAX_FLASH_BANKS_DETECT
|
#ifdef CFG_MAX_FLASH_BANKS_DETECT
|
||||||
static ulong bank_base[CFG_MAX_FLASH_BANKS_DETECT] = CFG_FLASH_BANKS_LIST;
|
# define CFI_MAX_FLASH_BANKS CFG_MAX_FLASH_BANKS_DETECT
|
||||||
flash_info_t flash_info[CFG_MAX_FLASH_BANKS_DETECT]; /* FLASH chips info */
|
|
||||||
#else
|
#else
|
||||||
static ulong bank_base[CFG_MAX_FLASH_BANKS] = CFG_FLASH_BANKS_LIST;
|
# define CFI_MAX_FLASH_BANKS CFG_MAX_FLASH_BANKS
|
||||||
flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* FLASH chips info */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
flash_info_t flash_info[CFI_MAX_FLASH_BANKS]; /* FLASH chips info */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if chip width is defined. If not, start detecting with 8bit.
|
* Check if chip width is defined. If not, start detecting with 8bit.
|
||||||
*/
|
*/
|
||||||
@ -1912,12 +1912,14 @@ unsigned long flash_init (void)
|
|||||||
char *s = getenv("unlock");
|
char *s = getenv("unlock");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define BANK_BASE(i) (((unsigned long [CFI_MAX_FLASH_BANKS])CFG_FLASH_BANKS_LIST)[i])
|
||||||
|
|
||||||
/* Init: no FLASHes known */
|
/* Init: no FLASHes known */
|
||||||
for (i = 0; i < CFG_MAX_FLASH_BANKS; ++i) {
|
for (i = 0; i < CFG_MAX_FLASH_BANKS; ++i) {
|
||||||
flash_info[i].flash_id = FLASH_UNKNOWN;
|
flash_info[i].flash_id = FLASH_UNKNOWN;
|
||||||
|
|
||||||
if (!flash_detect_legacy (bank_base[i], i))
|
if (!flash_detect_legacy (BANK_BASE(i), i))
|
||||||
flash_get_size (bank_base[i], i);
|
flash_get_size (BANK_BASE(i), i);
|
||||||
size += flash_info[i].size;
|
size += flash_info[i].size;
|
||||||
if (flash_info[i].flash_id == FLASH_UNKNOWN) {
|
if (flash_info[i].flash_id == FLASH_UNKNOWN) {
|
||||||
#ifndef CFG_FLASH_QUIET_TEST
|
#ifndef CFG_FLASH_QUIET_TEST
|
||||||
|
Loading…
x
Reference in New Issue
Block a user