+# SPDX-License-Identifier: GPL-2.0-or-later
+
#
-# bluenrg-1/2 devices support only SWD transports.
+# bluenrg-1/2 and bluenrg-lp devices support only SWD transports.
#
source [find target/swj-dp.tcl]
+source [find mem_helper.tcl]
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
set _WORKAREASIZE 0x5F00
}
-adapter_khz 4000
+adapter speed 4000
-if { [info exists CPUTAPID] } {
- set _CPUTAPID $CPUTAPID
-} else {
- set _CPUTAPID 0x0bb11477
-}
-
-swj_newdap $_CHIPNAME cpu -expected-id $_CPUTAPID
+swj_newdap $_CHIPNAME cpu -expected-id 0x0bb11477 -expected-id 0x0bc11477
+dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
set _TARGETNAME $_CHIPNAME.cpu
set WDOG_VALUE 0
set WDOG_VALUE_SET 0
-target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME
+target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap
$_TARGETNAME configure -work-area-phys 0x20000100 -work-area-size $_WORKAREASIZE -work-area-backup 0
cortex_m reset_config sysresetreq
}
+set JTAG_IDCODE_B2 0x0200A041
+set JTAG_IDCODE_B1 0x0
+
$_TARGETNAME configure -event halted {
- global WDOG_VALUE
- global WDOG_VALUE_SET
- # Stop watchdog during halt, if enabled
- mem2array value 32 0x40700008 1
- set WDOG_VALUE [expr ($value(0))]
- if [expr ($value(0) & (1 << 1))] {
- set WDOG_VALUE_SET 1
- mww 0x40700008 [expr ($value(0) & 0xFFFFFFFD)]
- }
+ global WDOG_VALUE
+ global WDOG_VALUE_SET
+ set _JTAG_IDCODE [mrw 0x40000004]
+ if {$_JTAG_IDCODE == $JTAG_IDCODE_B2 || $_JTAG_IDCODE == $JTAG_IDCODE_B1} {
+ # Stop watchdog during halt, if enabled. Only Bluenrg-1/2
+ set WDOG_VALUE [mrw 0x40700008]
+ if [expr {$WDOG_VALUE & (1 << 1)}] {
+ set WDOG_VALUE_SET 1
+ mww 0x40700008 [expr {$WDOG_VALUE & 0xFFFFFFFD}]
+ }
+ }
}
$_TARGETNAME configure -event resumed {
- global WDOG_VALUE
- global WDOG_VALUE_SET
- if [expr $WDOG_VALUE_SET] {
- # Restore watchdog enable value after resume
- mww 0x40700008 $WDOG_VALUE
- set WDOG_VALUE_SET 0
- }
+ global WDOG_VALUE
+ global WDOG_VALUE_SET
+ set _JTAG_IDCODE [mrw 0x40000004]
+ if {$_JTAG_IDCODE == $JTAG_IDCODE_B2 || $_JTAG_IDCODE == $JTAG_IDCODE_B1} {
+ if {$WDOG_VALUE_SET} {
+ # Restore watchdog enable value after resume. Only Bluenrg-1/2
+ mww 0x40700008 $WDOG_VALUE
+ set WDOG_VALUE_SET 0
+ }
+ }
}