[PATCH RFC] mmc: mxs-mmc: Implement CMD23 support

Ulf Hansson ulf.hansson at linaro.org
Thu Jan 19 03:46:50 PST 2017


On 14 January 2017 at 18:29, Stefan Wahren <stefan.wahren at i2se.com> wrote:
> This patch implements support for multiblock transfers bounded
> by SET_BLOCK_COUNT (CMD23) on the MXS MMC host driver.
>
> Signed-off-by: Stefan Wahren <stefan.wahren at i2se.com>

Thanks, applied for next!

Kind regards
Uffe

> ---
>  drivers/mmc/host/mxs-mmc.c |   16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c
> index c8b8ac6..add1e70 100644
> --- a/drivers/mmc/host/mxs-mmc.c
> +++ b/drivers/mmc/host/mxs-mmc.c
> @@ -153,7 +153,11 @@ static void mxs_mmc_request_done(struct mxs_mmc_host *host)
>                 }
>         }
>
> -       if (data) {
> +       if (cmd == mrq->sbc) {
> +               /* Finished CMD23, now send actual command. */
> +               mxs_mmc_start_cmd(host, mrq->cmd);
> +               return;
> +       } else if (data) {
>                 dma_unmap_sg(mmc_dev(host->mmc), data->sg,
>                              data->sg_len, ssp->dma_dir);
>                 /*
> @@ -166,7 +170,7 @@ static void mxs_mmc_request_done(struct mxs_mmc_host *host)
>                         data->bytes_xfered = 0;
>
>                 host->data = NULL;
> -               if (mrq->stop) {
> +               if (data->stop && (data->error || !mrq->sbc)) {
>                         mxs_mmc_start_cmd(host, mrq->stop);
>                         return;
>                 }
> @@ -495,7 +499,11 @@ static void mxs_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
>
>         WARN_ON(host->mrq != NULL);
>         host->mrq = mrq;
> -       mxs_mmc_start_cmd(host, mrq->cmd);
> +
> +       if (mrq->sbc)
> +               mxs_mmc_start_cmd(host, mrq->sbc);
> +       else
> +               mxs_mmc_start_cmd(host, mrq->cmd);
>  }
>
>  static void mxs_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
> @@ -642,7 +650,7 @@ static int mxs_mmc_probe(struct platform_device *pdev)
>         /* set mmc core parameters */
>         mmc->ops = &mxs_mmc_ops;
>         mmc->caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED |
> -                   MMC_CAP_SDIO_IRQ | MMC_CAP_NEEDS_POLL;
> +                   MMC_CAP_SDIO_IRQ | MMC_CAP_NEEDS_POLL | MMC_CAP_CMD23;
>
>         host->broken_cd = of_property_read_bool(np, "broken-cd");
>
> --
> 1.7.9.5
>



More information about the linux-arm-kernel mailing list