[PATCH 1/4] OMAP: xload: Factor out reading image from mtd partition
Teresa Remmet
t.remmet at phytec.de
Wed Jun 29 03:01:05 PDT 2016
Remove code duplication of reading images out of mtd partitions.
Signed-off-by: Teresa Remmet <t.remmet at phytec.de>
---
arch/arm/mach-omap/xload.c | 71 ++++++++++++++--------------------------------
1 file changed, 22 insertions(+), 49 deletions(-)
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 7793819..91890b2 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -36,7 +36,7 @@ static void *read_image_head(const char *name)
cdev = cdev_open(name, O_RDONLY);
if (!cdev) {
- printf("failed to open partition\n");
+ printf("failed to open %s\n", name);
return NULL;
}
@@ -44,7 +44,7 @@ static void *read_image_head(const char *name)
cdev_close(cdev);
if (ret != ARM_HEAD_SIZE) {
- printf("failed to read from partition\n");
+ printf("failed to read from %s\n", name);
return NULL;
}
@@ -63,18 +63,14 @@ static unsigned int get_image_size(void *head)
return ret;
}
-static void *omap_xload_boot_nand(int offset, int part_size)
+static void *read_mtd_barebox(const char *partition)
{
int ret;
int size;
void *to, *header;
struct cdev *cdev;
- devfs_add_partition("nand0", offset, part_size,
- DEVFS_PARTITION_FIXED, "x");
- dev_add_bb_dev("x", "bbx");
-
- header = read_image_head("bbx");
+ header = read_image_head(partition);
if (header == NULL)
return NULL;
@@ -86,21 +82,30 @@ static void *omap_xload_boot_nand(int offset, int part_size)
to = xmalloc(size);
- cdev = cdev_open("bbx", O_RDONLY);
+ cdev = cdev_open(partition, O_RDONLY);
if (!cdev) {
- printf("failed to open nand\n");
+ printf("failed to open partition\n");
return NULL;
}
ret = cdev_read(cdev, to, size, 0, 0);
if (ret != size) {
- printf("failed to read from nand\n");
+ printf("failed to read from partition\n");
return NULL;
}
return to;
}
+static void *omap_xload_boot_nand(struct omap_barebox_part *part)
+{
+ devfs_add_partition("nand0", part->nand_offset, part->nand_size,
+ DEVFS_PARTITION_FIXED, "x");
+ dev_add_bb_dev("x", "bbx");
+
+ return read_mtd_barebox("bbx");
+}
+
static void *omap_xload_boot_mmc(void)
{
int ret;
@@ -138,41 +143,12 @@ static void *omap_xload_boot_mmc(void)
return buf;
}
-static void *omap_xload_boot_spi(int offset, int part_size)
+static void *omap_xload_boot_spi(struct omap_barebox_part *part)
{
- int ret;
- int size;
- void *to, *header;
- struct cdev *cdev;
-
- devfs_add_partition("m25p0", offset, part_size,
+ devfs_add_partition("m25p0", part->nor_offset, part->nor_size,
DEVFS_PARTITION_FIXED, "x");
- header = read_image_head("x");
- if (header == NULL)
- return NULL;
-
- size = get_image_size(header);
- if (!size) {
- printf("failed to get image size\n");
- return NULL;
- }
-
- to = xmalloc(size);
-
- cdev = cdev_open("x", O_RDONLY);
- if (!cdev) {
- printf("failed to open spi flash\n");
- return NULL;
- }
-
- ret = cdev_read(cdev, to, size, 0, 0);
- if (ret != size) {
- printf("failed to read from spi flash\n");
- return NULL;
- }
-
- return to;
+ return read_mtd_barebox("x");
}
static void *omap4_xload_boot_usb(void){
@@ -323,13 +299,11 @@ static __noreturn int omap_xload(void)
break;
case BOOTSOURCE_NAND:
printf("booting from NAND\n");
- func = omap_xload_boot_nand(barebox_part->nand_offset,
- barebox_part->nand_size);
+ func = omap_xload_boot_nand(barebox_part);
break;
case BOOTSOURCE_SPI:
printf("booting from SPI\n");
- func = omap_xload_boot_spi(barebox_part->nor_offset,
- barebox_part->nor_size);
+ func = omap_xload_boot_spi(barebox_part);
break;
case BOOTSOURCE_SERIAL:
if (IS_ENABLED(CONFIG_OMAP_SERIALBOOT)) {
@@ -347,8 +321,7 @@ static __noreturn int omap_xload(void)
}
default:
printf("unknown boot source. Fall back to nand\n");
- func = omap_xload_boot_nand(barebox_part->nand_offset,
- barebox_part->nand_size);
+ func = omap_xload_boot_nand(barebox_part);
break;
}
--
1.9.1
More information about the barebox
mailing list