diff options
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/Makefile | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap/include/mach/generic.h | 10 | ||||
-rw-r--r-- | arch/arm/mach-omap/omap_generic.c | 67 | ||||
-rw-r--r-- | arch/arm/mach-omap/xload.c | 10 |
4 files changed, 69 insertions, 21 deletions
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 590a0d8f7b..7787cfed7d 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -142,8 +142,7 @@ KBUILD_IMAGE := barebox.s5p endif quiet_cmd_mlo ?= IFT $@ - cmd_mlo ?= scripts/omap_signGP $< $(TEXT_BASE) 1; \ - test -e $<.ift && mv $<.ift MLO + cmd_mlo ?= scripts/omap_signGP -o MLO -l $(TEXT_BASE) -c $< MLO: $(KBUILD_BINARY) $(call if_changed,mlo) diff --git a/arch/arm/mach-omap/include/mach/generic.h b/arch/arm/mach-omap/include/mach/generic.h index ece8c2baea..b05fdeee91 100644 --- a/arch/arm/mach-omap/include/mach/generic.h +++ b/arch/arm/mach-omap/include/mach/generic.h @@ -2,12 +2,13 @@ #define _MACH_GENERIC_H /* I2C controller revisions */ -#define OMAP_I2C_REV_2 0x20 +#define OMAP_I2C_OMAP1_REV_2 0x20 /* I2C controller revisions present on specific hardware */ -#define OMAP_I2C_REV_ON_2430 0x36 -#define OMAP_I2C_REV_ON_3430 0x3C -#define OMAP_I2C_REV_ON_4430 0x40 +#define OMAP_I2C_REV_ON_2430 0x00000036 +#define OMAP_I2C_REV_ON_3430_3530 0x0000003C +#define OMAP_I2C_REV_ON_3630 0x00000040 +#define OMAP_I2C_REV_ON_4430_PLUS 0x50400002 #ifdef CONFIG_ARCH_OMAP #define cpu_is_omap2430() (1) @@ -56,6 +57,7 @@ static inline int omap_set_mmc_dev(const char *mmcdev) extern uint32_t omap_bootinfo[3]; void omap_save_bootinfo(void *data); +void __noreturn omap_start_barebox(void *barebox); void omap_set_bootmmc_devname(const char *devname); const char *omap_get_bootmmc_devname(void); diff --git a/arch/arm/mach-omap/omap_generic.c b/arch/arm/mach-omap/omap_generic.c index e7ca821212..79e37e2341 100644 --- a/arch/arm/mach-omap/omap_generic.c +++ b/arch/arm/mach-omap/omap_generic.c @@ -15,15 +15,70 @@ #include <common.h> #include <bootsource.h> #include <envfs.h> +#include <boot.h> #include <init.h> #include <io.h> #include <fs.h> #include <malloc.h> #include <linux/stat.h> +#include <mach/generic.h> +#include <mach/am33xx-silicon.h> +#include <mach/omap3-silicon.h> +#include <mach/omap4-silicon.h> -static char *omap_bootmmc_dev; +static void *omap_sram_start(void) +{ + if (cpu_is_am33xx()) + return (void *)AM33XX_SRAM0_START; + if (cpu_is_omap34xx()) + return (void *)OMAP3_SRAM_BASE; + if (cpu_is_omap4xxx()) + return (void *)OMAP44XX_SRAM_BASE; +} + +void __noreturn omap_start_barebox(void *barebox) +{ + int (*func)(void *) = barebox; + uint32_t *arg; + void *sramadr = omap_sram_start(); + + arg = (uint32_t *)&omap_bootinfo; + + memcpy(sramadr, &omap_bootinfo, sizeof(uint32_t) * 3); + + shutdown_barebox(); + func(sramadr); + hang(); +} + +#ifdef CONFIG_BOOTM +static int do_bootm_omap_barebox(struct image_data *data) +{ + void (*barebox)(uint32_t); -void omap_set_bootmmc_devname(char *devname) + barebox = read_file(data->os_file, NULL); + if (!barebox) + return -EINVAL; + + omap_start_barebox(barebox); +} + +static struct image_handler omap_barebox_handler = { + .name = "OMAP barebox", + .bootm = do_bootm_omap_barebox, + .filetype = filetype_arm_barebox, +}; + +static int omap_bootm_barebox(void) +{ + return register_image_handler(&omap_barebox_handler); +} +device_initcall(omap_bootm_barebox); +#endif + +const static char *omap_bootmmc_dev; + +void omap_set_bootmmc_devname(const char *devname) { omap_bootmmc_dev = devname; } @@ -37,7 +92,8 @@ const char *omap_get_bootmmc_devname(void) static int omap_env_init(void) { struct stat s; - char *diskdev, *partname; + char *partname; + const char *diskdev; int ret; if (bootsource_get() != BOOTSOURCE_MMC) @@ -68,10 +124,7 @@ static int omap_env_init(void) return 0; } - if (IS_ENABLED(CONFIG_OMAP_BUILD_IFT)) - default_environment_path = "/dev/defaultenv"; - else - default_environment_path = "/boot/barebox.env"; + default_environment_path = "/boot/barebox.env"; return 0; } diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c index b4d1b55e57..69e3e42df6 100644 --- a/arch/arm/mach-omap/xload.c +++ b/arch/arm/mach-omap/xload.c @@ -188,8 +188,7 @@ static void *omap4_xload_boot_usb(void){ */ static __noreturn int omap_xload(void) { - int (*func)(void *) = NULL; - uint32_t *arg; + void *func; if (!barebox_part) barebox_part = &default_part; @@ -230,12 +229,7 @@ static __noreturn int omap_xload(void) while (1); } - arg = (uint32_t *)&omap_bootinfo; - - shutdown_barebox(); - func(arg); - - while (1); + omap_start_barebox(func); } int omap_set_barebox_part(struct omap_barebox_part *part) |