summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap/xload.c
diff options
context:
space:
mode:
authorTeresa Gámez <t.gamez@phytec.de>2013-07-09 11:23:21 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-07-10 23:30:42 +0200
commitad0a5ec74b1f3c683ab9e23c31cba717456c0a0d (patch)
tree722208c1b5afc56dab966349001d206371295c02 /arch/arm/mach-omap/xload.c
parentc5c875ab7f442365a0c4c453238ef0a8a4ebb2d0 (diff)
downloadbarebox-ad0a5ec74b1f3c683ab9e23c31cba717456c0a0d.tar.gz
barebox-ad0a5ec74b1f3c683ab9e23c31cba717456c0a0d.tar.xz
ARM OMAP: get barebox partion information from boardcode
The size and offset of the barebox partition in nand and spi nor flash may vary on different boards. Make it possible to pass this information over boardfile if needed. Signed-off-by: Teresa Gámez <t.gamez@phytec.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-omap/xload.c')
-rw-r--r--arch/arm/mach-omap/xload.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 3dbdef516f..76746e27bd 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -11,6 +11,15 @@
#include <filetype.h>
#include <mach/generic.h>
+struct omap_barebox_part *barebox_part;
+
+static struct omap_barebox_part default_part = {
+ .nand_offset = SZ_128K,
+ .nand_size = SZ_1M,
+ .nor_offset = SZ_128K,
+ .nor_size = SZ_1M,
+};
+
static void *read_image_head(const char *name)
{
void *header = xmalloc(ARM_HEAD_SIZE);
@@ -46,14 +55,15 @@ static unsigned int get_image_size(void *head)
return ret;
}
-static void *omap_xload_boot_nand(int offset)
+static void *omap_xload_boot_nand(int offset, int part_size)
{
int ret;
int size;
void *to, *header;
struct cdev *cdev;
- devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
+ devfs_add_partition("nand0", offset, part_size,
+ DEVFS_PARTITION_FIXED, "x");
dev_add_bb_dev("x", "bbx");
header = read_image_head("bbx");
@@ -105,14 +115,15 @@ static void *omap_xload_boot_mmc(void)
return buf;
}
-static void *omap_xload_boot_spi(int offset)
+static void *omap_xload_boot_spi(int offset, int part_size)
{
int ret;
int size;
void *to, *header;
struct cdev *cdev;
- devfs_add_partition("m25p0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
+ devfs_add_partition("m25p0", offset, part_size,
+ DEVFS_PARTITION_FIXED, "x");
header = read_image_head("x");
if (header == NULL)
@@ -167,6 +178,9 @@ static __noreturn int omap_xload(void)
int (*func)(void *) = NULL;
uint32_t *arg;
+ if (!barebox_part)
+ barebox_part = &default_part;
+
switch (bootsource_get())
{
case BOOTSOURCE_MMC:
@@ -183,15 +197,18 @@ static __noreturn int omap_xload(void)
}
case BOOTSOURCE_NAND:
printf("booting from NAND\n");
- func = omap_xload_boot_nand(SZ_128K);
+ func = omap_xload_boot_nand(barebox_part->nand_offset,
+ barebox_part->nand_size);
break;
case BOOTSOURCE_SPI:
printf("booting from SPI\n");
- func = omap_xload_boot_spi(SZ_128K);
+ func = omap_xload_boot_spi(barebox_part->nor_offset,
+ barebox_part->nor_size);
break;
default:
printf("unknown boot source. Fall back to nand\n");
- func = omap_xload_boot_nand(SZ_128K);
+ func = omap_xload_boot_nand(barebox_part->nand_offset,
+ barebox_part->nand_size);
break;
}
@@ -208,6 +225,13 @@ static __noreturn int omap_xload(void)
while (1);
}
+int omap_set_barebox_part(struct omap_barebox_part *part)
+{
+ barebox_part = part;
+
+ return 0;
+}
+
static int omap_set_xload(void)
{
barebox_main = omap_xload;