fastboot: add command to select the default emmc hwpart for boot

Add fastboot command oem partconf which executes the command
``mmc partconf <id> <arg> 0`` on the current <id> mmc device
to configure the eMMC boot partition with
<arg>: boot_ack boot_partition, so the command is:

$> fastboot oem partconf:<boot_ack> <boot_partition>

The partition_access argument is forced to 0 (userdata)

Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
[lukma - Kconfig adjustments after merging this patch]
This commit is contained in:
Patrick Delaunay 2021-01-27 14:46:48 +01:00 committed by Marek Vasut
parent 3acbc7b2aa
commit b2f6b97b78
4 changed files with 48 additions and 0 deletions

View file

@ -23,6 +23,8 @@ The current implementation supports the following standard commands:
The following OEM commands are supported (if enabled): The following OEM commands are supported (if enabled):
- ``oem format`` - this executes ``gpt write mmc %x $partitions`` - ``oem format`` - this executes ``gpt write mmc %x $partitions``
- ``oem partconf`` - this executes ``mmc partconf %x <arg> 0`` to configure eMMC
with <arg> = boot_ack boot_partition
Support for both eMMC and NAND devices is included. Support for both eMMC and NAND devices is included.

View file

@ -189,6 +189,13 @@ config FASTBOOT_CMD_OEM_FORMAT
relies on the env variable partitions to contain the list of relies on the env variable partitions to contain the list of
partitions as required by the gpt command. partitions as required by the gpt command.
config FASTBOOT_CMD_OEM_PARTCONF
bool "Enable the 'oem partconf' command"
depends on FASTBOOT_FLASH_MMC && SUPPORT_EMMC_BOOT
help
Add support for the "oem partconf" command from a client. This set
the mmc boot-partition for the selecting eMMC device.
endif # FASTBOOT endif # FASTBOOT
endmenu endmenu

View file

@ -42,6 +42,9 @@ static void reboot_recovery(char *, char *);
#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT) #if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
static void oem_format(char *, char *); static void oem_format(char *, char *);
#endif #endif
#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_PARTCONF)
static void oem_partconf(char *, char *);
#endif
static const struct { static const struct {
const char *command; const char *command;
@ -99,6 +102,12 @@ static const struct {
.dispatch = oem_format, .dispatch = oem_format,
}, },
#endif #endif
#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_PARTCONF)
[FASTBOOT_COMMAND_OEM_PARTCONF] = {
.command = "oem partconf",
.dispatch = oem_partconf,
},
#endif
}; };
/** /**
@ -374,3 +383,30 @@ static void oem_format(char *cmd_parameter, char *response)
} }
} }
#endif #endif
#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_PARTCONF)
/**
* oem_partconf() - Execute the OEM partconf command
*
* @cmd_parameter: Pointer to command parameter
* @response: Pointer to fastboot response buffer
*/
static void oem_partconf(char *cmd_parameter, char *response)
{
char cmdbuf[32];
if (!cmd_parameter) {
fastboot_fail("Expected command parameter", response);
return;
}
/* execute 'mmc partconfg' command with cmd_parameter arguments*/
snprintf(cmdbuf, sizeof(cmdbuf), "mmc partconf %x %s 0",
CONFIG_FASTBOOT_FLASH_MMC_DEV, cmd_parameter);
printf("Execute: %s\n", cmdbuf);
if (run_command(cmdbuf, 0))
fastboot_fail("Cannot set oem partconf", response);
else
fastboot_okay(NULL, response);
}
#endif

View file

@ -38,6 +38,9 @@ enum {
#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT) #if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
FASTBOOT_COMMAND_OEM_FORMAT, FASTBOOT_COMMAND_OEM_FORMAT,
#endif #endif
#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_PARTCONF)
FASTBOOT_COMMAND_OEM_PARTCONF,
#endif
FASTBOOT_COMMAND_COUNT FASTBOOT_COMMAND_COUNT
}; };