2009-11-17 10:29:20 -06:00
|
|
|
# Defines basic Tcl procs for OpenOCD JTAG module
|
|
|
|
|
|
|
|
# Executed during "init". Can be overridden
|
|
|
|
# by board/target/... scripts
|
|
|
|
proc jtag_init {} {
|
|
|
|
if {[catch {jtag arp_init} err]!=0} {
|
|
|
|
# try resetting additionally
|
|
|
|
init_reset startup
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-11-21 21:41:21 -06:00
|
|
|
# This reset logic may be overridden by board/target/... scripts as needed
|
|
|
|
# to provide a reset that, if possible, is close to a power-up reset.
|
|
|
|
#
|
|
|
|
# Exit requirements include: (a) JTAG must be working, (b) the scan
|
|
|
|
# chain was validated with "jtag arp_init" (or equivalent), (c) nothing
|
|
|
|
# stays in reset. No TAP-specific scans were performed. It's OK if
|
|
|
|
# some targets haven't been reset yet; they may need TAP-specific scans.
|
|
|
|
#
|
|
|
|
# The "mode" values include: halt, init, run (from "reset" command);
|
|
|
|
# startup (at OpenOCD server startup, when JTAG may not yet work); and
|
|
|
|
# potentially more (for reset types like cold, warm, etc)
|
|
|
|
proc init_reset { mode } {
|
2014-03-01 12:40:54 -06:00
|
|
|
if {[using_jtag]} {
|
|
|
|
jtag arp_init-reset
|
|
|
|
}
|
2009-11-21 21:41:21 -06:00
|
|
|
}
|
|
|
|
|
2009-11-17 10:29:20 -06:00
|
|
|
#########
|
|
|
|
|
|
|
|
# TODO: power_restore and power_dropout are currently neither
|
2020-11-01 05:30:27 -06:00
|
|
|
# documented nor supported.
|
2009-11-17 10:29:20 -06:00
|
|
|
|
|
|
|
proc power_restore {} {
|
2010-11-08 03:23:49 -06:00
|
|
|
echo "Sensed power restore, running reset init and halting GDB."
|
2009-11-17 10:29:20 -06:00
|
|
|
reset init
|
2019-05-06 08:15:54 -05:00
|
|
|
|
2010-01-31 14:02:06 -06:00
|
|
|
# Halt GDB so user can deal with a detected power restore.
|
|
|
|
#
|
|
|
|
# After GDB is halted, then output is no longer forwarded
|
|
|
|
# to the GDB console.
|
2019-05-06 08:15:54 -05:00
|
|
|
set targets [target names]
|
2010-01-31 14:02:06 -06:00
|
|
|
foreach t $targets {
|
|
|
|
# New event script.
|
|
|
|
$t invoke-event arp_halt_gdb
|
2019-05-06 08:15:54 -05:00
|
|
|
}
|
2009-11-17 10:29:20 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
add_help_text power_restore "Overridable procedure run when power restore is detected. Runs 'reset init' by default."
|
|
|
|
|
|
|
|
proc power_dropout {} {
|
2010-11-08 03:23:49 -06:00
|
|
|
echo "Sensed power dropout."
|
2009-11-17 10:29:20 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
#########
|
|
|
|
|
|
|
|
# TODO: srst_deasserted and srst_asserted are currently neither
|
2020-11-01 05:30:27 -06:00
|
|
|
# documented nor supported.
|
2009-11-17 10:29:20 -06:00
|
|
|
|
|
|
|
proc srst_deasserted {} {
|
2010-11-08 03:23:49 -06:00
|
|
|
echo "Sensed nSRST deasserted, running reset init and halting GDB."
|
2009-11-17 10:29:20 -06:00
|
|
|
reset init
|
2010-01-31 14:02:06 -06:00
|
|
|
|
|
|
|
# Halt GDB so user can deal with a detected reset.
|
|
|
|
#
|
|
|
|
# After GDB is halted, then output is no longer forwarded
|
|
|
|
# to the GDB console.
|
2019-05-06 08:15:54 -05:00
|
|
|
set targets [target names]
|
2010-01-31 14:02:06 -06:00
|
|
|
foreach t $targets {
|
|
|
|
# New event script.
|
|
|
|
$t invoke-event arp_halt_gdb
|
2019-05-06 08:15:54 -05:00
|
|
|
}
|
2009-11-17 10:29:20 -06:00
|
|
|
}
|
2010-01-31 14:02:06 -06:00
|
|
|
|
2009-11-17 10:29:20 -06:00
|
|
|
add_help_text srst_deasserted "Overridable procedure run when srst deassert is detected. Runs 'reset init' by default."
|
|
|
|
|
|
|
|
proc srst_asserted {} {
|
2010-11-08 03:23:49 -06:00
|
|
|
echo "Sensed nSRST asserted."
|
2009-11-17 10:29:20 -06:00
|
|
|
}
|
2010-03-15 10:37:43 -05:00
|
|
|
|
2010-08-02 04:15:21 -05:00
|
|
|
# measure actual JTAG clock
|
|
|
|
proc measure_clk {} {
|
|
|
|
set start_time [ms];
|
2021-03-19 08:13:07 -05:00
|
|
|
set iterations 10000000;
|
2015-03-03 14:01:38 -06:00
|
|
|
runtest $iterations;
|
2021-03-19 08:13:07 -05:00
|
|
|
set speed [expr "$iterations.0 / ([ms] - $start_time)"]
|
|
|
|
echo "Running at more than $speed kHz";
|
2010-08-02 04:15:21 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
add_help_text measure_clk "Runs a test to measure the JTAG clk. Useful with RCLK / RTCK."
|
|
|
|
|
2014-06-19 05:21:21 -05:00
|
|
|
proc default_to_jtag { f args } {
|
2015-04-02 23:55:50 -05:00
|
|
|
set current_transport [transport select]
|
|
|
|
if {[using_jtag]} {
|
2014-06-19 05:21:21 -05:00
|
|
|
eval $f $args
|
|
|
|
} {
|
|
|
|
error "session transport is \"$current_transport\" but your config requires JTAG"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
proc jtag args {
|
|
|
|
eval default_to_jtag jtag $args
|
|
|
|
}
|
|
|
|
|
|
|
|
proc jtag_rclk args {
|
|
|
|
eval default_to_jtag jtag_rclk $args
|
|
|
|
}
|
|
|
|
|
|
|
|
proc jtag_ntrst_delay args {
|
|
|
|
eval default_to_jtag jtag_ntrst_delay $args
|
|
|
|
}
|
|
|
|
|
|
|
|
proc jtag_ntrst_assert_width args {
|
|
|
|
eval default_to_jtag jtag_ntrst_assert_width $args
|
|
|
|
}
|
|
|
|
|
2010-03-15 10:37:43 -05:00
|
|
|
# BEGIN MIGRATION AIDS ... these adapter operations originally had
|
|
|
|
# JTAG-specific names despite the fact that the operations were not
|
2020-07-12 16:40:41 -05:00
|
|
|
# specific to JTAG, or otherwise had troublesome/misleading names.
|
2010-03-15 10:37:43 -05:00
|
|
|
#
|
2020-10-31 17:58:33 -05:00
|
|
|
# FIXME phase these aids out after some releases
|
2010-03-15 10:37:43 -05:00
|
|
|
#
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip jtag_reset
|
2019-08-14 07:51:06 -05:00
|
|
|
proc jtag_reset args {
|
2020-01-27 12:10:30 -06:00
|
|
|
echo "DEPRECATED! use 'adapter \[de\]assert' not 'jtag_reset'"
|
2019-08-14 07:51:06 -05:00
|
|
|
switch $args {
|
|
|
|
"0 0"
|
|
|
|
{eval adapter deassert trst deassert srst}
|
|
|
|
"0 1"
|
|
|
|
{eval adapter deassert trst assert srst}
|
|
|
|
"1 0"
|
|
|
|
{eval adapter assert trst deassert srst}
|
|
|
|
"1 1"
|
|
|
|
{eval adapter assert trst assert srst}
|
|
|
|
default
|
|
|
|
{return -code 1 -level 1 "jtag_reset: syntax error"}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip adapter_khz
|
2018-11-19 05:56:48 -06:00
|
|
|
proc adapter_khz args {
|
|
|
|
echo "DEPRECATED! use 'adapter speed' not 'adapter_khz'"
|
|
|
|
eval adapter speed $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip adapter_name
|
2018-11-19 05:56:48 -06:00
|
|
|
proc adapter_name args {
|
|
|
|
echo "DEPRECATED! use 'adapter name' not 'adapter_name'"
|
|
|
|
eval adapter name $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip adapter_nsrst_delay
|
2018-11-19 05:56:48 -06:00
|
|
|
proc adapter_nsrst_delay args {
|
|
|
|
echo "DEPRECATED! use 'adapter srst delay' not 'adapter_nsrst_delay'"
|
|
|
|
eval adapter srst delay $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip adapter_nsrst_assert_width
|
2018-11-19 05:56:48 -06:00
|
|
|
proc adapter_nsrst_assert_width args {
|
|
|
|
echo "DEPRECATED! use 'adapter srst pulse_width' not 'adapter_nsrst_assert_width'"
|
|
|
|
eval adapter srst pulse_width $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip interface
|
2018-11-19 05:56:48 -06:00
|
|
|
proc interface args {
|
|
|
|
echo "DEPRECATED! use 'adapter driver' not 'interface'"
|
|
|
|
eval adapter driver $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip interface_transports
|
2018-11-19 05:56:48 -06:00
|
|
|
proc interface_transports args {
|
|
|
|
echo "DEPRECATED! use 'adapter transports' not 'interface_transports'"
|
|
|
|
eval adapter transports $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip interface_list
|
2018-11-19 05:56:48 -06:00
|
|
|
proc interface_list args {
|
|
|
|
echo "DEPRECATED! use 'adapter list' not 'interface_list'"
|
|
|
|
eval adapter list $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip ftdi_location
|
2019-08-14 06:17:51 -05:00
|
|
|
proc ftdi_location args {
|
|
|
|
echo "DEPRECATED! use 'adapter usb location' not 'ftdi_location'"
|
|
|
|
eval adapter usb location $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip xds110_serial
|
2020-03-04 17:24:33 -06:00
|
|
|
proc xds110_serial args {
|
|
|
|
echo "DEPRECATED! use 'xds110 serial' not 'xds110_serial'"
|
|
|
|
eval xds110 serial $args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip xds110_supply_voltage
|
2020-03-04 17:24:33 -06:00
|
|
|
proc xds110_supply_voltage args {
|
|
|
|
echo "DEPRECATED! use 'xds110 supply' not 'xds110_supply_voltage'"
|
|
|
|
eval xds110 supply $args
|
|
|
|
}
|
|
|
|
|
2019-01-27 08:49:34 -06:00
|
|
|
proc hla {cmd args} {
|
|
|
|
tailcall "hla $cmd" {*}$args
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:44:48 -05:00
|
|
|
lappend _telnet_autocomplete_skip "hla newtap"
|
2019-01-27 08:49:34 -06:00
|
|
|
proc "hla newtap" {args} {
|
|
|
|
echo "DEPRECATED! use 'swj_newdap' not 'hla newtap'"
|
|
|
|
eval swj_newdap $args
|
|
|
|
}
|
|
|
|
|
2021-06-23 12:39:24 -05:00
|
|
|
lappend _telnet_autocomplete_skip ftdi_device_desc
|
|
|
|
proc ftdi_device_desc args {
|
|
|
|
echo "DEPRECATED! use 'ftdi device_desc' not 'ftdi_device_desc'"
|
|
|
|
eval ftdi device_desc $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip ftdi_serial
|
|
|
|
proc ftdi_serial args {
|
|
|
|
echo "DEPRECATED! use 'ftdi serial' not 'ftdi_serial'"
|
|
|
|
eval ftdi serial $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip ftdi_channel
|
|
|
|
proc ftdi_channel args {
|
|
|
|
echo "DEPRECATED! use 'ftdi channel' not 'ftdi_channel'"
|
|
|
|
eval ftdi channel $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip ftdi_layout_init
|
|
|
|
proc ftdi_layout_init args {
|
|
|
|
echo "DEPRECATED! use 'ftdi layout_init' not 'ftdi_layout_init'"
|
|
|
|
eval ftdi layout_init $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip ftdi_layout_signal
|
|
|
|
proc ftdi_layout_signal args {
|
|
|
|
echo "DEPRECATED! use 'ftdi layout_signal' not 'ftdi_layout_signal'"
|
|
|
|
eval ftdi layout_signal $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip ftdi_set_signal
|
|
|
|
proc ftdi_set_signal args {
|
|
|
|
echo "DEPRECATED! use 'ftdi set_signal' not 'ftdi_set_signal'"
|
|
|
|
eval ftdi set_signal $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip ftdi_get_signal
|
|
|
|
proc ftdi_get_signal args {
|
|
|
|
echo "DEPRECATED! use 'ftdi get_signal' not 'ftdi_get_signal'"
|
|
|
|
eval ftdi get_signal $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip ftdi_vid_pid
|
|
|
|
proc ftdi_vid_pid args {
|
|
|
|
echo "DEPRECATED! use 'ftdi vid_pid' not 'ftdi_vid_pid'"
|
|
|
|
eval ftdi vid_pid $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip ftdi_tdo_sample_edge
|
|
|
|
proc ftdi_tdo_sample_edge args {
|
|
|
|
echo "DEPRECATED! use 'ftdi tdo_sample_edge' not 'ftdi_tdo_sample_edge'"
|
|
|
|
eval ftdi tdo_sample_edge $args
|
|
|
|
}
|
|
|
|
|
2021-07-30 11:01:09 -05:00
|
|
|
lappend _telnet_autocomplete_skip remote_bitbang_host
|
|
|
|
proc remote_bitbang_host args {
|
|
|
|
echo "DEPRECATED! use 'remote_bitbang host' not 'remote_bitbang_host'"
|
|
|
|
eval remote_bitbang host $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip remote_bitbang_port
|
|
|
|
proc remote_bitbang_port args {
|
|
|
|
echo "DEPRECATED! use 'remote_bitbang port' not 'remote_bitbang_port'"
|
|
|
|
eval remote_bitbang port $args
|
|
|
|
}
|
|
|
|
|
2021-07-30 10:50:21 -05:00
|
|
|
lappend _telnet_autocomplete_skip openjtag_device_desc
|
|
|
|
proc openjtag_device_desc args {
|
|
|
|
echo "DEPRECATED! use 'openjtag device_desc' not 'openjtag_device_desc'"
|
|
|
|
eval openjtag device_desc $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip openjtag_variant
|
|
|
|
proc openjtag_variant args {
|
|
|
|
echo "DEPRECATED! use 'openjtag variant' not 'openjtag_variant'"
|
|
|
|
eval openjtag variant $args
|
|
|
|
}
|
|
|
|
|
2021-07-30 10:39:11 -05:00
|
|
|
lappend _telnet_autocomplete_skip parport_port
|
|
|
|
proc parport_port args {
|
|
|
|
echo "DEPRECATED! use 'parport port' not 'parport_port'"
|
|
|
|
eval parport port $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip parport_cable
|
|
|
|
proc parport_cable args {
|
|
|
|
echo "DEPRECATED! use 'parport cable' not 'parport_cable'"
|
|
|
|
eval parport cable $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip parport_write_on_exit
|
|
|
|
proc parport_write_on_exit args {
|
|
|
|
echo "DEPRECATED! use 'parport write_on_exit' not 'parport_write_on_exit'"
|
|
|
|
eval parport write_on_exit $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip parport_toggling_time
|
|
|
|
proc parport_toggling_time args {
|
|
|
|
echo "DEPRECATED! use 'parport toggling_time' not 'parport_toggling_time'"
|
|
|
|
eval parport toggling_time $args
|
|
|
|
}
|
|
|
|
|
2021-07-30 11:24:03 -05:00
|
|
|
lappend _telnet_autocomplete_skip jtag_dpi_set_port
|
|
|
|
proc jtag_dpi_set_port args {
|
|
|
|
echo "DEPRECATED! use 'jtag_dpi set_port' not 'jtag_dpi_set_port'"
|
|
|
|
eval jtag_dpi set_port $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip jtag_dpi_set_address
|
|
|
|
proc jtag_dpi_set_address args {
|
|
|
|
echo "DEPRECATED! use 'jtag_dpi set_address' not 'jtag_dpi_set_address'"
|
|
|
|
eval jtag_dpi set_address $args
|
|
|
|
}
|
|
|
|
|
2021-07-30 11:11:23 -05:00
|
|
|
lappend _telnet_autocomplete_skip presto_serial
|
|
|
|
proc presto_serial args {
|
|
|
|
echo "DEPRECATED! use 'presto serial' not 'presto_serial'"
|
|
|
|
eval presto serial $args
|
|
|
|
}
|
|
|
|
|
2021-07-30 11:19:02 -05:00
|
|
|
lappend _telnet_autocomplete_skip xlnx_pcie_xvc_config
|
|
|
|
proc xlnx_pcie_xvc_config args {
|
|
|
|
echo "DEPRECATED! use 'xlnx_pcie_xvc config' not 'xlnx_pcie_xvc_config'"
|
|
|
|
eval xlnx_pcie_xvc config $args
|
|
|
|
}
|
|
|
|
|
2021-07-30 11:20:39 -05:00
|
|
|
lappend _telnet_autocomplete_skip ulink_download_firmware
|
|
|
|
proc ulink_download_firmware args {
|
|
|
|
echo "DEPRECATED! use 'ulink download_firmware' not 'ulink_download_firmware'"
|
|
|
|
eval ulink download_firmware $args
|
|
|
|
}
|
2021-07-30 11:19:02 -05:00
|
|
|
|
2021-07-30 11:22:41 -05:00
|
|
|
lappend _telnet_autocomplete_skip vsllink_usb_vid
|
|
|
|
proc vsllink_usb_vid args {
|
|
|
|
echo "DEPRECATED! use 'vsllink usb_vid' not 'vsllink_usb_vid'"
|
|
|
|
eval vsllink usb_vid $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip vsllink_usb_pid
|
|
|
|
proc vsllink_usb_pid args {
|
|
|
|
echo "DEPRECATED! use 'vsllink usb_pid' not 'vsllink_usb_pid'"
|
|
|
|
eval vsllink usb_pid $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip vsllink_usb_serial
|
|
|
|
proc vsllink_usb_serial args {
|
|
|
|
echo "DEPRECATED! use 'vsllink usb_serial' not 'vsllink_usb_serial'"
|
|
|
|
eval vsllink usb_serial $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip vsllink_usb_bulkin
|
|
|
|
proc vsllink_usb_bulkin args {
|
|
|
|
echo "DEPRECATED! use 'vsllink usb_bulkin' not 'vsllink_usb_bulkin'"
|
|
|
|
eval vsllink usb_bulkin $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip vsllink_usb_bulkout
|
|
|
|
proc vsllink_usb_bulkout args {
|
|
|
|
echo "DEPRECATED! use 'vsllink usb_bulkout' not 'vsllink_usb_bulkout'"
|
|
|
|
eval vsllink usb_bulkout $args
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend _telnet_autocomplete_skip vsllink_usb_interface
|
|
|
|
proc vsllink_usb_interface args {
|
|
|
|
echo "DEPRECATED! use 'vsllink usb_interface' not 'vsllink_usb_interface'"
|
|
|
|
eval vsllink usb_interface $args
|
|
|
|
}
|
|
|
|
|
2010-03-15 10:37:43 -05:00
|
|
|
# END MIGRATION AIDS
|