> eval "bar $args" And we have a winner!! Thank you!!!
I think the docs which described $args to me somehow omitted the fact that it was an array, that'd need "eval" in this routine varargs scenario... Attached is the updated patch. I'm calling it SWD infrastructure patch #1, with the second being the one with SWD transport support and the driver hooks. I'll want to commit this one first since it's (now!) innocuous ... and will send the second along after I make sure it interacts right with my driver patch. That way it'll be easier for other folk (like Simon) to add their contributions to an upcoming SWD-fest ... :) I still see debug adapter driver support coming last (before tuning and lots of fiddling). Once this does get committed, it should be easy to teach other SWJ-DP based hardware how to not care what transport is in use. STM32 being the only one with much complication (since it's got a separate JTAG TAP for boundary scan, which really ought to get declared -- iff JTAG is in use not SWD.
From: David Brownell <dbrown...@users.sourceforge.net> Subject: swj-dp.tcl (SWD infrastructure #1) Provide new helper proc that can set up either an SWD or JTAG DAP based on the transport which is in use -- mostly for SWJ-DP. Also update some SWJ-DP based chips/targets to use it. The goal is making SWD-vs-JTAG transparent in most places. SWJ-DP based chips really need this flexible configuration to cope with debug adapters that support different transports, without needing new target configs for each transport. For JTAG-DP, callers will use "jtag newtap" directly, as today; only one chip-level transport option exists. For SW-DP (e.g. LPC11xx or LPC13xx, they'll use "swd newdap" directly (part of an upcoming SWD transport patch). Again, only one transport option exists, so hard-wiring is appropriate there. Signed-off-by: David Brownell <dbrown...@users.sourceforge.net> --- tcl/target/lpc1768.cfg | 7 ++++++- tcl/target/stellaris.cfg | 17 ++++++++++++++++- tcl/target/swj-dp.tcl | 25 +++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) --- /dev/null +++ oocd/tcl/target/swj-dp.tcl @@ -0,0 +1,25 @@ +# ARM Debug Interface V5 (ADI_V5) utility +# ... Mostly for SWJ-DP (not SW-DP or JTAG-DP, since +# SW-DP and JTAG-DP targets don't need to switch based +# on which transport is active. +# +# declare a JTAG or SWD Debug Access Point (DAP) +# based on the transport in use with this session. +# You can't access JTAG ops when SWD is active, etc. + +# params are currently what "jtag newtap" uses +# because OpenOCD internals are still strongly biased +# to JTAG .... but for SWD, "irlen" etc are ignored, +# and the internals work differently + +# for now, ignore non-JTAG and non-SWD transports +# (e.g. initial flash programming via SPI or UART) + +# split out "chip" and "tag" so we can someday handle +# them more uniformly irlen too...) + +proc swj_newdap {chip tag args} { +set tran [transport select] +if [string equal $tran "jtag"] { eval jtag newtap $chip $tag $args} +if [string equal $tran "swd"] { eval swd newdap $chip $tag $args } +} --- oocd.orig/tcl/target/stellaris.cfg +++ oocd/tcl/target/stellaris.cfg @@ -1,5 +1,12 @@ # TI/Luminary Stellaris LM3S chip family +# Luminary chips support both JTAG and SWD transports. +# Adapt based on what transport is active. +source [find target/swj-dp.tcl] + +# For now we ignore the SPI and UART options, which +# are usable only for ISP style initial flash programming. + if { [info exists CHIPNAME] } { set _CHIPNAME $CHIPNAME } else { @@ -18,9 +25,17 @@ if { [info exists CPUTAPID ] } { set _CPUTAPID 0x0ba00477 } -jtag newtap $_CHIPNAME cpu -irlen 4 -irmask 0xf \ +# SWD DAP, and JTAG TAP, take same params for now; +# ... even though SWD ignores all except TAPID, and +# JTAG shouldn't need anything more then irlen. + +swj_newdap $_CHIPNAME cpu -irlen 4 -irmask 0xf \ -expected-id $_CPUTAPID -ignore-version +#jtag newtap $_CHIPNAME cpu -irlen 4 -irmask 0xf \ +# -expected-id $_CPUTAPID -ignore-version + + # The "lm3s" variant uses a software reset rather than SRST. # This stops the debug registers from being cleared; it works # around an erratum which should be fixed in later silicon. --- oocd.orig/tcl/target/lpc1768.cfg +++ oocd/tcl/target/lpc1768.cfg @@ -1,5 +1,9 @@ # NXP LPC1768 Cortex-M3 with 512kB Flash and 32kB+32kB Local On-Chip SRAM, +# LPC17xx chips support both JTAG and SWD transports. +# Adapt based on what transport is active. +source [find target/swj-dp.tcl] + if { [info exists CHIPNAME] } { set _CHIPNAME $CHIPNAME } else { @@ -31,7 +35,8 @@ jtag_ntrst_delay 200 # LPC2000 & LPC1700 -> SRST causes TRST reset_config srst_pulls_trst -jtag newtap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID +#jtag newtap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID +swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID set _TARGETNAME $_CHIPNAME.cpu target create $_TARGETNAME cortex_m3 -chain-position $_TARGETNAME
_______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development