flash/nor/at91sam4: fix sam4sa16c flash banks and its gpnvms count
There was already a github fork that had this fixed, but as we try to use the latest, non-modified version of all software we use, I would like to have this fix in the next releases of OpenOCD so that if people uses $packagemanager, they will not have issues flashing the last part of the flash of sam4sa16c chips. Additionally, I've added some more logging related to the flash bank that was used, and the chip ID that was detected. Change-Id: I7ea5970105906e4560b727e46222ae9a91e41559 Signed-off-by: Erwin Oegema <blablaechthema@hotmail.com> Reviewed-on: http://openocd.zylin.com/4599 Reviewed-by: Tomas Vanek <vanekt@fbl.cz> Tested-by: jenkins
This commit is contained in:
parent
3e84da55a6
commit
c4c14d614b
|
@ -682,6 +682,40 @@ static const struct sam4_chip_details all_sam4_details[] = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
/*at91sam4sa16c - TFBGA100/VFBGA100/LQFP100*/
|
||||||
|
{
|
||||||
|
.chipid_cidr = 0x28a70ce0,
|
||||||
|
.name = "at91sam4sa16c",
|
||||||
|
.total_flash_size = 1024 * 1024,
|
||||||
|
.total_sram_size = 160 * 1024,
|
||||||
|
.n_gpnvms = 2,
|
||||||
|
.n_banks = 1,
|
||||||
|
|
||||||
|
/* .bank[0] = { */
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.probed = 0,
|
||||||
|
.pChip = NULL,
|
||||||
|
.pBank = NULL,
|
||||||
|
.bank_number = 0,
|
||||||
|
.base_address = FLASH_BANK_BASE_S,
|
||||||
|
.controller_address = 0x400e0a00,
|
||||||
|
.flash_wait_states = 5,
|
||||||
|
.present = 1,
|
||||||
|
.size_bytes = 1024 * 1024,
|
||||||
|
.nsectors = 128,
|
||||||
|
.sector_size = 8192,
|
||||||
|
.page_size = 512,
|
||||||
|
},
|
||||||
|
/* .bank[1] = {*/
|
||||||
|
{
|
||||||
|
.present = 0,
|
||||||
|
.probed = 0,
|
||||||
|
.bank_number = 1,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
/*atsam4s16b - LQFP64/QFN64/WLCSP64*/
|
/*atsam4s16b - LQFP64/QFN64/WLCSP64*/
|
||||||
{
|
{
|
||||||
.chipid_cidr = 0x289C0CE0,
|
.chipid_cidr = 0x289C0CE0,
|
||||||
|
@ -1243,50 +1277,6 @@ static const struct sam4_chip_details all_sam4_details[] = {
|
||||||
.page_size = 512,
|
.page_size = 512,
|
||||||
},
|
},
|
||||||
|
|
||||||
/* .bank[1] = { */
|
|
||||||
{
|
|
||||||
.probed = 0,
|
|
||||||
.pChip = NULL,
|
|
||||||
.pBank = NULL,
|
|
||||||
.bank_number = 1,
|
|
||||||
.base_address = FLASH_BANK1_BASE_1024K_SD,
|
|
||||||
.controller_address = 0x400e0c00,
|
|
||||||
.flash_wait_states = 5,
|
|
||||||
.present = 1,
|
|
||||||
.size_bytes = 512 * 1024,
|
|
||||||
.nsectors = 64,
|
|
||||||
.sector_size = 8192,
|
|
||||||
.page_size = 512,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
/*at91sam4sa16c*/
|
|
||||||
{
|
|
||||||
.chipid_cidr = 0x28a70ce0,
|
|
||||||
.name = "at91sam4sa16c",
|
|
||||||
.total_flash_size = 1024 * 1024,
|
|
||||||
.total_sram_size = 160 * 1024,
|
|
||||||
.n_gpnvms = 3,
|
|
||||||
.n_banks = 2,
|
|
||||||
|
|
||||||
/* .bank[0] = { */
|
|
||||||
{
|
|
||||||
{
|
|
||||||
.probed = 0,
|
|
||||||
.pChip = NULL,
|
|
||||||
.pBank = NULL,
|
|
||||||
.bank_number = 0,
|
|
||||||
.base_address = FLASH_BANK0_BASE_SD,
|
|
||||||
.controller_address = 0x400e0a00,
|
|
||||||
.flash_wait_states = 5,
|
|
||||||
.present = 1,
|
|
||||||
.size_bytes = 512 * 1024,
|
|
||||||
.nsectors = 64,
|
|
||||||
.sector_size = 8192,
|
|
||||||
.page_size = 512,
|
|
||||||
},
|
|
||||||
|
|
||||||
/* .bank[1] = { */
|
/* .bank[1] = { */
|
||||||
{
|
{
|
||||||
.probed = 0,
|
.probed = 0,
|
||||||
|
@ -2554,6 +2544,8 @@ static int sam4_GetDetails(struct sam4_bank_private *pPrivate)
|
||||||
pPrivate->pChip->cfg.CHIPID_CIDR);
|
pPrivate->pChip->cfg.CHIPID_CIDR);
|
||||||
sam4_explain_chipid_cidr(pPrivate->pChip);
|
sam4_explain_chipid_cidr(pPrivate->pChip);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
} else {
|
||||||
|
LOG_INFO("SAM4 Found chip %s, CIDR 0x%08x", pDetails->name, pDetails->chipid_cidr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DANGER: THERE ARE DRAGONS HERE */
|
/* DANGER: THERE ARE DRAGONS HERE */
|
||||||
|
@ -2624,6 +2616,7 @@ static int _sam4_probe(struct flash_bank *bank, int noise)
|
||||||
for (x = 0; x < SAM4_MAX_FLASH_BANKS; x++) {
|
for (x = 0; x < SAM4_MAX_FLASH_BANKS; x++) {
|
||||||
if (bank->base == pPrivate->pChip->details.bank[x].base_address) {
|
if (bank->base == pPrivate->pChip->details.bank[x].base_address) {
|
||||||
bank->size = pPrivate->pChip->details.bank[x].size_bytes;
|
bank->size = pPrivate->pChip->details.bank[x].size_bytes;
|
||||||
|
LOG_INFO("SAM4 Set flash bank to %08X - %08X, idx %d", bank->base, bank->base + bank->size, x);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue