diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/u-boot/arch/arm/mach-at91/spl.c | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/u-boot/arch/arm/mach-at91/spl.c')
-rw-r--r-- | roms/u-boot/arch/arm/mach-at91/spl.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/roms/u-boot/arch/arm/mach-at91/spl.c b/roms/u-boot/arch/arm/mach-at91/spl.c new file mode 100644 index 000000000..8d537998c --- /dev/null +++ b/roms/u-boot/arch/arm/mach-at91/spl.c @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2013 Atmel Corporation + * Bo Shen <voice.shen@atmel.com> + */ + +#include <common.h> +#include <hang.h> +#include <asm/io.h> +#include <asm/arch/at91_common.h> +#include <asm/arch/at91_wdt.h> +#include <asm/arch/clk.h> +#include <spl.h> + +#if !defined(CONFIG_WDT_AT91) +void at91_disable_wdt(void) +{ + struct at91_wdt *wdt = (struct at91_wdt *)ATMEL_BASE_WDT; + + writel(AT91_WDT_MR_WDDIS, &wdt->mr); +} +#endif + +#if defined(CONFIG_SAMA5D2) || defined(CONFIG_SAMA5D3) || \ + defined(CONFIG_SAMA5D4) +#include <asm/arch/sama5_boot.h> +struct { + u32 r4; +} bootrom_stash __section(".data"); + +u32 spl_boot_device(void) +{ + 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 defined(CONFIG_SYS_USE_NANDFLASH) || defined(CONFIG_NAND_BOOT) + return BOOT_DEVICE_NAND; +#elif defined(CONFIG_SYS_USE_SERIALFLASH) || \ + defined(CONFIG_SYS_USE_SPIFLASH) || \ + defined(CONFIG_SPI_BOOT) + return BOOT_DEVICE_SPI; +#endif + return BOOT_DEVICE_NONE; +} +#endif |