Message ID | 1399526182-11966-5-git-send-email-tharvey@gateworks.com |
---|---|
State | Changes Requested |
Delegated to: | Stefano Babic |
Headers | show |
Hi Tim, Sorry for the late reply. On 08/05/14 08:16, Tim Harvey wrote: > Add a common spl.c file to support boot device functions needed for SPL > such as detecting the boot device. > > Signed-off-by: Tim Harvey <tharvey@gateworks.com> > --- > v3: > - added Freescale copyright > > v2: > - re-base on top of Masahiro Yamada's consolidation patch: > http://patchwork.ozlabs.org/patch/341817/ > - moved spl_boot_device() and get_boot_mode() into own common imx spl.c file > - use mem-mapped structure for smbr reg access > --- [..snip..] > + } > + break; > + /* SD/eSD: 8.5.3, Table 8-15 */ > + case 0x4: > + case 0x5: > + return BOOT_DEVICE_MMC1; > + /* MMC/eMMC: 8.5.3 */ > + case 0x6: > + case 0x7: > + return BOOT_DEVICE_MMC1; > + /* NAND Flash: 8.5.2 */ > + case 0x8 ... 0xf: > + return BOOT_DEVICE_NAND; > + } > + return BOOT_DEVICE_NONE; > +} > +#endif > + > +#if defined(CONFIG_SPL_MMC_SUPPORT) > +/* called from spl_mmc to see type of boot mode for storage (RAW or FAT) */ > +u32 spl_boot_mode(void) > +{ > + switch (spl_boot_device()) { > + /* for MMC return either RAW or FAT mode */ > + case BOOT_DEVICE_MMC1: > + case BOOT_DEVICE_MMC2: spl_boot_device() returns only BOOT_DEVICE_MMC1. Was the MMC/eMMC case supposed to return a BOOT_DEVICE_MMC2? Aside from this nitpick, Acked-by: Nikita Kiryanov <nikita@compulab.co.il>
On Wed, May 28, 2014 at 9:38 AM, Nikita Kiryanov <nikita@compulab.co.il> wrote: > Hi Tim, > Sorry for the late reply. no worries - your the only review of this revision thus far ;) > > > On 08/05/14 08:16, Tim Harvey wrote: >> >> Add a common spl.c file to support boot device functions needed for SPL >> such as detecting the boot device. >> >> Signed-off-by: Tim Harvey <tharvey@gateworks.com> >> --- >> v3: >> - added Freescale copyright >> >> v2: >> - re-base on top of Masahiro Yamada's consolidation patch: >> http://patchwork.ozlabs.org/patch/341817/ >> - moved spl_boot_device() and get_boot_mode() into own common imx spl.c >> file >> - use mem-mapped structure for smbr reg access >> --- > > > [..snip..] > > >> + } >> + break; >> + /* SD/eSD: 8.5.3, Table 8-15 */ >> + case 0x4: >> + case 0x5: >> + return BOOT_DEVICE_MMC1; >> + /* MMC/eMMC: 8.5.3 */ >> + case 0x6: >> + case 0x7: >> + return BOOT_DEVICE_MMC1; >> + /* NAND Flash: 8.5.2 */ >> + case 0x8 ... 0xf: >> + return BOOT_DEVICE_NAND; >> + } >> + return BOOT_DEVICE_NONE; >> +} >> +#endif >> + >> +#if defined(CONFIG_SPL_MMC_SUPPORT) >> +/* called from spl_mmc to see type of boot mode for storage (RAW or FAT) >> */ >> +u32 spl_boot_mode(void) >> +{ >> + switch (spl_boot_device()) { >> + /* for MMC return either RAW or FAT mode */ >> + case BOOT_DEVICE_MMC1: >> + case BOOT_DEVICE_MMC2: > > > spl_boot_device() returns only BOOT_DEVICE_MMC1. Was the MMC/eMMC case > supposed to return a BOOT_DEVICE_MMC2? Its hard to say - I think the use of BOOT_DEVICE_* is very implementation specific. I don't quite understand why there is a BOOT_DEVICE_MMC{1,2,2_2} defined in arch/arm/include/asm/spl.h - the BOOT_DEVICE_MMC2_2 is certainly quite odd. In uboot/common/spl/spl.c they are all treated the same and spl_mmc_load_image() always assumes the 'first' mmc device anyway. In the IMX6 case I'm not sure an SD/uSD card would be treated any different than an MMC card so it would come down to which specific device is flagged as the boot device, of which there are 4 sdhc's. So eventually, one might need to add more BOOT_DEVICE_MMC enums if that is to be supported. For now, I'm keeping it simple and there is an issue with IMX6 spl_mmc_load_image() anyway which I plan on addressing later. Tim > > Aside from this nitpick, > Acked-by: Nikita Kiryanov <nikita@compulab.co.il>
Hi Tim, On 05/29/14 07:11, Tim Harvey wrote: > On Wed, May 28, 2014 at 9:38 AM, Nikita Kiryanov <nikita@compulab.co.il> wrote: >> Hi Tim, >> Sorry for the late reply. > > no worries - your the only review of this revision thus far ;) > >> >> >> On 08/05/14 08:16, Tim Harvey wrote: >>> >>> Add a common spl.c file to support boot device functions needed for SPL >>> such as detecting the boot device. >>> >>> Signed-off-by: Tim Harvey <tharvey@gateworks.com> >>> --- >>> v3: >>> - added Freescale copyright >>> >>> v2: >>> - re-base on top of Masahiro Yamada's consolidation patch: >>> http://patchwork.ozlabs.org/patch/341817/ >>> - moved spl_boot_device() and get_boot_mode() into own common imx spl.c >>> file >>> - use mem-mapped structure for smbr reg access >>> --- >> >> >> [..snip..] >> >> >>> + } >>> + break; >>> + /* SD/eSD: 8.5.3, Table 8-15 */ >>> + case 0x4: >>> + case 0x5: >>> + return BOOT_DEVICE_MMC1; >>> + /* MMC/eMMC: 8.5.3 */ >>> + case 0x6: >>> + case 0x7: >>> + return BOOT_DEVICE_MMC1; >>> + /* NAND Flash: 8.5.2 */ >>> + case 0x8 ... 0xf: >>> + return BOOT_DEVICE_NAND; >>> + } >>> + return BOOT_DEVICE_NONE; >>> +} >>> +#endif >>> + >>> +#if defined(CONFIG_SPL_MMC_SUPPORT) >>> +/* called from spl_mmc to see type of boot mode for storage (RAW or FAT) >>> */ >>> +u32 spl_boot_mode(void) >>> +{ >>> + switch (spl_boot_device()) { >>> + /* for MMC return either RAW or FAT mode */ >>> + case BOOT_DEVICE_MMC1: >>> + case BOOT_DEVICE_MMC2: >> >> >> spl_boot_device() returns only BOOT_DEVICE_MMC1. Was the MMC/eMMC case >> supposed to return a BOOT_DEVICE_MMC2? > > Its hard to say - I think the use of BOOT_DEVICE_* is very > implementation specific. I don't quite understand why there is a > BOOT_DEVICE_MMC{1,2,2_2} defined in arch/arm/include/asm/spl.h - the > BOOT_DEVICE_MMC2_2 is certainly quite odd. AFAIK, this is needed to support eMMC boot partitions which are physical and not logical, but they are still within the same device. > In uboot/common/spl/spl.c > they are all treated the same and spl_mmc_load_image() always assumes > the 'first' mmc device anyway. > > In the IMX6 case I'm not sure an SD/uSD card would be treated any > different than an MMC card so it would come down to which specific > device is flagged as the boot device, of which there are 4 sdhc's. So > eventually, one might need to add more BOOT_DEVICE_MMC enums if that > is to be supported. For now, I'm keeping it simple and there is an > issue with IMX6 spl_mmc_load_image() anyway which I plan on addressing > later. > > Tim > >> >> Aside from this nitpick, >> Acked-by: Nikita Kiryanov <nikita@compulab.co.il> > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot >
diff --git a/arch/arm/imx-common/Makefile b/arch/arm/imx-common/Makefile index b04dfbb..c97ea48 100644 --- a/arch/arm/imx-common/Makefile +++ b/arch/arm/imx-common/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_SYS_I2C_MXC) += i2c-mxv7.o endif ifeq ($(SOC),$(filter $(SOC),mx6 mxs)) obj-y += misc.o +obj-$(CONFIG_SPL_BUILD) += spl.o endif ifeq ($(SOC),$(filter $(SOC),mx6)) obj-$(CONFIG_CMD_SATA) += sata.o diff --git a/arch/arm/imx-common/spl.c b/arch/arm/imx-common/spl.c new file mode 100644 index 0000000..9a02a64 --- /dev/null +++ b/arch/arm/imx-common/spl.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2014 Gateworks Corporation + * Copyright (C) 2011-2012 Freescale Semiconductor, Inc. + * + * Author: Tim Harvey <tharvey@gateworks.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/imx-regs.h> +#include <asm/spl.h> +#include <spl.h> + +#if defined(CONFIG_MX6) +/* determine boot device from SRC_SBMR1 register (BOOT_CFG[4:1]) */ +u32 spl_boot_device(void) +{ + struct src *psrc = (struct src *)SRC_BASE_ADDR; + unsigned reg = readl(&psrc->sbmr1); + + /* BOOT_CFG1[7:4] - see IMX6DQRM Table 8-8 */ + switch ((reg & 0x000000FF) >> 4) { + /* EIM: See 8.5.1, Table 8-9 */ + case 0x0: + /* BOOT_CFG1[3]: NOR/OneNAND Selection */ + if ((reg & 0x00000008) >> 3) + return BOOT_DEVICE_ONENAND; + else + return BOOT_DEVICE_NOR; + break; + /* SATA: See 8.5.4, Table 8-20 */ + case 0x2: + return BOOT_DEVICE_SATA; + /* Serial ROM: See 8.5.5.1, Table 8-22 */ + case 0x3: + /* BOOT_CFG4[2:0] */ + switch ((reg & 0x07000000) >> 24) { + case 0x0 ... 0x4: + return BOOT_DEVICE_SPI; + case 0x5 ... 0x7: + return BOOT_DEVICE_I2C; + } + break; + /* SD/eSD: 8.5.3, Table 8-15 */ + case 0x4: + case 0x5: + return BOOT_DEVICE_MMC1; + /* MMC/eMMC: 8.5.3 */ + case 0x6: + case 0x7: + return BOOT_DEVICE_MMC1; + /* NAND Flash: 8.5.2 */ + case 0x8 ... 0xf: + return BOOT_DEVICE_NAND; + } + return BOOT_DEVICE_NONE; +} +#endif + +#if defined(CONFIG_SPL_MMC_SUPPORT) +/* called from spl_mmc to see type of boot mode for storage (RAW or FAT) */ +u32 spl_boot_mode(void) +{ + switch (spl_boot_device()) { + /* for MMC return either RAW or FAT mode */ + case BOOT_DEVICE_MMC1: + case BOOT_DEVICE_MMC2: +#ifdef CONFIG_SPL_FAT_SUPPORT + return MMCSD_MODE_FAT; +#else + return MMCSD_MODE_RAW; +#endif + break; + default: + puts("spl: ERROR: unsupported device\n"); + hang(); + } +} +#endif
Add a common spl.c file to support boot device functions needed for SPL such as detecting the boot device. Signed-off-by: Tim Harvey <tharvey@gateworks.com> --- v3: - added Freescale copyright v2: - re-base on top of Masahiro Yamada's consolidation patch: http://patchwork.ozlabs.org/patch/341817/ - moved spl_boot_device() and get_boot_mode() into own common imx spl.c file - use mem-mapped structure for smbr reg access --- arch/arm/imx-common/Makefile | 1 + arch/arm/imx-common/spl.c | 81 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 arch/arm/imx-common/spl.c