Skip to contentSkip to conversation

arm: imx: make bmode command work with SPL/U-Boot combo

PATCH New Nikita Kiryanov 2 participants 3 messages Oct 29, 2014 – Nov 12, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 arm: imx: make bmode command work with SPL/U-Boot combo

The bmode command forces the SoC to use a specific boot device by writing its boot mode into SRC_GPR9, and notifying the SoC of the change using SRC_GPR10[28] bit: if the bit is on, bootROM uses the value in SRC_GPR9 instead of SRC_SMBR1 to determine the boot device.

SPL on the other hand is oblivious to this distinction, so once the bootROM loads SPL from the device configured in SRC_GPR10, SPL will attempt to load U-Boot from the device configured in SRC_SMBR1, which is not updated by the bootROM to the value in SRC_GPR9.

The result is that the selected boot device is not used across all the boot stages.

Update spl_boot_device() to look at gpr9 when necessary.

Cc Stefano Babic <[email protected]>
Cc Troy Kisky <[email protected]>
Cc Tim Harvey <[email protected]>
Cc Eric Nelson <[email protected]>
Cc Fabio Estevam <[email protected]>
Cc Heiko Schocher <[email protected]>
---
 arch/arm/cpu/armv7/mx6/soc.c | 4 ++--
 arch/arm/imx-common/spl.c    | 5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)
arch/arm/cpu/armv7/mx6/soc.c +2 -2
index dd5aaa2..07ae79e 100644
@@ -333,8 +333,8 @@ void boot_mode_apply(unsigned cfg_val)
 /*
  * cfg_val will be used for
  * Boot_cfg4[7:0]:Boot_cfg3[7:0]:Boot_cfg2[7:0]:Boot_cfg1[7:0]
- * After reset, if GPR10[28] is 1, ROM will copy GPR9[25:0]
- * to SBMR1, which will determine the boot device.
+ * After reset, if GPR10[28] is 1, ROM will use GPR9[25:0]
+ * instead of SBMR1 to determine the boot device.
  */
 const struct boot_mode soc_boot_modes[] = {
 	{"normal",	MAKE_CFGVAL(0x00, 0x00, 0x00, 0x00)},
arch/arm/imx-common/spl.c +3 -2
index 9d3c31a..477c38c 100644
@@ -14,11 +14,12 @@
 #include <spl.h>
 
 #if defined(CONFIG_MX6)
-/* determine boot device from SRC_SBMR1 register (BOOT_CFG[4:1]) */
+/* determine boot device from SRC_SBMR1 (BOOT_CFG[4:1]) or SRC_GPR9 register */
 u32 spl_boot_device(void)
 {
 	struct src *psrc = (struct src *)SRC_BASE_ADDR;
-	unsigned reg = readl(&psrc->sbmr1);
+	unsigned int gpr10_boot = readl(&psrc->gpr10) & (1 << 28);
+	unsigned reg = gpr10_boot ? readl(&psrc->gpr9) : readl(&psrc->sbmr1);
 
 	/* BOOT_CFG1[7:4] - see IMX6DQRM Table 8-8 */
 	switch ((reg & 0x000000FF) >> 4) {
Signature · 1 line
1.9.1
#1 lore raw

PATCH 1/1 arm: imx: make bmode command work with SPL/U-Boot combo

Gentle ping.

Quoted 64 lines · Nikita Kiryanov

The bmode command forces the SoC to use a specific boot device by writing its boot mode into SRC_GPR9, and notifying the SoC of the change using SRC_GPR10[28] bit: if the bit is on, bootROM uses the value in SRC_GPR9 instead of SRC_SMBR1 to determine the boot device.

SPL on the other hand is oblivious to this distinction, so once the bootROM loads SPL from the device configured in SRC_GPR10, SPL will attempt to load U-Boot from the device configured in SRC_SMBR1, which is not updated by the bootROM to the value in SRC_GPR9.

The result is that the selected boot device is not used across all the boot stages.

Update spl_boot_device() to look at gpr9 when necessary.

Cc Stefano Babic <[email protected]>
Cc Troy Kisky <[email protected]>
Cc Tim Harvey <[email protected]>
Cc Eric Nelson <[email protected]>
Cc Fabio Estevam <[email protected]>
Cc Heiko Schocher <[email protected]>
---
  arch/arm/cpu/armv7/mx6/soc.c | 4 ++--
  arch/arm/imx-common/spl.c    | 5 +++--
  2 files changed, 5 insertions(+), 4 deletions(-)
arch/arm/cpu/armv7/mx6/soc.c +2 -2
index dd5aaa2..07ae79e 100644
@@ -333,8 +333,8 @@ void boot_mode_apply(unsigned cfg_val)
  /*
   * cfg_val will be used for
   * Boot_cfg4[7:0]:Boot_cfg3[7:0]:Boot_cfg2[7:0]:Boot_cfg1[7:0]
- * After reset, if GPR10[28] is 1, ROM will copy GPR9[25:0]
- * to SBMR1, which will determine the boot device.
+ * After reset, if GPR10[28] is 1, ROM will use GPR9[25:0]
+ * instead of SBMR1 to determine the boot device.
   */
  const struct boot_mode soc_boot_modes[] = {
  	{"normal",	MAKE_CFGVAL(0x00, 0x00, 0x00, 0x00)},
arch/arm/imx-common/spl.c +3 -2
index 9d3c31a..477c38c 100644
@@ -14,11 +14,12 @@
  #include <spl.h>
 
  #if defined(CONFIG_MX6)
-/* determine boot device from SRC_SBMR1 register (BOOT_CFG[4:1]) */
+/* determine boot device from SRC_SBMR1 (BOOT_CFG[4:1]) or SRC_GPR9 register */
  u32 spl_boot_device(void)
  {
  	struct src *psrc = (struct src *)SRC_BASE_ADDR;
-	unsigned reg = readl(&psrc->sbmr1);
+	unsigned int gpr10_boot = readl(&psrc->gpr10) & (1 << 28);
+	unsigned reg = gpr10_boot ? readl(&psrc->gpr9) : readl(&psrc->sbmr1);
 
  	/* BOOT_CFG1[7:4] - see IMX6DQRM Table 8-8 */
  	switch ((reg & 0x000000FF) >> 4) {
Signature · 2 lines
Regards,
Nikita Kiryanov
#2 lore raw

PATCH 1/1 arm: imx: make bmode command work with SPL/U-Boot combo

In reply to Nikita Kiryanov

Hi Nikita,

Quoted 17 lines · Nikita Kiryanov

The bmode command forces the SoC to use a specific boot device by writing its boot mode into SRC_GPR9, and notifying the SoC of the change using SRC_GPR10[28] bit: if the bit is on, bootROM uses the value in SRC_GPR9 instead of SRC_SMBR1 to determine the boot device.

SPL on the other hand is oblivious to this distinction, so once the bootROM loads SPL from the device configured in SRC_GPR10, SPL will attempt to load U-Boot from the device configured in SRC_SMBR1, which is not updated by the bootROM to the value in SRC_GPR9.

The result is that the selected boot device is not used across all the boot stages.

Update spl_boot_device() to look at gpr9 when necessary.

Quoted 8 lines
Cc Stefano Babic <[email protected]>
Cc Troy Kisky <[email protected]>
Cc Tim Harvey <[email protected]>
Cc Eric Nelson <[email protected]>
Cc Fabio Estevam <[email protected]>
Cc Heiko Schocher <[email protected]>

---

Applied to u-boot-imx, thanks !

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================