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]
10 # Source the ESP common configuration file
11 source [find target/esp_common.cfg]
13 if { [info exists CHIPNAME] } {
14 set _CHIPNAME $CHIPNAME
19 if { [info exists CPUTAPID] } {
20 set _CPUTAPID $CPUTAPID
22 set _CPUTAPID 0x120034e5
25 set _TARGETNAME $_CHIPNAME
27 set _TAPNAME $_CHIPNAME.$_CPUNAME
29 jtag newtap $_CHIPNAME $_CPUNAME -irlen 5 -expected-id $_CPUTAPID
31 proc esp32s2_memprot_is_enabled { } {
32 # IRAM0, DPORT_PMS_PRO_IRAM0_0_REG
33 if { [get_mmr_bit 0x3f4c1010 0] != 0 } {
36 # DRAM0, DPORT_PMS_PRO_DRAM0_0_REG
37 if { [get_mmr_bit 0x3f4c1028 0] != 0 } {
40 # PERI1, DPORT_PMS_PRO_DPORT_0_REG
41 if { [get_mmr_bit 0x3f4c103c 0] != 0 } {
44 # PERI2, DPORT_PMS_PRO_AHB_0_REG
45 if { [get_mmr_bit 0x3f4c105c 0] != 0 } {
51 target create $_TARGETNAME esp32s2 -endian little -chain-position $_TAPNAME
53 $_TARGETNAME configure -event gdb-attach {
54 # necessary to auto-probe flash bank when GDB is connected and generate proper memory map
56 if { [esp32s2_memprot_is_enabled] } {
57 # 'reset halt' to disable memory protection and allow flasher to work correctly
58 echo "Memory protection is enabled. Reset target to disable it..."
65 $_TARGETNAME configure -event examine-end {
66 # Need to enable to set 'semihosting_basedir'
67 arm semihosting enable
68 arm semihosting_resexit enable
69 if { [info exists _SEMIHOST_BASEDIR] } {
70 if { $_SEMIHOST_BASEDIR != "" } {
71 arm semihosting_basedir $_SEMIHOST_BASEDIR
76 $_TARGETNAME configure -event reset-assert-post { soft_reset_halt }
78 gdb_breakpoint_override hard
80 source [find target/xtensa-core-esp32s2.cfg]