All three, imx_bbu_internal_v1_update(), imx_bbu_external_update() and imx_bbu_internal_v2_update() are doing exactly the same thing. Instead of having three almost identical functions, convert imx_bbu_internal_v2_update() (the most versatile of the three) to be a generic function and use it everywhere. Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> --- arch/arm/mach-imx/imx-bbu-internal.c | 70 +++++----------------------- 1 file changed, 12 insertions(+), 58 deletions(-) diff --git a/arch/arm/mach-imx/imx-bbu-internal.c b/arch/arm/mach-imx/imx-bbu-internal.c index 0e55e4fd1..34c8ea92c 100644 --- a/arch/arm/mach-imx/imx-bbu-internal.c +++ b/arch/arm/mach-imx/imx-bbu-internal.c @@ -40,6 +40,7 @@ struct imx_internal_bbu_handler { struct bbu_data *); unsigned long flash_header_offset; size_t device_size; + enum filetype expected_type; }; /* @@ -160,31 +161,6 @@ static int imx_bbu_check_prereq(struct imx_internal_bbu_handler *imx_handler, return 0; } -/* - * Update barebox on a v1 type internal boot (i.MX25, i.MX35, i.MX51) - * - * This constructs a DCD header, adds the specific DCD data and writes - * the resulting image to the device. Currently this handles MMC/SD - * devices. - */ -static int imx_bbu_internal_v1_update(struct bbu_handler *handler, struct bbu_data *data) -{ - struct imx_internal_bbu_handler *imx_handler = - container_of(handler, struct imx_internal_bbu_handler, handler); - int ret; - - ret = imx_bbu_check_prereq(imx_handler, data->devicefile, data, - filetype_unknown); - if (ret) - return ret; - - pr_info("updating to %s\n", data->devicefile); - - ret = imx_bbu_write_device(imx_handler, data->devicefile, data, data->image, data->len); - - return ret; -} - #define DBBT_MAGIC 0x44424254 #define FCB_MAGIC 0x20424346 @@ -356,21 +332,14 @@ out: return ret; } -/* - * Update barebox on a v2 type internal boot (i.MX53) - * - * This constructs a DCD header, adds the specific DCD data and writes - * the resulting image to the device. Currently this handles MMC/SD - * and NAND devices. - */ -static int imx_bbu_internal_v2_update(struct bbu_handler *handler, struct bbu_data *data) +static int imx_bbu_update(struct bbu_handler *handler, struct bbu_data *data) { struct imx_internal_bbu_handler *imx_handler = container_of(handler, struct imx_internal_bbu_handler, handler); int ret; ret = imx_bbu_check_prereq(imx_handler, data->devicefile, data, - filetype_imx_image_v2); + imx_handler->expected_type); if (ret) return ret; @@ -423,21 +392,6 @@ free_bootpartvar: return ret; } -static int imx_bbu_external_update(struct bbu_handler *handler, struct bbu_data *data) -{ - struct imx_internal_bbu_handler *imx_handler = - container_of(handler, struct imx_internal_bbu_handler, handler); - int ret; - - ret = imx_bbu_check_prereq(imx_handler, data->devicefile, data, - filetype_unknown); - if (ret) - return ret; - - return imx_bbu_write_device(imx_handler, data->devicefile, data, - data->image, data->len); -} - static struct imx_internal_bbu_handler *__init_handler(const char *name, char *devicefile, unsigned long flags) { @@ -449,7 +403,9 @@ static struct imx_internal_bbu_handler *__init_handler(const char *name, char *d handler->devicefile = devicefile; handler->name = name; handler->flags = flags; + handler->handler = imx_bbu_update; + imx_handler->expected_type = filetype_unknown; imx_handler->write_device = __imx_bbu_write_device; return imx_handler; @@ -468,7 +424,8 @@ static int __register_handler(struct imx_internal_bbu_handler *imx_handler) static int imx_bbu_internal_mmc_register_handler(const char *name, char *devicefile, - unsigned long flags, void *handler) + unsigned long flags, + enum filetype expected_type) { struct imx_internal_bbu_handler *imx_handler; @@ -476,7 +433,7 @@ imx_bbu_internal_mmc_register_handler(const char *name, char *devicefile, IMX_BBU_FLAG_KEEP_HEAD); imx_handler->flash_header_offset = FLASH_HEADER_OFFSET_MMC; - imx_handler->handler.handler = handler; + imx_handler->expected_type = expected_type; return __register_handler(imx_handler); } @@ -490,8 +447,6 @@ int imx51_bbu_internal_spi_i2c_register_handler(const char *name, IMX_INTERNAL_FLAG_ERASE); imx_handler->flash_header_offset = FLASH_HEADER_OFFSET_MMC; - imx_handler->handler.handler = imx_bbu_internal_v1_update; - return __register_handler(imx_handler); } @@ -503,7 +458,7 @@ int imx51_bbu_internal_mmc_register_handler(const char *name, char *devicefile, { return imx_bbu_internal_mmc_register_handler(name, devicefile, flags, - imx_bbu_internal_v1_update); + filetype_unknown); } /* @@ -513,7 +468,7 @@ int imx53_bbu_internal_mmc_register_handler(const char *name, char *devicefile, unsigned long flags) { return imx_bbu_internal_mmc_register_handler(name, devicefile, flags, - imx_bbu_internal_v2_update); + filetype_imx_image_v2); } /* @@ -530,7 +485,7 @@ int imx53_bbu_internal_spi_i2c_register_handler(const char *name, char *devicefi IMX_INTERNAL_FLAG_ERASE); imx_handler->flash_header_offset = FLASH_HEADER_OFFSET_MMC; - imx_handler->handler.handler = imx_bbu_internal_v2_update; + imx_handler->expected_type = filetype_imx_image_v2; return __register_handler(imx_handler); } @@ -546,7 +501,7 @@ int imx53_bbu_internal_nand_register_handler(const char *name, imx_handler = __init_handler(name, NULL, flags); imx_handler->flash_header_offset = FLASH_HEADER_OFFSET_MMC; - imx_handler->handler.handler = imx_bbu_internal_v2_update; + imx_handler->expected_type = filetype_imx_image_v2; imx_handler->handler.devicefile = "/dev/nand0"; imx_handler->device_size = partition_size; imx_handler->write_device = imx_bbu_internal_v2_write_nand_dbbt; @@ -607,7 +562,6 @@ int imx_bbu_external_nor_register_handler(const char *name, char *devicefile, imx_handler = __init_handler(name, devicefile, flags | IMX_INTERNAL_FLAG_ERASE); - imx_handler->handler.handler = imx_bbu_external_update; return __register_handler(imx_handler); } -- 2.17.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox