diff options
author | Tomas Vanek <vanekt@fbl.cz> | 2016-07-17 16:22:47 +0200 |
---|---|---|
committer | Andreas Fritiofson <andreas.fritiofson@gmail.com> | 2016-08-14 09:10:06 +0100 |
commit | 6d5b4d709cb05e8daf0350ac507b928da95d0abb (patch) | |
tree | c4cb5f4b88d3ca9be5d458a9d8533fb6aeec3dad /tcl | |
parent | 8285ec4cb06b8809761717a6ac420112ea7b2908 (diff) | |
download | riscv-openocd-6d5b4d709cb05e8daf0350ac507b928da95d0abb.zip riscv-openocd-6d5b4d709cb05e8daf0350ac507b928da95d0abb.tar.gz riscv-openocd-6d5b4d709cb05e8daf0350ac507b928da95d0abb.tar.bz2 |
flash Kinetis: Detect RESET/WDOG loop, fix detection of secured MCU
Kinetis driver checks MDM STAT register to detect secured state of MCU.
Original version often reported a blank device as secured one.
Change #3010 has not fixed all false reports.
After changes in arm_adi_v5 infrastructure secured devices was not detected
at all.
New algorithm uses multiple MDM STAT reads and counts MDM_STAT_SYSSEC and
MDM_STAT_FREADY bits. Both secured MCU and MCU locked-up in RESET/WDOG loop
are detected reliably.
Detection is run in both kx.cfg and klx.cfg from examine-start event,
not examine-end as before. Event is configured only for non hla adapter.
Minor fix in klx.cfg: commented out adapter_khz 24000 in reset-init.
Such frequency is not supported in VLPR CPU mode and with JTAG.
Change-Id: I2ec2b68c45bde9898159cd15fbdcbcfa538c41d9
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: http://openocd.zylin.com/3547
Tested-by: jenkins
Reviewed-by: Steven Stallion <stallion@squareup.com>
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'tcl')
-rw-r--r-- | tcl/target/klx.cfg | 26 | ||||
-rw-r--r-- | tcl/target/kx.cfg | 13 |
2 files changed, 17 insertions, 22 deletions
diff --git a/tcl/target/klx.cfg b/tcl/target/klx.cfg index d2d2c28..0df6612 100644 --- a/tcl/target/klx.cfg +++ b/tcl/target/klx.cfg @@ -29,14 +29,6 @@ swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID set _TARGETNAME $_CHIPNAME.cpu target create $_TARGETNAME cortex_m -chain-position $_CHIPNAME.cpu -# It is important that "kinetis mdm check_security" is called for -# 'examine-end' event and not 'eximine-start'. Calling it in 'examine-start' -# causes "kinetis mdm check_security" to fail the first time openocd -# calls it when it tries to connect after the CPU has been power-cycled. -$_CHIPNAME.cpu configure -event examine-end { - kinetis mdm check_security -} - $_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0 set _FLASHNAME $_CHIPNAME.flash @@ -49,14 +41,20 @@ adapter_khz 1000 reset_config srst_nogate if {![using_hla]} { + # Detect secured MCU or boot lock-up in RESET/WDOG loop + $_CHIPNAME.cpu configure -event examine-start { + kinetis mdm check_security + } + # if srst is not fitted use SYSRESETREQ to # perform a soft reset cortex_m reset_config sysresetreq } -$_TARGETNAME configure -event reset-init { - # Table 5-1. Clock Summary of KL25 Sub-Family Reference Manual - # specifies up to 24MHz for run mode; Table 17 of Sub-Family Data - # Sheet rev4 lists 25MHz as the maximum frequency. - adapter_khz 24000 -} +# Table 5-1. Clock Summary of KL25 Sub-Family Reference Manual +# specifies up to 24MHz for run mode; Table 17 of Sub-Family Data +# Sheet rev4 lists 25MHz as the maximum frequency. +# Uncoment only if VLPR mode is not used +#$_TARGETNAME configure -event reset-init { +# adapter_khz 24000 +#} diff --git a/tcl/target/kx.cfg b/tcl/target/kx.cfg index ad76ac6..b39ee3d 100644 --- a/tcl/target/kx.cfg +++ b/tcl/target/kx.cfg @@ -33,14 +33,6 @@ swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPU set _TARGETNAME $_CHIPNAME.cpu target create $_TARGETNAME cortex_m -chain-position $_CHIPNAME.cpu -# It is important that "kinetis mdm check_security" is called for -# 'examine-end' event and not 'eximine-start'. Calling it in 'examine-start' -# causes "kinetis mdm check_security" to fail the first time openocd -# calls it when it tries to connect after the CPU has been power-cycled. -$_CHIPNAME.cpu configure -event examine-end { - kinetis mdm check_security -} - $_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0 set _FLASHNAME $_CHIPNAME.flash @@ -51,6 +43,11 @@ adapter_khz 1000 reset_config srst_nogate if {![using_hla]} { + # Detect secured MCU or boot lock-up in RESET/WDOG loop + $_CHIPNAME.cpu configure -event examine-start { + kinetis mdm check_security + } + # if srst is not fitted use SYSRESETREQ to # perform a soft reset cortex_m reset_config sysresetreq |