+cc Edward Lin On Mon, May 5, 2014 at 2:14 AM, Stefano Babic <sba...@denx.de> wrote: > Hi Tim, > > On 28/04/2014 22:17, 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 <thar...@gateworks.com> >> --- >> 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 | 79 >> ++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 80 insertions(+) >> create mode 100644 arch/arm/imx-common/spl.c >> >> 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..5c1667c >> --- /dev/null >> +++ b/arch/arm/imx-common/spl.c >> @@ -0,0 +1,79 @@ >> +/* >> + * Copyright (C) 2014 Gateworks Corporation >> + * Author: Tim Harvey <thar...@gateworks.com> >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + > > Just a little remark. Do you have written the function on your own or > have you ported it from Freescale's 2009.08 ? Apart names, it looks similar. > > If this is the case, you should also add Freescale's Copyright to the > header.
Hi Stefano, I've never looked at Freescales 2009.08 code myself (I have an aversion to vendor specific forks of u-boot almost 5 years old heh), but its likely bits of the function came from there originally but my inspiration likely came from Edward Lin's patch a while back. A switch/case seems the logical approach given the bitfield from the IMX6 reference manual with several don't-cares spread around and I felt that was much easier to read than trying to convert it all the shifts and masks. I can add additional copyright's if anyone feels its necessary - I've added Edward to the cc to see if he feels its necessary. Tim > >> +#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 >> > > Best regards, > Stefano Babic > > -- > ===================================================================== > DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de > ===================================================================== _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot