I am unable to reset (and halt) the i.MX93 Cortex-A55 CPU using OpenOCD and JTAG without killing the debugger connection.
The i.MX93 Application Processor Reference Manual Rev 4 12/2023 section 32.2.2 src_signals_driver_ckil states that asserting the JTAG reset line (jtag_rst_b) should generate a system reset signal (system_early_rst_b).
Asserting the JTAG reset line in OpenOCD (using the ‘monitor reset’ command) resets the CPU but also kills the debugger connection.
I am using OpenOCD 0.12.0 and a Segger J-Link to assert the JTAG reset line.
What is the correct way to reset and halt the i.MX93 Cortex-A55 CPU using JTAG whilst maintaining the debugger connection?
I have included my OpenOCD configuration file and debugger output below which illustrates the issue.
OpenOCD Configuration File
source [find interface/jlink.cfg]
adapter speed 1000
reset_config srst_only srst_pulls_trst
adapter srst pulse_width 100
adapter srst delay 100
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME imx93
}
if { [info exists DAP_TAPID] } {
set _DAP_TAPID $DAP_TAPID
} else {
# Found using autoprobing.
set _DAP_TAPID 0x0892801d
}
jtag newtap $_CHIPNAME cpu -irlen 4 -expected-id $_DAP_TAPID
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
# Cortex-A55 Cores (Found using ‘dap info 1’ command).
#set _A55_DBGBASE_0 0x80810000
#set _A55_CTIBASE_0 0x80820000
#set _A55_DBGBASE_1 0x80910000
#set _A55_CTIBASE_1 0x80920000
# Cortex-A55 Cores (High bits updated to match i.MX93 Application Processor
# Reference Manual Memory Map section).
set _A55_DBGBASE_0 0x40810000
set _A55_CTIBASE_0 0x40820000
set _A55_DBGBASE_1 0x40910000
set _A55_CTIBASE_1 0x40920000
# Cortex-M33 Core (Found using ‘dap info 3’ command).
set _M33_DBGBASE_0 0xe000e000
set _M33_CTIBASE_0 0xe0042000
cti create $_CHIPNAME.a55.cti.0 -dap $_CHIPNAME.dap -ap-num 1 \
-baseaddr $_A55_CTIBASE_0
target create $_CHIPNAME.a55.0 aarch64 -dap $_CHIPNAME.dap \
-dbgbase $_A55_DBGBASE_0 -cti $_CHIPNAME.a55.cti.0 -coreid 0
cti create $_CHIPNAME.a55.cti.1 -dap $_CHIPNAME.dap -ap-num 1 \
-baseaddr $_A55_CTIBASE_1
target create $_CHIPNAME.a55.1 aarch64 -dap $_CHIPNAME.dap \
-dbgbase $_A55_DBGBASE_1 -cti $_CHIPNAME.a55.cti.1 -coreid 1 \
-defer-examine
target smp $_CHIPNAME.a55.0 $_CHIPNAME.a55.1
cti create $_CHIPNAME.m33.cti.0 -dap $_CHIPNAME.dap -ap-num 3 \
-baseaddr $_M33_CTIBASE_0
target create $_CHIPNAME.m33.0 aarch64 -dap $_CHIPNAME.dap \
-dbgbase $_M33_DBGBASE_0 -cti $_CHIPNAME.m33.cti.0 -coreid 0 \
-defer-examine
OpenOCD Output Before Reset
Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : J-Link ARM V8 compiled Dec 1 2009 11:42:48
Info : Hardware version: 8.00
Info : VTarget = 3.280 V
Info : clock speed 1000 kHz
Info : JTAG tap: imx93.cpu tap/device found: 0x0892801d (mfg: 0x00e (Freescale (Motorola)), part: 0x8928, ver: 0x0)
Info : imx93.a55.0: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for imx93.a55.0 on 3333
Info : Listening on port 3333 for gdb connections
Info : starting gdb server for imx93.m33.0 on 3334
Info : Listening on port 3334 for gdb connections
GDB Debugger Output Before Reset
GNU gdb (Debian 13.2-1) 13.2
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) target extended-remote localhost:3333
Remote debugging using localhost:3333
warning: No executable has been specified and target does not support
determining executable automatically. Try using the "file" command.
0xffff8000080c563c in ?? ()
(gdb) stepi
0xffff8000080c5640 in ?? ()
(gdb)
OpenOCD Output After Reset
Info : accepting 'gdb' connection on tcp/3333
Info : imx93.a55.0 cluster 0 core 0 multi core
imx93.a55.0 halted in AArch64 state due to debug-request, current mode: EL2H
cpsr: 0x004003c9 pc: 0xffff8000080c563c
MMU: enabled, D-Cache: enabled, I-Cache: enabled
Info : New GDB Connection: 1, Target imx93.a55.0, state: halted
Error: JTAG scan chain interrogation failed: all ones
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway...
Error: imx93.cpu: IR capture error; saw 0x0f not 0x01
Warn : Bypassing JTAG setup events due to errors
Error: Invalid ACK (7) in DAP response
Error: JTAG-DP STICKY ERROR
Info : Deferring arp_examine of imx93.a55.1
Info : Use arp_examine command to examine it manually!
Info : Deferring arp_examine of imx93.m33.0
Info : Use arp_examine command to examine it manually!
Error: Invalid ACK (7) in DAP response
Error: JTAG-DP STICKY ERROR
Error: Could not initialize the APB-AP
GDB Debugger Output After Reset
(gdb) monitor reset halt
JTAG scan chain interrogation failed: all ones
Check JTAG interface, timings, target power, etc.
Trying to use configured scan chain anyway...
imx93.cpu: IR capture error; saw 0x0f not 0x01
Bypassing JTAG setup events due to errors
Invalid ACK (7) in DAP response
JTAG-DP STICKY ERROR
Deferring arp_examine of imx93.a55.1
Use arp_examine command to examine it manually!
Deferring arp_examine of imx93.m33.0
Use arp_examine command to examine it manually!
Invalid ACK (7) in DAP response
JTAG-DP STICKY ERROR
Could not initialize the APB-AP
TARGET: imx93.a55.0 - Not examined
Protocol error with Rcmd
(gdb) stepi
target not halted
target imx93.a55.0 was not halted when step was requested
^CThe target is not running when halt was requested, stopping GDB.
Could not read registers; remote failure reply 'E0E'
(gdb)
Hello,
Could you please share me which silicon revision are you using?
Best regards.
Hey JorgeCas,
I am using revision 1.0.
Kind regards,
Brendon
Hello,
This could be an issue related to silicon revision 1.0.
Is it possible to try with a 2.0 silicon revision?
Best regards.
Hey JorgeCas,
Unfortunately it won't be possible to try a different silicon revision.
Kind regards,
Brendon