[U-Boot] Rockchip RV1108 eMMC support not working

Otavio Salvador otavio.salvador at ossystems.com.br
Mon Oct 8 19:28:50 UTC 2018


Hi,

We have a custom board based on rv1108 evb where we are trying to add
eMMC support.

Here are the changes we made so far:

 arch/arm/dts/rv1108-evb.dts     | 45 +++++++++++++++++++++++++++++++++++++++++
 configs/evb-rv1108_defconfig    |  4 ++++
 include/configs/evb_rv1108.h    | 14 +------------
 include/configs/rv1108_common.h |  3 +++
 4 files changed, 53 insertions(+), 13 deletions(-)

diff --git a/arch/arm/dts/rv1108-evb.dts b/arch/arm/dts/rv1108-evb.dts
index ccb9969..f07f402 100644
--- a/arch/arm/dts/rv1108-evb.dts
+++ b/arch/arm/dts/rv1108-evb.dts
@@ -77,3 +77,48 @@
 &usb_host_ohci {
     status = "okay";
 };
+
+&emmc {
+    pinctrl-names = "default";
+    pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
+    bus-width = <8>;
+    cap-mmc-highspeed;
+    supports-emmc;
+    disable-wp;
+    non-removable;
+    num-slots = <1>;
+    status = "okay";
+};
+
+&pinctrl {
+    pcfg_pull_none_drv_8ma: pcfg-pull-none-drv-8ma {
+        bias-disable;
+        drive-strength = <8>;
+    };
+
+    pcfg_pull_up_drv_8ma: pcfg-pull-up-drv-8ma {
+        bias-pull-up;
+        drive-strength = <8>;
+    };
+
+    emmc {
+        emmc_clk: emmc-clk {
+            rockchip,pins = <2 RK_PB6 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
+        };
+
+        emmc_cmd: emmc-cmd {
+            rockchip,pins = <2 RK_PB4 RK_FUNC_2 &pcfg_pull_up_drv_8ma>;
+        };
+
+        emmc_bus8: emmc-bus8 {
+            rockchip,pins = <2 RK_PA0 RK_FUNC_2 &pcfg_pull_up_drv_8ma>,
+                    <2 RK_PA1 RK_FUNC_2 &pcfg_pull_up_drv_8ma>,
+                    <2 RK_PA2 RK_FUNC_2 &pcfg_pull_up_drv_8ma>,
+                    <2 RK_PA3 RK_FUNC_2 &pcfg_pull_up_drv_8ma>,
+                    <2 RK_PA4 RK_FUNC_2 &pcfg_pull_up_drv_8ma>,
+                    <2 RK_PA5 RK_FUNC_2 &pcfg_pull_up_drv_8ma>,
+                    <2 RK_PA6 RK_FUNC_2 &pcfg_pull_up_drv_8ma>,
+                    <2 RK_PA7 RK_FUNC_2 &pcfg_pull_up_drv_8ma>;
+        };
+    };
+};
diff --git a/configs/evb-rv1108_defconfig b/configs/evb-rv1108_defconfig
index 2ef041f..6c992c6 100644
--- a/configs/evb-rv1108_defconfig
+++ b/configs/evb-rv1108_defconfig
@@ -14,10 +14,12 @@ CONFIG_DISPLAY_BOARDINFO_LATE=y
 CONFIG_RANDOM_UUID=y
 CONFIG_CMD_SF=y
 CONFIG_CMD_USB=y
+CONFIG_CMD_MMC=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_CMD_CACHE=y
 CONFIG_CMD_TIME=y
 CONFIG_DEFAULT_DEVICE_TREE="rv1108-evb"
+CONFIG_ENV_IS_IN_MMC=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
@@ -27,6 +29,8 @@ CONFIG_FASTBOOT_BUF_SIZE=0x08000000
 CONFIG_FASTBOOT_FLASH=y
 CONFIG_FASTBOOT_FLASH_MMC_DEV=1
 CONFIG_ROCKCHIP_GPIO=y
+CONFIG_MMC_DW=y
+CONFIG_MMC_DW_ROCKCHIP=y
 CONFIG_SYS_I2C_ROCKCHIP=y
 CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_BAR=y
diff --git a/include/configs/evb_rv1108.h b/include/configs/evb_rv1108.h
index 34739c7..aa6c4b0 100644
--- a/include/configs/evb_rv1108.h
+++ b/include/configs/evb_rv1108.h
@@ -8,18 +8,6 @@

 #include <configs/rv1108_common.h>

-/*
- * Default environment settings
- */
-#define CONFIG_EXTRA_ENV_SETTINGS                                       \
-    "netdev=eth0\0"                                                 \
-    "ipaddr=172.16.12.50\0"                                         \
-    "serverip=172.16.12.69\0"                    \
-    ""
-#define CONFIG_BOOTCOMMAND                        \
-    "sf probe;"                            \
-    "sf read 0x62000000 0x140800 0x500000;"                \
-    "dcache off;"                            \
-    "go 0x62000000"
+#define CONFIG_SYS_MMC_ENV_DEV    0

 #endif
diff --git a/include/configs/rv1108_common.h b/include/configs/rv1108_common.h
index 2ab3b85..cc0384e 100644
--- a/include/configs/rv1108_common.h
+++ b/include/configs/rv1108_common.h
@@ -17,6 +17,9 @@
 #define CONFIG_SYS_TIMER_BASE        0x10350020
 #define CONFIG_SYS_TIMER_COUNTER    (CONFIG_SYS_TIMER_BASE + 8)

+/* MMC/SD IP block */
+#define CONFIG_BOUNCE_BUFFER
+
 #define CONFIG_SYS_SDRAM_BASE        0x60000000
 #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_TEXT_BASE + 0x100000)
 #define CONFIG_SYS_LOAD_ADDR        (CONFIG_SYS_SDRAM_BASE + 0x2000000)
-- 
2.7.4

With this change the eMMC driver is loaded:

U-Boot 2018.11-rc1-00097-ge89d583-dirty (Oct 08 2018 - 16:11:40 -0300)

Model: Rockchip RV1108 Evaluation board
DRAM:  128 MiB
APLL: 600000000 DPLL:1200000000 GPLL:384000000
MMC:   dwmmc at 30110000: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environment

In:    serial at 10210000
Out:   serial at 10210000
Err:   serial at 10210000
Model: Rockchip RV1108 Evaluation board
Net:
Warning: ethernet at 30200000 (eth0) using random MAC address - 5a:d2:06:ad:9e:ee
eth0: ethernet at 30200000
=>

and we can also check the 'mmc info' command:

=> mmc info
Device: dwmmc at 30110000
Manufacturer ID: 70
OEM: 100
Name: M6270
Bus Speed: 52000000
Mode : MMC High Speed (52MHz)
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 3.5 GiB
Bus Width: 8-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 3.5 GiB WRREL
Boot Capacity: 2 MiB ENH
RPMB Capacity: 512 KiB ENH

but we are not able to save the environment to the eMMC card:

=> saveenv
Saving Environment to MMC... Writing to MMC(0)... failed
Failed (1)
=>

Any ideas?

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9 9981-7854          Mobile: +1 (347) 903-9750


More information about the U-Boot mailing list