jtag/adapter: move config vars in struct adapter_config

Move the static variables used to configure the adapter in
the struct adapter_config.

Change-Id: I1639e2bd39d0cbb12c71dfa347025558879d8b1d
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/6642
Tested-by: jenkins
Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
This commit is contained in:
Antonio Borneo 2021-10-07 12:21:18 +02:00
parent b8ec1d4e7d
commit ba7d0bc491
1 changed files with 22 additions and 20 deletions

View File

@ -30,24 +30,26 @@
struct adapter_driver *adapter_driver; struct adapter_driver *adapter_driver;
const char * const jtag_only[] = { "jtag", NULL }; const char * const jtag_only[] = { "jtag", NULL };
enum adapter_clk_mode {
CLOCK_MODE_UNSELECTED = 0,
CLOCK_MODE_KHZ,
CLOCK_MODE_RCLK
};
/** /**
* Adapter configuration * Adapter configuration
*/ */
static struct { static struct {
bool adapter_initialized;
char *usb_location; char *usb_location;
enum adapter_clk_mode clock_mode;
int speed_khz;
int rclk_fallback_speed_khz;
} adapter_config; } adapter_config;
/* speed in kHz*/
static int speed_khz;
/* speed to fallback to when RCLK is requested but not supported */
static int rclk_fallback_speed_khz;
static enum {CLOCK_MODE_UNSELECTED, CLOCK_MODE_KHZ, CLOCK_MODE_RCLK} clock_mode;
static bool adapter_initialized;
bool is_adapter_initialized(void) bool is_adapter_initialized(void)
{ {
return adapter_initialized; return adapter_config.adapter_initialized;
} }
/** /**
@ -70,14 +72,14 @@ int adapter_init(struct command_context *cmd_ctx)
retval = adapter_driver->init(); retval = adapter_driver->init();
if (retval != ERROR_OK) if (retval != ERROR_OK)
return retval; return retval;
adapter_initialized = true; adapter_config.adapter_initialized = true;
if (!adapter_driver->speed) { if (!adapter_driver->speed) {
LOG_INFO("This adapter doesn't support configurable speed"); LOG_INFO("This adapter doesn't support configurable speed");
return ERROR_OK; return ERROR_OK;
} }
if (clock_mode == CLOCK_MODE_UNSELECTED) { if (adapter_config.clock_mode == CLOCK_MODE_UNSELECTED) {
LOG_ERROR("An adapter speed is not selected in the init script." LOG_ERROR("An adapter speed is not selected in the init script."
" Insert a call to \"adapter speed\" or \"jtag_rclk\" to proceed."); " Insert a call to \"adapter speed\" or \"jtag_rclk\" to proceed.");
return ERROR_JTAG_INIT_FAILED; return ERROR_JTAG_INIT_FAILED;
@ -97,8 +99,8 @@ int adapter_init(struct command_context *cmd_ctx)
LOG_INFO("adapter-specific clock speed value %d", jtag_speed_var); LOG_INFO("adapter-specific clock speed value %d", jtag_speed_var);
else if (actual_khz) { else if (actual_khz) {
/* Adaptive clocking -- JTAG-specific */ /* Adaptive clocking -- JTAG-specific */
if ((clock_mode == CLOCK_MODE_RCLK) if ((adapter_config.clock_mode == CLOCK_MODE_RCLK)
|| ((clock_mode == CLOCK_MODE_KHZ) && !requested_khz)) { || ((adapter_config.clock_mode == CLOCK_MODE_KHZ) && !requested_khz)) {
LOG_INFO("RCLK (adaptive clock speed) not supported - fallback to %d kHz" LOG_INFO("RCLK (adaptive clock speed) not supported - fallback to %d kHz"
, actual_khz); , actual_khz);
} else } else
@ -130,13 +132,13 @@ int adapter_quit(void)
unsigned jtag_get_speed_khz(void) unsigned jtag_get_speed_khz(void)
{ {
return speed_khz; return adapter_config.speed_khz;
} }
static int adapter_khz_to_speed(unsigned khz, int *speed) static int adapter_khz_to_speed(unsigned khz, int *speed)
{ {
LOG_DEBUG("convert khz to interface specific speed value"); LOG_DEBUG("convert khz to interface specific speed value");
speed_khz = khz; adapter_config.speed_khz = khz;
if (!is_adapter_initialized()) if (!is_adapter_initialized())
return ERROR_OK; return ERROR_OK;
LOG_DEBUG("have interface set up"); LOG_DEBUG("have interface set up");
@ -172,7 +174,7 @@ static int jtag_set_speed(int speed)
int jtag_config_khz(unsigned khz) int jtag_config_khz(unsigned khz)
{ {
LOG_DEBUG("handle jtag khz"); LOG_DEBUG("handle jtag khz");
clock_mode = CLOCK_MODE_KHZ; adapter_config.clock_mode = CLOCK_MODE_KHZ;
int speed = 0; int speed = 0;
int retval = adapter_khz_to_speed(khz, &speed); int retval = adapter_khz_to_speed(khz, &speed);
return (retval != ERROR_OK) ? retval : jtag_set_speed(speed); return (retval != ERROR_OK) ? retval : jtag_set_speed(speed);
@ -181,8 +183,8 @@ int jtag_config_khz(unsigned khz)
int jtag_config_rclk(unsigned fallback_speed_khz) int jtag_config_rclk(unsigned fallback_speed_khz)
{ {
LOG_DEBUG("handle jtag rclk"); LOG_DEBUG("handle jtag rclk");
clock_mode = CLOCK_MODE_RCLK; adapter_config.clock_mode = CLOCK_MODE_RCLK;
rclk_fallback_speed_khz = fallback_speed_khz; adapter_config.rclk_fallback_speed_khz = fallback_speed_khz;
int speed = 0; int speed = 0;
int retval = jtag_rclk_to_speed(fallback_speed_khz, &speed); int retval = jtag_rclk_to_speed(fallback_speed_khz, &speed);
return (retval != ERROR_OK) ? retval : jtag_set_speed(speed); return (retval != ERROR_OK) ? retval : jtag_set_speed(speed);
@ -190,12 +192,12 @@ int jtag_config_rclk(unsigned fallback_speed_khz)
int jtag_get_speed(int *speed) int jtag_get_speed(int *speed)
{ {
switch (clock_mode) { switch (adapter_config.clock_mode) {
case CLOCK_MODE_KHZ: case CLOCK_MODE_KHZ:
adapter_khz_to_speed(jtag_get_speed_khz(), speed); adapter_khz_to_speed(jtag_get_speed_khz(), speed);
break; break;
case CLOCK_MODE_RCLK: case CLOCK_MODE_RCLK:
jtag_rclk_to_speed(rclk_fallback_speed_khz, speed); jtag_rclk_to_speed(adapter_config.rclk_fallback_speed_khz, speed);
break; break;
default: default:
LOG_ERROR("BUG: unknown jtag clock mode"); LOG_ERROR("BUG: unknown jtag clock mode");