diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2018-06-07 06:00:39 -0700 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2018-06-11 08:54:10 +0200 |
commit | 50f8837c93c19910b22e20612337086f55dd4196 (patch) | |
tree | b14f721eee90817018e0d72b572fd00245f7d160 /arch | |
parent | 47e4a9bc9f298f44342071615b7f07b2d93763b7 (diff) | |
download | barebox-50f8837c93c19910b22e20612337086f55dd4196.tar.gz barebox-50f8837c93c19910b22e20612337086f55dd4196.tar.xz |
ARM: i.MX: xload-esdhc: Rework to make code be less i.MX6-specific
Convert imx6_esdhc_start_image() into a generic esdhc_start_image() by
making accept already filled "struct esdhc" as well as use
esdhc_read_blocks().
With that change, create new imx6_esdhc_start_image() whose sole task
is to properly fill a struct esdhc with appropriate offset and to pass
it on to esdhc_start_image().
Both changes are made with a goal of simplifying adding support of new
SoC in mind (see following commits adding support for i.MX8 as example).
NOTE: This commit does not re-implement imx6_esdhc_load_image(),
instead opting for dropping it, due to lack of any users in the
codebase.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-imx/include/mach/xload.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-imx/xload-esdhc.c | 87 |
2 files changed, 41 insertions, 47 deletions
diff --git a/arch/arm/mach-imx/include/mach/xload.h b/arch/arm/mach-imx/include/mach/xload.h index 3898d664ef..4e38ac7e2f 100644 --- a/arch/arm/mach-imx/include/mach/xload.h +++ b/arch/arm/mach-imx/include/mach/xload.h @@ -4,7 +4,6 @@ int imx53_nand_start_image(void); int imx6_spi_load_image(int instance, unsigned int flash_offset, void *buf, int len); int imx6_spi_start_image(int instance); -int imx6_esdhc_load_image(int instance, void *buf, int len); int imx6_esdhc_start_image(int instance); int imx_image_size(void); diff --git a/arch/arm/mach-imx/xload-esdhc.c b/arch/arm/mach-imx/xload-esdhc.c index bd58bdc644..4580f53cda 100644 --- a/arch/arm/mach-imx/xload-esdhc.c +++ b/arch/arm/mach-imx/xload-esdhc.c @@ -216,50 +216,7 @@ static int esdhc_read_blocks(struct esdhc *esdhc, void *dst, size_t len) return 0; } -int imx6_esdhc_load_image(int instance, void *buf, int len) -{ - struct esdhc esdhc; - int ret; - - switch (instance) { - case 0: - esdhc.regs = IOMEM(MX6_USDHC1_BASE_ADDR); - break; - case 1: - esdhc.regs = IOMEM(MX6_USDHC2_BASE_ADDR); - break; - case 2: - esdhc.regs = IOMEM(MX6_USDHC3_BASE_ADDR); - break; - case 3: - esdhc.regs = IOMEM(MX6_USDHC4_BASE_ADDR); - break; - default: - return -EINVAL; - } - - esdhc.is_mx6 = 1; - - ret = esdhc_read_blocks(&esdhc, buf, len); - if (ret) - return ret; - - return 0; -} - -/** - * imx6_esdhc_start_image - Load and start an image from USDHC controller - * @instance: The USDHC controller instance (0..4) - * - * This uses imx6_esdhc_load_image() to load an image from SD/MMC. - * It is assumed that the image is the currently running barebox image - * (This information is used to calculate the length of the image). The - * image is started afterwards. - * - * Return: If successful, this function does not return. A negative error - * code is returned when this function fails. - */ -int imx6_esdhc_start_image(int instance) +static int esdhc_start_image(struct esdhc *esdhc) { void *buf = (void *)0x10000000; u32 *ivt = buf + SZ_1K; @@ -270,7 +227,7 @@ int imx6_esdhc_start_image(int instance) len = imx_image_size(); len = ALIGN(len, SECTOR_SIZE); - ret = imx6_esdhc_load_image(instance, buf, 3 * SECTOR_SIZE); + ret = esdhc_read_blocks(esdhc, buf, 3 * SECTOR_SIZE); if (ret) return ret; if (*(u32 *)(ivt) != 0x402000d1) { @@ -281,7 +238,7 @@ int imx6_esdhc_start_image(int instance) pr_debug("Check ok, loading image\n"); - ret = imx6_esdhc_load_image(instance, buf, len); + ret = esdhc_read_blocks(esdhc, buf, len); if (ret) { pr_err("Loading image failed with %d\n", ret); return ret; @@ -295,3 +252,41 @@ int imx6_esdhc_start_image(int instance) bb(); } + +/** + * imx6_esdhc_start_image - Load and start an image from USDHC controller + * @instance: The USDHC controller instance (0..4) + * + * This uses esdhc_start_image() to load an image from SD/MMC. It is + * assumed that the image is the currently running barebox image (This + * information is used to calculate the length of the image). The + * image is started afterwards. + * + * Return: If successful, this function does not return. A negative error + * code is returned when this function fails. + */ +int imx6_esdhc_start_image(int instance) +{ + struct esdhc esdhc; + + switch (instance) { + case 0: + esdhc.regs = IOMEM(MX6_USDHC1_BASE_ADDR); + break; + case 1: + esdhc.regs = IOMEM(MX6_USDHC2_BASE_ADDR); + break; + case 2: + esdhc.regs = IOMEM(MX6_USDHC3_BASE_ADDR); + break; + case 3: + esdhc.regs = IOMEM(MX6_USDHC4_BASE_ADDR); + break; + default: + return -EINVAL; + } + + esdhc.is_mx6 = 1; + + return esdhc_start_image(&esdhc); +} |