aboutsummaryrefslogtreecommitdiff
path: root/drivers/mmc
diff options
context:
space:
mode:
authorRussell King2016-01-26 13:41:09 +0000
committerUlf Hansson2016-02-29 11:03:22 +0100
commita0eaf0f93f0630ac09519e27c84f88c8e41c6f8b (patch)
treef76788d078cc1c4ca3061a95ebef393702b7ab3e /drivers/mmc
parentadd8913d5d73fe617fd7fa0f62f170c8ac5f313b (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.c28
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;