From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: barebox@lists.infradead.org
Subject: Re: [RFC PATCH 1/1] omap: xload: switch to generic bootstrap
Date: Tue, 22 Jan 2013 15:36:47 +0100 [thread overview]
Message-ID: <20130122143647.GL26329@game.jcrosoft.org> (raw)
In-Reply-To: <1358779081-31836-1-git-send-email-plagnioj@jcrosoft.com>
On 15:38 Mon 21 Jan , Jean-Christophe PLAGNIOL-VILLARD wrote:
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---
> Hi,
>
> just compiled not tested
Sascha can you test it on panda or beagle?
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 <common.h>
> -#include <partition.h>
> -#include <nand.h>
> -#include <init.h>
> -#include <driver.h>
> -#include <linux/mtd/mtd.h>
> -#include <fs.h>
> -#include <fcntl.h>
> -#include <mach/xload.h>
> -#include <sizes.h>
> -#include <filetype.h>
> -
> -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 <common.h>
> +#include <partition.h>
> +#include <nand.h>
> +#include <init.h>
> +#include <driver.h>
> +#include <linux/mtd/mtd.h>
> +#include <fs.h>
> +#include <fcntl.h>
> +#include <mach/xload.h>
> +#include <sizes.h>
> +#include <filetype.h>
> +#include <bootstrap.h>
> +
> +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
next prev parent reply other threads:[~2013-01-22 14:38 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-21 14:38 [RFC PATCH 1/1] omap: xload: switch to generic bootstrap Jean-Christophe PLAGNIOL-VILLARD
2013-01-22 14:36 ` Jean-Christophe PLAGNIOL-VILLARD [this message]
2013-01-30 22:13 ` Sascha Hauer
2013-01-31 13:16 ` Jean-Christophe PLAGNIOL-VILLARD
2013-01-31 13:20 ` Jean-Christophe PLAGNIOL-VILLARD
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130122143647.GL26329@game.jcrosoft.org \
--to=plagnioj@jcrosoft.com \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.