diff options
author | Scott Anderson <saa@android.com> | 2012-03-19 10:33:15 -0700 |
---|---|---|
committer | Scott Anderson <saa@android.com> | 2012-03-19 10:33:15 -0700 |
commit | 7ffaa889ac7e5a0ceab4067f64618704cfb4de39 (patch) | |
tree | 65bf821f96800f79ebf1a02a5b41f6c6e514e8dd /drivers | |
parent | f2641088c260b554f9f1f38cafc15fe42402106b (diff) | |
parent | 43b06888a686ffb00dc37ec94e757f0a63d9791d (diff) | |
download | uboot-7ffaa889ac7e5a0ceab4067f64618704cfb4de39.tar.gz |
Merge branch 'android-master' into android-omap-tungsten
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mmc/mmc.c | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index af6fa9664..946ef6b5d 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1300,116 +1300,3 @@ int mmc_initialize(bd_t *bis) return 0; } - -#if defined(CONFIG_MMC_SAMSUNG_SMART) && !defined(CONFIG_SPL_BUILD) -static int do_samsung_smart(cmd_tbl_t *cmdtp, int flag, - int argc, char * const argv[]) -{ - struct mmc *mmc; - struct mmc_cmd cmd; - int i, ret, read_ret; - char *ep; - uint32_t val, data[512 / 4]; - - if (argc != 2) - return cmd_usage(cmdtp); - i = simple_strtoul(argv[1], &ep, 10); - if (ep == argv[1] || *ep != '\0') { - printf("'%s' is not a number\n", argv[1]); - return cmd_usage(cmdtp); - } - - mmc = find_mmc_device(i); - if (!mmc) { - printf("no mmc device at slot %x\n", i); - return 1; - } - - cmd.cmdidx = 62; - cmd.resp_type = MMC_RSP_R1b; - cmd.flags = 0; - - /* Enter Smart Report Mode */ - cmd.cmdarg = 0xEFAC62EC; - ret = mmc_send_cmd(mmc, &cmd, NULL); - if (ret) { - printf("Error 1:%d entering Smart Report mode.\n", ret); - return 1; - } - cmd.cmdarg = 0x0000CCEE; - ret = mmc_send_cmd(mmc, &cmd, NULL); - if (ret) { - printf("Error 2:%d entering Smart Report mode.\n", ret); - return 1; - } - - /* Fetch the Smart Report */ - read_ret = mmc_read_blocks(mmc, data, 0, 1); - - /* Exit Smart Report Mode */ - cmd.cmdarg = 0xEFAC62EC; - ret = mmc_send_cmd(mmc, &cmd, NULL); - if (ret) - printf("Error 1:%d exiting Smart Report mode.\n", ret); - else { - cmd.cmdarg = 0x00DECCEE; - ret = mmc_send_cmd(mmc, &cmd, NULL); - if (ret) - printf("Error 2:%d exiting Smart Report mode.\n", ret); - } - - if (read_ret != 1) { - printf("Smart Report could not be read.\n"); - return 1; - } - - val = le32_to_cpup(data); - switch (val) { - case 0xD2D2D2D2: - printf(" Error Mode: Normal\n"); - break; - case 0x5C5C5C5C: - printf(" Error Mode: RuntimeFatalError\n"); - break; - case 0xE1E1E1E1: - printf(" Error Mode: MetaBrokenError\n"); - break; - case 0x37373737: - printf("The Error Mode is OpenFatalError; no valid data.\n"); - return 1; /* Fatal */ - default: - printf("Error Mode: Unknown (0x%08X)\n", val); - return 1; /* Fatal */ - } - printf(" Super Block Size: %d bytes\n", le32_to_cpup(data + 1)); - printf(" Super Page Size: %d bytes\n", le32_to_cpup(data + 2)); - printf("Optimal Write Size: %d bytes\n", le32_to_cpup(data + 3)); - printf("Read Reclaim Count: %d\n", le32_to_cpup(data + 20)); - printf(" Optimal Trim Size: %d\n", le32_to_cpup(data + 21)); - printf(" Number of Banks: %d\n", le32_to_cpup(data + 4)); - printf("========== Bad Blocks ===========\n"); - printf("Bank Initial Runtime Remaining\n"); - for (i = 0; i < 4; i++) - printf("%4d %7d %7d %9d\n", i, - le32_to_cpup(data + 5 + i * 3), - le32_to_cpup(data + 6 + i * 3), - le32_to_cpup(data + 7 + i * 3)); - printf("========== Erase Count ==========\n"); - printf(" Min Avg Max\n"); - printf(" All %7d %7d %7d\n", le32_to_cpup(data + 18), - le32_to_cpup(data + 19), - le32_to_cpup(data + 17)); - printf(" SLC %7d %7d %7d\n", le32_to_cpup(data + 31), - le32_to_cpup(data + 32), - le32_to_cpup(data + 30)); - printf(" MLC %7d %7d %7d\n", le32_to_cpup(data + 34), - le32_to_cpup(data + 35), - le32_to_cpup(data + 33)); - - return ret != 0; -} -U_BOOT_CMD(samsung_smart, 2, 1, do_samsung_smart, - "list the Samsung e-MMC Smart Report data", - "" -); -#endif /* CONFIG_MMC_SAMSUNG_SMART && !CONFIG_SPL_BUILD */ |