tcl/esp32s2: check memory protection on gdb attach
authorErhan Kurubas <erhan.kurubas@espressif.com>
Sat, 18 Jun 2022 21:01:28 +0000 (23:01 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 2 Jul 2022 08:24:28 +0000 (08:24 +0000)
Memory protection must be disabled to allow stub flasher
operate correctly.

Signed-off-by: Erhan Kurubas <erhan.kurubas@espressif.com>
Change-Id: I2f239d98fca6882c4361691af306a5652b58ee78
Reviewed-on: https://review.openocd.org/c/openocd/+/7036
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
tcl/target/esp32s2.cfg

index ab64c313582f88f6c0383faf2e0074b6533f4c2e..8c5835da60a6ae2076c2241bdcbcc2d19b40dc8d 100644 (file)
@@ -3,6 +3,11 @@
 # The ESP32-S2 only supports JTAG.
 transport select jtag
 
+set CPU_MAX_ADDRESS 0xFFFFFFFF
+source [find bitsbytes.tcl]
+source [find memory.tcl]
+source [find mmr_helpers.tcl]
+
 if { [info exists CHIPNAME] } {
        set _CHIPNAME $CHIPNAME
 } else {
@@ -21,8 +26,38 @@ set _TAPNAME $_CHIPNAME.$_CPUNAME
 
 jtag newtap $_CHIPNAME $_CPUNAME -irlen 5 -expected-id $_CPUTAPID
 
+proc esp32s2_memprot_is_enabled { } {
+       # IRAM0, DPORT_PMS_PRO_IRAM0_0_REG
+       if { [get_mmr_bit 0x3f4c1010 0] != 0 } {
+               return 1
+       }
+       # DRAM0, DPORT_PMS_PRO_DRAM0_0_REG
+       if { [get_mmr_bit 0x3f4c1028 0] != 0 } {
+               return 1
+       }
+       # PERI1, DPORT_PMS_PRO_DPORT_0_REG
+       if { [get_mmr_bit 0x3f4c103c 0] != 0 } {
+               return 1
+       }
+       # PERI2, DPORT_PMS_PRO_AHB_0_REG
+       if { [get_mmr_bit 0x3f4c105c 0] != 0 } {
+               return 1
+       }
+       return 0
+}
+
 target create $_TARGETNAME esp32s2 -endian little -chain-position $_TAPNAME
 
+$_TARGETNAME configure -event gdb-attach {
+       # necessary to auto-probe flash bank when GDB is connected and generate proper memory map
+       halt 1000
+       if { [esp32s2_memprot_is_enabled] } {
+               # 'reset halt' to disable memory protection and allow flasher to work correctly
+               echo "Memory protection is enabled. Reset target to disable it..."
+               reset halt
+       }
+}
+
 xtensa maskisr on
 
 $_TARGETNAME configure -event reset-assert-post { soft_reset_halt }