lpcspifi: Fix SWD support for LPC43xx
When using SWD rather than JTAG transport, the lpcspifi driver complains: Error: Device ID 0x0 is not known as SPIFI capable Error: auto_probe failed This is because target's JTAG tap->idcode is zero for SWD. Drop this check completely and hardcode the addresses for now. Neither the JTAG TAPID nor the SWD IDCODE are unique enough to detect the exact chip model and thereby its memory map. Change-Id: Ic230e3e989a3e1f1a5b3bae68bdb34e5ef55d392 Signed-off-by: Andreas Färber <afaerber@suse.de> Reviewed-on: http://openocd.zylin.com/3089 Tested-by: jenkins Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>__archive__
parent
679ae2a98d
commit
a7a1b93004
|
@ -58,21 +58,6 @@ struct lpcspifi_flash_bank {
|
||||||
const struct flash_device *dev;
|
const struct flash_device *dev;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lpcspifi_target {
|
|
||||||
char *name;
|
|
||||||
uint32_t tap_idcode;
|
|
||||||
uint32_t spifi_base;
|
|
||||||
uint32_t ssp_base;
|
|
||||||
uint32_t io_base;
|
|
||||||
uint32_t ioconfig_base; /* base address for the port word pin registers */
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct lpcspifi_target target_devices[] = {
|
|
||||||
/* name, tap_idcode, spifi_base, ssp_base, io_base, ioconfig_base */
|
|
||||||
{ "LPC43xx/18xx", 0x4ba00477, 0x14000000, 0x40083000, 0x400F4000, 0x40086000 },
|
|
||||||
{ NULL, 0, 0, 0, 0, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
/* flash_bank lpcspifi <base> <size> <chip_width> <bus_width> <target>
|
/* flash_bank lpcspifi <base> <size> <chip_width> <bus_width> <target>
|
||||||
*/
|
*/
|
||||||
FLASH_BANK_COMMAND_HANDLER(lpcspifi_flash_bank_command)
|
FLASH_BANK_COMMAND_HANDLER(lpcspifi_flash_bank_command)
|
||||||
|
@ -852,14 +837,9 @@ static int lpcspifi_read_flash_id(struct flash_bank *bank, uint32_t *id)
|
||||||
|
|
||||||
static int lpcspifi_probe(struct flash_bank *bank)
|
static int lpcspifi_probe(struct flash_bank *bank)
|
||||||
{
|
{
|
||||||
struct target *target = bank->target;
|
|
||||||
struct lpcspifi_flash_bank *lpcspifi_info = bank->driver_priv;
|
struct lpcspifi_flash_bank *lpcspifi_info = bank->driver_priv;
|
||||||
uint32_t ssp_base;
|
|
||||||
uint32_t io_base;
|
|
||||||
uint32_t ioconfig_base;
|
|
||||||
struct flash_sector *sectors;
|
struct flash_sector *sectors;
|
||||||
uint32_t id = 0; /* silence uninitialized warning */
|
uint32_t id = 0; /* silence uninitialized warning */
|
||||||
const struct lpcspifi_target *target_device;
|
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
/* If we've already probed, we should be fine to skip this time. */
|
/* If we've already probed, we should be fine to skip this time. */
|
||||||
|
@ -867,26 +847,11 @@ static int lpcspifi_probe(struct flash_bank *bank)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
lpcspifi_info->probed = 0;
|
lpcspifi_info->probed = 0;
|
||||||
|
|
||||||
for (target_device = target_devices ; target_device->name ; ++target_device)
|
lpcspifi_info->ssp_base = 0x40083000;
|
||||||
if (target_device->tap_idcode == target->tap->idcode)
|
lpcspifi_info->io_base = 0x400F4000;
|
||||||
break;
|
lpcspifi_info->ioconfig_base = 0x40086000;
|
||||||
if (!target_device->name) {
|
|
||||||
LOG_ERROR("Device ID 0x%" PRIx32 " is not known as SPIFI capable",
|
|
||||||
target->tap->idcode);
|
|
||||||
return ERROR_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssp_base = target_device->ssp_base;
|
|
||||||
io_base = target_device->io_base;
|
|
||||||
ioconfig_base = target_device->ioconfig_base;
|
|
||||||
lpcspifi_info->ssp_base = ssp_base;
|
|
||||||
lpcspifi_info->io_base = io_base;
|
|
||||||
lpcspifi_info->ioconfig_base = ioconfig_base;
|
|
||||||
lpcspifi_info->bank_num = bank->bank_number;
|
lpcspifi_info->bank_num = bank->bank_number;
|
||||||
|
|
||||||
LOG_DEBUG("Valid SPIFI on device %s at address 0x%" PRIx32,
|
|
||||||
target_device->name, bank->base);
|
|
||||||
|
|
||||||
/* read and decode flash ID; returns in SW mode */
|
/* read and decode flash ID; returns in SW mode */
|
||||||
retval = lpcspifi_read_flash_id(bank, &id);
|
retval = lpcspifi_read_flash_id(bank, &id);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
|
|
Loading…
Reference in New Issue