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>
This commit is contained in:
Grigori Goronzy 2014-10-30 01:14:58 +01:00 committed by Spencer Oliver
parent 4525c0a4c4
commit c4b52f8fd7
1 changed files with 8 additions and 4 deletions

View File

@ -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)