According to Specification, each bit have valid value.
But it doesn't check whether arguments is valid or not.
It has potential bug with arguments passed by wrong value.

Signed-off-by: Jaehoon Chung <[email protected]>
---
 cmd/mmc.c | 39 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/cmd/mmc.c b/cmd/mmc.c
index cb6b59f36a43..f9cb3fc21da0 100644
--- a/cmd/mmc.c
+++ b/cmd/mmc.c
@@ -735,8 +735,45 @@ static int do_mmc_bootbus(struct cmd_tbl *cmdtp, int flag,
                return CMD_RET_FAILURE;
        }
 
+       /*
+        * BOOT_BUS_CONDITIONS[177]
+        * BOOT_MODE[4:3]
+        * 0x0 : Use SDR + Backward compatible timing in boot operation
+        * 0x1 : Use SDR + High Speed Timing in boot operation mode
+        * 0x2 : Use DDR in boot operation
+        * RESET_BOOT_BUS_CONDITIONS
+        * 0x0 : Reset bus width to x1, SDR, Backward compatible
+        * 0x1 : Retain BOOT_BUS_WIDTH and BOOT_MODE
+        * BOOT_BUS_WIDTH
+        * 0x0 : x1(sdr) or x4 (ddr) buswidth
+        * 0x1 : x4(sdr/ddr) buswith
+        * 0x2 : x8(sdr/ddr) buswith
+        *
+        */
+       if (width >= 0x3) {
+               printf("boot_bus_width %d is invalid\n", width);
+               return CMD_RET_FAILURE;
+       }
+
+       if (reset >= 0x2) {
+               printf("reset_boot_bus_width %d is invalid\n", reset);
+               return CMD_RET_FAILURE;
+       }
+
+       if (mode >= 0x3) {
+               printf("reset_boot_bus_width %d is invalid\n", mode);
+               return CMD_RET_FAILURE;
+       }
+
        /* acknowledge to be sent during boot operation */
-       return mmc_set_boot_bus_width(mmc, width, reset, mode);
+       if (mmc_set_boot_bus_width(mmc, width, reset, mode)) {
+               puts("BOOT_BUS_WIDTH is failed to change.\n");
+               return CMD_RET_FAILURE;
+       }
+
+       printf("Set to BOOT_BUS_WIDTH = 0x%x, RESET = 0x%x, BOOT_MODE = 0x%x\n",
+                       width, reset, mode);
+       return CMD_RET_SUCCESS;
 }
 
 static int do_mmc_boot_resize(struct cmd_tbl *cmdtp, int flag,
-- 
2.29.0

Reply via email to