tcl/target: add SPDX tag
[fw/openocd] / tcl / target / bluenrg-x.cfg
1 # SPDX-License-Identifier: GPL-2.0-or-later
2
3 #
4 # bluenrg-1/2 and bluenrg-lp devices support only SWD transports.
5 #
6
7 source [find target/swj-dp.tcl]
8 source [find mem_helper.tcl]
9
10 if { [info exists CHIPNAME] } {
11    set _CHIPNAME $CHIPNAME
12 } else {
13    set _CHIPNAME bluenrg-1
14 }
15
16 set _ENDIAN little
17
18 # Work-area is a space in RAM used for flash programming
19 # By default use 24kB-256bytes
20 if { [info exists WORKAREASIZE] } {
21    set _WORKAREASIZE $WORKAREASIZE
22 } else {
23    set _WORKAREASIZE 0x5F00
24 }
25
26 adapter speed 4000
27
28 swj_newdap $_CHIPNAME cpu -expected-id 0x0bb11477 -expected-id 0x0bc11477
29 dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
30
31 set _TARGETNAME $_CHIPNAME.cpu
32 set WDOG_VALUE 0
33 set WDOG_VALUE_SET 0
34
35 target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap
36
37 $_TARGETNAME configure -work-area-phys 0x20000100 -work-area-size $_WORKAREASIZE -work-area-backup 0
38
39 # flash size will be probed
40 set _FLASHNAME $_CHIPNAME.flash
41 flash bank $_FLASHNAME bluenrg-x 0 0 0 0 $_TARGETNAME
42
43 # In BlueNRG-X reset pin is actually a shutdown (power-off), so define reset as none
44 reset_config none
45
46 if {![using_hla]} {
47    # if srst is not fitted use SYSRESETREQ to
48    # perform a soft reset
49    cortex_m reset_config sysresetreq
50 }
51
52 set JTAG_IDCODE_B2 0x0200A041
53 set JTAG_IDCODE_B1 0x0
54
55 $_TARGETNAME configure -event halted {
56     global WDOG_VALUE
57     global WDOG_VALUE_SET
58     set _JTAG_IDCODE [mrw 0x40000004]
59     if {$_JTAG_IDCODE == $JTAG_IDCODE_B2 || $_JTAG_IDCODE == $JTAG_IDCODE_B1} {
60         # Stop watchdog during halt, if enabled. Only Bluenrg-1/2
61         set WDOG_VALUE [mrw 0x40700008]
62         if [expr {$WDOG_VALUE & (1 << 1)}] {
63             set WDOG_VALUE_SET 1
64             mww 0x40700008 [expr {$WDOG_VALUE & 0xFFFFFFFD}]
65         }
66     }
67 }
68 $_TARGETNAME configure -event resumed {
69     global WDOG_VALUE
70     global WDOG_VALUE_SET
71     set _JTAG_IDCODE [mrw 0x40000004]
72     if {$_JTAG_IDCODE == $JTAG_IDCODE_B2 || $_JTAG_IDCODE == $JTAG_IDCODE_B1} {
73         if {$WDOG_VALUE_SET} {
74             # Restore watchdog enable value after resume. Only Bluenrg-1/2
75             mww 0x40700008 $WDOG_VALUE
76             set WDOG_VALUE_SET 0
77            }
78    }
79 }