diff options
author | Russell King | 2016-01-26 13:41:09 +0000 |
---|---|---|
committer | Ulf Hansson | 2016-02-29 11:03:22 +0100 |
commit | a0eaf0f93f0630ac09519e27c84f88c8e41c6f8b (patch) | |
tree | f76788d078cc1c4ca3061a95ebef393702b7ab3e /drivers/mmc | |
parent | add8913d5d73fe617fd7fa0f62f170c8ac5f313b (diff) |
mmc: sdhci: prepare DMA address/size quirk handling consolidation
Prepare to consolidate the DMA address/size quirk handling into one
single loop.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/sdhci.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 082c2f9fbfe6..5119904dc6bf 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -733,23 +733,24 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) * scatterlist. */ if (host->flags & SDHCI_REQ_USE_DMA) { - int broken, i; struct scatterlist *sg; + unsigned int length_mask; + int i; - broken = 0; + length_mask = 0; if (host->flags & SDHCI_USE_ADMA) { if (host->quirks & SDHCI_QUIRK_32BIT_ADMA_SIZE) - broken = 1; + length_mask = 3; } else { if (host->quirks & SDHCI_QUIRK_32BIT_DMA_SIZE) - broken = 1; + length_mask = 3; } - if (unlikely(broken)) { + if (unlikely(length_mask)) { for_each_sg(data->sg, sg, data->sg_len, i) { - if (sg->length & 0x3) { + if (sg->length & length_mask) { DBG("Reverting to PIO because of transfer size (%d)\n", - sg->length); + sg->length); host->flags &= ~SDHCI_REQ_USE_DMA; break; } @@ -762,10 +763,11 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) * translation to device address space. */ if (host->flags & SDHCI_REQ_USE_DMA) { - int broken, i; struct scatterlist *sg; + unsigned int offset_mask; + int i; - broken = 0; + offset_mask = 0; if (host->flags & SDHCI_USE_ADMA) { /* * As we use 3 byte chunks to work around @@ -773,15 +775,15 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) * quirk. */ if (host->quirks & SDHCI_QUIRK_32BIT_ADMA_SIZE) - broken = 1; + offset_mask = 3; } else { if (host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) - broken = 1; + offset_mask = 3; } - if (unlikely(broken)) { + if (unlikely(offset_mask)) { for_each_sg(data->sg, sg, data->sg_len, i) { - if (sg->offset & 0x3) { + if (sg->offset & offset_mask) { DBG("Reverting to PIO because of bad alignment\n"); host->flags &= ~SDHCI_REQ_USE_DMA; break; |