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:
parent
59d4466b55
commit
664ba309d5
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue