forked from auracaster/openocd
add support for naming NAND banks
Requires users to name their nand banks, allowing them to be used instead of bank numbers in script commands.
This commit is contained in:
@@ -212,7 +212,7 @@ COMMAND_HANDLER(handle_nand_list_drivers)
|
|||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static COMMAND_HELPER(create_nand_device,
|
static COMMAND_HELPER(create_nand_device, const char *bank_name,
|
||||||
struct nand_flash_controller *controller)
|
struct nand_flash_controller *controller)
|
||||||
{
|
{
|
||||||
int retval = controller->register_commands(CMD_CTX);
|
int retval = controller->register_commands(CMD_CTX);
|
||||||
@@ -221,9 +221,9 @@ static COMMAND_HELPER(create_nand_device,
|
|||||||
LOG_ERROR("couldn't register '%s' commands", controller->name);
|
LOG_ERROR("couldn't register '%s' commands", controller->name);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct nand_device *c = malloc(sizeof(struct nand_device));
|
struct nand_device *c = malloc(sizeof(struct nand_device));
|
||||||
|
|
||||||
|
c->name = strdup(bank_name);
|
||||||
c->controller = controller;
|
c->controller = controller;
|
||||||
c->controller_priv = NULL;
|
c->controller_priv = NULL;
|
||||||
c->manufacturer = NULL;
|
c->manufacturer = NULL;
|
||||||
@@ -260,6 +260,10 @@ COMMAND_HANDLER(handle_nand_device_command)
|
|||||||
return ERROR_FLASH_BANK_INVALID;
|
return ERROR_FLASH_BANK_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// save name and increment (for compatibility) with drivers
|
||||||
|
const char *bank_name = *CMD_ARGV++;
|
||||||
|
CMD_ARGC--;
|
||||||
|
|
||||||
const char *driver_name = CMD_ARGV[0];
|
const char *driver_name = CMD_ARGV[0];
|
||||||
for (unsigned i = 0; nand_flash_controllers[i]; i++)
|
for (unsigned i = 0; nand_flash_controllers[i]; i++)
|
||||||
{
|
{
|
||||||
@@ -267,7 +271,8 @@ COMMAND_HANDLER(handle_nand_device_command)
|
|||||||
if (strcmp(driver_name, controller->name) != 0)
|
if (strcmp(driver_name, controller->name) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return CALL_COMMAND_HANDLER(create_nand_device, controller);
|
return CALL_COMMAND_HANDLER(create_nand_device,
|
||||||
|
bank_name, controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_ERROR("No valid NAND flash driver found (%s)", driver_name);
|
LOG_ERROR("No valid NAND flash driver found (%s)", driver_name);
|
||||||
@@ -297,6 +302,8 @@ struct nand_device *get_nand_device_by_name(const char *name)
|
|||||||
struct nand_device *nand;
|
struct nand_device *nand;
|
||||||
for (nand = nand_devices; NULL != nand; nand = nand->next)
|
for (nand = nand_devices; NULL != nand; nand = nand->next)
|
||||||
{
|
{
|
||||||
|
if (strcmp(nand->name, name) == 0)
|
||||||
|
return nand;
|
||||||
if (!flash_driver_name_matches(nand->controller->name, name))
|
if (!flash_driver_name_matches(nand->controller->name, name))
|
||||||
continue;
|
continue;
|
||||||
if (++found < requested)
|
if (++found < requested)
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ struct nand_ecclayout {
|
|||||||
|
|
||||||
struct nand_device
|
struct nand_device
|
||||||
{
|
{
|
||||||
|
char *name;
|
||||||
struct nand_flash_controller *controller;
|
struct nand_flash_controller *controller;
|
||||||
void *controller_priv;
|
void *controller_priv;
|
||||||
struct nand_manufacturer *manufacturer;
|
struct nand_manufacturer *manufacturer;
|
||||||
|
|||||||
Reference in New Issue
Block a user