Re: [RFC PATCH] Revert "mmc: omap_hsmmc: Enable Auto CMD12"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux