From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from 16.mo5.mail-out.ovh.net ([87.98.174.144] helo=mo5.mail-out.ovh.net) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1TxIX0-0006iB-JP for barebox@lists.infradead.org; Mon, 21 Jan 2013 14:39:33 +0000 Received: from mail178.ha.ovh.net (b9.ovh.net [213.186.33.59]) by mo5.mail-out.ovh.net (Postfix) with SMTP id 1B958FFA901 for ; Mon, 21 Jan 2013 15:49:12 +0100 (CET) From: Jean-Christophe PLAGNIOL-VILLARD Date: Mon, 21 Jan 2013 15:38:01 +0100 Message-Id: <1358779081-31836-1-git-send-email-plagnioj@jcrosoft.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: barebox-bounces@lists.infradead.org Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [RFC PATCH 1/1] omap: xload: switch to generic bootstrap To: barebox@lists.infradead.org Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD --- Hi, just compiled not tested Best Regards, J. .../configs/am335x_beaglebone_mlo_small_defconfig | 2 + arch/arm/configs/archosg9_xload_defconfig | 2 + arch/arm/configs/omap3530_beagle_xload_defconfig | 3 + arch/arm/configs/panda_xload_defconfig | 2 + arch/arm/configs/pcm049_xload_defconfig | 3 + arch/arm/configs/phycard_a_l1_xload_defconfig | 3 + arch/arm/configs/phycard_a_xl2_xload_defconfig | 3 + arch/arm/mach-omap/xload.c | 292 +++++--------------- 8 files changed, 88 insertions(+), 222 deletions(-) rewrite arch/arm/mach-omap/xload.c (70%) diff --git a/arch/arm/configs/am335x_beaglebone_mlo_small_defconfig b/arch/arm/configs/am335x_beaglebone_mlo_small_defconfig index 886dad9..91c18a5 100644 --- a/arch/arm/configs/am335x_beaglebone_mlo_small_defconfig +++ b/arch/arm/configs/am335x_beaglebone_mlo_small_defconfig @@ -29,3 +29,5 @@ CONFIG_MCI_OMAP_HSMMC=y # CONFIG_FS_DEVFS is not set CONFIG_FS_FAT=y CONFIG_FS_FAT_LFN=y +CONFIG_BOOTSTRAP=y +CONFIG_BOOTSTRAP_DISK=y diff --git a/arch/arm/configs/archosg9_xload_defconfig b/arch/arm/configs/archosg9_xload_defconfig index 6c6782f..26de57e 100644 --- a/arch/arm/configs/archosg9_xload_defconfig +++ b/arch/arm/configs/archosg9_xload_defconfig @@ -22,3 +22,5 @@ CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT=y # CONFIG_FS_RAMFS is not set # CONFIG_FS_DEVFS is not set CONFIG_FS_OMAP4_USBBOOT=y +CONFIG_BOOTSTRAP=y +CONFIG_BOOTSTRAP_DISK=y diff --git a/arch/arm/configs/omap3530_beagle_xload_defconfig b/arch/arm/configs/omap3530_beagle_xload_defconfig index d951b1c..2164208 100644 --- a/arch/arm/configs/omap3530_beagle_xload_defconfig +++ b/arch/arm/configs/omap3530_beagle_xload_defconfig @@ -36,3 +36,6 @@ CONFIG_MCI_OMAP_HSMMC=y # CONFIG_FS_RAMFS is not set # CONFIG_FS_DEVFS is not set CONFIG_FS_FAT=y +CONFIG_BOOTSTRAP=y +CONFIG_BOOTSTRAP_DEVFS=y +CONFIG_BOOTSTRAP_DISK=y diff --git a/arch/arm/configs/panda_xload_defconfig b/arch/arm/configs/panda_xload_defconfig index fec09ce..84cebbf 100644 --- a/arch/arm/configs/panda_xload_defconfig +++ b/arch/arm/configs/panda_xload_defconfig @@ -25,3 +25,5 @@ CONFIG_MCI_OMAP_HSMMC=y # CONFIG_FS_RAMFS is not set # CONFIG_FS_DEVFS is not set CONFIG_FS_FAT=y +CONFIG_BOOTSTRAP=y +CONFIG_BOOTSTRAP_DISK=y diff --git a/arch/arm/configs/pcm049_xload_defconfig b/arch/arm/configs/pcm049_xload_defconfig index b6d3a7a..44f9194 100644 --- a/arch/arm/configs/pcm049_xload_defconfig +++ b/arch/arm/configs/pcm049_xload_defconfig @@ -39,3 +39,6 @@ CONFIG_MCI_OMAP_HSMMC=y # CONFIG_FS_RAMFS is not set # CONFIG_FS_DEVFS is not set CONFIG_FS_FAT=y +CONFIG_BOOTSTRAP=y +CONFIG_BOOTSTRAP_DEVFS=y +CONFIG_BOOTSTRAP_DISK=y diff --git a/arch/arm/configs/phycard_a_l1_xload_defconfig b/arch/arm/configs/phycard_a_l1_xload_defconfig index 30253cb..d1e3bed 100644 --- a/arch/arm/configs/phycard_a_l1_xload_defconfig +++ b/arch/arm/configs/phycard_a_l1_xload_defconfig @@ -41,3 +41,6 @@ CONFIG_MCI_OMAP_HSMMC=y # CONFIG_FS_RAMFS is not set # CONFIG_FS_DEVFS is not set CONFIG_FS_FAT=y +CONFIG_BOOTSTRAP=y +CONFIG_BOOTSTRAP_DEVFS=y +CONFIG_BOOTSTRAP_DISK=y diff --git a/arch/arm/configs/phycard_a_xl2_xload_defconfig b/arch/arm/configs/phycard_a_xl2_xload_defconfig index 7975220..d6b5daa 100644 --- a/arch/arm/configs/phycard_a_xl2_xload_defconfig +++ b/arch/arm/configs/phycard_a_xl2_xload_defconfig @@ -39,3 +39,6 @@ CONFIG_MCI_OMAP_HSMMC=y # CONFIG_FS_RAMFS is not set # CONFIG_FS_DEVFS is not set CONFIG_FS_FAT=y +CONFIG_BOOTSTRAP=y +CONFIG_BOOTSTRAP_DEVFS=y +CONFIG_BOOTSTRAP_DISK=y diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c dissimilarity index 70% index 41533a9..c02e37e 100644 --- a/arch/arm/mach-omap/xload.c +++ b/arch/arm/mach-omap/xload.c @@ -1,222 +1,70 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static void *read_image_head(const char *name) -{ - void *header = xmalloc(ARM_HEAD_SIZE); - struct cdev *cdev; - int ret; - - cdev = cdev_open(name, O_RDONLY); - if (!cdev) { - printf("failed to open partition\n"); - return NULL; - } - - ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0); - cdev_close(cdev); - - if (ret != ARM_HEAD_SIZE) { - printf("failed to read from partition\n"); - return NULL; - } - - return header; -} - -static unsigned int get_image_size(void *head) -{ - unsigned int ret = 0; - unsigned int *psize = head + ARM_HEAD_SIZE_OFFSET; - - if (is_barebox_arm_head(head)) - ret = *psize; - debug("Detected barebox image size %u\n", ret); - - return ret; -} - -static void *omap_xload_boot_nand(int offset) -{ - int ret; - int size; - void *to, *header; - struct cdev *cdev; - - devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x"); - dev_add_bb_dev("x", "bbx"); - - header = read_image_head("bbx"); - if (header == NULL) - return NULL; - - size = get_image_size(header); - if (!size) { - printf("failed to get image size\n"); - return NULL; - } - - to = xmalloc(size); - - cdev = cdev_open("bbx", O_RDONLY); - if (!cdev) { - printf("failed to open nand\n"); - return NULL; - } - - ret = cdev_read(cdev, to, size, 0, 0); - if (ret != size) { - printf("failed to read from nand\n"); - return NULL; - } - - return to; -} - -static void *omap_xload_boot_mmc(void) -{ - int ret; - void *buf; - int len; - const char *diskdev = "disk0.0"; - - ret = mount(diskdev, "fat", "/"); - if (ret) { - printf("Unable to mount %s (%d)\n", diskdev, ret); - return NULL; - } - - buf = read_file("/barebox.bin", &len); - if (!buf) { - printf("could not read barebox.bin from sd card\n"); - return NULL; - } - - return buf; -} - -static void *omap_xload_boot_spi(int offset) -{ - int ret; - int size; - void *to, *header; - struct cdev *cdev; - - devfs_add_partition("m25p0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x"); - - header = read_image_head("x"); - if (header == NULL) - return NULL; - - size = get_image_size(header); - if (!size) { - printf("failed to get image size\n"); - return NULL; - } - - to = xmalloc(size); - - cdev = cdev_open("x", O_RDONLY); - if (!cdev) { - printf("failed to open spi flash\n"); - return NULL; - } - - ret = cdev_read(cdev, to, size, 0, 0); - if (ret != size) { - printf("failed to read from spi flash\n"); - return NULL; - } - - return to; -} - -static void *omap4_xload_boot_usb(void){ - int ret; - void *buf; - int len; - - ret = mount("omap4_usbboot", "omap4_usbbootfs", "/"); - if (ret) { - printf("Unable to mount omap4_usbbootfs (%d)\n", ret); - return NULL; - } - - buf = read_file("/barebox.bin", &len); - if (!buf) - printf("could not read barebox.bin from omap4_usbbootfs\n"); - - return buf; -} - -enum omap_boot_src omap_bootsrc(void) -{ -#if defined(CONFIG_ARCH_OMAP3) - return omap3_bootsrc(); -#elif defined(CONFIG_ARCH_OMAP4) - return omap4_bootsrc(); -#elif defined(CONFIG_ARCH_AM33XX) - return am33xx_bootsrc(); -#endif -} - -/* - * Replaces the default shell in xload configuration - */ -static __noreturn int omap_xload(void) -{ - int (*func)(void) = NULL; - - switch (omap_bootsrc()) - { - case OMAP_BOOTSRC_MMC1: - printf("booting from MMC1\n"); - func = omap_xload_boot_mmc(); - break; - case OMAP_BOOTSRC_USB1: - if (IS_ENABLED(CONFIG_FS_OMAP4_USBBOOT)) { - printf("booting from USB1\n"); - func = omap4_xload_boot_usb(); - break; - } else { - printf("booting from usb1 not enabled\n"); - } - case OMAP_BOOTSRC_UNKNOWN: - printf("unknown boot source. Fall back to nand\n"); - case OMAP_BOOTSRC_NAND: - printf("booting from NAND\n"); - func = omap_xload_boot_nand(SZ_128K); - break; - case OMAP_BOOTSRC_SPI1: - printf("booting from SPI1\n"); - func = omap_xload_boot_spi(SZ_128K); - break; - } - - if (!func) { - printf("booting failed\n"); - while (1); - } - - shutdown_barebox(); - func(); - - while (1); -} - -static int omap_set_xload(void) -{ - barebox_main = omap_xload; - - return 0; -} -late_initcall(omap_set_xload); +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum omap_boot_src omap_bootsrc(void) +{ +#if defined(CONFIG_ARCH_OMAP3) + return omap3_bootsrc(); +#elif defined(CONFIG_ARCH_OMAP4) + return omap4_bootsrc(); +#elif defined(CONFIG_ARCH_AM33XX) + return am33xx_bootsrc(); +#endif +} + +/* + * Replaces the default shell in xload configuration + */ +static __noreturn int omap_xload(void) +{ + int (*func)(void) = NULL; + + switch (omap_bootsrc()) + { + case OMAP_BOOTSRC_MMC1: + printf("booting from MMC1\n"); + func = bootstrap_read_disk("disk0.0", NULL); + break; + case OMAP_BOOTSRC_USB1: + if (IS_ENABLED(CONFIG_FS_OMAP4_USBBOOT)) { + printf("booting from USB1\n"); + func = bootstrap_read_disk("omap4_usbboot", "omap4_usbbootfs"); + break; + } else { + printf("booting from usb1 not enabled\n"); + } + case OMAP_BOOTSRC_UNKNOWN: + printf("unknown boot source. Fall back to nand\n"); + case OMAP_BOOTSRC_NAND: + printf("booting from NAND\n"); + func = bootstrap_read_devfs("nand0", true, SZ_128K, SZ_256K, SZ_1M); + break; + case OMAP_BOOTSRC_SPI1: + printf("booting from SPI1\n"); + func = bootstrap_read_devfs("m25p0", false, SZ_128K, SZ_256K, SZ_1M); + break; + } + + bootstrap_boot(func, false); + bootstrap_err("... failed\n"); + + while (1); +} + +static int omap_set_xload(void) +{ + barebox_main = omap_xload; + + return 0; +} +late_initcall(omap_set_xload); -- 1.7.10.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox