summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap
diff options
context:
space:
mode:
authorTeresa Remmet <t.remmet@phytec.de>2016-06-29 12:01:05 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2016-06-30 08:37:24 +0200
commit3280bc633135ca899979ab747563b0fa20fde067 (patch)
tree7e74190e6b29559c30262dd74add7b7f11039bfe /arch/arm/mach-omap
parentd7fc1c18e785277f24a69e2aaa1a2c6e80e2b0cf (diff)
downloadbarebox-3280bc633135ca899979ab747563b0fa20fde067.tar.gz
barebox-3280bc633135ca899979ab747563b0fa20fde067.tar.xz
OMAP: xload: Factor out reading image from mtd partition
Remove code duplication of reading images out of mtd partitions. Signed-off-by: Teresa Remmet <t.remmet@phytec.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-omap')
-rw-r--r--arch/arm/mach-omap/xload.c71
1 files changed, 22 insertions, 49 deletions
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 77938190e1..91890b250d 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;
}