* [U-Boot] [PATCH 1/1] ARM: mxs: Get boot mode from OCRAM
@ 2015-03-26 22:53 Jörg Krause
2015-04-22 12:45 ` Stefano Babic
2015-04-29 10:12 ` Robert Deliën
0 siblings, 2 replies; 3+ messages in thread
From: Jörg Krause @ 2015-03-26 22:53 UTC (permalink / raw)
To: u-boot
Reading the boot mode pins after power-up does not necessarily represent the
boot mode used by the ROM loader. For example the state of a pin may have
changed because a recovery switch which was pressed to enter USB mode is
already released after plugging in USB.
The ROM loader stores the value a fixed address in OCRAM. Use this value
instead of reading the boot map pins.
The GLOBAL_BOOT_MODE_ADDR for i.MX28 is taken from an U-Boot patch for the
MX28EVK:
http://repository.timesys.com/buildsources/u/u-boot/u-boot-2009.08/u-boot-2009.08-mx28-201012211513.patch
Leave the boot mode detection for the i.MX23 untouched. Someone has to test
whether the i.MX ROM loader does also store the boot mode in OCRAM and if the
address match.
This patch superseeds my incorrect patch:
ARM: mxs: get boot mode from OTP
http://patchwork.ozlabs.org/patch/454930/
Signed-off-by: J?rg Krause <joerg.krause@embedded.rocks>
Cc: Stefano Babic <sbabic@denx.de>
---
arch/arm/cpu/arm926ejs/mxs/spl_boot.c | 29 ++++++-----------------------
1 file changed, 6 insertions(+), 23 deletions(-)
diff --git a/arch/arm/cpu/arm926ejs/mxs/spl_boot.c b/arch/arm/cpu/arm926ejs/mxs/spl_boot.c
index d7956e5..eb8669b 100644
--- a/arch/arm/cpu/arm926ejs/mxs/spl_boot.c
+++ b/arch/arm/cpu/arm926ejs/mxs/spl_boot.c
@@ -49,13 +49,6 @@ static const iomux_cfg_t iomux_boot[] = {
MX23_PAD_LCD_D03__GPIO_1_3 | MUX_CONFIG_BOOTMODE_PAD,
MX23_PAD_LCD_D04__GPIO_1_4 | MUX_CONFIG_BOOTMODE_PAD,
MX23_PAD_LCD_D05__GPIO_1_5 | MUX_CONFIG_BOOTMODE_PAD,
-#elif defined(CONFIG_MX28)
- MX28_PAD_LCD_D00__GPIO_1_0 | MUX_CONFIG_BOOTMODE_PAD,
- MX28_PAD_LCD_D01__GPIO_1_1 | MUX_CONFIG_BOOTMODE_PAD,
- MX28_PAD_LCD_D02__GPIO_1_2 | MUX_CONFIG_BOOTMODE_PAD,
- MX28_PAD_LCD_D03__GPIO_1_3 | MUX_CONFIG_BOOTMODE_PAD,
- MX28_PAD_LCD_D04__GPIO_1_4 | MUX_CONFIG_BOOTMODE_PAD,
- MX28_PAD_LCD_D05__GPIO_1_5 | MUX_CONFIG_BOOTMODE_PAD,
#endif
};
@@ -65,10 +58,10 @@ static uint8_t mxs_get_bootmode_index(void)
int i;
uint8_t masked;
+#if defined(CONFIG_MX23)
/* Setup IOMUX of bootmode pads to GPIO */
mxs_iomux_setup_multiple_pads(iomux_boot, ARRAY_SIZE(iomux_boot));
-#if defined(CONFIG_MX23)
/* Setup bootmode pins as GPIO input */
gpio_direction_input(MX23_PAD_LCD_D00__GPIO_1_0);
gpio_direction_input(MX23_PAD_LCD_D01__GPIO_1_1);
@@ -83,21 +76,11 @@ static uint8_t mxs_get_bootmode_index(void)
bootmode |= (gpio_get_value(MX23_PAD_LCD_D03__GPIO_1_3) ? 1 : 0) << 3;
bootmode |= (gpio_get_value(MX23_PAD_LCD_D05__GPIO_1_5) ? 1 : 0) << 5;
#elif defined(CONFIG_MX28)
- /* Setup bootmode pins as GPIO input */
- gpio_direction_input(MX28_PAD_LCD_D00__GPIO_1_0);
- gpio_direction_input(MX28_PAD_LCD_D01__GPIO_1_1);
- gpio_direction_input(MX28_PAD_LCD_D02__GPIO_1_2);
- gpio_direction_input(MX28_PAD_LCD_D03__GPIO_1_3);
- gpio_direction_input(MX28_PAD_LCD_D04__GPIO_1_4);
- gpio_direction_input(MX28_PAD_LCD_D05__GPIO_1_5);
-
- /* Read bootmode pads */
- bootmode |= (gpio_get_value(MX28_PAD_LCD_D00__GPIO_1_0) ? 1 : 0) << 0;
- bootmode |= (gpio_get_value(MX28_PAD_LCD_D01__GPIO_1_1) ? 1 : 0) << 1;
- bootmode |= (gpio_get_value(MX28_PAD_LCD_D02__GPIO_1_2) ? 1 : 0) << 2;
- bootmode |= (gpio_get_value(MX28_PAD_LCD_D03__GPIO_1_3) ? 1 : 0) << 3;
- bootmode |= (gpio_get_value(MX28_PAD_LCD_D04__GPIO_1_4) ? 1 : 0) << 4;
- bootmode |= (gpio_get_value(MX28_PAD_LCD_D05__GPIO_1_5) ? 1 : 0) << 5;
+ /* The global boot mode will be detected by ROM code and its value
+ * is stored@the fixed address 0x00019BF0 in OCRAM.
+ */
+#define GLOBAL_BOOT_MODE_ADDR 0x00019BF0
+ bootmode = __raw_readl(GLOBAL_BOOT_MODE_ADDR);
#endif
for (i = 0; i < ARRAY_SIZE(mxs_boot_modes); i++) {
--
2.3.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [U-Boot] [PATCH 1/1] ARM: mxs: Get boot mode from OCRAM
2015-03-26 22:53 [U-Boot] [PATCH 1/1] ARM: mxs: Get boot mode from OCRAM Jörg Krause
@ 2015-04-22 12:45 ` Stefano Babic
2015-04-29 10:12 ` Robert Deliën
1 sibling, 0 replies; 3+ messages in thread
From: Stefano Babic @ 2015-04-22 12:45 UTC (permalink / raw)
To: u-boot
On 26/03/2015 23:53, J?rg Krause wrote:
> Reading the boot mode pins after power-up does not necessarily represent the
> boot mode used by the ROM loader. For example the state of a pin may have
> changed because a recovery switch which was pressed to enter USB mode is
> already released after plugging in USB.
>
> The ROM loader stores the value a fixed address in OCRAM. Use this value
> instead of reading the boot map pins.
>
> The GLOBAL_BOOT_MODE_ADDR for i.MX28 is taken from an U-Boot patch for the
> MX28EVK:
> http://repository.timesys.com/buildsources/u/u-boot/u-boot-2009.08/u-boot-2009.08-mx28-201012211513.patch
>
> Leave the boot mode detection for the i.MX23 untouched. Someone has to test
> whether the i.MX ROM loader does also store the boot mode in OCRAM and if the
> address match.
>
> This patch superseeds my incorrect patch:
> ARM: mxs: get boot mode from OTP
> http://patchwork.ozlabs.org/patch/454930/
>
> Signed-off-by: J?rg Krause <joerg.krause@embedded.rocks>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
Applied to u-boot-imx, thanks !
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
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
=====================================================================
^ permalink raw reply [flat|nested] 3+ messages in thread
* [U-Boot] [PATCH 1/1] ARM: mxs: Get boot mode from OCRAM
2015-03-26 22:53 [U-Boot] [PATCH 1/1] ARM: mxs: Get boot mode from OCRAM Jörg Krause
2015-04-22 12:45 ` Stefano Babic
@ 2015-04-29 10:12 ` Robert Deliën
1 sibling, 0 replies; 3+ messages in thread
From: Robert Deliën @ 2015-04-29 10:12 UTC (permalink / raw)
To: u-boot
> The GLOBAL_BOOT_MODE_ADDR for i.MX28 is taken from an U-Boot patch for the
> MX28EVK:
> http://repository.timesys.com/buildsources/u/u-boot/u-boot-2009.08/u-boot-2009.08-mx28-201012211513.patch
It could be 0x0001a7f0 too:
/* The global boot mode will be detected by ROM code and
* a boot mode value will be stored at fixed address:
* TO1.0 addr 0x0001a7f0
* TO1.2 addr 0x00019BF0
*/
#ifndef MX28_EVK_TO1_0
#define GLOBAL_BOOT_MODE_ADDR 0x00019BF0
#else
#define GLOBAL_BOOT_MODE_ADDR 0x0001a7f0
#endif
Probably depending on the silicon spin, so perhaps we want to make a CONFIG_ for older silicon.
And the numbers read at this address don't match the numbers read from the boot mode GPIO pin. Only the lowest 4 bits represent the actual boot device and below the definitions:
#define BOOT_MODE_USB0 0x0
#define BOOT_MODE_I2C0 0x1
#define BOOT_MODE_SPI2 0x2
#define BOOT_MODE_SPI3 0x3
#define BOOT_MODE_GPMI 0x4
#define BOOT_MODE_rsvd1 0x5
#define BOOT_MODE_JTAG 0x6
#define BOOT_MODE_rsvd3 0x7
#define BOOT_MODE_SPI3_EE 0x8
#define BOOT_MODE_SSP0 0x9
#define BOOT_MODE_SSP1 0xa
#define BOOT_MODE_rsvd4 0xb
#define BOOT_MODE_rsvd5 0xc
#define BOOT_MODE_rsvd6 0xd
#define BOOT_MODE_rsvd7 0xe
#define BOOT_MODE_TEST 0xf
Higher bits have other purposes. On my board, for example, a value of 0x14 is reported when booting from NAND flash.
Having said all of this, I think your way is definitely the way to go.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-04-29 10:12 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-26 22:53 [U-Boot] [PATCH 1/1] ARM: mxs: Get boot mode from OCRAM Jörg Krause
2015-04-22 12:45 ` Stefano Babic
2015-04-29 10:12 ` Robert Deliën
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox