OMAP3/4/5/AM33xx: Correct logic for checking FAT or RAW MMC
authorTom Rini <trini@ti.com>
Fri, 5 Apr 2013 06:21:44 +0000 (06:21 +0000)
committerTom Rini <trini@ti.com>
Mon, 8 Apr 2013 15:29:34 +0000 (11:29 -0400)
In the case of booting from certain peripherals, such as UART, we must
not see what the device descriptor says for RAW or FAT mode because in
addition to being nonsensical, it leads to a hang.  This is why we have
a test currently for the boot mode being within range.  The problem
however is that on some platforms we get MMC2_2 as the boot mode and not
the defined value for MMC2, and in others we get the value for MMC2_2.
This is required to fix eMMC booting on omap5_uevm.

Tested on am335x_evm (UART, NAND, SD), omap3_beagle (NAND, SD on
classic, SD only on xM rev C5) and omap5_uevm (SD, eMMC).

Signed-off-by: Tom Rini <trini@ti.com>
arch/arm/cpu/armv7/omap-common/lowlevel_init.S
arch/arm/include/asm/arch-am33xx/spl.h
arch/arm/include/asm/arch-omap3/spl.h
arch/arm/include/asm/arch-omap4/spl.h
arch/arm/include/asm/arch-omap5/spl.h

index b933fe843703d8c71f32e32187f5efd8f0e00dc4..90b3c8aea4ec3b7d5911bdc86a89f9c8e17f261b 100644 (file)
@@ -60,10 +60,14 @@ ENTRY(save_boot_params)
        ldr     r3, =boot_params
        strb    r2, [r3, #BOOT_DEVICE_OFFSET]   @ spl_boot_device <- r1
 
-       /* boot mode is passed only for devices that can raw/fat mode */
-       cmp     r2, #BOOT_DEVICE_XIP
+       /*
+        * boot mode is only valid for device that can be raw or FAT booted.
+        * in other cases it may be fatal to look.  While platforms differ
+        * in the values used for each MMC slot, they are contiguous.
+        */
+       cmp     r2, #MMC_BOOT_DEVICES_START
        blt     2f
-       cmp     r2, #BOOT_DEVICE_MMC2
+       cmp     r2, #MMC_BOOT_DEVICES_END
        bgt     2f
        /* Store the boot mode (raw/FAT) in omap_bootmode */
        ldr     r2, [r0, #DEV_DESC_PTR_OFFSET]  @ get the device descriptor ptr
index f60b086366ce39511cdaedde80833241e05924da..14a2c7c28eadb84ac01404ad6e61b0f41f66a250 100644 (file)
@@ -37,4 +37,7 @@
 #define BOOT_DEVICE_USBETH     68
 #define BOOT_DEVICE_CPGMAC     70
 #define BOOT_DEVICE_MMC2_2      0xFF
+
+#define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC1
+#define MMC_BOOT_DEVICES_END   BOOT_DEVICE_MMC2
 #endif
index dec4dacbad53f6837ec86543d5e66a78b20212e6..84e6d7bcbcb2522803009b4385cbdb94a160fcdf 100644 (file)
@@ -31,4 +31,7 @@
 #define BOOT_DEVICE_MMC1       6
 #define BOOT_DEVICE_XIPWAIT    7
 #define BOOT_DEVICE_MMC2_2      0xFF
+
+#define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC2
+#define MMC_BOOT_DEVICES_END   BOOT_DEVICE_MMC1
 #endif
index 4e094f9c60396fc90cdfd855e8121116dc9ae211..f61627ff565ade164a28582f5e6ca14745f8a0cb 100644 (file)
@@ -32,4 +32,6 @@
 #define BOOT_DEVICE_MMC2       6
 #define BOOT_DEVICE_MMC2_2     0xFF
 
+#define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC1
+#define MMC_BOOT_DEVICES_END   BOOT_DEVICE_MMC2
 #endif
index 323cd6355173532d3fcaec57cb0e1b0e9c0dc36d..d4d353c80b95f1a874bb1d67ce6e225c7e249003 100644 (file)
@@ -32,4 +32,6 @@
 #define BOOT_DEVICE_MMC2        6
 #define BOOT_DEVICE_MMC2_2     7
 
+#define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC1
+#define MMC_BOOT_DEVICES_END   BOOT_DEVICE_MMC2_2
 #endif