ARM: uniphier: add eMMC boot support
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 16 Feb 2016 08:08:39 +0000 (17:08 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Sun, 28 Feb 2016 18:50:16 +0000 (03:50 +0900)
Export device nodes needed for eMMC boot (eMMC node, pinctrl, and
clock) to the SPL DTB.  CONFIG_SUPPORT_EMMC_BOOT is also necessary
to use "mmc partconf" command.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
arch/arm/dts/uniphier-ph1-pro4-sanji.dts
arch/arm/dts/uniphier-proxstream2-gentil.dts
arch/arm/dts/uniphier-proxstream2-vodka.dts
arch/arm/mach-uniphier/boot-mode/boot-mode.c
include/configs/uniphier.h

index 1ca104212898e00f87a429500fa52004e88891dc..82e2bd02c70a9788bc991ebc6fe104b89965421e 100644 (file)
        u-boot,dm-pre-reloc;
 };
 
+&mio {
+       u-boot,dm-pre-reloc;
+};
+
+&emmc {
+       u-boot,dm-pre-reloc;
+};
+
 &pinctrl {
        u-boot,dm-pre-reloc;
 };
 &pinctrl_uart0 {
        u-boot,dm-pre-reloc;
 };
+
+&pinctrl_emmc {
+       u-boot,dm-pre-reloc;
+};
index c3551fe7fabad42c7de8fbb94f36f713d6b66ab8..eb1d2bcc63a087fd66d14a92371ae3f96bc1a142 100644 (file)
        u-boot,dm-pre-reloc;
 };
 
+&mio {
+       u-boot,dm-pre-reloc;
+};
+
+&emmc {
+       u-boot,dm-pre-reloc;
+};
+
 &pinctrl {
        u-boot,dm-pre-reloc;
 };
@@ -82,3 +90,7 @@
 &pinctrl_uart2 {
        u-boot,dm-pre-reloc;
 };
+
+&pinctrl_emmc {
+       u-boot,dm-pre-reloc;
+};
index d61e0b6ff9fb286797031177e29027d3bfd326f9..e7d5db8894218936de84330a8ab8fe82430da9e1 100644 (file)
        u-boot,dm-pre-reloc;
 };
 
+&mio {
+       u-boot,dm-pre-reloc;
+};
+
+&emmc {
+       u-boot,dm-pre-reloc;
+};
+
 &pinctrl {
        u-boot,dm-pre-reloc;
 };
@@ -67,3 +75,7 @@
 &pinctrl_uart2 {
        u-boot,dm-pre-reloc;
 };
+
+&pinctrl_emmc {
+       u-boot,dm-pre-reloc;
+};
index 935e551472c88369a77153927a550a9ee896c3ea..2f2e45d2c161628e192bb4b3accbdbf2fafe6afb 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <mmc.h>
 #include <spl.h>
 
 #include "../sbc/sbc-regs.h"
@@ -52,3 +53,27 @@ u32 spl_boot_device(void)
 
        return ret == BOOT_DEVICE_USB ? BOOT_DEVICE_NOR : ret;
 }
+
+u32 spl_boot_mode(void)
+{
+       struct mmc *mmc;
+
+       /*
+        * work around a bug in the Boot ROM of PH1-sLD3, LD4, Pro4, and sLD8:
+        *
+        * The boot ROM in these SoCs breaks the PARTITION_CONFIG [179] of
+        * Extended CSD register; when switching to the Boot Partition 1, the
+        * Boot ROM should issue the SWITCH command (CMD6) with Set Bits for
+        * the Access Bits, but in fact it uses Write Byte for the Access Bits.
+        * As a result, the BOOT_PARTITION_ENABLE field of the PARTITION_CONFIG
+        * is lost.  This bug was fixed for PH1-Pro5 and later SoCs.
+        *
+        * Fixup mmc->part_config here because it is used to determine the
+        * partition which the U-Boot image is read from.
+        */
+       mmc = find_mmc_device(0);
+       mmc->part_config &= ~EXT_CSD_BOOT_PART_NUM(PART_ACCESS_MASK);
+       mmc->part_config |= EXT_CSD_BOOT_PARTITION_ENABLE;
+
+       return MMCSD_MODE_EMMCBOOT;
+}
index 9d14155751676c6ec8920bb861ab27d0266ce7ba..19dbfbbfc7919f3516715df5f775fddc589b8103 100644 (file)
 
 /* SD/MMC */
 #define CONFIG_CMD_MMC
+#define CONFIG_SUPPORT_EMMC_BOOT
 #define CONFIG_GENERIC_MMC
 
 /* memtest works on */
 #define CONFIG_SPL_FRAMEWORK
 #define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SPL_MMC_SUPPORT
 
 #define CONFIG_SPL_LIBCOMMON_SUPPORT   /* for mem_malloc_init */
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
 #define CONFIG_SPL_BOARD_INIT
 
 #define CONFIG_SYS_NAND_U_BOOT_OFFS            0x10000
+#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR        0x80
 
 #define CONFIG_SPL_MAX_FOOTPRINT               0x10000