From: Andreas Färber Date: Sun, 12 Jul 2015 13:45:20 +0000 (+0200) Subject: lpcspifi: Fix SWD support for LPC43xx X-Git-Tag: v0.10.0-rc1~165 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=a7a1b93004e31eb20b318c78efaa2bc3edc17ad9 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 Reviewed-on: http://openocd.zylin.com/3089 Tested-by: jenkins Reviewed-by: Freddie Chopin --- diff --git a/src/flash/nor/lpcspifi.c b/src/flash/nor/lpcspifi.c index 63901493c0..8d367e40a7 100644 --- a/src/flash/nor/lpcspifi.c +++ b/src/flash/nor/lpcspifi.c @@ -58,21 +58,6 @@ struct lpcspifi_flash_bank { 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 */ 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) { - struct target *target = bank->target; 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; uint32_t id = 0; /* silence uninitialized warning */ - const struct lpcspifi_target *target_device; int retval; /* 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; lpcspifi_info->probed = 0; - for (target_device = target_devices ; target_device->name ; ++target_device) - if (target_device->tap_idcode == target->tap->idcode) - break; - 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->ssp_base = 0x40083000; + lpcspifi_info->io_base = 0x400F4000; + lpcspifi_info->ioconfig_base = 0x40086000; 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 */ retval = lpcspifi_read_flash_id(bank, &id); if (retval != ERROR_OK)