X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=arch%2Farm%2Fmach-at91%2Fspl.c;h=7cba3825e7f4bc7c0b865add21cfb9829ee49431;hb=655b24cea6ef7ab1c7fd24d262b50c855b4e54b2;hp=27a405a42bf884ed49f2646646637e910386057d;hpb=b491d9757d14415edcb1468ed896a704d0f0cfe7;p=u-boot diff --git a/arch/arm/mach-at91/spl.c b/arch/arm/mach-at91/spl.c index 27a405a42b..7cba3825e7 100644 --- a/arch/arm/mach-at91/spl.c +++ b/arch/arm/mach-at91/spl.c @@ -1,8 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2013 Atmel Corporation * Bo Shen - * - * SPDX-License-Identifier: GPL-2.0+ */ #include @@ -23,28 +22,67 @@ void at91_disable_wdt(void) } #endif +#if defined(CONFIG_SAMA5D2) || defined(CONFIG_SAMA5D3) || \ + defined(CONFIG_SAMA5D4) +#include +struct { + u32 r4; +} bootrom_stash __attribute__((section(".data"))); + u32 spl_boot_device(void) { -#ifdef CONFIG_SYS_USE_MMC + u32 dev = (bootrom_stash.r4 >> ATMEL_SAMA5_BOOT_FROM_OFF) & + ATMEL_SAMA5_BOOT_FROM_MASK; + u32 off = (bootrom_stash.r4 >> ATMEL_SAMA5_BOOT_DEV_ID_OFF) & + ATMEL_SAMA5_BOOT_DEV_ID_MASK; + +#if defined(CONFIG_SYS_USE_MMC) || defined(CONFIG_SD_BOOT) + if (dev == ATMEL_SAMA5_BOOT_FROM_MCI) { +#if defined(CONFIG_SPL_OF_CONTROL) + return BOOT_DEVICE_MMC1; +#else + if (off == 0) + return BOOT_DEVICE_MMC1; + if (off == 1) + return BOOT_DEVICE_MMC2; + printf("ERROR: MMC controller %i not present!\n", dev); + hang(); +#endif + } +#endif + +#if defined(CONFIG_SYS_USE_SERIALFLASH) || \ + defined(CONFIG_SYS_USE_SPIFLASH) || \ + defined(CONFIG_SPI_BOOT) + if (dev == ATMEL_SAMA5_BOOT_FROM_SPI) + return BOOT_DEVICE_SPI; +#endif + if (dev == ATMEL_SAMA5_BOOT_FROM_QSPI) + return BOOT_DEVICE_SPI; + + if (dev == ATMEL_SAMA5_BOOT_FROM_SMC) + return BOOT_DEVICE_NAND; + + if (dev == ATMEL_SAMA5_BOOT_FROM_SAMBA) + return BOOT_DEVICE_USB; + + printf("ERROR: SMC/TWI/QSPI boot device not supported!\n" + " Boot device %i, controller number %i\n", dev, off); + + return BOOT_DEVICE_NONE; +} +#else +u32 spl_boot_device(void) +{ +#if defined(CONFIG_SYS_USE_MMC) || defined(CONFIG_SD_BOOT) return BOOT_DEVICE_MMC1; -#elif CONFIG_SYS_USE_NANDFLASH +#elif defined(CONFIG_SYS_USE_NANDFLASH) || defined(CONFIG_NAND_BOOT) return BOOT_DEVICE_NAND; -#elif CONFIG_SYS_USE_SERIALFLASH || CONFIG_SYS_USE_SPIFLASH +#elif defined(CONFIG_SYS_USE_SERIALFLASH) || \ + defined(CONFIG_SYS_USE_SPIFLASH) || \ + defined(CONFIG_SPI_BOOT) return BOOT_DEVICE_SPI; #endif return BOOT_DEVICE_NONE; } - -u32 spl_boot_mode(void) -{ - switch (spl_boot_device()) { -#ifdef CONFIG_SYS_USE_MMC - case BOOT_DEVICE_MMC1: - return MMCSD_MODE_FS; - break; #endif - case BOOT_DEVICE_NONE: - default: - hang(); - } -}