From mboxrd@z Thu Jan 1 00:00:00 1970 From: Russell King Subject: [PATCH v4 23/25] mmc: sdhci: prepare DMA address/size quirk handling consolidation Date: Fri, 29 Jan 2016 09:45:46 +0000 Message-ID: References: <20160129094324.GA20025@n2100.arm.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Return-path: Received: from pandora.arm.linux.org.uk ([78.32.30.218]:44262 "EHLO pandora.arm.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753913AbcA2Jpw (ORCPT ); Fri, 29 Jan 2016 04:45:52 -0500 In-Reply-To: <20160129094324.GA20025@n2100.arm.linux.org.uk> Content-Disposition: inline Sender: linux-mmc-owner@vger.kernel.org List-Id: linux-mmc@vger.kernel.org To: Ulf Hansson Cc: Gregory CLEMENT , linux-mmc@vger.kernel.org, Marcin Wojtas , Shawn Guo , Sascha Hauer Prepare to consolidate the DMA address/size quirk handling into one single loop. Signed-off-by: Russell King --- drivers/mmc/host/sdhci.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 60ec6b5f5600..a033155984a4 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; -- 2.1.0