From: Russell King <rmk+kernel@arm.linux.org.uk>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>,
linux-mmc@vger.kernel.org, Marcin Wojtas <mw@semihalf.com>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <kernel@pengutronix.de>
Subject: [PATCH v4 14/25] mmc: sdhci: factor out sdhci_pre_dma_transfer() from sdhci_adma_table_pre()
Date: Fri, 29 Jan 2016 09:44:58 +0000 [thread overview]
Message-ID: <E1aP5bu-0001pt-2E@rmk-PC.arm.linux.org.uk> (raw)
In-Reply-To: <20160129094324.GA20025@n2100.arm.linux.org.uk>
In sdhci_prepare_data(), when SDHCI_REQ_USE_DMA is set, there are two
paths that prepare the data buffers for transfer. One is when
SDHCI_USE_ADMA is set, and is located inside sdhci_adma_table_pre().
The other is when SDHCI_USE_ADMA is clear, in the else clause of the
above.
Factor out the call to sdhci_pre_dma_transfer() along with its error
checking.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
drivers/mmc/host/sdhci.c | 62 ++++++++++++++++++------------------------------
1 file changed, 23 insertions(+), 39 deletions(-)
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 260b1caeced8..c07d4296ee19 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -485,8 +485,8 @@ static void sdhci_adma_mark_end(void *desc)
dma_desc->cmd |= cpu_to_le16(ADMA2_END);
}
-static int sdhci_adma_table_pre(struct sdhci_host *host,
- struct mmc_data *data)
+static void sdhci_adma_table_pre(struct sdhci_host *host,
+ struct mmc_data *data, int sg_count)
{
struct scatterlist *sg;
unsigned long flags;
@@ -500,9 +500,7 @@ static int sdhci_adma_table_pre(struct sdhci_host *host,
* We currently guess that it is LE.
*/
- host->sg_count = sdhci_pre_dma_transfer(host, data);
- if (host->sg_count < 0)
- return -EINVAL;
+ host->sg_count = sg_count;
desc = host->adma_table;
align = host->align_buffer;
@@ -569,7 +567,6 @@ static int sdhci_adma_table_pre(struct sdhci_host *host,
/* Add a terminating entry - nop, end, valid */
sdhci_adma_write_desc(host, desc, 0, 0, ADMA2_NOP_END_VALID);
}
- return 0;
}
static void sdhci_adma_table_post(struct sdhci_host *host,
@@ -699,7 +696,6 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
{
u8 ctrl;
struct mmc_data *data = cmd->data;
- int ret;
WARN_ON(host->data);
@@ -784,39 +780,27 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
}
if (host->flags & SDHCI_REQ_USE_DMA) {
- if (host->flags & SDHCI_USE_ADMA) {
- ret = sdhci_adma_table_pre(host, data);
- if (ret) {
- /*
- * This only happens when someone fed
- * us an invalid request.
- */
- WARN_ON(1);
- host->flags &= ~SDHCI_REQ_USE_DMA;
- } else {
- sdhci_writel(host, host->adma_addr,
- SDHCI_ADMA_ADDRESS);
- if (host->flags & SDHCI_USE_64_BIT_DMA)
- sdhci_writel(host,
- (u64)host->adma_addr >> 32,
- SDHCI_ADMA_ADDRESS_HI);
- }
- } else {
- int sg_cnt;
+ int sg_cnt = sdhci_pre_dma_transfer(host, data);
- sg_cnt = sdhci_pre_dma_transfer(host, data);
- if (sg_cnt <= 0) {
- /*
- * This only happens when someone fed
- * us an invalid request.
- */
- WARN_ON(1);
- host->flags &= ~SDHCI_REQ_USE_DMA;
- } else {
- WARN_ON(sg_cnt != 1);
- sdhci_writel(host, sg_dma_address(data->sg),
- SDHCI_DMA_ADDRESS);
- }
+ if (sg_cnt <= 0) {
+ /*
+ * This only happens when someone fed
+ * us an invalid request.
+ */
+ WARN_ON(1);
+ host->flags &= ~SDHCI_REQ_USE_DMA;
+ } else if (host->flags & SDHCI_USE_ADMA) {
+ sdhci_adma_table_pre(host, data, sg_cnt);
+
+ sdhci_writel(host, host->adma_addr, SDHCI_ADMA_ADDRESS);
+ if (host->flags & SDHCI_USE_64_BIT_DMA)
+ sdhci_writel(host,
+ (u64)host->adma_addr >> 32,
+ SDHCI_ADMA_ADDRESS_HI);
+ } else {
+ WARN_ON(sg_cnt != 1);
+ sdhci_writel(host, sg_dma_address(data->sg),
+ SDHCI_DMA_ADDRESS);
}
}
--
2.1.0
next prev parent reply other threads:[~2016-01-29 9:50 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-29 9:43 [PATCH v4 00/25] MMC/SDHCI fixes Russell King - ARM Linux
2016-01-29 9:43 ` [PATCH v4 01/25] mmc: core: shut up "voltage-ranges unspecified" pr_info() Russell King
2016-01-29 9:43 ` [PATCH v4 02/25] mmc: core: improve mmc_of_parse_voltage() to return better status Russell King
2016-01-29 9:44 ` [PATCH v4 03/25] mmc: block: shut up "retrying because a re-tune was needed" message Russell King
2016-01-29 9:44 ` [PATCH v4 04/25] mmc: core: report tuning command execution failure reason Russell King
2016-01-29 9:44 ` [PATCH v4 05/25] mmc: sdhci: move initialisation of command error member Russell King
2016-01-29 9:44 ` [PATCH v4 06/25] mmc: sdhci: clean up command error handling Russell King
2016-01-29 9:44 ` [PATCH v4 07/25] mmc: sdhci: command response CRC " Russell King
2016-01-29 9:44 ` [PATCH v4 08/25] mmc: sdhci: avoid unnecessary mapping/unmapping of align buffer Russell King
2016-01-29 9:44 ` [PATCH v4 09/25] mmc: sdhci: allocate alignment and DMA descriptor buffer together Russell King
2016-01-29 9:44 ` [PATCH v4 10/25] mmc: sdhci: clean up coding style in sdhci_adma_table_pre() Russell King
2016-01-29 9:44 ` [PATCH v4 11/25] mmc: sdhci: avoid walking SG list for writes Russell King
2016-01-29 9:44 ` [PATCH v4 12/25] mmc: sdhci: factor out common DMA cleanup in sdhci_finish_data() Russell King
2016-01-29 9:44 ` [PATCH v4 13/25] mmc: sdhci: move sdhci_pre_dma_transfer() Russell King
2016-01-29 9:44 ` Russell King [this message]
2016-01-29 9:45 ` [PATCH v4 15/25] mmc: sdhci: pass the cookie into sdhci_pre_dma_transfer() Russell King
2016-01-29 9:45 ` [PATCH v4 16/25] mmc: sdhci: always unmap a mapped data transfer in sdhci_post_req() Russell King
2016-01-29 9:45 ` [PATCH v4 17/25] mmc: sdhci: clean up host cookie handling Russell King
2016-01-29 9:45 ` [PATCH v4 18/25] mmc: sdhci: plug DMA mapping leak on error Russell King
2016-01-29 9:45 ` [PATCH v4 19/25] mmc: sdhci-pxav3: fix higher speed mode capabilities Russell King
2016-01-29 9:45 ` [PATCH v4 20/25] mmc: sdhci: further fix for DMA unmapping in sdhci_post_req() Russell King
2016-01-29 9:45 ` [PATCH v4 21/25] mmc: sdhci: fix data timeout (part 1) Russell King
2016-01-29 9:45 ` [PATCH v4 22/25] mmc: sdhci: fix data timeout (part 2) Russell King
2016-01-29 9:45 ` [PATCH v4 23/25] mmc: sdhci: prepare DMA address/size quirk handling consolidation Russell King
2016-01-29 9:45 ` [PATCH v4 24/25] mmc: sdhci: consolidate the DMA/ADMA size/address quicks Russell King
2016-01-29 9:45 ` [PATCH v4 25/25] mmc: sdhci: further code simplication Russell King
2016-02-04 10:55 ` [PATCH v4 00/25] MMC/SDHCI fixes Ulf Hansson
2016-02-12 9:49 ` Adrian Hunter
2016-02-12 14:23 ` Gregory CLEMENT
2016-02-16 13:08 ` Ulf Hansson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1aP5bu-0001pt-2E@rmk-PC.arm.linux.org.uk \
--to=rmk+kernel@arm.linux.org.uk \
--cc=gregory.clement@free-electrons.com \
--cc=kernel@pengutronix.de \
--cc=linux-mmc@vger.kernel.org \
--cc=mw@semihalf.com \
--cc=shawnguo@kernel.org \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox