There is just a single entry point for the jtag API .khz(),
.speed_div(), .power_dropout(), .srst_asserted().
Simplify the code by in-lining the default handler.
The overall code behaviour is not changed.
This change prevents modifying at run-time the content of
struct jtag_interface.
Inspired from change http://openocd.zylin.com/943
by Evan Hunter <ehunter@broadcom.com>
Change-Id: I09aeb76d614db57b1884ac7ee9f00c152cd77849
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4892
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
-static int default_khz(int khz, int *jtag_speed)
-{
- LOG_ERROR("Translation from khz to jtag_speed not implemented");
- return ERROR_FAIL;
-}
-
-static int default_speed_div(int speed, int *khz)
-{
- LOG_ERROR("Translation from jtag_speed to khz not implemented");
- return ERROR_FAIL;
-}
-
-static int default_power_dropout(int *dropout)
-{
- *dropout = 0; /* by default we can't detect power dropout */
- return ERROR_OK;
-}
-
-static int default_srst_asserted(int *srst_asserted)
-{
- *srst_asserted = 0; /* by default we can't detect srst asserted */
- return ERROR_OK;
-}
-
COMMAND_HANDLER(interface_transport_command)
{
char **transports;
COMMAND_HANDLER(interface_transport_command)
{
char **transports;
LOG_WARNING("Adapter driver '%s' did not declare "
"which transports it allows; assuming "
"legacy JTAG-only", jtag_interface->name);
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
+ return allow_transports(CMD_CTX, jtag_interface->transports
? jtag_interface->transports : jtag_only);
? 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)
- jtag_interface->speed_div = default_speed_div;
- if (jtag_interface->power_dropout == NULL)
- jtag_interface->power_dropout = default_power_dropout;
- if (jtag_interface->srst_asserted == NULL)
- jtag_interface->srst_asserted = default_srst_asserted;
-
- return ERROR_OK;
}
/* no valid interface was found (i.e. the configuration option,
}
/* no valid interface was found (i.e. the configuration option,
{
LOG_DEBUG("convert khz to interface specific speed value");
speed_khz = khz;
{
LOG_DEBUG("convert khz to interface specific speed value");
speed_khz = khz;
- if (jtag != NULL) {
- LOG_DEBUG("have interface set up");
- int speed_div1;
- int retval = jtag->khz(jtag_get_speed_khz(), &speed_div1);
- if (ERROR_OK != retval)
- return retval;
- *speed = speed_div1;
+ if (!jtag)
+ return ERROR_OK;
+ LOG_DEBUG("have interface set up");
+ if (!jtag->khz) {
+ LOG_ERROR("Translation from khz to jtag_speed not implemented");
+ return ERROR_FAIL;
+ int speed_div1;
+ int retval = jtag->khz(jtag_get_speed_khz(), &speed_div1);
+ if (ERROR_OK != retval)
+ return retval;
+ *speed = speed_div1;
int retval = jtag_get_speed(&jtag_speed_var);
if (retval != ERROR_OK)
return retval;
int retval = jtag_get_speed(&jtag_speed_var);
if (retval != ERROR_OK)
return retval;
- return jtag ? jtag->speed_div(jtag_speed_var, khz) : ERROR_OK;
+ if (!jtag)
+ return ERROR_OK;
+ if (!jtag->speed_div) {
+ LOG_ERROR("Translation from jtag_speed to khz not implemented");
+ return ERROR_FAIL;
+ }
+ return jtag->speed_div(jtag_speed_var, khz);
}
void jtag_set_verify(bool enable)
}
void jtag_set_verify(bool enable)
LOG_ERROR("No Valid JTAG Interface Configured.");
exit(-1);
}
LOG_ERROR("No Valid JTAG Interface Configured.");
exit(-1);
}
- return jtag->power_dropout(dropout);
+ if (jtag->power_dropout)
+ return jtag->power_dropout(dropout);
+
+ *dropout = 0; /* by default we can't detect power dropout */
+ return ERROR_OK;
}
int jtag_srst_asserted(int *srst_asserted)
{
}
int jtag_srst_asserted(int *srst_asserted)
{
- return jtag->srst_asserted(srst_asserted);
+ if (jtag->srst_asserted)
+ return jtag->srst_asserted(srst_asserted);
+
+ *srst_asserted = 0; /* by default we can't detect srst asserted */
+ return ERROR_OK;
}
enum reset_types jtag_get_reset_config(void)
}
enum reset_types jtag_get_reset_config(void)
Linking to existing account procedure
If you already have an account and want to add another login method
you
MUST first sign in with your existing account and
then change URL to read
https://review.openocd.org/login/?link
to get to this page again but this time it'll work for linking. Thank you.
SSH host keys fingerprints
1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=.. |
|+o.. . |
|*.o . . |
|+B . . . |
|Bo. = o S |
|Oo.+ + = |
|oB=.* = . o |
| =+=.+ + E |
|. .=o . o |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)