blob: 7cba3825e7f4bc7c0b865add21cfb9829ee49431 [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Bo Shenc5e88852013-11-15 11:12:38 +08002/*
3 * Copyright (C) 2013 Atmel Corporation
4 * Bo Shen <voice.shen@atmel.com>
Bo Shenc5e88852013-11-15 11:12:38 +08005 */
6
7#include <common.h>
8#include <asm/io.h>
9#include <asm/arch/at91_common.h>
Bo Shenc5e88852013-11-15 11:12:38 +080010#include <asm/arch/at91_wdt.h>
11#include <asm/arch/clk.h>
12#include <spl.h>
13
Heiko Schocher49b461f2015-01-21 08:38:20 +010014#if defined(CONFIG_AT91SAM9_WATCHDOG)
15void at91_disable_wdt(void) { }
16#else
Heiko Schocher5abc00d2014-10-31 08:31:04 +010017void at91_disable_wdt(void)
Bo Shenc5e88852013-11-15 11:12:38 +080018{
19 struct at91_wdt *wdt = (struct at91_wdt *)ATMEL_BASE_WDT;
20
21 writel(AT91_WDT_MR_WDDIS, &wdt->mr);
22}
Heiko Schocher49b461f2015-01-21 08:38:20 +010023#endif
Bo Shenc5e88852013-11-15 11:12:38 +080024
Marek Vasut1c24f132016-05-14 23:43:01 +020025#if defined(CONFIG_SAMA5D2) || defined(CONFIG_SAMA5D3) || \
26 defined(CONFIG_SAMA5D4)
27#include <asm/arch/sama5_boot.h>
Marek Vasutbb0c63a2016-04-22 21:56:21 +020028struct {
29 u32 r4;
30} bootrom_stash __attribute__((section(".data")));
31
32u32 spl_boot_device(void)
33{
Marek Vasut1c24f132016-05-14 23:43:01 +020034 u32 dev = (bootrom_stash.r4 >> ATMEL_SAMA5_BOOT_FROM_OFF) &
35 ATMEL_SAMA5_BOOT_FROM_MASK;
36 u32 off = (bootrom_stash.r4 >> ATMEL_SAMA5_BOOT_DEV_ID_OFF) &
37 ATMEL_SAMA5_BOOT_DEV_ID_MASK;
Marek Vasutbb0c63a2016-04-22 21:56:21 +020038
Wenyou Yanga35c3402017-09-14 11:07:43 +080039#if defined(CONFIG_SYS_USE_MMC) || defined(CONFIG_SD_BOOT)
Marek Vasut1c24f132016-05-14 23:43:01 +020040 if (dev == ATMEL_SAMA5_BOOT_FROM_MCI) {
Wenyou Yangc00d7c32017-03-24 11:34:03 +080041#if defined(CONFIG_SPL_OF_CONTROL)
42 return BOOT_DEVICE_MMC1;
43#else
Marek Vasutbb0c63a2016-04-22 21:56:21 +020044 if (off == 0)
45 return BOOT_DEVICE_MMC1;
46 if (off == 1)
47 return BOOT_DEVICE_MMC2;
48 printf("ERROR: MMC controller %i not present!\n", dev);
49 hang();
Wenyou Yangc00d7c32017-03-24 11:34:03 +080050#endif
Marek Vasutbb0c63a2016-04-22 21:56:21 +020051 }
52#endif
53
Wenyou Yanga35c3402017-09-14 11:07:43 +080054#if defined(CONFIG_SYS_USE_SERIALFLASH) || \
55 defined(CONFIG_SYS_USE_SPIFLASH) || \
56 defined(CONFIG_SPI_BOOT)
Marek Vasut1c24f132016-05-14 23:43:01 +020057 if (dev == ATMEL_SAMA5_BOOT_FROM_SPI)
Marek Vasutbb0c63a2016-04-22 21:56:21 +020058 return BOOT_DEVICE_SPI;
59#endif
Wenyou Yangdfd6d3a2017-09-13 14:58:51 +080060 if (dev == ATMEL_SAMA5_BOOT_FROM_QSPI)
61 return BOOT_DEVICE_SPI;
Marek Vasutbb0c63a2016-04-22 21:56:21 +020062
Wenyou Yangc00d7c32017-03-24 11:34:03 +080063 if (dev == ATMEL_SAMA5_BOOT_FROM_SMC)
64 return BOOT_DEVICE_NAND;
65
Marek Vasut1c24f132016-05-14 23:43:01 +020066 if (dev == ATMEL_SAMA5_BOOT_FROM_SAMBA)
67 return BOOT_DEVICE_USB;
68
Marek Vasutbb0c63a2016-04-22 21:56:21 +020069 printf("ERROR: SMC/TWI/QSPI boot device not supported!\n"
70 " Boot device %i, controller number %i\n", dev, off);
71
72 return BOOT_DEVICE_NONE;
73}
74#else
Bo Shenc5e88852013-11-15 11:12:38 +080075u32 spl_boot_device(void)
76{
Wenyou Yanga35c3402017-09-14 11:07:43 +080077#if defined(CONFIG_SYS_USE_MMC) || defined(CONFIG_SD_BOOT)
Bo Shenc5e88852013-11-15 11:12:38 +080078 return BOOT_DEVICE_MMC1;
Wenyou Yanga35c3402017-09-14 11:07:43 +080079#elif defined(CONFIG_SYS_USE_NANDFLASH) || defined(CONFIG_NAND_BOOT)
Bo Shen27019e42014-03-03 14:47:17 +080080 return BOOT_DEVICE_NAND;
Wenyou Yanga35c3402017-09-14 11:07:43 +080081#elif defined(CONFIG_SYS_USE_SERIALFLASH) || \
82 defined(CONFIG_SYS_USE_SPIFLASH) || \
83 defined(CONFIG_SPI_BOOT)
Bo Shen8a45b0b2014-03-03 14:47:15 +080084 return BOOT_DEVICE_SPI;
Bo Shenc5e88852013-11-15 11:12:38 +080085#endif
86 return BOOT_DEVICE_NONE;
87}
Marek Vasutbb0c63a2016-04-22 21:56:21 +020088#endif