jtag/adapter: retype adapter_gpio_config.{gpio,chip}_num
Previously, the gpio_num and chip_num members of adapter_gpio_config were typed as 'int' and a sentinel value of -1 was used to denote unconfigured values. Now, these members are typed as 'unsigned int' to better reflect their expected value range. The sentinel value now maps to UINT_MAX as all adapters either define an upper bound for these members or, in the case of bcm2835gpio, only operate on a specific chip, in which case the value doesn't matter. Format specifiers have been left as %d since, when configured, valid values are within the positive range of 'int'. This allows unconfigured values to display as a more readable value of -1 instead of UINT_MAX. Change-Id: Ieb20e5327b2e2e443a8e43d8689cb29538a5c9c1 Signed-off-by: Vincent Fazio <vfazio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/8124 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
parent
4593c75f0b
commit
0d3d4c981a
|
@ -94,8 +94,9 @@ static void adapter_driver_gpios_init(void)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (int i = 0; i < ADAPTER_GPIO_IDX_NUM; ++i) {
|
for (int i = 0; i < ADAPTER_GPIO_IDX_NUM; ++i) {
|
||||||
adapter_config.gpios[i].gpio_num = -1;
|
/* Use ADAPTER_GPIO_NOT_SET as the sentinel 'unset' value. */
|
||||||
adapter_config.gpios[i].chip_num = -1;
|
adapter_config.gpios[i].gpio_num = ADAPTER_GPIO_NOT_SET;
|
||||||
|
adapter_config.gpios[i].chip_num = ADAPTER_GPIO_NOT_SET;
|
||||||
if (gpio_map[i].direction == ADAPTER_GPIO_DIRECTION_INPUT)
|
if (gpio_map[i].direction == ADAPTER_GPIO_DIRECTION_INPUT)
|
||||||
adapter_config.gpios[i].init_state = ADAPTER_GPIO_INIT_STATE_INPUT;
|
adapter_config.gpios[i].init_state = ADAPTER_GPIO_INIT_STATE_INPUT;
|
||||||
}
|
}
|
||||||
|
@ -848,6 +849,11 @@ static COMMAND_HELPER(helper_adapter_gpio_print_config, enum adapter_gpio_config
|
||||||
const char *pull = "";
|
const char *pull = "";
|
||||||
const char *init_state = "";
|
const char *init_state = "";
|
||||||
|
|
||||||
|
if (gpio_config->gpio_num == ADAPTER_GPIO_NOT_SET) {
|
||||||
|
command_print(CMD, "adapter gpio %s: not configured", gpio_map[gpio_idx].name);
|
||||||
|
return ERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
switch (gpio_map[gpio_idx].direction) {
|
switch (gpio_map[gpio_idx].direction) {
|
||||||
case ADAPTER_GPIO_DIRECTION_INPUT:
|
case ADAPTER_GPIO_DIRECTION_INPUT:
|
||||||
dir = "input";
|
dir = "input";
|
||||||
|
@ -900,8 +906,8 @@ static COMMAND_HELPER(helper_adapter_gpio_print_config, enum adapter_gpio_config
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
command_print(CMD, "adapter gpio %s (%s): num %d, chip %d, active-%s%s%s%s",
|
command_print(CMD, "adapter gpio %s (%s): num %u, chip %d, active-%s%s%s%s",
|
||||||
gpio_map[gpio_idx].name, dir, gpio_config->gpio_num, gpio_config->chip_num, active_state,
|
gpio_map[gpio_idx].name, dir, gpio_config->gpio_num, (int)gpio_config->chip_num, active_state,
|
||||||
drive, pull, init_state);
|
drive, pull, init_state);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
@ -942,9 +948,7 @@ COMMAND_HANDLER(adapter_gpio_config_handler)
|
||||||
LOG_DEBUG("Processing %s", CMD_ARGV[i]);
|
LOG_DEBUG("Processing %s", CMD_ARGV[i]);
|
||||||
|
|
||||||
if (isdigit(*CMD_ARGV[i])) {
|
if (isdigit(*CMD_ARGV[i])) {
|
||||||
int gpio_num; /* Use a meaningful output parameter for more helpful error messages */
|
COMMAND_PARSE_NUMBER(uint, CMD_ARGV[i], gpio_config->gpio_num);
|
||||||
COMMAND_PARSE_NUMBER(int, CMD_ARGV[i], gpio_num);
|
|
||||||
gpio_config->gpio_num = gpio_num;
|
|
||||||
++i;
|
++i;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -955,9 +959,7 @@ COMMAND_HANDLER(adapter_gpio_config_handler)
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
LOG_DEBUG("-chip arg is %s", CMD_ARGV[i + 1]);
|
LOG_DEBUG("-chip arg is %s", CMD_ARGV[i + 1]);
|
||||||
int chip_num; /* Use a meaningful output parameter for more helpful error messages */
|
COMMAND_PARSE_NUMBER(uint, CMD_ARGV[i + 1], gpio_config->chip_num);
|
||||||
COMMAND_PARSE_NUMBER(int, CMD_ARGV[i + 1], chip_num);
|
|
||||||
gpio_config->chip_num = chip_num;
|
|
||||||
i += 2;
|
i += 2;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
/** Supported output drive modes for adaptor GPIO */
|
/** Supported output drive modes for adaptor GPIO */
|
||||||
enum adapter_gpio_drive_mode {
|
enum adapter_gpio_drive_mode {
|
||||||
|
@ -56,8 +57,8 @@ enum adapter_gpio_config_index {
|
||||||
|
|
||||||
/** Configuration options for a single GPIO */
|
/** Configuration options for a single GPIO */
|
||||||
struct adapter_gpio_config {
|
struct adapter_gpio_config {
|
||||||
int gpio_num;
|
unsigned int gpio_num;
|
||||||
int chip_num;
|
unsigned int chip_num;
|
||||||
enum adapter_gpio_drive_mode drive; /* For outputs only */
|
enum adapter_gpio_drive_mode drive; /* For outputs only */
|
||||||
enum adapter_gpio_init_state init_state;
|
enum adapter_gpio_init_state init_state;
|
||||||
bool active_low;
|
bool active_low;
|
||||||
|
@ -121,4 +122,6 @@ const char *adapter_gpio_get_name(enum adapter_gpio_config_index idx);
|
||||||
*/
|
*/
|
||||||
const struct adapter_gpio_config *adapter_gpio_get_config(void);
|
const struct adapter_gpio_config *adapter_gpio_get_config(void);
|
||||||
|
|
||||||
|
#define ADAPTER_GPIO_NOT_SET UINT_MAX
|
||||||
|
|
||||||
#endif /* OPENOCD_JTAG_ADAPTER_H */
|
#endif /* OPENOCD_JTAG_ADAPTER_H */
|
||||||
|
|
|
@ -86,9 +86,7 @@ static const struct adapter_gpio_config *adapter_gpio_config;
|
||||||
|
|
||||||
static bool is_gpio_config_valid(const struct adapter_gpio_config *gpio_config)
|
static bool is_gpio_config_valid(const struct adapter_gpio_config *gpio_config)
|
||||||
{
|
{
|
||||||
return gpio_config->chip_num >= 0
|
return gpio_config->chip_num < AM335XGPIO_NUM_GPIO_CHIPS
|
||||||
&& gpio_config->chip_num < AM335XGPIO_NUM_GPIO_CHIPS
|
|
||||||
&& gpio_config->gpio_num >= 0
|
|
||||||
&& gpio_config->gpio_num < AM335XGPIO_NUM_GPIO_PER_CHIP;
|
&& gpio_config->gpio_num < AM335XGPIO_NUM_GPIO_PER_CHIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,10 +247,13 @@ static int am335xgpio_reset(int trst, int srst)
|
||||||
if (is_gpio_config_valid(&adapter_gpio_config[ADAPTER_GPIO_IDX_TRST]))
|
if (is_gpio_config_valid(&adapter_gpio_config[ADAPTER_GPIO_IDX_TRST]))
|
||||||
set_gpio_value(&adapter_gpio_config[ADAPTER_GPIO_IDX_TRST], trst);
|
set_gpio_value(&adapter_gpio_config[ADAPTER_GPIO_IDX_TRST], trst);
|
||||||
|
|
||||||
LOG_DEBUG("am335xgpio_reset(%d, %d), trst_gpio: %d %d, srst_gpio: %d %d",
|
LOG_DEBUG("trst %d gpio: %d %d, srst %d gpio: %d %d",
|
||||||
trst, srst,
|
trst,
|
||||||
adapter_gpio_config[ADAPTER_GPIO_IDX_TRST].chip_num, adapter_gpio_config[ADAPTER_GPIO_IDX_TRST].gpio_num,
|
(int)adapter_gpio_config[ADAPTER_GPIO_IDX_TRST].chip_num,
|
||||||
adapter_gpio_config[ADAPTER_GPIO_IDX_SRST].chip_num, adapter_gpio_config[ADAPTER_GPIO_IDX_SRST].gpio_num);
|
(int)adapter_gpio_config[ADAPTER_GPIO_IDX_TRST].gpio_num,
|
||||||
|
srst,
|
||||||
|
(int)adapter_gpio_config[ADAPTER_GPIO_IDX_SRST].chip_num,
|
||||||
|
(int)adapter_gpio_config[ADAPTER_GPIO_IDX_SRST].gpio_num);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,10 +84,7 @@ static inline void bcm2835_delay(void)
|
||||||
static bool is_gpio_config_valid(enum adapter_gpio_config_index idx)
|
static bool is_gpio_config_valid(enum adapter_gpio_config_index idx)
|
||||||
{
|
{
|
||||||
/* Only chip 0 is supported, accept unset value (-1) too */
|
/* Only chip 0 is supported, accept unset value (-1) too */
|
||||||
return adapter_gpio_config[idx].chip_num >= -1
|
return adapter_gpio_config[idx].gpio_num <= 31;
|
||||||
&& adapter_gpio_config[idx].chip_num <= 0
|
|
||||||
&& adapter_gpio_config[idx].gpio_num >= 0
|
|
||||||
&& adapter_gpio_config[idx].gpio_num <= 31;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_gpio_value(const struct adapter_gpio_config *gpio_config, int value)
|
static void set_gpio_value(const struct adapter_gpio_config *gpio_config, int value)
|
||||||
|
@ -243,10 +240,13 @@ static int bcm2835gpio_reset(int trst, int srst)
|
||||||
if (is_gpio_config_valid(ADAPTER_GPIO_IDX_TRST))
|
if (is_gpio_config_valid(ADAPTER_GPIO_IDX_TRST))
|
||||||
set_gpio_value(&adapter_gpio_config[ADAPTER_GPIO_IDX_TRST], trst);
|
set_gpio_value(&adapter_gpio_config[ADAPTER_GPIO_IDX_TRST], trst);
|
||||||
|
|
||||||
LOG_DEBUG("BCM2835 GPIO: bcm2835gpio_reset(%d, %d), trst_gpio: %d %d, srst_gpio: %d %d",
|
LOG_DEBUG("trst %d gpio: %d %d, srst %d gpio: %d %d",
|
||||||
trst, srst,
|
trst,
|
||||||
adapter_gpio_config[ADAPTER_GPIO_IDX_TRST].chip_num, adapter_gpio_config[ADAPTER_GPIO_IDX_TRST].gpio_num,
|
(int)adapter_gpio_config[ADAPTER_GPIO_IDX_TRST].chip_num,
|
||||||
adapter_gpio_config[ADAPTER_GPIO_IDX_SRST].chip_num, adapter_gpio_config[ADAPTER_GPIO_IDX_SRST].gpio_num);
|
(int)adapter_gpio_config[ADAPTER_GPIO_IDX_TRST].gpio_num,
|
||||||
|
srst,
|
||||||
|
(int)adapter_gpio_config[ADAPTER_GPIO_IDX_SRST].chip_num,
|
||||||
|
(int)adapter_gpio_config[ADAPTER_GPIO_IDX_SRST].gpio_num);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,9 +37,7 @@ static const struct adapter_gpio_config *adapter_gpio_config;
|
||||||
*/
|
*/
|
||||||
static bool is_gpio_config_valid(enum adapter_gpio_config_index idx)
|
static bool is_gpio_config_valid(enum adapter_gpio_config_index idx)
|
||||||
{
|
{
|
||||||
return adapter_gpio_config[idx].chip_num >= 0
|
return adapter_gpio_config[idx].chip_num < 1000
|
||||||
&& adapter_gpio_config[idx].chip_num < 1000
|
|
||||||
&& adapter_gpio_config[idx].gpio_num >= 0
|
|
||||||
&& adapter_gpio_config[idx].gpio_num < 10000;
|
&& adapter_gpio_config[idx].gpio_num < 10000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue