diff options
author | Raffaele Recalcati <raffaele.recalcati@bticino.it> | 2011-03-11 02:01:14 +0000 |
---|---|---|
committer | Andy Fleming <afleming@freescale.com> | 2011-04-13 07:09:04 -0500 |
commit | 5db2fe3ad9bdf4f32d72dbf2d3e3042bcd137a52 (patch) | |
tree | bc41107ea03285f1eb0a80ab63d89e984bb24262 | |
parent | 31cacbabf07ce00f5250b9826d5e48d4bbee1f94 (diff) | |
download | u-boot-5db2fe3ad9bdf4f32d72dbf2d3e3042bcd137a52.zip u-boot-5db2fe3ad9bdf4f32d72dbf2d3e3042bcd137a52.tar.gz u-boot-5db2fe3ad9bdf4f32d72dbf2d3e3042bcd137a52.tar.bz2 |
mmc: trace added
Defining CONFIG_MMC_TRACE in the include board file it is possible to activate
a tracing support.
This code helps in case of eMMC hw failure or to investigate possible eMMC
initialization issues.
Signed-off-by: Raffaele Recalcati <raffaele.recalcati@bticino.it>
Signed-off-by: Andy Fleming <afleming@freescale.com>
-rw-r--r-- | drivers/mmc/mmc.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 64c8d56..36f80fa 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -49,7 +49,60 @@ int board_mmc_getcd(u8 *cd, struct mmc *mmc)__attribute__((weak, int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data) { +#ifdef CONFIG_MMC_TRACE + int ret; + int i; + u8 *ptr; + + printf("CMD_SEND:%d\n", cmd->cmdidx); + printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg); + printf("\t\tFLAG\t\t\t %d\n", cmd->flags); + ret = mmc->send_cmd(mmc, cmd, data); + switch (cmd->resp_type) { + case MMC_RSP_NONE: + printf("\t\tMMC_RSP_NONE\n"); + break; + case MMC_RSP_R1: + printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n", + cmd->response[0]); + break; + case MMC_RSP_R1b: + printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n", + cmd->response[0]); + break; + case MMC_RSP_R2: + printf("\t\tMMC_RSP_R2\t\t 0x%08X \n", + cmd->response[0]); + printf("\t\t \t\t 0x%08X \n", + cmd->response[1]); + printf("\t\t \t\t 0x%08X \n", + cmd->response[2]); + printf("\t\t \t\t 0x%08X \n", + cmd->response[3]); + printf("\n"); + printf("\t\t\t\t\tDUMPING DATA\n"); + for (i = 0; i < 4; i++) { + int j; + printf("\t\t\t\t\t%03d - ", i*4); + ptr = &cmd->response[i]; + ptr += 3; + for (j = 0; j < 4; j++) + printf("%02X ", *ptr--); + printf("\n"); + } + break; + case MMC_RSP_R3: + printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n", + cmd->response[0]); + break; + default: + printf("\t\tERROR MMC rsp not supported\n"); + break; + } + return ret; +#else return mmc->send_cmd(mmc, cmd, data); +#endif } int mmc_send_status(struct mmc *mmc, int timeout) @@ -80,6 +133,10 @@ int mmc_send_status(struct mmc *mmc, int timeout) } } while (timeout--); +#ifdef CONFIG_MMC_TRACE + status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9; + printf("CURR STATE:%d\n", status); +#endif if (!timeout) { printf("Timeout waiting card ready\n"); return TIMEOUT; |