diff options
author | Grigori Goronzy <greg@chown.ath.cx> | 2014-10-30 01:14:58 +0100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2014-11-24 22:27:02 +0000 |
commit | c4b52f8fd7b06f8cec5db5cdf33fd984a255ceaa (patch) | |
tree | 895a0ed22166544ac3c8d4c9069de728ee4f5830 /src/flash/nor/lpc2000.c | |
parent | 4525c0a4c4d0aaa199c37a6d2245617e8445f213 (diff) |
lpc2000: ignore status of part ID IAP command
The IAP firmware won't return a proper status with some versions. This
happens on my CCC r0ket board and others have seen it as well [1]. So
just ignore the status code and do a (weak) consistency check instead.
[1] http://www.lpcware.com/content/forum/lpc1343-iap-read-part-identification-command
Change-Id: I0daa779d520a540629677c56857bbc20d6db422d
Signed-off-by: Grigori Goronzy <greg@chown.ath.cx>
Reviewed-on: http://openocd.zylin.com/2364
Tested-by: jenkins
Reviewed-by: Paul Fertser <fercerpav@gmail.com>
Diffstat (limited to 'src/flash/nor/lpc2000.c')
-rw-r--r-- | src/flash/nor/lpc2000.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/flash/nor/lpc2000.c b/src/flash/nor/lpc2000.c index 9c0cc1e2..2d2c1a55 100644 --- a/src/flash/nor/lpc2000.c +++ b/src/flash/nor/lpc2000.c @@ -1145,12 +1145,16 @@ static int get_lpc2000_part_id(struct flash_bank *bank, uint32_t *part_id) if (retval != ERROR_OK) return retval; - int status_code = lpc2000_iap_call(bank, iap_working_area, 54, param_table, result_table); + /* The status seems to be bogus with the part ID command on some IAP + firmwares, so ignore it. */ + lpc2000_iap_call(bank, iap_working_area, 54, param_table, result_table); - if (status_code == LPC2000_CMD_SUCCESS) - *part_id = result_table[0]; + /* If the result is zero, the command probably didn't work out. */ + if (result_table[0] == 0) + return LPC2000_INVALID_COMMAND; - return status_code; + *part_id = result_table[0]; + return LPC2000_CMD_SUCCESS; } static int lpc2000_auto_probe_flash(struct flash_bank *bank) |