diff options
author | Tom Warren <twarren@nvidia.com> | 2011-05-26 10:52:32 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2011-08-24 10:01:48 -0700 |
commit | 31cc6903e6790835acd042d078984d98a8277eff (patch) | |
tree | 1cc1cd9b59a862daafacdd764437009084c69cab /common/cmd_mmc.c | |
parent | 6d64fd0de58c1152cc8faa790bd05f38cc8dd52c (diff) |
mmc: cmd_mmc: Use TOT cmd_mmc.c from Denx's repo - old one didn't build
Signed-off-by: Tom Warren <twarren@nvidia.com>
Change-Id: I2a56e2898698aff78d7f47b72056bc7733bb579b
Reviewed-on: http://gerrit.chromium.org/gerrit/1638
Reviewed-by: Anton Staaf <robotboy@chromium.org>
Diffstat (limited to 'common/cmd_mmc.c')
-rw-r--r-- | common/cmd_mmc.c | 251 |
1 files changed, 87 insertions, 164 deletions
diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index 5df66e431d4..6166749ad5a 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -25,14 +25,8 @@ #include <command.h> #include <mmc.h> -static int curr_device = -1; #ifndef CONFIG_GENERIC_MMC - -/* TODO: temporary hack for factory bring up; remove/rewrite when necessary */ -int get_mmc_current_device(void) -{ - return curr_device; -} +static int curr_device = -1; int do_mmc (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { @@ -53,7 +47,7 @@ int do_mmc (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return cmd_usage(cmdtp); } - if (initialize_mmc_device(dev) != 0) { + if (mmc_legacy_init(dev) != 0) { puts("No MMC card found\n"); return 1; } @@ -79,24 +73,6 @@ int do_mmc (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) } printf("mmc%d is current device\n", curr_device); - } else if (strcmp(argv[1], "part") == 0) { - if (argc == 2) { - if (curr_device < 0) { - puts("No MMC device available\n"); - return 1; - } - dev = curr_device; - } else { - dev = simple_strtoul(argv[2], NULL, 10); - -#ifdef CONFIG_SYS_MMC_SET_DEV - if (mmc_set_dev(dev) != 0) - return 1; -#endif - curr_device = dev; - } - print_part(mmc_get_dev(dev)); - return 0; } else { return cmd_usage(cmdtp); } @@ -134,196 +110,143 @@ static void print_mmcinfo(struct mmc *mmc) printf("Bus Width: %d-bit\n", mmc->bus_width); } -int initialize_mmc_device(int dev_num) +int do_mmcinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { struct mmc *mmc; + int dev_num; - if (curr_device < 0) { - if (get_mmc_num() > 0) - curr_device = 0; - else { - puts("No MMC device available\n"); - return 1; - } - } + if (argc < 2) + dev_num = 0; + else + dev_num = simple_strtoul(argv[1], NULL, 0); - mmc = find_mmc_device(curr_device); + mmc = find_mmc_device(dev_num); if (mmc) { mmc_init(mmc); print_mmcinfo(mmc); - return 0; - } else { - printf("no mmc device at slot %x\n", curr_device); - return 1; } + + return 0; } U_BOOT_CMD( - mmcinfo, 1, 0, do_mmcinfo, + mmcinfo, 2, 0, do_mmcinfo, "display MMC info", + "<dev num>\n" " - device number of the device to dislay info of\n" "" ); int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - if (argc < 2) - return cmd_usage(cmdtp); - - if (curr_device < 0) { - if (get_mmc_num() > 0) - curr_device = 0; - else { - puts("No MMC device available\n"); - return 1; - } - } - - if (strcmp(argv[1], "rescan") == 0) { - struct mmc *mmc = find_mmc_device(curr_device); + int rc = 0; - if (!mmc) { - printf("no mmc device at slot %x\n", curr_device); - return 1; - } + switch (argc) { + case 3: + if (strcmp(argv[1], "rescan") == 0) { + int dev = simple_strtoul(argv[2], NULL, 10); + struct mmc *mmc = find_mmc_device(dev); - mmc->has_init = 0; - mmc_init(mmc); + if (!mmc) + return 1; - return 0; - } else if (strncmp(argv[1], "part", 4) == 0) { - block_dev_desc_t *mmc_dev; - struct mmc *mmc = find_mmc_device(curr_device); + mmc_init(mmc); - if (!mmc) { - printf("no mmc device at slot %x\n", curr_device); - return 1; - } - mmc_init(mmc); - mmc_dev = mmc_get_dev(curr_device); - if (mmc_dev != NULL && - mmc_dev->type != DEV_TYPE_UNKNOWN) { - print_part(mmc_dev); return 0; - } + } else if (strncmp(argv[1], "part", 4) == 0) { + int dev = simple_strtoul(argv[2], NULL, 10); + block_dev_desc_t *mmc_dev; + struct mmc *mmc = find_mmc_device(dev); - puts("get mmc type error!\n"); - return 1; - } else if (strcmp(argv[1], "list") == 0) { - print_mmc_devices('\n'); - return 0; - } else if (strcmp(argv[1], "dev") == 0) { - int dev, part = -1; - struct mmc *mmc; - - if (argc == 2) - dev = curr_device; - else if (argc == 3) - dev = simple_strtoul(argv[2], NULL, 10); - else if (argc == 4) { - dev = (int)simple_strtoul(argv[2], NULL, 10); - part = (int)simple_strtoul(argv[3], NULL, 10); - if (part > PART_ACCESS_MASK) { - printf("#part_num shouldn't be larger" - " than %d\n", PART_ACCESS_MASK); + if (!mmc) { + puts("no mmc devices available\n"); return 1; } - } else - return cmd_usage(cmdtp); + mmc_init(mmc); + mmc_dev = mmc_get_dev(dev); + if (mmc_dev != NULL && + mmc_dev->type != DEV_TYPE_UNKNOWN) { + print_part(mmc_dev); + return 0; + } - mmc = find_mmc_device(dev); - if (!mmc) { - printf("no mmc device at slot %x\n", dev); + puts("get mmc type error!\n"); return 1; } - mmc_init(mmc); - if (part != -1) { - int ret; - if (mmc->part_config == MMCPART_NOAVAILABLE) { - printf("Card doesn't support part_switch\n"); - return 1; - } - - if (part != mmc->part_num) { - ret = mmc_switch_part(dev, part); - if (!ret) - mmc->part_num = part; + case 0: + case 1: + case 4: + return cmd_usage(cmdtp); - printf("switch to partions #%d, %s\n", - part, (!ret) ? "OK" : "ERROR"); - } - } - curr_device = dev; - if (mmc->part_config == MMCPART_NOAVAILABLE) - printf("mmc%d is current device\n", curr_device); - else - printf("mmc%d(part %d) is current device\n", - curr_device, mmc->part_num); - - return 0; - } else if (strcmp(argv[1], "read") == 0) { - void *addr = (void *)simple_strtoul(argv[2], NULL, 16); - u32 cnt = simple_strtoul(argv[4], NULL, 16); - u32 n; - u32 blk = simple_strtoul(argv[3], NULL, 16); - struct mmc *mmc = find_mmc_device(curr_device); - - if (!mmc) { - printf("no mmc device at slot %x\n", curr_device); - return 1; + case 2: + if (!strcmp(argv[1], "list")) { + print_mmc_devices('\n'); + return 0; } + return 1; + default: /* at least 5 args */ + if (strcmp(argv[1], "read") == 0) { + int dev = simple_strtoul(argv[2], NULL, 10); + void *addr = (void *)simple_strtoul(argv[3], NULL, 16); + u32 cnt = simple_strtoul(argv[5], NULL, 16); + u32 n; + u32 blk = simple_strtoul(argv[4], NULL, 16); + struct mmc *mmc = find_mmc_device(dev); + + if (!mmc) + return 1; - printf("\nMMC read: dev # %d, block # %d, count %d ... ", - curr_device, blk, cnt); + printf("\nMMC read: dev # %d, block # %d, count %d ... ", + dev, blk, cnt); - mmc_init(mmc); + mmc_init(mmc); - n = mmc->block_dev.block_read(curr_device, blk, cnt, addr); + n = mmc->block_dev.block_read(dev, blk, cnt, addr); - /* flush cache after read */ - flush_cache((ulong)addr, cnt * 512); /* FIXME */ + /* flush cache after read */ + flush_cache((ulong)addr, cnt * 512); /* FIXME */ - printf("%d blocks read: %s\n", + printf("%d blocks read: %s\n", n, (n==cnt) ? "OK" : "ERROR"); - return (n == cnt) ? 0 : 1; - } else if (strcmp(argv[1], "write") == 0) { - void *addr = (void *)simple_strtoul(argv[2], NULL, 16); - u32 cnt = simple_strtoul(argv[4], NULL, 16); - u32 n; - struct mmc *mmc = find_mmc_device(curr_device); + return (n == cnt) ? 0 : 1; + } else if (strcmp(argv[1], "write") == 0) { + int dev = simple_strtoul(argv[2], NULL, 10); + void *addr = (void *)simple_strtoul(argv[3], NULL, 16); + u32 cnt = simple_strtoul(argv[5], NULL, 16); + u32 n; + struct mmc *mmc = find_mmc_device(dev); - int blk = simple_strtoul(argv[3], NULL, 16); + int blk = simple_strtoul(argv[4], NULL, 16); - if (!mmc) { - printf("no mmc device at slot %x\n", curr_device); - return 1; - } + if (!mmc) + return 1; - printf("\nMMC write: dev # %d, block # %d, count %d ... ", - curr_device, blk, cnt); + printf("\nMMC write: dev # %d, block # %d, count %d ... ", + dev, blk, cnt); - mmc_init(mmc); + mmc_init(mmc); - n = mmc->block_dev.block_write(curr_device, blk, cnt, addr); + n = mmc->block_dev.block_write(dev, blk, cnt, addr); - printf("%d blocks written: %s\n", + printf("%d blocks written: %s\n", n, (n == cnt) ? "OK" : "ERROR"); - return (n == cnt) ? 0 : 1; - } + return (n == cnt) ? 0 : 1; + } else + rc = cmd_usage(cmdtp); - return cmd_usage(cmdtp); + return rc; + } } U_BOOT_CMD( mmc, 6, 1, do_mmcops, "MMC sub system", - "read addr blk# cnt\n" - "mmc write addr 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" + "read <device num> addr blk# cnt\n" + "mmc write <device num> addr blk# cnt\n" + "mmc rescan <device num>\n" + "mmc part <device num> - lists available partition on mmc\n" "mmc list - lists available devices"); #endif |