aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorPer Ekman <pekenator@gmail.com>2013-10-24 11:54:32 +0200
committerSpencer Oliver <spen@spen-soft.co.uk>2013-11-08 15:09:00 +0000
commit88e9d0f4087a95febd9a3fcd65e65f1d478afb6b (patch)
tree161ec59f6aa9a23e10b5a52ba84fd31236161036 /src/target
parent1e6970dafdccfec388d1a816c2019f9c6b26e338 (diff)
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>
Diffstat (limited to 'src/target')
-rw-r--r--src/target/arm_adi_v5.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c
index ba8e3801..0ca0ecc6 100644
--- a/src/target/arm_adi_v5.c
+++ b/src/target/arm_adi_v5.c
@@ -671,14 +671,16 @@ int dap_syssec_kinetis_mdmap(struct adiv5_dap *dap)
* it's important that the device is out of
* reset here
*/
- retval = dap_queue_ap_read(dap, MDM_REG_STAT, &val);
- if (retval != ERROR_OK)
- return retval;
- dap_run(dap);
+ do {
+ retval = dap_queue_ap_read(dap, MDM_REG_STAT, &val);
+ if (retval != ERROR_OK)
+ 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");
if (!(val & MDM_STAT_FMEEN))