All of lore.kernel.org
 help / color / mirror / Atom feed
* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.