tcl/target: add SPDX tag
[fw/openocd] / tcl / target / bluenrg-x.cfg
index 3ae5108cfcd238ca7a534475748b6386671c1849..afa1b513b26981434e6274e03a4623eda0c0926f 100644 (file)
@@ -1,8 +1,11 @@
+# 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
@@ -20,21 +23,16 @@ if { [info exists WORKAREASIZE] } {
    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
 
@@ -51,23 +49,31 @@ if {![using_hla]} {
    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
+           }
+   }
 }