kinetis : Fix broken check for mass erase.

If the flash is not ready (MDM_STAT_FREADY is 0) then
dap_syssec_kinetis_mdmap() would act as if the MDM_STAT_SYSSEC bit was
set and erase the flash. Wait until MDM_STAT_FREADY is set before
checking the MDM_STAT_SYSSEC bit.

Change-Id: I5c3352f625599016625ed9be8787033f49bfacea
Signed-off-by: Per Ekman <pekenator@gmail.com>
Reviewed-on: http://openocd.zylin.com/1762
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
Per Ekman 2013-10-24 11:54:32 +02:00 committed by Spencer Oliver
parent 1e6970dafd
commit 88e9d0f408
1 changed files with 8 additions and 6 deletions

View File

@ -671,14 +671,16 @@ int dap_syssec_kinetis_mdmap(struct adiv5_dap *dap)
* it's important that the device is out of * it's important that the device is out of
* reset here * reset here
*/ */
retval = dap_queue_ap_read(dap, MDM_REG_STAT, &val); do {
if (retval != ERROR_OK) retval = dap_queue_ap_read(dap, MDM_REG_STAT, &val);
return retval; if (retval != ERROR_OK)
dap_run(dap); return retval;
dap_run(dap);
LOG_DEBUG("MDM_REG_STAT %08" PRIX32, val); LOG_DEBUG("MDM_REG_STAT %08" PRIX32, val);
} while (!(val & MDM_STAT_FREADY));
if ((val & (MDM_STAT_SYSSEC|MDM_STAT_FREADY)) != (MDM_STAT_FREADY)) { if ((val & MDM_STAT_SYSSEC)) {
LOG_DEBUG("MDMAP: system is secured, masserase needed"); LOG_DEBUG("MDMAP: system is secured, masserase needed");
if (!(val & MDM_STAT_FMEEN)) if (!(val & MDM_STAT_FMEEN))