]> git.sur5r.net Git - u-boot/blobdiff - common/cmd_mmc.c
VIDEO: davinci: add framebuffer to da8xx
[u-boot] / common / cmd_mmc.c
index a6458037e229b7aa1d69a5602f821db3df5380ab..8f13c22d9baba16c2ab6a975a129901987618b33 100644 (file)
@@ -91,6 +91,7 @@ enum mmc_state {
        MMC_INVALID,
        MMC_READ,
        MMC_WRITE,
+       MMC_ERASE,
 };
 static void print_mmcinfo(struct mmc *mmc)
 {
@@ -172,9 +173,11 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                }
 
                mmc->has_init = 0;
-               mmc_init(mmc);
 
-               return 0;
+               if (mmc_init(mmc))
+                       return 1;
+               else
+                       return 0;
        } else if (strncmp(argv[1], "part", 4) == 0) {
                block_dev_desc_t *mmc_dev;
                struct mmc *mmc = find_mmc_device(curr_device);
@@ -252,15 +255,24 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                state = MMC_READ;
        else if (strcmp(argv[1], "write") == 0)
                state = MMC_WRITE;
+       else if (strcmp(argv[1], "erase") == 0)
+               state = MMC_ERASE;
        else
                state = MMC_INVALID;
 
        if (state != MMC_INVALID) {
                struct mmc *mmc = find_mmc_device(curr_device);
-               void *addr = (void *)simple_strtoul(argv[2], NULL, 16);
-               u32 blk = simple_strtoul(argv[3], NULL, 16);
-               u32 cnt = simple_strtoul(argv[4], NULL, 16);
-               u32 n;
+               int idx = 2;
+               u32 blk, cnt, n;
+               void *addr;
+
+               if (state != MMC_ERASE) {
+                       addr = (void *)simple_strtoul(argv[idx], NULL, 16);
+                       ++idx;
+               } else
+                       addr = 0;
+               blk = simple_strtoul(argv[idx], NULL, 16);
+               cnt = simple_strtoul(argv[idx + 1], NULL, 16);
 
                if (!mmc) {
                        printf("no mmc device at slot %x\n", curr_device);
@@ -283,6 +295,9 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                        n = mmc->block_dev.block_write(curr_device, blk,
                                                      cnt, addr);
                        break;
+               case MMC_ERASE:
+                       n = mmc->block_dev.block_erase(curr_device, blk, cnt);
+                       break;
                default:
                        BUG();
                }
@@ -300,6 +315,7 @@ U_BOOT_CMD(
        "MMC sub system",
        "read addr blk# cnt\n"
        "mmc write addr blk# cnt\n"
+       "mmc erase blk# cnt\n"
        "mmc rescan\n"
        "mmc part - lists available partition on current mmc device\n"
        "mmc dev [dev] [part] - show or set current mmc device [partition]\n"