On Fri, Jun 22, 2012 at 4:19 PM, Ming Lei <[email protected]> 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 <[email protected]>
> Cc: Venkatraman S <[email protected]>
> Buglink: https://lkml.org/lkml/2012/6/10/225
> Reported-by: Paolo Pisati <[email protected]>
> Reported-bisected-and-tested-by: Ming Lei <[email protected]>
> Signed-off-by: Ming Lei <[email protected]>
> ---
> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html