On Fri, Jun 22, 2012 at 4:19 PM, Ming Lei <ming.lei@xxxxxxxxxxxxx> wrote: > This patch reverts the commit dba3c29ea4a1d5d544. > > After bisecting, this commit dba3c29 is found to ruin micro-SD card data > (writing incorrect file, or fs is corrupt after several times mount) > on the beagle-xm revB, and reverting the commit will fix the problem. > > Also from TRM of OMAP3/OMAP4/DM37x, the below is mentioned about > the Auto CMD12 Enable bit. > - SDIO does not support this feature. > - SD card only. > Looks it is not suitable to always enable Auto CMD12 in host controller > driver. > > Considered that the commit is not mature enough, so ask to revert it > first. > Hi Ming, Rather than reverting the entire commit, Can you try with the below change alone, so that AutoCMD12 can be easily enabled back when needed. @@ -1859,7 +1859,6 @@ static int __devinit omap_hsmmc_probe(st host->mapbase = res->start + pdata->reg_offset; host->base = ioremap(host->mapbase, SZ_4K); host->power_mode = MMC_POWER_OFF; - host->flags = AUTO_CMD12; host->next_data.cookie = 1; platform_set_drvdata(pdev, host); > Cc: Balaji T K <balajitk@xxxxxx> > Cc: Venkatraman S <svenkatr@xxxxxx> > Buglink: https://lkml.org/lkml/2012/6/10/225 > Reported-by: Paolo Pisati <p.pisati@xxxxxxxxx> > Reported-bisected-and-tested-by: Ming Lei <ming.lei@xxxxxxxxxxxxx> > Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxxxxx> > --- > drivers/mmc/host/omap_hsmmc.c | 15 +++------------ > 1 file changed, 3 insertions(+), 12 deletions(-) > > diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c > index 9a7a60a..389a3ee 100644 > --- a/drivers/mmc/host/omap_hsmmc.c > +++ b/drivers/mmc/host/omap_hsmmc.c > @@ -85,7 +85,6 @@ > #define BRR_ENABLE (1 << 5) > #define DTO_ENABLE (1 << 20) > #define INIT_STREAM (1 << 1) > -#define ACEN_ACMD12 (1 << 2) > #define DP_SELECT (1 << 21) > #define DDIR (1 << 4) > #define DMA_EN 0x1 > @@ -117,7 +116,6 @@ > #define OMAP_MMC_MAX_CLOCK 52000000 > #define DRIVER_NAME "omap_hsmmc" > > -#define AUTO_CMD12 (1 << 0) /* Auto CMD12 support */ > /* > * One controller can have multiple slots, like on some omap boards using > * omap.c controller driver. Luckily this is not currently done on any known > @@ -177,7 +175,6 @@ struct omap_hsmmc_host { > int reqs_blocked; > int use_reg; > int req_in_progress; > - unsigned int flags; > struct omap_hsmmc_next next_data; > > struct omap_mmc_platform_data *pdata; > @@ -773,8 +770,6 @@ omap_hsmmc_start_command(struct omap_hsmmc_host *host, struct mmc_command *cmd, > cmdtype = 0x3; > > cmdreg = (cmd->opcode << 24) | (resptype << 16) | (cmdtype << 22); > - if ((host->flags & AUTO_CMD12) && mmc_op_multi(cmd->opcode)) > - cmdreg |= ACEN_ACMD12; > > if (data) { > cmdreg |= DP_SELECT | MSBS | BCE; > @@ -847,14 +842,11 @@ omap_hsmmc_xfer_done(struct omap_hsmmc_host *host, struct mmc_data *data) > else > data->bytes_xfered = 0; > > - if (data->stop && ((!(host->flags & AUTO_CMD12)) || data->error)) { > - omap_hsmmc_start_command(host, data->stop, NULL); > - } else { > - if (data->stop) > - data->stop->resp[0] = OMAP_HSMMC_READ(host->base, > - RSP76); > + if (!data->stop) { > omap_hsmmc_request_done(host, data->mrq); > + return; > } > + omap_hsmmc_start_command(host, data->stop, NULL); > } > > /* > @@ -1859,7 +1851,6 @@ static int __devinit omap_hsmmc_probe(struct platform_device *pdev) > host->mapbase = res->start + pdata->reg_offset; > host->base = ioremap(host->mapbase, SZ_4K); > host->power_mode = MMC_POWER_OFF; > - host->flags = AUTO_CMD12; > host->next_data.cookie = 1; > > platform_set_drvdata(pdev, host); > -- > 1.7.9.5 > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html