1 # SPDX-License-Identifier: GPL-2.0-or-later
3 # The ESP32-S2 only supports JTAG.
6 set CPU_MAX_ADDRESS 0xFFFFFFFF
7 source [find bitsbytes.tcl]
8 source [find memory.tcl]
9 source [find mmr_helpers.tcl]
11 if { [info exists CHIPNAME] } {
12 set _CHIPNAME $CHIPNAME
17 if { [info exists CPUTAPID] } {
18 set _CPUTAPID $CPUTAPID
20 set _CPUTAPID 0x120034e5
23 set _TARGETNAME $_CHIPNAME
25 set _TAPNAME $_CHIPNAME.$_CPUNAME
27 jtag newtap $_CHIPNAME $_CPUNAME -irlen 5 -expected-id $_CPUTAPID
29 proc esp32s2_memprot_is_enabled { } {
30 # IRAM0, DPORT_PMS_PRO_IRAM0_0_REG
31 if { [get_mmr_bit 0x3f4c1010 0] != 0 } {
34 # DRAM0, DPORT_PMS_PRO_DRAM0_0_REG
35 if { [get_mmr_bit 0x3f4c1028 0] != 0 } {
38 # PERI1, DPORT_PMS_PRO_DPORT_0_REG
39 if { [get_mmr_bit 0x3f4c103c 0] != 0 } {
42 # PERI2, DPORT_PMS_PRO_AHB_0_REG
43 if { [get_mmr_bit 0x3f4c105c 0] != 0 } {
49 target create $_TARGETNAME esp32s2 -endian little -chain-position $_TAPNAME
51 $_TARGETNAME configure -event gdb-attach {
52 # necessary to auto-probe flash bank when GDB is connected and generate proper memory map
54 if { [esp32s2_memprot_is_enabled] } {
55 # 'reset halt' to disable memory protection and allow flasher to work correctly
56 echo "Memory protection is enabled. Reset target to disable it..."
63 $_TARGETNAME configure -event reset-assert-post { soft_reset_halt }
65 gdb_breakpoint_override hard