static int imx_bbu_internal_mmc_register_handler(const char *name, const char *devicefile, unsigned long flags) { struct imx_internal_bbu_handler *imx_handler; imx_handler = __init_handler(name, devicefile, flags | IMX_BBU_FLAG_KEEP_HEAD); imx_handler->flash_header_offset = imx_bbu_flash_header_offset_mmc(); return __register_handler(imx_handler); }
int imx_bbu_external_nor_register_handler(const char *name, const char *devicefile, unsigned long flags) { struct imx_internal_bbu_handler *imx_handler; imx_handler = __init_handler(name, devicefile, flags | IMX_INTERNAL_FLAG_ERASE); imx_handler->expected_type = filetype_unknown; return __register_handler(imx_handler); }
/* * Register a handler that writes to the non-active boot partition of an mmc * medium and on success activates the written-to partition. So the machine can * still boot even after a failed try to write a boot image. * * Pass "devicefile" without partition name and /dev/ prefix. e.g. just "mmc2". * Note that no further partitioning of the boot partition is supported up to * now. */ static int imx_bbu_internal_mmcboot_register_handler(const char *name, const char *devicefile, unsigned long flags) { struct imx_internal_bbu_handler *imx_handler; imx_handler = __init_handler(name, devicefile, flags); imx_handler->flash_header_offset = imx_bbu_flash_header_offset_mmc(); imx_handler->handler.handler = imx_bbu_internal_mmcboot_update; return __register_handler(imx_handler); }
/* * Register an i.MX53 internal boot update handler for NAND */ int imx53_bbu_internal_nand_register_handler(const char *name, unsigned long flags, int partition_size) { struct imx_internal_bbu_handler *imx_handler; imx_handler = __init_handler(name, "/dev/nand0", flags); imx_handler->flash_header_offset = imx_bbu_flash_header_offset_mmc(); imx_handler->device_size = partition_size; imx_handler->write_device = imx_bbu_internal_v2_write_nand_dbbt; return __register_handler(imx_handler); }
/* * Register a i.MX53 internal boot update handler for i2c/spi * EEPROMs / flashes. Nearly the same as MMC/SD, but we do not need to * keep a partition table. We have to erase the device beforehand though. */ int imx53_bbu_internal_spi_i2c_register_handler(const char *name, char *devicefile, unsigned long flags, struct imx_dcd_v2_entry *dcd, int dcdsize, unsigned long app_dest) { struct imx_internal_bbu_handler *imx_handler; imx_handler = __init_handler(name, devicefile, flags); imx53_bbu_internal_init_dcd(imx_handler, dcd, dcdsize); imx_handler->flash_header_offset = FLASH_HEADER_OFFSET_MMC; if (app_dest) imx_handler->app_dest = app_dest; else imx_handler->app_dest = 0x70000000; imx_handler->flags = IMX_INTERNAL_FLAG_ERASE; imx_handler->handler.handler = imx_bbu_internal_v2_update; return __register_handler(imx_handler); }
/* * Register a i.MX51 internal boot update handler for MMC/SD */ int imx51_bbu_internal_mmc_register_handler(const char *name, char *devicefile, unsigned long flags, struct imx_dcd_entry *dcd, int dcdsize, unsigned long app_dest) { struct imx_internal_bbu_handler *imx_handler; imx_handler = __init_handler(name, devicefile, flags); imx_handler->dcd = dcd; imx_handler->dcdsize = dcdsize; imx_handler->flash_header_offset = FLASH_HEADER_OFFSET_MMC; if (app_dest) imx_handler->app_dest = app_dest; else imx_handler->app_dest = 0x90000000; imx_handler->flags = IMX_INTERNAL_FLAG_KEEP_DOSPART; imx_handler->handler.handler = imx_bbu_internal_v1_update; return __register_handler(imx_handler); }
/* * Register a i.MX53 internal boot update handler for NAND */ int imx53_bbu_internal_nand_register_handler(const char *name, unsigned long flags, struct imx_dcd_v2_entry *dcd, int dcdsize, int partition_size, unsigned long app_dest) { struct imx_internal_bbu_handler *imx_handler; imx_handler = __init_handler(name, NULL, flags); imx53_bbu_internal_init_dcd(imx_handler, dcd, dcdsize); imx_handler->flash_header_offset = 0x400; if (app_dest) imx_handler->app_dest = app_dest; else imx_handler->app_dest = 0x70000000; imx_handler->handler.handler = imx_bbu_internal_v2_update; imx_handler->flags = IMX_INTERNAL_FLAG_NAND; imx_handler->handler.devicefile = "/dev/nand0"; imx_handler->device_size = partition_size; return __register_handler(imx_handler); }