jlink: set the speed at JLINK_MAX_SPEED when an exceeded speed is requested
[fw/openocd] / src / jtag / adapter.c
index 37e6ee9ae315f861f5936ab1ad7ebcc78a5c48b1..e16f756eb8b6a5421cc9c06d1ee6ebd9e03a2a22 100644 (file)
@@ -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;
 }