Skip to content
Snippets Groups Projects
Commit 45dee2e6 authored by Wolfgang Grandegger's avatar Wolfgang Grandegger Committed by Andrew Fleming-AFLEMING
Browse files

TQM85xx: Fix chip select configuration for second FLASH bank


This patch fixes the re-calculation of the automatic chip select
configuration for boards with two populated FLASH banks.

Signed-off-by: default avatarMartin Krause <martin.krause@tqs.de>
parent 46346f27
No related branches found
No related tags found
No related merge requests found
...@@ -275,52 +275,60 @@ int misc_init_r (void) ...@@ -275,52 +275,60 @@ int misc_init_r (void)
gd->bd->bi_flashoffset = 0; gd->bd->bi_flashoffset = 0;
/* /*
* Check if boot FLASH isn't max size * Recalculate CS configuration if second FLASH bank is available
*/ */
if (gd->bd->bi_flashsize < (0 - CFG_FLASH0)) { if (flash_info[0].size > 0) {
memctl->or0 = memctl->or1 = ((-flash_info[0].size) & 0xffff8000) |
gd->bd->bi_flashstart | (CFG_OR0_PRELIM & 0x00007fff); (CFG_OR1_PRELIM & 0x00007fff);
memctl->br0 = memctl->br1 = gd->bd->bi_flashstart |
gd->bd->bi_flashstart | (CFG_BR0_PRELIM & 0x00007fff); (CFG_BR1_PRELIM & 0x00007fff);
/* /*
* Re-check to get correct base address * Re-check to get correct base address for bank 1
*/ */
flash_get_size (gd->bd->bi_flashstart, CFG_MAX_FLASH_BANKS - 1); flash_get_size (gd->bd->bi_flashstart, 0);
} else {
memctl->or1 = 0;
memctl->br1 = 0;
} }
/* /*
* Check if only one FLASH bank is available * If bank 1 is equipped, bank 0 is mapped after bank 1
*/ */
if (gd->bd->bi_flashsize != CFG_MAX_FLASH_BANKS * (0 - CFG_FLASH0)) { memctl->or0 = ((-flash_info[1].size) & 0xffff8000) |
memctl->or1 = 0; (CFG_OR0_PRELIM & 0x00007fff);
memctl->br1 = 0; memctl->br0 = (gd->bd->bi_flashstart + flash_info[0].size) |
(CFG_BR0_PRELIM & 0x00007fff);
/*
* Re-check to get correct base address for bank 0
*/
flash_get_size (gd->bd->bi_flashstart + flash_info[0].size, 1);
/* /*
* Re-do flash protection upon new addresses * Re-do flash protection upon new addresses
*/ */
flash_protect (FLAG_PROTECT_CLEAR, flash_protect (FLAG_PROTECT_CLEAR,
gd->bd->bi_flashstart, 0xffffffff, gd->bd->bi_flashstart, 0xffffffff,
&flash_info[CFG_MAX_FLASH_BANKS - 1]); &flash_info[CFG_MAX_FLASH_BANKS - 1]);
/* Monitor protection ON by default */ /* Monitor protection ON by default */
flash_protect (FLAG_PROTECT_SET, flash_protect (FLAG_PROTECT_SET,
CFG_MONITOR_BASE, CFG_MONITOR_BASE,
CFG_MONITOR_BASE + monitor_flash_len - 1, CFG_MONITOR_BASE + monitor_flash_len - 1,
&flash_info[CFG_MAX_FLASH_BANKS - 1]); &flash_info[CFG_MAX_FLASH_BANKS - 1]);
/* Environment protection ON by default */ /* Environment protection ON by default */
flash_protect (FLAG_PROTECT_SET, flash_protect (FLAG_PROTECT_SET,
CFG_ENV_ADDR, CFG_ENV_ADDR,
CFG_ENV_ADDR + CFG_ENV_SECT_SIZE - 1, CFG_ENV_ADDR + CFG_ENV_SECT_SIZE - 1,
&flash_info[CFG_MAX_FLASH_BANKS - 1]); &flash_info[CFG_MAX_FLASH_BANKS - 1]);
/* Redundant environment protection ON by default */ #ifdef CFG_ENV_ADDR_REDUND
flash_protect (FLAG_PROTECT_SET, /* Redundant environment protection ON by default */
CFG_ENV_ADDR_REDUND, flash_protect (FLAG_PROTECT_SET,
CFG_ENV_ADDR_REDUND + CFG_ENV_SIZE_REDUND - 1, CFG_ENV_ADDR_REDUND,
&flash_info[CFG_MAX_FLASH_BANKS - 1]); CFG_ENV_ADDR_REDUND + CFG_ENV_SIZE_REDUND - 1,
} &flash_info[CFG_MAX_FLASH_BANKS - 1]);
#endif
return 0; return 0;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment