All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/4] arm: mvebu: Move SAR register defines into header
@ 2016-01-09  9:07 Stefan Roese
  2016-01-09  9:07 ` [U-Boot] [PATCH 2/4] arm: mvebu: Make local structs static const Stefan Roese
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Stefan Roese @ 2016-01-09  9:07 UTC (permalink / raw)
  To: u-boot

This is preparation for the runtime bootmode detection in spl.c.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Luka Perkov <luka.perkov@sartura.hr>
Cc: Dirk Eibach <dirk.eibach@gdsys.cc>
Cc: Phil Sutter <phil@nwl.cc>
Cc: Kevin Smith <kevin.smith@elecsyscorp.com>
---
 arch/arm/mach-mvebu/cpu.c              | 19 +++----------------
 arch/arm/mach-mvebu/include/mach/soc.h | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/arch/arm/mach-mvebu/cpu.c b/arch/arm/mach-mvebu/cpu.c
index 6ea558c..bc6a9e5 100644
--- a/arch/arm/mach-mvebu/cpu.c
+++ b/arch/arm/mach-mvebu/cpu.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014-2015 Stefan Roese <sr@denx.de>
+ * Copyright (C) 2014-2016 Stefan Roese <sr@denx.de>
  *
  * SPDX-License-Identifier:	GPL-2.0+
  */
@@ -62,11 +62,7 @@ int mvebu_soc_family(void)
 #if defined(CONFIG_DISPLAY_CPUINFO)
 
 #if defined(CONFIG_ARMADA_38X)
-/* SAR values for Armada 38x */
-#define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18600))
-#define SAR_CPU_FREQ_OFFS	10
-#define SAR_CPU_FREQ_MASK	(0x1f << SAR_CPU_FREQ_OFFS)
-
+/* SAR frequency values for Armada 38x */
 struct sar_freq_modes sar_freq_tab[] = {
 	{  0x0,  0x0,  666, 333, 333 },
 	{  0x2,  0x0,  800, 400, 400 },
@@ -77,16 +73,7 @@ struct sar_freq_modes sar_freq_tab[] = {
 	{ 0xff, 0xff,    0,   0,   0 }	/* 0xff marks end of array */
 };
 #else
-/* SAR values for Armada XP */
-#define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18230))
-#define CONFIG_SAR2_REG		(MVEBU_REGISTER(0x18234))
-#define SAR_CPU_FREQ_OFFS	21
-#define SAR_CPU_FREQ_MASK	(0x7 << SAR_CPU_FREQ_OFFS)
-#define SAR_FFC_FREQ_OFFS	24
-#define SAR_FFC_FREQ_MASK	(0xf << SAR_FFC_FREQ_OFFS)
-#define SAR2_CPU_FREQ_OFFS	20
-#define SAR2_CPU_FREQ_MASK	(0x1 << SAR2_CPU_FREQ_OFFS)
-
+/* SAR frequency values for Armada XP */
 struct sar_freq_modes sar_freq_tab[] = {
 	{  0xa,  0x5,  800, 400, 400 },
 	{  0x1,  0x5, 1066, 533, 533 },
diff --git a/arch/arm/mach-mvebu/include/mach/soc.h b/arch/arm/mach-mvebu/include/mach/soc.h
index c3e82bd..dbb96e0 100644
--- a/arch/arm/mach-mvebu/include/mach/soc.h
+++ b/arch/arm/mach-mvebu/include/mach/soc.h
@@ -97,4 +97,25 @@
 #define MVCPU_WIN_ENABLE	CPU_WIN_ENABLE
 #define MVCPU_WIN_DISABLE	CPU_WIN_DISABLE
 
+#if defined(CONFIG_ARMADA_38X)
+/* SAR values for Armada 38x */
+#define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18600))
+#define SAR_CPU_FREQ_OFFS	10
+#define SAR_CPU_FREQ_MASK	(0x1f << SAR_CPU_FREQ_OFFS)
+#define SAR_BOOT_DEVICE_OFFS	4
+#define SAR_BOOT_DEVICE_MASK	(0x1f << SAR_BOOT_DEVICE_OFFS)
+#else
+/* SAR values for Armada XP */
+#define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18230))
+#define CONFIG_SAR2_REG		(MVEBU_REGISTER(0x18234))
+#define SAR_CPU_FREQ_OFFS	21
+#define SAR_CPU_FREQ_MASK	(0x7 << SAR_CPU_FREQ_OFFS)
+#define SAR_FFC_FREQ_OFFS	24
+#define SAR_FFC_FREQ_MASK	(0xf << SAR_FFC_FREQ_OFFS)
+#define SAR2_CPU_FREQ_OFFS	20
+#define SAR2_CPU_FREQ_MASK	(0x1 << SAR2_CPU_FREQ_OFFS)
+#define SAR_BOOT_DEVICE_OFFS	5
+#define SAR_BOOT_DEVICE_MASK	(0xf << SAR_BOOT_DEVICE_OFFS)
+#endif
+
 #endif /* _MVEBU_SOC_H */
-- 
2.6.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 2/4] arm: mvebu: Make local structs static const
  2016-01-09  9:07 [U-Boot] [PATCH 1/4] arm: mvebu: Move SAR register defines into header Stefan Roese
@ 2016-01-09  9:07 ` Stefan Roese
  2016-01-09  9:07 ` [U-Boot] [PATCH 3/4] arm: mvebu: Add runtime boot-device detection Stefan Roese
  2016-01-09  9:07 ` [U-Boot] [PATCH 4/4] arm: mvebu: Add runtime detection of UART (xmodem) boot-mode Stefan Roese
  2 siblings, 0 replies; 9+ messages in thread
From: Stefan Roese @ 2016-01-09  9:07 UTC (permalink / raw)
  To: u-boot

As these structs are local only and const, declare them accordingly.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Luka Perkov <luka.perkov@sartura.hr>
Cc: Dirk Eibach <dirk.eibach@gdsys.cc>
Cc: Phil Sutter <phil@nwl.cc>
Cc: Kevin Smith <kevin.smith@elecsyscorp.com>
---
 arch/arm/mach-mvebu/cpu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-mvebu/cpu.c b/arch/arm/mach-mvebu/cpu.c
index bc6a9e5..84499ea 100644
--- a/arch/arm/mach-mvebu/cpu.c
+++ b/arch/arm/mach-mvebu/cpu.c
@@ -63,7 +63,7 @@ int mvebu_soc_family(void)
 
 #if defined(CONFIG_ARMADA_38X)
 /* SAR frequency values for Armada 38x */
-struct sar_freq_modes sar_freq_tab[] = {
+static const struct sar_freq_modes sar_freq_tab[] = {
 	{  0x0,  0x0,  666, 333, 333 },
 	{  0x2,  0x0,  800, 400, 400 },
 	{  0x4,  0x0, 1066, 533, 533 },
@@ -74,7 +74,7 @@ struct sar_freq_modes sar_freq_tab[] = {
 };
 #else
 /* SAR frequency values for Armada XP */
-struct sar_freq_modes sar_freq_tab[] = {
+static const struct sar_freq_modes sar_freq_tab[] = {
 	{  0xa,  0x5,  800, 400, 400 },
 	{  0x1,  0x5, 1066, 533, 533 },
 	{  0x2,  0x5, 1200, 600, 600 },
-- 
2.6.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 3/4] arm: mvebu: Add runtime boot-device detection
  2016-01-09  9:07 [U-Boot] [PATCH 1/4] arm: mvebu: Move SAR register defines into header Stefan Roese
  2016-01-09  9:07 ` [U-Boot] [PATCH 2/4] arm: mvebu: Make local structs static const Stefan Roese
@ 2016-01-09  9:07 ` Stefan Roese
  2016-01-13 16:12   ` Kevin Smith
  2016-01-09  9:07 ` [U-Boot] [PATCH 4/4] arm: mvebu: Add runtime detection of UART (xmodem) boot-mode Stefan Roese
  2 siblings, 1 reply; 9+ messages in thread
From: Stefan Roese @ 2016-01-09  9:07 UTC (permalink / raw)
  To: u-boot

This patch adds runtime boot-device detection to SPL U-Boot.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Luka Perkov <luka.perkov@sartura.hr>
Cc: Dirk Eibach <dirk.eibach@gdsys.cc>
Cc: Phil Sutter <phil@nwl.cc>
Cc: Kevin Smith <kevin.smith@elecsyscorp.com>
---
 arch/arm/mach-mvebu/include/mach/soc.h | 16 ++++++++++++++++
 arch/arm/mach-mvebu/spl.c              | 30 +++++++++++++++++++++++-------
 2 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-mvebu/include/mach/soc.h b/arch/arm/mach-mvebu/include/mach/soc.h
index dbb96e0..0da313d 100644
--- a/arch/arm/mach-mvebu/include/mach/soc.h
+++ b/arch/arm/mach-mvebu/include/mach/soc.h
@@ -100,14 +100,24 @@
 #if defined(CONFIG_ARMADA_38X)
 /* SAR values for Armada 38x */
 #define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18600))
+
 #define SAR_CPU_FREQ_OFFS	10
 #define SAR_CPU_FREQ_MASK	(0x1f << SAR_CPU_FREQ_OFFS)
 #define SAR_BOOT_DEVICE_OFFS	4
 #define SAR_BOOT_DEVICE_MASK	(0x1f << SAR_BOOT_DEVICE_OFFS)
+
+#define BOOT_DEV_SEL_OFFS	4
+#define BOOT_DEV_SEL_MASK	(0x1f << BOOT_DEV_SEL_OFFS)
+
+#define BOOT_FROM_UART		0x28
+#define BOOT_FROM_SPI		0x32
+#define BOOT_FROM_MMC		0x30
+#define BOOT_FROM_MMC_ALT	0x31
 #else
 /* SAR values for Armada XP */
 #define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18230))
 #define CONFIG_SAR2_REG		(MVEBU_REGISTER(0x18234))
+
 #define SAR_CPU_FREQ_OFFS	21
 #define SAR_CPU_FREQ_MASK	(0x7 << SAR_CPU_FREQ_OFFS)
 #define SAR_FFC_FREQ_OFFS	24
@@ -116,6 +126,12 @@
 #define SAR2_CPU_FREQ_MASK	(0x1 << SAR2_CPU_FREQ_OFFS)
 #define SAR_BOOT_DEVICE_OFFS	5
 #define SAR_BOOT_DEVICE_MASK	(0xf << SAR_BOOT_DEVICE_OFFS)
+
+#define BOOT_DEV_SEL_OFFS	5
+#define BOOT_DEV_SEL_MASK	(0xf << BOOT_DEV_SEL_OFFS)
+
+#define BOOT_FROM_UART		0x2
+#define BOOT_FROM_SPI		0x3
 #endif
 
 #endif /* _MVEBU_SOC_H */
diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 832df0a..778996e 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014-2015 Stefan Roese <sr@denx.de>
+ * Copyright (C) 2014-2016 Stefan Roese <sr@denx.de>
  *
  * SPDX-License-Identifier:	GPL-2.0+
  */
@@ -15,14 +15,30 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-u32 spl_boot_device(void)
+static u32 get_boot_device(void)
 {
-#if defined(CONFIG_SPL_SPI_FLASH_SUPPORT)
-	return BOOT_DEVICE_SPI;
-#endif
-#if defined(CONFIG_SPL_MMC_SUPPORT)
-	return BOOT_DEVICE_MMC1;
+	u32 val;
+	u32 boot_device;
+
+	val = readl(CONFIG_SAR_REG);	/* SAR - Sample At Reset */
+	boot_device = (val & BOOT_DEV_SEL_MASK) >> BOOT_DEV_SEL_OFFS;
+	switch (boot_device) {
+#ifdef CONFIG_SPL_MMC_SUPPORT
+	case BOOT_FROM_MMC:
+	case BOOT_FROM_MMC_ALT:
+		return BOOT_DEVICE_MMC1;
 #endif
+	case BOOT_FROM_UART:
+		return BOOT_DEVICE_UART;
+	case BOOT_FROM_SPI:
+	default:
+		return BOOT_DEVICE_SPI;
+	};
+}
+
+u32 spl_boot_device(void)
+{
+	return get_boot_device();
 }
 
 #ifdef CONFIG_SPL_MMC_SUPPORT
-- 
2.6.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/4] arm: mvebu: Add runtime detection of UART (xmodem) boot-mode
  2016-01-09  9:07 [U-Boot] [PATCH 1/4] arm: mvebu: Move SAR register defines into header Stefan Roese
  2016-01-09  9:07 ` [U-Boot] [PATCH 2/4] arm: mvebu: Make local structs static const Stefan Roese
  2016-01-09  9:07 ` [U-Boot] [PATCH 3/4] arm: mvebu: Add runtime boot-device detection Stefan Roese
@ 2016-01-09  9:07 ` Stefan Roese
  2016-01-09 13:03   ` Phil Sutter
  2 siblings, 1 reply; 9+ messages in thread
From: Stefan Roese @ 2016-01-09  9:07 UTC (permalink / raw)
  To: u-boot

This patch adds runtime detection of the Marvell UART boot-mode (xmodem
protocol). If this boot-mode is detected, SPL will return to the
BootROM to continue the UART booting.

With this patch its now possible, to generate a U-Boot image that
can be booted either from the strapped boot-device (e.g. SPI NOR, MMC,
etc) or via the xmodem protocol from the UART. In the UART case,
the kwboot tool will dynamically insert the UART boot-device type
into the image. And also patch the load address in the header, so
that the mkimage header will be skipped (as its not expected by the
Marvell BootROM).

This simplifies the development for Armada XP / 38x based boards.
As no special images need to be generated by selecting the
MVEBU_BOOTROM_UARTBOOT Kconfig option.

Since the Kconfig option MVEBU_BOOTROM_UARTBOOT is not needed any
more, its now completely removed.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Luka Perkov <luka.perkov@sartura.hr>
Cc: Dirk Eibach <dirk.eibach@gdsys.cc>
Cc: Phil Sutter <phil@nwl.cc>
Cc: Kevin Smith <kevin.smith@elecsyscorp.com>
---
 Makefile                               | 10 ----------
 arch/arm/mach-mvebu/Kconfig            | 10 ----------
 arch/arm/mach-mvebu/include/mach/soc.h |  8 +++++++-
 arch/arm/mach-mvebu/lowlevel_spl.S     |  6 ------
 arch/arm/mach-mvebu/spl.c              | 20 +++++++++++++++++---
 tools/kwboot.c                         | 14 ++++++++++++--
 6 files changed, 36 insertions(+), 32 deletions(-)

diff --git a/Makefile b/Makefile
index aa19cc6..71fac0b 100644
--- a/Makefile
+++ b/Makefile
@@ -915,18 +915,8 @@ MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
 u-boot.img u-boot.kwb u-boot.pbl: u-boot.bin FORCE
 	$(call if_changed,mkimage)
 
-# If the kwboot xmodem protocol is used, to boot U-Boot on the MVEBU
-# SoC's, the SPL U-Boot returns to the BootROM after it completes
-# the SDRAM setup. The BootROM expects no U-Boot header in the main
-# U-Boot image. So we need to combine SPL and u-boot.bin instead of
-# u-boot.img in this case.
-ifdef CONFIG_MVEBU_BOOTROM_UARTBOOT
-u-boot-spl.kwb: u-boot-dtb.bin spl/u-boot-spl.bin FORCE
-	$(call if_changed,mkimage)
-else
 u-boot-spl.kwb: u-boot-dtb.img spl/u-boot-spl.bin FORCE
 	$(call if_changed,mkimage)
-endif
 
 MKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)
 
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index c97865a..d376aa7 100644
--- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig
@@ -54,14 +54,4 @@ config SYS_VENDOR
 config SYS_SOC
 	default "mvebu"
 
-config MVEBU_BOOTROM_UARTBOOT
-	bool "Use kwboot to boot via BootROM xmodem protocol"
-	help
-	  This option provides support for booting via the Marvell
-	  xmodem protocol, used by the kwboot tool.
-
-	  Please don't forget to configure the boot device in
-	  the board specific kwbimage.cfg file this way:
-	      BOOT_FROM uart
-
 endif
diff --git a/arch/arm/mach-mvebu/include/mach/soc.h b/arch/arm/mach-mvebu/include/mach/soc.h
index 0da313d..8c81a3c 100644
--- a/arch/arm/mach-mvebu/include/mach/soc.h
+++ b/arch/arm/mach-mvebu/include/mach/soc.h
@@ -97,6 +97,12 @@
 #define MVCPU_WIN_ENABLE	CPU_WIN_ENABLE
 #define MVCPU_WIN_DISABLE	CPU_WIN_DISABLE
 
+/* BootROM error register (also includes some status infos) */
+#define CONFIG_BOOTROM_ERR_REG	(MVEBU_REGISTER(0x182d0))
+#define BOOTROM_ERR_MODE_OFFS	28
+#define BOOTROM_ERR_MODE_MASK	(0xf << BOOTROM_ERR_MODE_OFFS)
+#define BOOTROM_ERR_MODE_UART	0x6
+
 #if defined(CONFIG_ARMADA_38X)
 /* SAR values for Armada 38x */
 #define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18600))
@@ -107,7 +113,7 @@
 #define SAR_BOOT_DEVICE_MASK	(0x1f << SAR_BOOT_DEVICE_OFFS)
 
 #define BOOT_DEV_SEL_OFFS	4
-#define BOOT_DEV_SEL_MASK	(0x1f << BOOT_DEV_SEL_OFFS)
+#define BOOT_DEV_SEL_MASK	(0x3f << BOOT_DEV_SEL_OFFS)
 
 #define BOOT_FROM_UART		0x28
 #define BOOT_FROM_SPI		0x32
diff --git a/arch/arm/mach-mvebu/lowlevel_spl.S b/arch/arm/mach-mvebu/lowlevel_spl.S
index 2e2181e..49e0b90 100644
--- a/arch/arm/mach-mvebu/lowlevel_spl.S
+++ b/arch/arm/mach-mvebu/lowlevel_spl.S
@@ -5,7 +5,6 @@
 #include <config.h>
 #include <linux/linkage.h>
 
-#ifdef CONFIG_MVEBU_BOOTROM_UARTBOOT
 ENTRY(save_boot_params)
 	stmfd	sp!, {r0 - r12, lr}	/* @ save registers on stack */
 	ldr	r12, =CONFIG_SPL_BOOTROM_SAVE
@@ -19,11 +18,6 @@ ENTRY(return_to_bootrom)
 	mov	r0, #0x0		/* @ return value: 0x0 NO_ERR */
 	ldmfd	sp!, {r0 - r12, pc}	/* @ restore regs and return */
 ENDPROC(return_to_bootrom)
-#else
-ENTRY(save_boot_params)
-	b	save_boot_params_ret
-ENDPROC(save_boot_params)
-#endif
 
 /*
  * cache_inv - invalidate Cache line
diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 778996e..0879873 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -20,8 +20,23 @@ static u32 get_boot_device(void)
 	u32 val;
 	u32 boot_device;
 
+	/*
+	 * First check, if UART boot-mode is active. This can only
+	 * be done, via the bootrom error register. Here the
+	 * MSB marks if the UART mode is active.
+	 */
+	val = readl(CONFIG_BOOTROM_ERR_REG);
+	boot_device = (val & BOOTROM_ERR_MODE_MASK) >> BOOTROM_ERR_MODE_OFFS;
+	debug("BOOTROM_REG=0x%08x boot_device=0x%x\n", val, boot_device);
+	if (boot_device == BOOTROM_ERR_MODE_UART)
+		return BOOT_DEVICE_UART;
+
+	/*
+	 * Now check the SAR register for the strapped boot-device
+	 */
 	val = readl(CONFIG_SAR_REG);	/* SAR - Sample At Reset */
 	boot_device = (val & BOOT_DEV_SEL_MASK) >> BOOT_DEV_SEL_OFFS;
+	debug("SAR_REG=0x%08x boot_device=0x%x\n", val, boot_device);
 	switch (boot_device) {
 #ifdef CONFIG_SPL_MMC_SUPPORT
 	case BOOT_FROM_MMC:
@@ -90,7 +105,6 @@ void board_init_f(ulong dummy)
 	/* Setup DDR */
 	ddr3_init();
 
-#ifdef CONFIG_MVEBU_BOOTROM_UARTBOOT
 	/*
 	 * Return to the BootROM to continue the Marvell xmodem
 	 * UART boot protocol. As initiated by the kwboot tool.
@@ -102,6 +116,6 @@ void board_init_f(ulong dummy)
 	 * need to return to the BootROM to enable this xmodem
 	 * UART download.
 	 */
-	return_to_bootrom();
-#endif
+	if (get_boot_device() == BOOT_DEVICE_UART)
+		return_to_bootrom();
 }
diff --git a/tools/kwboot.c b/tools/kwboot.c
index c5f4492..905ade3 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -9,10 +9,14 @@
  *   2008. Chapter 24.2 "BootROM Firmware".
  */
 
+#include "kwbimage.h"
+#include "mkimage.h"
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdarg.h>
+#include <image.h>
 #include <libgen.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -22,8 +26,6 @@
 #include <sys/mman.h>
 #include <sys/stat.h>
 
-#include "kwbimage.h"
-
 #ifdef __GNUC__
 #define PACKED __attribute((packed))
 #else
@@ -652,6 +654,14 @@ kwboot_img_patch_hdr(void *img, size_t size)
 
 	hdr->blockid = IBR_HDR_UART_ID;
 
+	/*
+	 * Subtract mkimage header size from destination address
+	 * as this header is not expected by the Marvell BootROM.
+	 * This way, the execution address is identical to the
+	 * one the image is compiled for (TEXT_BASE).
+	 */
+	hdr->destaddr = hdr->destaddr - sizeof(struct image_header);
+
 	if (image_ver == 0) {
 		struct main_hdr_v0 *hdr_v0 = img;
 
-- 
2.6.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/4] arm: mvebu: Add runtime detection of UART (xmodem) boot-mode
  2016-01-09  9:07 ` [U-Boot] [PATCH 4/4] arm: mvebu: Add runtime detection of UART (xmodem) boot-mode Stefan Roese
@ 2016-01-09 13:03   ` Phil Sutter
  2016-01-09 16:36     ` Phil Sutter
  0 siblings, 1 reply; 9+ messages in thread
From: Phil Sutter @ 2016-01-09 13:03 UTC (permalink / raw)
  To: u-boot

Hi,

On Sat, Jan 09, 2016 at 10:07:44AM +0100, Stefan Roese wrote:
> This patch adds runtime detection of the Marvell UART boot-mode (xmodem
> protocol). If this boot-mode is detected, SPL will return to the
> BootROM to continue the UART booting.
> 
> With this patch its now possible, to generate a U-Boot image that
> can be booted either from the strapped boot-device (e.g. SPI NOR, MMC,
> etc) or via the xmodem protocol from the UART. In the UART case,
> the kwboot tool will dynamically insert the UART boot-device type
> into the image. And also patch the load address in the header, so
> that the mkimage header will be skipped (as its not expected by the
> Marvell BootROM).
> 
> This simplifies the development for Armada XP / 38x based boards.
> As no special images need to be generated by selecting the
> MVEBU_BOOTROM_UARTBOOT Kconfig option.
> 
> Since the Kconfig option MVEBU_BOOTROM_UARTBOOT is not needed any
> more, its now completely removed.

Really cool approach, but sadly does not work for me. I'm testing UART
boot on my Synology DS414, with this series applied the SPL image runs
as expected and returns to bootrom loader which then continues Xmodem.
At the point where U-Boot should start though, the console is dead.

> -# If the kwboot xmodem protocol is used, to boot U-Boot on the MVEBU
> -# SoC's, the SPL U-Boot returns to the BootROM after it completes
> -# the SDRAM setup. The BootROM expects no U-Boot header in the main
> -# U-Boot image. So we need to combine SPL and u-boot.bin instead of
> -# u-boot.img in this case.
> -ifdef CONFIG_MVEBU_BOOTROM_UARTBOOT
> -u-boot-spl.kwb: u-boot-dtb.bin spl/u-boot-spl.bin FORCE
> -	$(call if_changed,mkimage)
> -else
>  u-boot-spl.kwb: u-boot-dtb.img spl/u-boot-spl.bin FORCE
>  	$(call if_changed,mkimage)
> -endif

This was my first shot and I hit: changing the dependency from
u-boot-dtb.img to u-boot-dtb.bin, U-Boot runs.

Let me know if I can help track the issue down.

Thanks, Phil

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/4] arm: mvebu: Add runtime detection of UART (xmodem) boot-mode
  2016-01-09 13:03   ` Phil Sutter
@ 2016-01-09 16:36     ` Phil Sutter
  0 siblings, 0 replies; 9+ messages in thread
From: Phil Sutter @ 2016-01-09 16:36 UTC (permalink / raw)
  To: u-boot

On Sat, Jan 09, 2016 at 02:03:31PM +0100, Phil Sutter wrote:
> This was my first shot and I hit: changing the dependency from
> u-boot-dtb.img to u-boot-dtb.bin, U-Boot runs.
> 
> Let me know if I can help track the issue down.

Ah, nevermind. Stupid me forgot to change BOOT_FROM variable in
kwbimage.cfg back to spi (was set to uart since that is my testing
environment for now).

Sorry for the noise, Phil

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 3/4] arm: mvebu: Add runtime boot-device detection
  2016-01-09  9:07 ` [U-Boot] [PATCH 3/4] arm: mvebu: Add runtime boot-device detection Stefan Roese
@ 2016-01-13 16:12   ` Kevin Smith
  2016-01-13 16:18     ` Stefan Roese
  0 siblings, 1 reply; 9+ messages in thread
From: Kevin Smith @ 2016-01-13 16:12 UTC (permalink / raw)
  To: u-boot

On 01/09/2016 03:07 AM, Stefan Roese wrote:
> @@ -100,14 +100,24 @@
>   #if defined(CONFIG_ARMADA_38X)
>   /* SAR values for Armada 38x */
>   #define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18600))
> +
>   #define SAR_CPU_FREQ_OFFS	10
>   #define SAR_CPU_FREQ_MASK	(0x1f << SAR_CPU_FREQ_OFFS)
>   #define SAR_BOOT_DEVICE_OFFS	4
>   #define SAR_BOOT_DEVICE_MASK	(0x1f << SAR_BOOT_DEVICE_OFFS)
> +
> +#define BOOT_DEV_SEL_OFFS	4
> +#define BOOT_DEV_SEL_MASK	(0x1f << BOOT_DEV_SEL_OFFS)
> +
It is a little confusing that this is added incorrectly here, then 
corrected in the next patch ... could this just be added as 0x3f here?

> +#define BOOT_FROM_UART		0x28
> +#define BOOT_FROM_SPI		0x32
> +#define BOOT_FROM_MMC		0x30
> +#define BOOT_FROM_MMC_ALT	0x31
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 3/4] arm: mvebu: Add runtime boot-device detection
  2016-01-13 16:12   ` Kevin Smith
@ 2016-01-13 16:18     ` Stefan Roese
  2016-01-13 16:34       ` Kevin Smith
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Roese @ 2016-01-13 16:18 UTC (permalink / raw)
  To: u-boot

On 13.01.2016 17:12, Kevin Smith wrote:
> On 01/09/2016 03:07 AM, Stefan Roese wrote:
>> @@ -100,14 +100,24 @@
>>    #if defined(CONFIG_ARMADA_38X)
>>    /* SAR values for Armada 38x */
>>    #define CONFIG_SAR_REG		(MVEBU_REGISTER(0x18600))
>> +
>>    #define SAR_CPU_FREQ_OFFS	10
>>    #define SAR_CPU_FREQ_MASK	(0x1f << SAR_CPU_FREQ_OFFS)
>>    #define SAR_BOOT_DEVICE_OFFS	4
>>    #define SAR_BOOT_DEVICE_MASK	(0x1f << SAR_BOOT_DEVICE_OFFS)
>> +
>> +#define BOOT_DEV_SEL_OFFS	4
>> +#define BOOT_DEV_SEL_MASK	(0x1f << BOOT_DEV_SEL_OFFS)
>> +
> It is a little confusing that this is added incorrectly here, then
> corrected in the next patch ... could this just be added as 0x3f here?

Ah, right. I've fixed this define in the next patch:

arm: mvebu: Add runtime detection of UART (xmodem) boot-mode

Which is already waiting for upstreaming as well (once Luka picks it
up). I hope this is okay. Otherwise I would need to re-do those
patches again.

Thanks,
Stefan

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 3/4] arm: mvebu: Add runtime boot-device detection
  2016-01-13 16:18     ` Stefan Roese
