diff options
author | Jan Weitzel <j.weitzel@phytec.de> | 2014-11-13 13:31:46 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-11-19 07:45:37 +0100 |
commit | b3f62a06ea42b36d48ac47fa9d8318622dc319ce (patch) | |
tree | c2ddc46f68e76d46d0121ca2c968f256c0f1f3a9 /arch | |
parent | 47a019a3d46652dab4715ba167881adfbea44d28 (diff) | |
download | barebox-b3f62a06ea42b36d48ac47fa9d8318622dc319ce.tar.gz barebox-b3f62a06ea42b36d48ac47fa9d8318622dc319ce.tar.xz |
ARM: omap: Add bootsource serial to xload
If booted from serial via xmodem, also get barebox.bin per xmodem
For first stage you need the .pblx file instead of MLO.
Add serial boot to am335x_mlo_defconfig introduce some cleanups
by savedefconfig
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/configs/am335x_mlo_defconfig | 4 | ||||
-rw-r--r-- | arch/arm/mach-omap/Kconfig | 9 | ||||
-rw-r--r-- | arch/arm/mach-omap/xload.c | 46 |
3 files changed, 56 insertions, 3 deletions
diff --git a/arch/arm/configs/am335x_mlo_defconfig b/arch/arm/configs/am335x_mlo_defconfig index d691570ffe..9734da60c7 100644 --- a/arch/arm/configs/am335x_mlo_defconfig +++ b/arch/arm/configs/am335x_mlo_defconfig @@ -1,12 +1,12 @@ CONFIG_ARCH_OMAP=y CONFIG_OMAP_BUILD_IFT=y +CONFIG_OMAP_SERIALBOOT=y CONFIG_OMAP_MULTI_BOARDS=y CONFIG_MACH_AFI_GF=y CONFIG_MACH_BEAGLEBONE=y CONFIG_MACH_PCM051=y CONFIG_MACH_PFLA03=y CONFIG_THUMB2_BAREBOX=y -# CONFIG_CMD_ARM_CPUINFO is not set # CONFIG_MEMINFO is not set CONFIG_MMU=y CONFIG_TEXT_BASE=0x0 @@ -37,10 +37,8 @@ CONFIG_NAND_OMAP_GPMC=y CONFIG_MCI=y # CONFIG_MCI_WRITE is not set CONFIG_MCI_OMAP_HSMMC=y -CONFIG_PINCTRL=y CONFIG_PINCTRL_SINGLE=y CONFIG_BUS_OMAP_GPMC=y -# CONFIG_FS_RAMFS is not set # CONFIG_FS_DEVFS is not set CONFIG_FS_FAT=y CONFIG_FS_FAT_LFN=y diff --git a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig index f9b5ec338f..0996ed9a06 100644 --- a/arch/arm/mach-omap/Kconfig +++ b/arch/arm/mach-omap/Kconfig @@ -118,6 +118,15 @@ config OMAP4_USBBOOT You need the utility program omap4_usbboot to boot from USB. Please read omap4_usb_booting.txt for more information. +config OMAP_SERIALBOOT + bool "enable booting from serial" + select XYMODEM + select FS_RAMFS + depends on ARCH_AM33XX && SHELL_NONE + help + Say Y here if you want to load the 2nd stage barebox.bin with + xmodem after booting from serial line. + config OMAP_MULTI_BOARDS bool "Allow multiple boards to be selected" select HAVE_DEFAULT_ENVIRONMENT_NEW diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c index e9d7bbb2e9..8d9d84c85c 100644 --- a/arch/arm/mach-omap/xload.c +++ b/arch/arm/mach-omap/xload.c @@ -11,6 +11,7 @@ #include <sizes.h> #include <malloc.h> #include <filetype.h> +#include <xymodem.h> #include <mach/generic.h> struct omap_barebox_part *barebox_part; @@ -184,6 +185,45 @@ static void *omap4_xload_boot_usb(void){ return buf; } +static void *omap_serial_boot(void){ + struct console_device *cdev; + int ret; + void *buf; + int len; + int fd; + + /* need temporary place to store file */ + ret = mount("none", "ramfs", "/", NULL); + if (ret < 0) { + printf("failed to mount ramfs\n"); + return NULL; + } + + cdev = console_get_first_active(); + if (!cdev) { + printf("failed to get console\n"); + return NULL; + } + + fd = open("/barebox.bin", O_WRONLY | O_CREAT); + if (fd < 0) { + printf("could not create barebox.bin\n"); + return NULL; + } + + ret = do_load_serial_xmodem(cdev, fd); + if (ret < 0) { + printf("loadx failed\n"); + return NULL; + } + + buf = read_file("/barebox.bin", &len); + if (!buf) + printf("could not read barebox.bin from serial\n"); + + return buf; +} + /* * Replaces the default shell in xload configuration */ @@ -218,6 +258,12 @@ static __noreturn int omap_xload(void) func = omap_xload_boot_spi(barebox_part->nor_offset, barebox_part->nor_size); break; + case BOOTSOURCE_SERIAL: + if (IS_ENABLED(CONFIG_OMAP_SERIALBOOT)) { + printf("booting from serial\n"); + func = omap_serial_boot(); + break; + } default: printf("unknown boot source. Fall back to nand\n"); func = omap_xload_boot_nand(barebox_part->nand_offset, |