summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrent Piepho <tpiepho@kymetacorp.com>2015-12-10 21:51:39 +0000
committerSascha Hauer <s.hauer@pengutronix.de>2015-12-14 11:32:30 +0100
commitc44e12f0bde314f33f45bab31b1f7c69157d89b4 (patch)
tree538a02cbe5f4768e3b643b2b1991f0d09dc42732
parenta9e7e68279de3aec38b038211a15a80cfc612c4e (diff)
downloadbarebox-c44e12f0bde314f33f45bab31b1f7c69157d89b4.tar.gz
socfpga: Allow setting partition xloader boots from for mmc
The xloader boots the 2nd stage barebox from socfpga_barebox_part when using NOR. But when using MMC it boots from a hardcoded "disk0.1". Add the mmc device name to the partition description and use it for mmc booting. Add an extern declaration of socfpga_barebox_part to the socfpga header so that a board can change it to use a different partition. Initialize socfpga_barebox_part to the default value instead of NULL to avoid the NULL check later. Signed-off-by: Trent Piepho <tpiepho@kymetacorp.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/mach-socfpga/include/mach/generic.h4
-rw-r--r--arch/arm/mach-socfpga/xload.c8
2 files changed, 7 insertions, 5 deletions
diff --git a/arch/arm/mach-socfpga/include/mach/generic.h b/arch/arm/mach-socfpga/include/mach/generic.h
index 1f4247f..2a7e0ea 100644
--- a/arch/arm/mach-socfpga/include/mach/generic.h
+++ b/arch/arm/mach-socfpga/include/mach/generic.h
@@ -18,6 +18,10 @@ static inline void __udelay(unsigned us)
struct socfpga_barebox_part {
unsigned int nor_offset;
unsigned int nor_size;
+ const char *mmc_disk;
};
+/* Partition/device for xloader to load main bootloader from */
+extern const struct socfpga_barebox_part *barebox_part;
+
#endif /* __MACH_SOCFPGA_GENERIC_H */
diff --git a/arch/arm/mach-socfpga/xload.c b/arch/arm/mach-socfpga/xload.c
index cf05ff3..fd0d777 100644
--- a/arch/arm/mach-socfpga/xload.c
+++ b/arch/arm/mach-socfpga/xload.c
@@ -20,12 +20,13 @@
#include <mach/system-manager.h>
#include <mach/socfpga-regs.h>
-struct socfpga_barebox_part *barebox_part;
static struct socfpga_barebox_part default_part = {
.nor_offset = SZ_256K,
.nor_size = SZ_1M,
+ .mmc_disk = "disk0.1",
};
+const struct socfpga_barebox_part *barebox_part = &default_part;
enum socfpga_clks {
timer, mmc, qspi_clk, uart, clk_max
@@ -110,13 +111,10 @@ static __noreturn int socfpga_xload(void)
enum bootsource bootsource = bootsource_get();
void *buf;
- if (!barebox_part)
- barebox_part = &default_part;
-
switch (bootsource) {
case BOOTSOURCE_MMC:
socfpga_mmc_init();
- buf = bootstrap_read_disk("disk0.1", "fat");
+ buf = bootstrap_read_disk(barebox_part->mmc_disk, "fat");
break;
case BOOTSOURCE_SPI:
socfpga_qspi_init();