| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- # SPDX-License-Identifier: GPL-2.0-or-later
- #
- # The ESP32-S3 only supports JTAG.
- transport select jtag
- set CPU_MAX_ADDRESS 0xFFFFFFFF
- source [find bitsbytes.tcl]
- source [find memory.tcl]
- source [find mmr_helpers.tcl]
- # Source the ESP common configuration file
- source [find target/esp_common.cfg]
- if { [info exists CHIPNAME] } {
- set _CHIPNAME $CHIPNAME
- } else {
- set _CHIPNAME esp32s3
- }
- if { [info exists CPUTAPID] } {
- set _CPUTAPID $CPUTAPID
- } else {
- set _CPUTAPID 0x120034e5
- }
- if { [info exists ESP32_S3_ONLYCPU] } {
- set _ONLYCPU $ESP32_S3_ONLYCPU
- } else {
- set _ONLYCPU 2
- }
- set _CPU0NAME cpu0
- set _CPU1NAME cpu1
- set _TARGETNAME_0 $_CHIPNAME.$_CPU0NAME
- set _TARGETNAME_1 $_CHIPNAME.$_CPU1NAME
- jtag newtap $_CHIPNAME $_CPU0NAME -irlen 5 -expected-id $_CPUTAPID
- if { $_ONLYCPU != 1 } {
- jtag newtap $_CHIPNAME $_CPU1NAME -irlen 5 -expected-id $_CPUTAPID
- } else {
- jtag newtap $_CHIPNAME $_CPU1NAME -irlen 5 -disable -expected-id $_CPUTAPID
- }
- proc esp32s3_memprot_is_enabled { } {
- # SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0_REG
- if { [get_mmr_bit 0x600C10C0 0] != 0 } {
- return 1
- }
- # SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_0_REG
- if { [get_mmr_bit 0x600C1124 0] != 0 } {
- return 1
- }
- # SENSITIVE_CORE_1_PIF_PMS_CONSTRAIN_0_REG
- if { [get_mmr_bit 0x600C11D0 0] != 0 } {
- return 1
- }
- # IRAM0, SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_0_REG
- if { [get_mmr_bit 0x600C10D8 0] != 0 } {
- return 1
- }
- # DRAM0, SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_0_REG
- if { [get_mmr_bit 0x600C10FC 0] != 0 } {
- return 1
- }
- # SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_0_REG
- if { [get_mmr_bit 0x600C10E4 0] != 0 } {
- return 1
- }
- # SENSITIVE_CORE_1_IRAM0_PMS_MONITOR_0_REG
- if { [get_mmr_bit 0x600C10F0 0] != 0 } {
- return 1
- }
- # SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_0_REG
- if { [get_mmr_bit 0x600C1104 0] != 0 } {
- return 1
- }
- # SENSITIVE_CORE_1_DRAM0_PMS_MONITOR_0_REG
- if { [get_mmr_bit 0x600C1114 0] != 0 } {
- return 1
- }
- # SENSITIVE_CORE_0_PIF_PMS_MONITOR_0_REG
- if { [get_mmr_bit 0x600C119C 0] != 0 } {
- return 1
- }
- # SENSITIVE_CORE_1_PIF_PMS_MONITOR_0_REG
- if { [get_mmr_bit 0x600C1248 0] != 0 } {
- return 1
- }
- return 0
- }
- # PRO-CPU
- target create $_TARGETNAME_0 $_CHIPNAME -endian little -chain-position $_TARGETNAME_0 -coreid 0
- # APP-CPU
- if { $_ONLYCPU != 1 } {
- target create $_TARGETNAME_1 $_CHIPNAME -endian little -chain-position $_TARGETNAME_1 -coreid 1
- target smp $_TARGETNAME_0 $_TARGETNAME_1
- }
- $_TARGETNAME_0 xtensa maskisr on
- $_TARGETNAME_0 xtensa smpbreak BreakIn BreakOut
- $_TARGETNAME_0 configure -event examine-end {
- # Need to enable to set 'semihosting_basedir'
- arm semihosting enable
- arm semihosting_resexit enable
- if { [info exists _SEMIHOST_BASEDIR] } {
- if { $_SEMIHOST_BASEDIR != "" } {
- arm semihosting_basedir $_SEMIHOST_BASEDIR
- }
- }
- }
- if { $_ONLYCPU != 1 } {
- $_TARGETNAME_1 configure -event examine-end {
- # Need to enable to set 'semihosting_basedir'
- arm semihosting enable
- arm semihosting_resexit enable
- if { [info exists _SEMIHOST_BASEDIR] } {
- if { $_SEMIHOST_BASEDIR != "" } {
- arm semihosting_basedir $_SEMIHOST_BASEDIR
- }
- }
- }
- }
- $_TARGETNAME_0 configure -event gdb-attach {
- $_TARGETNAME_0 xtensa smpbreak BreakIn BreakOut
- # necessary to auto-probe flash bank when GDB is connected and generate proper memory map
- halt 1000
- if { [esp32s3_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
- }
- }
- $_TARGETNAME_0 configure -event reset-assert-post { soft_reset_halt }
- if { $_ONLYCPU != 1 } {
- $_TARGETNAME_1 configure -event gdb-attach {
- $_TARGETNAME_1 xtensa smpbreak BreakIn BreakOut
- # necessary to auto-probe flash bank when GDB is connected
- halt 1000
- if { [esp32s3_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
- }
- }
- $_TARGETNAME_1 configure -event reset-assert-post { soft_reset_halt }
- }
- gdb_breakpoint_override hard
- source [find target/xtensa-core-esp32s3.cfg]
|