* [U-Boot] [PATCH] ARM: sama5d2: Implement boot device autodetection
@ 2016-04-22 19:56 Marek Vasut
2016-05-03 8:52 ` [U-Boot] " Andreas Bießmann
0 siblings, 1 reply; 6+ messages in thread
From: Marek Vasut @ 2016-04-22 19:56 UTC (permalink / raw)
To: u-boot
Implement support for saving ARM register R4 early during boot using
save_boot_params . Implement support for decoding the stored register
R4 value in spl_boot_device() to obtain boot device from which the
SoC booted. This way, the SPL will always load U-Boot from the same
device from which the SPL itself booted instead of using hard-coded
boot device.
This functionality is useful for example when booting sama5d2-xplained
from SD card, where by default the SPL would try loading the U-Boot
from eMMC and fail. This is because eMMC is on SDHCI0 (BOOT_DEVICE_MMC1),
while SD slot is on SDHCI1 (BOOT_DEVICE_MMC2) and the SPL was hard-wired
to always boot from BOOT_DEVICE_MMC1.
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andreas Bie?mann <andreas.devel@googlemail.com>
Cc: Wenyou Yang <wenyou.yang@atmel.com>
---
arch/arm/mach-at91/Makefile | 2 +-
arch/arm/mach-at91/bootparams_atmel.S | 18 ++++++++++++++++
arch/arm/mach-at91/include/mach/sama5d2.h | 12 +++++++++++
arch/arm/mach-at91/spl.c | 36 +++++++++++++++++++++++++++++++
4 files changed, 67 insertions(+), 1 deletion(-)
create mode 100644 arch/arm/mach-at91/bootparams_atmel.S
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
index 4424523..d2abf31 100644
--- a/arch/arm/mach-at91/Makefile
+++ b/arch/arm/mach-at91/Makefile
@@ -9,7 +9,7 @@ obj-$(CONFIG_AT91SAM9G20) += sdram.o spl_at91.o
obj-$(CONFIG_AT91SAM9M10G45) += mpddrc.o spl_at91.o
obj-$(CONFIG_AT91SAM9N12) += mpddrc.o spl_at91.o
obj-$(CONFIG_AT91SAM9X5) += mpddrc.o spl_at91.o
-obj-$(CONFIG_SAMA5D2) += mpddrc.o spl_atmel.o matrix.o atmel_sfr.o
+obj-$(CONFIG_SAMA5D2) += bootparams_atmel.o mpddrc.o spl_atmel.o matrix.o atmel_sfr.o
obj-$(CONFIG_SAMA5D3) += mpddrc.o spl_atmel.o
obj-$(CONFIG_SAMA5D4) += mpddrc.o spl_atmel.o matrix.o atmel_sfr.o
obj-y += spl.o
diff --git a/arch/arm/mach-at91/bootparams_atmel.S b/arch/arm/mach-at91/bootparams_atmel.S
new file mode 100644
index 0000000..568094b
--- /dev/null
+++ b/arch/arm/mach-at91/bootparams_atmel.S
@@ -0,0 +1,18 @@
+/*
+ * Atmel SAMA5Dx boot parameter handling
+ *
+ * Copyright (c) 2016 Marek Vasut <marex@denx.de>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <asm-offsets.h>
+#include <config.h>
+#include <asm/system.h>
+#include <linux/linkage.h>
+
+ENTRY(save_boot_params)
+ ldr r0, =bootrom_stash
+ str r4, [r0, #0]
+ b save_boot_params_ret
+ENDPROC(save_boot_params)
diff --git a/arch/arm/mach-at91/include/mach/sama5d2.h b/arch/arm/mach-at91/include/mach/sama5d2.h
index dd5a2a7..e6d498c 100644
--- a/arch/arm/mach-at91/include/mach/sama5d2.h
+++ b/arch/arm/mach-at91/include/mach/sama5d2.h
@@ -225,6 +225,18 @@
/* No PMECC Galois table in ROM */
#define NO_GALOIS_TABLE_IN_ROM
+/* Boot modes stored by BootROM in r4 */
+#define ATMEL_SAMA5D2_BOOT_FROM_OFF 0
+#define ATMEL_SAMA5D2_BOOT_FROM_MASK 0xf
+#define ATMEL_SAMA5D2_BOOT_FROM_SPI (0 << 0)
+#define ATMEL_SAMA5D2_BOOT_FROM_MCI (1 << 0)
+#define ATMEL_SAMA5D2_BOOT_FROM_SMC (2 << 0)
+#define ATMEL_SAMA5D2_BOOT_FROM_TWI (3 << 0)
+#define ATMEL_SAMA5D2_BOOT_FROM_QSPI (4 << 0)
+
+#define ATMEL_SAMA5D2_BOOT_DEV_ID_OFF 4
+#define ATMEL_SAMA5D2_BOOT_DEV_ID_MASK 0xf
+
#ifndef __ASSEMBLY__
unsigned int get_chip_id(void);
unsigned int get_extension_chip_id(void);
diff --git a/arch/arm/mach-at91/spl.c b/arch/arm/mach-at91/spl.c
index 27a405a..c4ed224 100644
--- a/arch/arm/mach-at91/spl.c
+++ b/arch/arm/mach-at91/spl.c
@@ -23,6 +23,40 @@ void at91_disable_wdt(void)
}
#endif
+#if defined(CONFIG_SAMA5D2)
+struct {
+ u32 r4;
+} bootrom_stash __attribute__((section(".data")));
+
+u32 spl_boot_device(void)
+{
+ u32 dev = (bootrom_stash.r4 >> ATMEL_SAMA5D2_BOOT_FROM_OFF) &
+ ATMEL_SAMA5D2_BOOT_FROM_MASK;
+ u32 off = (bootrom_stash.r4 >> ATMEL_SAMA5D2_BOOT_DEV_ID_OFF) &
+ ATMEL_SAMA5D2_BOOT_DEV_ID_MASK;
+
+#if defined(CONFIG_SYS_USE_MMC)
+ if (dev == ATMEL_SAMA5D2_BOOT_FROM_MCI) {
+ 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
+
+#if defined(CONFIG_SYS_USE_SERIALFLASH) || defined(CONFIG_SYS_USE_SPIFLASH)
+ if (dev == ATMEL_SAMA5D2_BOOT_FROM_SPI)
+ return BOOT_DEVICE_SPI;
+#endif
+
+ 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)
{
#ifdef CONFIG_SYS_USE_MMC
@@ -34,12 +68,14 @@ u32 spl_boot_device(void)
#endif
return BOOT_DEVICE_NONE;
}
+#endif
u32 spl_boot_mode(void)
{
switch (spl_boot_device()) {
#ifdef CONFIG_SYS_USE_MMC
case BOOT_DEVICE_MMC1:
+ case BOOT_DEVICE_MMC2:
return MMCSD_MODE_FS;
break;
#endif
--
2.7.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] ARM: sama5d2: Implement boot device autodetection
2016-04-22 19:56 [U-Boot] [PATCH] ARM: sama5d2: Implement boot device autodetection Marek Vasut
@ 2016-05-03 8:52 ` Andreas Bießmann
2016-05-03 11:04 ` Marek Vasut
0 siblings, 1 reply; 6+ messages in thread
From: Andreas Bießmann @ 2016-05-03 8:52 UTC (permalink / raw)
To: u-boot
On Fri, Apr 22, 2016 at 09:56:21PM +0200, Marek Vasut wrote:
> Implement support for saving ARM register R4 early during boot using
> save_boot_params . Implement support for decoding the stored register
> R4 value in spl_boot_device() to obtain boot device from which the
> SoC booted. This way, the SPL will always load U-Boot from the same
> device from which the SPL itself booted instead of using hard-coded
> boot device.
>
> This functionality is useful for example when booting sama5d2-xplained
> from SD card, where by default the SPL would try loading the U-Boot
> from eMMC and fail. This is because eMMC is on SDHCI0 (BOOT_DEVICE_MMC1),
> while SD slot is on SDHCI1 (BOOT_DEVICE_MMC2) and the SPL was hard-wired
> to always boot from BOOT_DEVICE_MMC1.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Andreas Bie?mann <andreas.devel@googlemail.com>
> Cc: Wenyou Yang <wenyou.yang@atmel.com>
>
Reviewed-by: Andreas Bie?mann <andreas@biessmann.org>
> ---
> arch/arm/mach-at91/Makefile | 2 +-
> arch/arm/mach-at91/bootparams_atmel.S | 18 ++++++++++++++++
> arch/arm/mach-at91/include/mach/sama5d2.h | 12 +++++++++++
> arch/arm/mach-at91/spl.c | 36 +++++++++++++++++++++++++++++++
> 4 files changed, 67 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/mach-at91/bootparams_atmel.S
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] ARM: sama5d2: Implement boot device autodetection
2016-05-03 8:52 ` [U-Boot] " Andreas Bießmann
@ 2016-05-03 11:04 ` Marek Vasut
2016-05-03 11:43 ` Andreas Bießmann
0 siblings, 1 reply; 6+ messages in thread
From: Marek Vasut @ 2016-05-03 11:04 UTC (permalink / raw)
To: u-boot
On 05/03/2016 10:52 AM, Andreas Bie?mann wrote:
> On Fri, Apr 22, 2016 at 09:56:21PM +0200, Marek Vasut wrote:
>> Implement support for saving ARM register R4 early during boot using
>> save_boot_params . Implement support for decoding the stored register
>> R4 value in spl_boot_device() to obtain boot device from which the
>> SoC booted. This way, the SPL will always load U-Boot from the same
>> device from which the SPL itself booted instead of using hard-coded
>> boot device.
>>
>> This functionality is useful for example when booting sama5d2-xplained
>> from SD card, where by default the SPL would try loading the U-Boot
>> from eMMC and fail. This is because eMMC is on SDHCI0 (BOOT_DEVICE_MMC1),
>> while SD slot is on SDHCI1 (BOOT_DEVICE_MMC2) and the SPL was hard-wired
>> to always boot from BOOT_DEVICE_MMC1.
>>
>> Signed-off-by: Marek Vasut <marex@denx.de>
>> Cc: Andreas Bie?mann <andreas.devel@googlemail.com>
>> Cc: Wenyou Yang <wenyou.yang@atmel.com>
>>
>
> Reviewed-by: Andreas Bie?mann <andreas@biessmann.org>
I will eventually extend this to SAMA5Dx as this is quite helpful on
upcoming board.
>> ---
>> arch/arm/mach-at91/Makefile | 2 +-
>> arch/arm/mach-at91/bootparams_atmel.S | 18 ++++++++++++++++
>> arch/arm/mach-at91/include/mach/sama5d2.h | 12 +++++++++++
>> arch/arm/mach-at91/spl.c | 36 +++++++++++++++++++++++++++++++
>> 4 files changed, 67 insertions(+), 1 deletion(-)
>> create mode 100644 arch/arm/mach-at91/bootparams_atmel.S
--
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] ARM: sama5d2: Implement boot device autodetection
2016-05-03 11:38 [U-Boot] [U-Boot, 1/2] ARM: at91: sama5d2: add macro & field definitions Andreas Bießmann
@ 2016-05-03 11:38 ` Andreas Bießmann
0 siblings, 0 replies; 6+ messages in thread
From: Andreas Bießmann @ 2016-05-03 11:38 UTC (permalink / raw)
To: u-boot
Dear Marek Vasut,
Marek Vasut <marex@denx.de> writes:
>Implement support for saving ARM register R4 early during boot using
>save_boot_params . Implement support for decoding the stored register
>R4 value in spl_boot_device() to obtain boot device from which the
>SoC booted. This way, the SPL will always load U-Boot from the same
>device from which the SPL itself booted instead of using hard-coded
>boot device.
>
>This functionality is useful for example when booting sama5d2-xplained
>from SD card, where by default the SPL would try loading the U-Boot
>from eMMC and fail. This is because eMMC is on SDHCI0 (BOOT_DEVICE_MMC1),
>while SD slot is on SDHCI1 (BOOT_DEVICE_MMC2) and the SPL was hard-wired
>to always boot from BOOT_DEVICE_MMC1.
>
>Signed-off-by: Marek Vasut <marex@denx.de>
>Cc: Andreas Bie?mann <andreas.devel@googlemail.com>
>Cc: Wenyou Yang <wenyou.yang@atmel.com>
>Reviewed-by: Andreas Bie?mann <andreas@biessmann.org>
>---
> arch/arm/mach-at91/Makefile | 2 +-
> arch/arm/mach-at91/bootparams_atmel.S | 18 ++++++++++++++++
> arch/arm/mach-at91/include/mach/sama5d2.h | 12 +++++++++++
> arch/arm/mach-at91/spl.c | 36 +++++++++++++++++++++++++++++++
> 4 files changed, 67 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/mach-at91/bootparams_atmel.S
applied to u-boot-atmel/master, thanks!
Best regards,
Andreas Bie?mann
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] ARM: sama5d2: Implement boot device autodetection
2016-05-03 11:04 ` Marek Vasut
@ 2016-05-03 11:43 ` Andreas Bießmann
2016-05-03 11:47 ` Marek Vasut
0 siblings, 1 reply; 6+ messages in thread
From: Andreas Bießmann @ 2016-05-03 11:43 UTC (permalink / raw)
To: u-boot
Hi Marek,
On 2016-05-03 13:04, Marek Vasut wrote:
> On 05/03/2016 10:52 AM, Andreas Bie?mann wrote:
>> On Fri, Apr 22, 2016 at 09:56:21PM +0200, Marek Vasut wrote:
>>> Implement support for saving ARM register R4 early during boot using
>>> save_boot_params . Implement support for decoding the stored register
>>> R4 value in spl_boot_device() to obtain boot device from which the
>>> SoC booted. This way, the SPL will always load U-Boot from the same
>>> device from which the SPL itself booted instead of using hard-coded
>>> boot device.
>>>
>>> This functionality is useful for example when booting
>>> sama5d2-xplained
>>> from SD card, where by default the SPL would try loading the U-Boot
>>> from eMMC and fail. This is because eMMC is on SDHCI0
>>> (BOOT_DEVICE_MMC1),
>>> while SD slot is on SDHCI1 (BOOT_DEVICE_MMC2) and the SPL was
>>> hard-wired
>>> to always boot from BOOT_DEVICE_MMC1.
>>>
>>> Signed-off-by: Marek Vasut <marex@denx.de>
>>> Cc: Andreas Bie?mann <andreas.devel@googlemail.com>
>>> Cc: Wenyou Yang <wenyou.yang@atmel.com>
>>>
>>
>> Reviewed-by: Andreas Bie?mann <andreas@biessmann.org>
>
> I will eventually extend this to SAMA5Dx as this is quite helpful on
> upcoming board.
Let's do it for the next release. Hopefully this gets in with 2016.05
... as always I'm really late for my pull request.
Andreas
>
>>> ---
>>> arch/arm/mach-at91/Makefile | 2 +-
>>> arch/arm/mach-at91/bootparams_atmel.S | 18 ++++++++++++++++
>>> arch/arm/mach-at91/include/mach/sama5d2.h | 12 +++++++++++
>>> arch/arm/mach-at91/spl.c | 36
>>> +++++++++++++++++++++++++++++++
>>> 4 files changed, 67 insertions(+), 1 deletion(-)
>>> create mode 100644 arch/arm/mach-at91/bootparams_atmel.S
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] ARM: sama5d2: Implement boot device autodetection
2016-05-03 11:43 ` Andreas Bießmann
@ 2016-05-03 11:47 ` Marek Vasut
0 siblings, 0 replies; 6+ messages in thread
From: Marek Vasut @ 2016-05-03 11:47 UTC (permalink / raw)
To: u-boot
On 05/03/2016 01:43 PM, Andreas Bie?mann wrote:
> Hi Marek,
>
> On 2016-05-03 13:04, Marek Vasut wrote:
>> On 05/03/2016 10:52 AM, Andreas Bie?mann wrote:
>>> On Fri, Apr 22, 2016 at 09:56:21PM +0200, Marek Vasut wrote:
>>>> Implement support for saving ARM register R4 early during boot using
>>>> save_boot_params . Implement support for decoding the stored register
>>>> R4 value in spl_boot_device() to obtain boot device from which the
>>>> SoC booted. This way, the SPL will always load U-Boot from the same
>>>> device from which the SPL itself booted instead of using hard-coded
>>>> boot device.
>>>>
>>>> This functionality is useful for example when booting sama5d2-xplained
>>>> from SD card, where by default the SPL would try loading the U-Boot
>>>> from eMMC and fail. This is because eMMC is on SDHCI0
>>>> (BOOT_DEVICE_MMC1),
>>>> while SD slot is on SDHCI1 (BOOT_DEVICE_MMC2) and the SPL was
>>>> hard-wired
>>>> to always boot from BOOT_DEVICE_MMC1.
>>>>
>>>> Signed-off-by: Marek Vasut <marex@denx.de>
>>>> Cc: Andreas Bie?mann <andreas.devel@googlemail.com>
>>>> Cc: Wenyou Yang <wenyou.yang@atmel.com>
>>>>
>>>
>>> Reviewed-by: Andreas Bie?mann <andreas@biessmann.org>
>>
>> I will eventually extend this to SAMA5Dx as this is quite helpful on
>> upcoming board.
>
> Let's do it for the next release. Hopefully this gets in with 2016.05
> ... as always I'm really late for my pull request.
This one is for next release (2016.07) too :) But it's not like it
breaks anything, so this release is fine as well.
> Andreas
>
>>
>>>> ---
>>>> arch/arm/mach-at91/Makefile | 2 +-
>>>> arch/arm/mach-at91/bootparams_atmel.S | 18 ++++++++++++++++
>>>> arch/arm/mach-at91/include/mach/sama5d2.h | 12 +++++++++++
>>>> arch/arm/mach-at91/spl.c | 36
>>>> +++++++++++++++++++++++++++++++
>>>> 4 files changed, 67 insertions(+), 1 deletion(-)
>>>> create mode 100644 arch/arm/mach-at91/bootparams_atmel.S
--
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-05-03 11:47 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-22 19:56 [U-Boot] [PATCH] ARM: sama5d2: Implement boot device autodetection Marek Vasut
2016-05-03 8:52 ` [U-Boot] " Andreas Bießmann
2016-05-03 11:04 ` Marek Vasut
2016-05-03 11:43 ` Andreas Bießmann
2016-05-03 11:47 ` Marek Vasut
-- strict thread matches above, loose matches on Subject: below --
2016-05-03 11:38 [U-Boot] [U-Boot, 1/2] ARM: at91: sama5d2: add macro & field definitions Andreas Bießmann
2016-05-03 11:38 ` [U-Boot] ARM: sama5d2: Implement boot device autodetection Andreas Bießmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox