flash/nor/kinetis: pull SRST low during mass erase

Mass erase operation might be impacted by different factors,
apparently the most reliable way is to do it while asserting the chip
reset line.

Change-Id: Id6ab57eaec86e402ffdf4f5c8843e7735640f03e
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/2424
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
__archive__
Paul Fertser 2014-12-05 13:18:36 +03:00
parent 1fa4c728aa
commit 08da1b4258
1 changed files with 12 additions and 0 deletions

View File

@ -31,6 +31,7 @@
#include "config.h"
#endif
#include "jtag/interface.h"
#include "imp.h"
#include <helper/binarybuffer.h>
#include <target/algorithm.h>
@ -313,6 +314,14 @@ COMMAND_HANDLER(kinetis_mdm_mass_erase)
* Reset Request bit in the MDM-AP control register after
* establishing communication...
*/
/* assert SRST */
if (jtag_get_reset_config() & RESET_HAS_SRST)
adapter_assert_reset();
else
LOG_WARNING("Attempting mass erase without hardware reset. This is not reliable; "
"it's recommended you connect SRST and use ``reset_config srst_only''.");
dap_ap_select(dap, 1);
retval = kinetis_mdm_write_register(dap, MDM_REG_CTRL, MEM_CTRL_SYS_RES_REQ);
@ -364,6 +373,9 @@ COMMAND_HANDLER(kinetis_mdm_mass_erase)
if (retval != ERROR_OK)
return retval;
if (jtag_get_reset_config() & RESET_HAS_SRST)
adapter_deassert_reset();
dap_ap_select(dap, original_ap);
return ERROR_OK;
}