For the MMC update_handler it makes sense to probe the device before writing to it. If the device is not probed yet, you get errors like $ barebox_update -y -t mmc0 /mnt/tftp/barebox.bin barebox_update: Read-only file system The code is nearly equivalent to $ detect mmc0 $ barebox_update -y -t mmc0 /mnt/tftp/barebox.bin The function device_detect_by_name also handles device names with partition suffix like "/dev/mmc3.boot0". While at it, use the macro BIT for the bit field. Signed-off-by: Stefan Christ <s.christ@xxxxxxxxx> --- arch/arm/mach-imx/imx-bbu-internal.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-imx/imx-bbu-internal.c b/arch/arm/mach-imx/imx-bbu-internal.c index ac90c53..1ecc0d7 100644 --- a/arch/arm/mach-imx/imx-bbu-internal.c +++ b/arch/arm/mach-imx/imx-bbu-internal.c @@ -34,9 +34,10 @@ #define FLASH_HEADER_OFFSET_MMC 0x400 -#define IMX_INTERNAL_FLAG_NAND (1 << 0) -#define IMX_INTERNAL_FLAG_KEEP_DOSPART (1 << 1) -#define IMX_INTERNAL_FLAG_ERASE (1 << 2) +#define IMX_INTERNAL_FLAG_NAND BIT(0) +#define IMX_INTERNAL_FLAG_KEEP_DOSPART BIT(1) +#define IMX_INTERNAL_FLAG_ERASE BIT(2) +#define IMX_INTERNAL_FLAG_PROBE BIT(3) struct imx_internal_bbu_handler { struct bbu_handler handler; @@ -52,8 +53,21 @@ struct imx_internal_bbu_handler { static int imx_bbu_write_device(struct imx_internal_bbu_handler *imx_handler, struct bbu_data *data, void *buf, int image_len) { + const char *devname; int fd, ret; + if (imx_handler->flags & IMX_INTERNAL_FLAG_PROBE) { + devname = data->devicefile; + if (!strncmp(devname, "/dev/", 5)) + devname += 5; + ret = device_detect_by_name(devname); + if (ret) { + printf("Detecting device %s failed: %s\n", devname, + strerror(-ret)); + return ret; + } + } + fd = open(data->devicefile, O_RDWR | O_CREAT); if (fd < 0) return fd; @@ -487,7 +501,8 @@ int imx6_bbu_internal_mmc_register_handler(const char *name, char *devicefile, imx_handler = __init_handler(name, devicefile, flags); imx_handler->flash_header_offset = FLASH_HEADER_OFFSET_MMC; - imx_handler->flags = IMX_INTERNAL_FLAG_KEEP_DOSPART; + imx_handler->flags = IMX_INTERNAL_FLAG_KEEP_DOSPART | + IMX_INTERNAL_FLAG_PROBE; imx_handler->handler.handler = imx_bbu_internal_v2_update; return __register_handler(imx_handler); -- 1.9.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox