i.MX7ULP: evk: Modify FDT file to disable SD3.0 for usb boot
authorPeng Fan <peng.fan@nxp.com>
Mon, 22 Jul 2019 01:24:39 +0000 (01:24 +0000)
committerStefano Babic <sbabic@denx.de>
Tue, 8 Oct 2019 14:35:16 +0000 (16:35 +0200)
Since the SD3.0 kernel driver needs M4 image support, this causes
problem for usb boot booting into kernel.  To decouple the relationship,
we modify the FDT file in u-boot to disable SD3.0.
So the kernel won't depend on M4 image.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
board/freescale/mx7ulp_evk/mx7ulp_evk.c
configs/mx7ulp_evk_defconfig

index 3a12fe1551497ea899810e0a8746c0f51a717c05..7527263577ff9f4bfd98606d36d002b02d45f1ea 100644 (file)
@@ -4,10 +4,12 @@
  */
 
 #include <common.h>
+#include <fdt_support.h>
 #include <asm/io.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/arch/mx7ulp-pins.h>
 #include <asm/arch/iomux.h>
+#include <asm/mach-imx/boot_mode.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -45,3 +47,48 @@ int board_init(void)
 
        return 0;
 }
+
+#if IS_ENABLED(CONFIG_OF_BOARD_SETUP)
+int ft_board_setup(void *blob, bd_t *bd)
+{
+       const char *path;
+       int rc, nodeoff;
+
+       if (get_boot_device() == USB_BOOT) {
+               path = fdt_get_alias(blob, "mmc0");
+               if (!path) {
+                       puts("Not found mmc0\n");
+                       return 0;
+               }
+
+               nodeoff = fdt_path_offset(blob, path);
+               if (nodeoff < 0)
+                       return 0;
+
+               printf("Found usdhc0 node\n");
+               if (fdt_get_property(blob, nodeoff, "vqmmc-supply",
+                   NULL) != NULL) {
+                       rc = fdt_delprop(blob, nodeoff, "vqmmc-supply");
+                       if (!rc) {
+                               puts("Removed vqmmc-supply property\n");
+add:
+                               rc = fdt_setprop(blob, nodeoff,
+                                                "no-1-8-v", NULL, 0);
+                               if (rc == -FDT_ERR_NOSPACE) {
+                                       rc = fdt_increase_size(blob, 32);
+                                       if (!rc)
+                                               goto add;
+                               } else if (rc) {
+                                       printf("Failed to add no-1-8-v property, %d\n", rc);
+                               } else {
+                                       puts("Added no-1-8-v property\n");
+                               }
+                       } else {
+                               printf("Failed to remove vqmmc-supply property, %d\n", rc);
+                       }
+               }
+       }
+
+       return 0;
+}
+#endif
index df854436a041a71e22a6529c92892f1d8b85939e..dc6cc2ba37a718a67762c73e9cf6367ea7afa023 100644 (file)
@@ -3,6 +3,7 @@ CONFIG_ARCH_MX7ULP=y
 CONFIG_SYS_TEXT_BASE=0x67800000
 CONFIG_TARGET_MX7ULP_EVK=y
 CONFIG_NR_DRAM_BANKS=1
+CONFIG_OF_BOARD_SETUP=y
 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx7ulp_evk/imximage.cfg"
 CONFIG_BOUNCE_BUFFER=y
 CONFIG_HUSH_PARSER=y