diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 393a1b077746..16e8db00fc49 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -431,12 +431,12 @@ static int sdhci_pre_dma_transfer(struct sdhci_host *host, { int sg_count; - if (data->host_cookie == COOKIE_MAPPED) { - data->host_cookie = COOKIE_GIVEN; + /* + * If the data buffers are already mapped, return the previous + * dma_map_sg() result. + */ + if (data->host_cookie == COOKIE_PRE_MAPPED) return data->sg_count; - } - - WARN_ON(data->host_cookie == COOKIE_GIVEN); sg_count = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len, data->flags & MMC_DATA_WRITE ? @@ -2094,7 +2094,7 @@ static void sdhci_pre_req(struct mmc_host *mmc, struct mmc_request *mrq, mrq->data->host_cookie = COOKIE_UNMAPPED; if (host->flags & SDHCI_REQ_USE_DMA) - sdhci_pre_dma_transfer(host, mrq->data, COOKIE_MAPPED); + sdhci_pre_dma_transfer(host, mrq->data, COOKIE_PRE_MAPPED); } static void sdhci_card_event(struct mmc_host *mmc) diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 0115e9907bf8..3bd28033dbd9 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -316,8 +316,8 @@ struct sdhci_adma2_64_desc { enum sdhci_cookie { COOKIE_UNMAPPED, - COOKIE_MAPPED, - COOKIE_GIVEN, + COOKIE_PRE_MAPPED, /* mapped by sdhci_pre_req() */ + COOKIE_MAPPED, /* mapped by sdhci_prepare_data() */ }; struct sdhci_host {