From: Benjamin Szőke <[email protected]> Dynamic setting mmcdev and mmcroot. Then when boot linux, we can have correct "root=/dev/mmcblk[x]p2"
ref: board/freescale/common/mmc.c https://github.com/u-boot/u-boot/blob/master/board/freescale/common/mmc.c Signed-off-by: Benjamin Szőke <[email protected]> --- board/xilinx/zynqmp/zynqmp.c | 18 ++++++++++++++++++ include/configs/xilinx_zynqmp.h | 1 + 2 files changed, 19 insertions(+) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 8cdd9d8600..d450b53982 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -401,10 +401,14 @@ static int boot_targets_setup(void) struct udevice *dev; int bootseq = -1; int bootseq_len = 0; + int mmc_dev_no = -1; int env_targets_len = 0; const char *mode = NULL; char *new_targets; char *env_targets; + char *autodetect_str = env_get("mmcautodetect"); + char cmd[32]; + char mmcblk[32]; bootmode = zynqmp_get_bootmode(); @@ -438,6 +442,7 @@ static int boot_targets_setup(void) debug("mmc0 device found at %p, seq %d\n", dev, dev_seq(dev)); mode = "mmc"; + mmc_dev_no = 0; bootseq = dev_seq(dev); env_set("modeboot", "emmcboot"); break; @@ -453,6 +458,7 @@ static int boot_targets_setup(void) debug("mmc0 device found at %p, seq %d\n", dev, dev_seq(dev)); mode = "mmc"; + mmc_dev_no = 0; bootseq = dev_seq(dev); env_set("modeboot", "sdboot"); break; @@ -471,6 +477,7 @@ static int boot_targets_setup(void) debug("mmc1 device found at %p, seq %d\n", dev, dev_seq(dev)); mode = "mmc"; + mmc_dev_no = 1; bootseq = dev_seq(dev); env_set("modeboot", "sdboot"); break; @@ -513,6 +520,17 @@ static int boot_targets_setup(void) env_set("boot_targets", new_targets); free(new_targets); + + if ((autodetect_str && !strcmp(autodetect_str, "yes")) && (mmc_dev_no >= 0)) { + env_set_ulong("mmcdev", (unsigned long)mmc_dev_no); + + /* Set mmcblk env */ + sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", mmc_dev_no); + env_set("mmcroot", mmcblk); + + sprintf(cmd, "mmc dev %d", mmc_dev_no); + run_command(cmd, 0); + } } return 0; diff --git a/include/configs/xilinx_zynqmp.h b/include/configs/xilinx_zynqmp.h index bb0db7c5ca..1113101717 100644 --- a/include/configs/xilinx_zynqmp.h +++ b/include/configs/xilinx_zynqmp.h @@ -180,6 +180,7 @@ #define CFG_EXTRA_ENV_SETTINGS \ ENV_MEM_LAYOUT_SETTINGS \ BOOTENV + "mmcautodetect=yes\0" #endif /* SPL can't handle all huge variables - define just DFU */ -- 2.47.1.windows.2

