162011840SMasahiro Yamada /* 262011840SMasahiro Yamada * Copyright (C) 2013 Atmel Corporation 362011840SMasahiro Yamada * Bo Shen <voice.shen@atmel.com> 462011840SMasahiro Yamada * 562011840SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 662011840SMasahiro Yamada */ 762011840SMasahiro Yamada 862011840SMasahiro Yamada #include <common.h> 962011840SMasahiro Yamada #include <asm/io.h> 1062011840SMasahiro Yamada #include <asm/arch/at91_common.h> 1162011840SMasahiro Yamada #include <asm/arch/at91_wdt.h> 1262011840SMasahiro Yamada #include <asm/arch/clk.h> 1362011840SMasahiro Yamada #include <spl.h> 1462011840SMasahiro Yamada 1562011840SMasahiro Yamada #if defined(CONFIG_AT91SAM9_WATCHDOG) at91_disable_wdt(void)1662011840SMasahiro Yamadavoid at91_disable_wdt(void) { } 1762011840SMasahiro Yamada #else at91_disable_wdt(void)1862011840SMasahiro Yamadavoid at91_disable_wdt(void) 1962011840SMasahiro Yamada { 2062011840SMasahiro Yamada struct at91_wdt *wdt = (struct at91_wdt *)ATMEL_BASE_WDT; 2162011840SMasahiro Yamada 2262011840SMasahiro Yamada writel(AT91_WDT_MR_WDDIS, &wdt->mr); 2362011840SMasahiro Yamada } 2462011840SMasahiro Yamada #endif 2562011840SMasahiro Yamada 261c24f13fSMarek Vasut #if defined(CONFIG_SAMA5D2) || defined(CONFIG_SAMA5D3) || \ 271c24f13fSMarek Vasut defined(CONFIG_SAMA5D4) 281c24f13fSMarek Vasut #include <asm/arch/sama5_boot.h> 29bb0c63a5SMarek Vasut struct { 30bb0c63a5SMarek Vasut u32 r4; 31bb0c63a5SMarek Vasut } bootrom_stash __attribute__((section(".data"))); 32bb0c63a5SMarek Vasut spl_boot_device(void)33bb0c63a5SMarek Vasutu32 spl_boot_device(void) 34bb0c63a5SMarek Vasut { 351c24f13fSMarek Vasut u32 dev = (bootrom_stash.r4 >> ATMEL_SAMA5_BOOT_FROM_OFF) & 361c24f13fSMarek Vasut ATMEL_SAMA5_BOOT_FROM_MASK; 371c24f13fSMarek Vasut u32 off = (bootrom_stash.r4 >> ATMEL_SAMA5_BOOT_DEV_ID_OFF) & 381c24f13fSMarek Vasut ATMEL_SAMA5_BOOT_DEV_ID_MASK; 39bb0c63a5SMarek Vasut 40bb0c63a5SMarek Vasut #if defined(CONFIG_SYS_USE_MMC) 411c24f13fSMarek Vasut if (dev == ATMEL_SAMA5_BOOT_FROM_MCI) { 42*c00d7c33SWenyou Yang #if defined(CONFIG_SPL_OF_CONTROL) 43*c00d7c33SWenyou Yang return BOOT_DEVICE_MMC1; 44*c00d7c33SWenyou Yang #else 45bb0c63a5SMarek Vasut if (off == 0) 46bb0c63a5SMarek Vasut return BOOT_DEVICE_MMC1; 47bb0c63a5SMarek Vasut if (off == 1) 48bb0c63a5SMarek Vasut return BOOT_DEVICE_MMC2; 49bb0c63a5SMarek Vasut printf("ERROR: MMC controller %i not present!\n", dev); 50bb0c63a5SMarek Vasut hang(); 51*c00d7c33SWenyou Yang #endif 52bb0c63a5SMarek Vasut } 53bb0c63a5SMarek Vasut #endif 54bb0c63a5SMarek Vasut 55bb0c63a5SMarek Vasut #if defined(CONFIG_SYS_USE_SERIALFLASH) || defined(CONFIG_SYS_USE_SPIFLASH) 561c24f13fSMarek Vasut if (dev == ATMEL_SAMA5_BOOT_FROM_SPI) 57bb0c63a5SMarek Vasut return BOOT_DEVICE_SPI; 58bb0c63a5SMarek Vasut #endif 59bb0c63a5SMarek Vasut 60*c00d7c33SWenyou Yang if (dev == ATMEL_SAMA5_BOOT_FROM_SMC) 61*c00d7c33SWenyou Yang return BOOT_DEVICE_NAND; 62*c00d7c33SWenyou Yang 631c24f13fSMarek Vasut if (dev == ATMEL_SAMA5_BOOT_FROM_SAMBA) 641c24f13fSMarek Vasut return BOOT_DEVICE_USB; 651c24f13fSMarek Vasut 66bb0c63a5SMarek Vasut printf("ERROR: SMC/TWI/QSPI boot device not supported!\n" 67bb0c63a5SMarek Vasut " Boot device %i, controller number %i\n", dev, off); 68bb0c63a5SMarek Vasut 69bb0c63a5SMarek Vasut return BOOT_DEVICE_NONE; 70bb0c63a5SMarek Vasut } 71bb0c63a5SMarek Vasut #else spl_boot_device(void)7262011840SMasahiro Yamadau32 spl_boot_device(void) 7362011840SMasahiro Yamada { 7462011840SMasahiro Yamada #ifdef CONFIG_SYS_USE_MMC 7562011840SMasahiro Yamada return BOOT_DEVICE_MMC1; 7662011840SMasahiro Yamada #elif CONFIG_SYS_USE_NANDFLASH 7762011840SMasahiro Yamada return BOOT_DEVICE_NAND; 78d85e8914SBo Shen #elif CONFIG_SYS_USE_SERIALFLASH || CONFIG_SYS_USE_SPIFLASH 7962011840SMasahiro Yamada return BOOT_DEVICE_SPI; 8062011840SMasahiro Yamada #endif 8162011840SMasahiro Yamada return BOOT_DEVICE_NONE; 8262011840SMasahiro Yamada } 83bb0c63a5SMarek Vasut #endif 8462011840SMasahiro Yamada spl_boot_mode(const u32 boot_device)852b1cdafaSMarek Vasutu32 spl_boot_mode(const u32 boot_device) 8662011840SMasahiro Yamada { 87968ebdf1SMarek Vasut switch (boot_device) { 8862011840SMasahiro Yamada #ifdef CONFIG_SYS_USE_MMC 8962011840SMasahiro Yamada case BOOT_DEVICE_MMC1: 90bb0c63a5SMarek Vasut case BOOT_DEVICE_MMC2: 9162011840SMasahiro Yamada return MMCSD_MODE_FS; 9262011840SMasahiro Yamada break; 9362011840SMasahiro Yamada #endif 9462011840SMasahiro Yamada case BOOT_DEVICE_NONE: 9562011840SMasahiro Yamada default: 9662011840SMasahiro Yamada hang(); 9762011840SMasahiro Yamada } 9862011840SMasahiro Yamada } 99