diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2010-07-09 18:34:31 -0400 |
---|---|---|
committer | David Brownell <db@helium.(none)> | 2010-07-09 18:34:31 -0400 |
commit | e8445c9c9f02e82ea417776fa27fbe793ae22f83 (patch) | |
tree | acf0e39eafd022f3d86168db1a355cd3ee5c8951 /src/jtag/adapter.c | |
parent | ac5ad4ad8d0312259974d4aeb947a43fa815c3a8 (diff) | |
download | riscv-openocd-e8445c9c9f02e82ea417776fa27fbe793ae22f83.zip riscv-openocd-e8445c9c9f02e82ea417776fa27fbe793ae22f83.tar.gz riscv-openocd-e8445c9c9f02e82ea417776fa27fbe793ae22f83.tar.bz2 |
transport selection tweaks
* Bugfix and simplify legacy jtag-only defaulting
* Make "dummy" declare its jtag-only nature
* likewise update ft2232
* warn if selection is _required_ (multi-transport adapters),
fixes the "only ft2232 works" bug for at least dummy, with
other drivers going the "legacy" path (submit patches).
Signed-off-by: David Brownell <db@helium.(none)>
Diffstat (limited to 'src/jtag/adapter.c')
-rw-r--r-- | src/jtag/adapter.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/jtag/adapter.c b/src/jtag/adapter.c index 37e6ee9..2d95e18 100644 --- a/src/jtag/adapter.c +++ b/src/jtag/adapter.c @@ -93,6 +93,9 @@ static int default_srst_asserted(int *srst_asserted) return ERROR_OK; } +const char *jtag_only[] = { "jtag", NULL, }; + + COMMAND_HANDLER(interface_transport_command) { char **transports; @@ -130,6 +133,8 @@ COMMAND_HANDLER(handle_interface_list_command) COMMAND_HANDLER(handle_interface_command) { + int retval; + /* check whether the interface is already configured */ if (jtag_interface) { @@ -148,7 +153,7 @@ COMMAND_HANDLER(handle_interface_command) if (NULL != jtag_interfaces[i]->commands) { - int retval = register_commands(CMD_CTX, NULL, + retval = register_commands(CMD_CTX, NULL, jtag_interfaces[i]->commands); if (ERROR_OK != retval) return retval; @@ -156,6 +161,20 @@ COMMAND_HANDLER(handle_interface_command) jtag_interface = jtag_interfaces[i]; + /* LEGACY SUPPORT ... adapter drivers must declare what + * transports they allow. Until they all do so, assume + * the legacy drivers are JTAG-only + */ + if (!jtag_interface->transports) + LOG_WARNING("Adapter driver '%s' did not declare " + "which transports it allows; assuming" + "legacy JTAG-only", jtag_interface->name); + retval = allow_transports(CMD_CTX, + jtag_interface->transports + ? : jtag_only); + if (ERROR_OK != retval) + return retval; + if (jtag_interface->khz == NULL) jtag_interface->khz = default_khz; if (jtag_interface->speed_div == NULL) @@ -171,7 +190,8 @@ COMMAND_HANDLER(handle_interface_command) /* no valid interface was found (i.e. the configuration option, * didn't match one of the compiled-in interfaces */ - LOG_ERROR("The specified debug interface was not found (%s)", CMD_ARGV[0]); + LOG_ERROR("The specified debug interface was not found (%s)", + CMD_ARGV[0]); CALL_COMMAND_HANDLER(handle_interface_list_command); return ERROR_JTAG_INVALID_INTERFACE; } |