@ 2016-01-13 16:34       ` Kevin Smith
  0 siblings, 0 replies; 9+ messages in thread
From: Kevin Smith @ 2016-01-13 16:34 UTC (permalink / raw)
  To: u-boot

On 01/13/2016 10:18 AM, Stefan Roese wrote:
> On 13.01.2016 17:12, Kevin Smith wrote:
>> On 01/09/2016 03:07 AM, Stefan Roese wrote:
>>> @@ -100,14 +100,24 @@
>>>    #if defined(CONFIG_ARMADA_38X)
>>>    /* SAR values for Armada 38x */
>>>    #define CONFIG_SAR_REG        (MVEBU_REGISTER(0x18600))
>>> +
>>>    #define SAR_CPU_FREQ_OFFS    10
>>>    #define SAR_CPU_FREQ_MASK    (0x1f << SAR_CPU_FREQ_OFFS)
>>>    #define SAR_BOOT_DEVICE_OFFS    4
>>>    #define SAR_BOOT_DEVICE_MASK    (0x1f << SAR_BOOT_DEVICE_OFFS)
>>> +
>>> +#define BOOT_DEV_SEL_OFFS    4
>>> +#define BOOT_DEV_SEL_MASK    (0x1f << BOOT_DEV_SEL_OFFS)
>>> +
>> It is a little confusing that this is added incorrectly here, then
>> corrected in the next patch ... could this just be added as 0x3f here?
>
> Ah, right. I've fixed this define in the next patch:
>
> arm: mvebu: Add runtime detection of UART (xmodem) boot-mode
>
> Which is already waiting for upstreaming as well (once Luka picks it
> up). I hope this is okay. Otherwise I would need to re-do those
> patches again.
>
> Thanks,
> Stefan
>
Oh, sure, no problem.  Not worth redoing that work.

Thanks,
Kevin

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-01-13 16:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-09  9:07 [U-Boot] [PATCH 1/4] arm: mvebu: Move SAR register defines into header Stefan Roese
2016-01-09  9:07 ` [U-Boot] [PATCH 2/4] arm: mvebu: Make local structs static const Stefan Roese
2016-01-09  9:07 ` [U-Boot] [PATCH 3/4] arm: mvebu: Add runtime boot-device detection Stefan Roese
2016-01-13 16:12   ` Kevin Smith
2016-01-13 16:18     ` Stefan Roese
2016-01-13 16:34       ` Kevin Smith
2016-01-09  9:07 ` [U-Boot] [PATCH 4/4] arm: mvebu: Add runtime detection of UART (xmodem) boot-mode Stefan Roese
2016-01-09 13:03   ` Phil Sutter
2016-01-09 16:36     ` Phil Sutter

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.