From: Ion Agorria <[email protected]> This allows boards to intercept fastboot flash/erase and modify/change behavior according to board specifics like AES encryption or RSA signing. Add board_fastboot_get_part_info to provide info as fastboot tool queries during flash/erase.
Signed-off-by: Ion Agorria <[email protected]> Signed-off-by: Svyatoslav Ryhel <[email protected]> --- drivers/fastboot/fb_command.c | 20 ++++++++++++++++++++ drivers/fastboot/fb_getvar.c | 12 ++++++++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/fastboot/fb_command.c b/drivers/fastboot/fb_command.c index 18d86988f4c..284d771fe31 100644 --- a/drivers/fastboot/fb_command.c +++ b/drivers/fastboot/fb_command.c @@ -17,6 +17,17 @@ #include <vsprintf.h> #include <linux/printk.h> +__weak int board_fastboot_flash(char *cmd_parameter, void *download_buffer, + u32 download_bytes, char *response) +{ + return 0; +} + +__weak int board_fastboot_erase(char *cmd_parameter, char *response) +{ + return 0; +} + /** * image_size - final fastboot image size */ @@ -339,6 +350,11 @@ void fastboot_data_complete(char *response) */ static void __maybe_unused flash(char *cmd_parameter, char *response) { + if (IS_ENABLED(CONFIG_FASTBOOT_FLASH) && + board_fastboot_flash(cmd_parameter, fastboot_buf_addr, + image_size, response)) + return; + if (IS_ENABLED(CONFIG_FASTBOOT_FLASH_BLOCK)) fastboot_block_flash_write(cmd_parameter, fastboot_buf_addr, image_size, response); @@ -367,6 +383,10 @@ static void __maybe_unused flash(char *cmd_parameter, char *response) */ static void __maybe_unused erase(char *cmd_parameter, char *response) { + if (IS_ENABLED(CONFIG_FASTBOOT_FLASH) && + board_fastboot_erase(cmd_parameter, response)) + return; + if (IS_ENABLED(CONFIG_FASTBOOT_FLASH_BLOCK)) fastboot_block_erase(cmd_parameter, response); diff --git a/drivers/fastboot/fb_getvar.c b/drivers/fastboot/fb_getvar.c index e8aa0e09aa6..af65fca548f 100644 --- a/drivers/fastboot/fb_getvar.c +++ b/drivers/fastboot/fb_getvar.c @@ -29,6 +29,12 @@ static void getvar_partition_type(char *part_name, char *response); static void getvar_partition_size(char *part_name, char *response); static void getvar_is_userspace(char *var_parameter, char *response); +__weak int board_fastboot_get_part_info(const char *part_name, char *response, + size_t *size) +{ + return 1; +} + static const struct { const char *variable; bool list; @@ -116,6 +122,12 @@ static int getvar_get_part_info(const char *part_name, char *response, struct disk_partition disk_part; struct part_info *part_info; + if (IS_ENABLED(CONFIG_FASTBOOT_FLASH)) { + r = board_fastboot_get_part_info(part_name, response, size); + if (r != 1) + return r; + } + if (IS_ENABLED(CONFIG_FASTBOOT_FLASH_BLOCK)) { r = fastboot_block_get_part_info(part_name, &dev_desc, &disk_part, response); -- 2.53.0
