printf("Bus Width: %d-bit\n", mmc->bus_width);
 }
-static struct mmc *init_mmc_device(int dev)
+static struct mmc *init_mmc_device(int dev, bool force_init)
 {
        struct mmc *mmc;
        mmc = find_mmc_device(dev);
                printf("no mmc device at slot %x\n", dev);
                return NULL;
        }
+       if (force_init)
+               mmc->has_init = 0;
        if (mmc_init(mmc))
                return NULL;
        return mmc;
                }
        }
 
-       mmc = init_mmc_device(curr_device);
+       mmc = init_mmc_device(curr_device, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
        if (flag == CMD_FLAG_REPEAT && !cp->repeatable)
                return CMD_RET_SUCCESS;
 
-       mmc = init_mmc_device(curr_device);
+       mmc = init_mmc_device(curr_device, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
        blk = simple_strtoul(argv[2], NULL, 16);
        cnt = simple_strtoul(argv[3], NULL, 16);
 
-       mmc = init_mmc_device(curr_device);
+       mmc = init_mmc_device(curr_device, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
        blk = simple_strtoul(argv[2], NULL, 16);
        cnt = simple_strtoul(argv[3], NULL, 16);
 
-       mmc = init_mmc_device(curr_device);
+       mmc = init_mmc_device(curr_device, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
        blk = simple_strtoul(argv[1], NULL, 16);
        cnt = simple_strtoul(argv[2], NULL, 16);
 
-       mmc = init_mmc_device(curr_device);
+       mmc = init_mmc_device(curr_device, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
        block_dev_desc_t *mmc_dev;
        struct mmc *mmc;
 
-       mmc = init_mmc_device(curr_device);
+       mmc = init_mmc_device(curr_device, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
                return CMD_RET_USAGE;
        }
 
-       mmc = init_mmc_device(dev);
+       mmc = init_mmc_device(dev, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
        reset = simple_strtoul(argv[3], NULL, 10);
        mode = simple_strtoul(argv[4], NULL, 10);
 
-       mmc = init_mmc_device(dev);
+       mmc = init_mmc_device(dev, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
        bootsize = simple_strtoul(argv[2], NULL, 10);
        rpmbsize = simple_strtoul(argv[3], NULL, 10);
 
-       mmc = init_mmc_device(dev);
+       mmc = init_mmc_device(dev, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
        part_num = simple_strtoul(argv[3], NULL, 10);
        access = simple_strtoul(argv[4], NULL, 10);
 
-       mmc = init_mmc_device(dev);
+       mmc = init_mmc_device(dev, false);
        if (!mmc)
                return CMD_RET_FAILURE;
 
                return CMD_RET_USAGE;
        }
 
-       mmc = init_mmc_device(dev);
+       mmc = init_mmc_device(dev, false);
        if (!mmc)
                return CMD_RET_FAILURE;