Using openocd to debug smp linux on sabre sdp

Hi,

I am trying to setup jtag for debugging smp linux on sabre sdp using olimex-jtag-tiny.

Had posted it on NXP forum(Sabre sdp board manufacturers… earlier was freescale) but was suggested to post on openocd forum. Looks like not much smp support is present in openocd. Manufacturer specifies ARM RealView and DS-5, but its too expensive :doh:

Basic connection is working with imx6.cfg :

~/openocd/openocd-0.10.0$ openocd -f tcl/interface/ftdi/olimex-jtag-tiny.cfg -f tcl/target/imx6.cfg 
Open On-Chip Debugger 0.10.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>'.
Warn : imx6.sdma: nonstandard IR value
adapter speed: 1000 kHz
Info : clock speed 1000 kHz
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: imx6.dap: IR capture error; saw 0x0f not 0x01
Warn : Bypassing JTAG setup events due to errors
Info : imx6.cpu.0: hardware has 6 breakpoints, 4 watchpoints

I’m not sure with only imx6.cfg I’ll be able to debug linux on other cores. Reading through openocd configuration help and various forum posts, it looks like I need to modify imx6.cfg file to add more target cores. So I have modi fied the imx6.cfg as below:

# Freescale i.MX6 series single/dual/quad core processor
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME imx6
}
# CoreSight Debug Access Port
if { [info exists DAP_TAPID] } {
set _DAP_TAPID $DAP_TAPID
} else {
set _DAP_TAPID 0x4ba00477
}
jtag newtap $_CHIPNAME dap -irlen 4 -ircapture 0x01 -irmask 0x0f \
-expected-id $_DAP_TAPID
# SDMA / no IDCODE
jtag newtap $_CHIPNAME sdma -irlen 4 -ircapture 0x00 -irmask 0x0f
# System JTAG Controller
if { [info exists SJC_TAPID] } {
set _SJC_TAPID $SJC_TAPID
} else {
set _SJC_TAPID 0x0191c01d
}
set _SJC_TAPID2 0x2191c01d 
set _SJC_TAPID3 0x2191e01d
set _SJC_TAPID4 0x1191c01d
jtag newtap $_CHIPNAME sjc -irlen 5 -ircapture 0x01 -irmask 0x1f \
-expected-id $_SJC_TAPID -expected-id $_SJC_TAPID2 \
-expected-id $_SJC_TAPID3 -expected-id $_SJC_TAPID4
# GDB target: Cortex-A9, using DAP, configuring only one core
# Base addresses of cores:
# core 0 - 0x82150000
# core 1 - 0x82152000
# core 2 - 0x82154000
# core 3 - 0x82156000
set _TARGETNAME_1 $_CHIPNAME.cpu.0
target create $_TARGETNAME_1 cortex_a -chain-position $_CHIPNAME.dap \
-coreid 0 -dbgbase 0x82150000
set _TARGETNAME_2 $_CHIPNAME.cpu.1
target create imx6.cpu.1 cortex_a -chain-position $_CHIPNAME.dap \
-coreid 1 -dbgbase 0x82152000
set _TARGETNAME_3 $_CHIPNAME.cpu.2
target create $_TARGETNAME_3 cortex_a -chain-position $_CHIPNAME.dap \
-coreid 2 -dbgbase 0x82154000
set _TARGETNAME_4 $_CHIPNAME.cpu.3
target create $_TARGETNAME_4 cortex_a -chain-position $_CHIPNAME.dap \
-coreid 3 -dbgbase 0x82156000
target smp $_TARGETNAME_1 $_TARGETNAME_2 $_TARGETNAME_3 $_TARGETNAME_4
#
# some TCK cycles are required to activate the DEBUG power domain
jtag configure $_CHIPNAME.sjc -event post-reset "runtest 100"
proc imx6_dbginit {target} {
# General Cortex-A8/A9 debug initialisation
cortex_a dbginit
}
# Slow speed to be sure it will work
adapter_khz 1000
$_TARGETNAME_1 configure -event reset-start { adapter_khz 1000 }
$_TARGETNAME_1 configure -event reset-assert-post "imx6_dbginit $_TARGETNAME_1"
$_TARGETNAME_1 configure -event gdb-attach { halt }

But now with this configuration I am getting

~/openocd/openocd-0.10.0$ openocd -f tcl/interface/ftdi/olimex-jtag-tiny.cfg -f tcl/target/imx6_understood.cfg
Open On-Chip Debugger 0.10.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>'.
Warn : imx6.sdma: nonstandard IR value
adapter speed: 1000 kHz
Info : clock speed 1000 kHz
Info : JTAG tap: imx6.dap tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x4)
Info : TAP imx6.sdma does not have IDCODE
Info : JTAG tap: imx6.sjc tap/device found: 0x2191c01d (mfg: 0x00e (Freescale (Motorola)), part: 0x191c, ver: 0x2)
Info : imx6.cpu.0: hardware has 6 breakpoints, 4 watchpoints
Error: Timeout during WAIT recovery
Error: JTAG-DP STICKY ERROR
Polling target imx6.cpu.0 failed, trying to reexamine
Error: JTAG-DP STICKY ERROR
Error: Could not initialize the APB-AP
Examination failed, GDB will be halted. Polling again in 100ms
Error: JTAG-DP STICKY ERROR
Polling target imx6.cpu.0 failed, trying to reexamine
Error: JTAG-DP STICKY ERROR
Error: Could not initialize the APB-AP
Examination failed, GDB will be halted. Polling again in 300ms
Error: JTAG-DP STICKY ERROR
Polling target imx6.cpu.0 failed, trying to reexamine
Error: JTAG-DP STICKY ERROR
Error: Could not initialize the APB-AP
Examination failed, GDB will be halted. Polling again in 700ms
Error: JTAG-DP STICKY ERROR
Polling target imx6.cpu.0 failed, trying to reexamine
Error: JTAG-DP STICKY ERROR
Error: Could not initialize the APB-AP
Examination failed, GDB will be halted. Polling again in 1500ms

Has anyone been able to get openocd for multiple cores working on imx6. Any board config files or any help/pointers

will be deeply appreciated :slight_smile: