summaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/Makefile3
-rw-r--r--arch/arm/mach-omap/include/mach/generic.h10
-rw-r--r--arch/arm/mach-omap/omap_generic.c67
-rw-r--r--arch/arm/mach-omap/xload.c10
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)