From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Russell King <linux@arm.linux.org.uk>,
Ulf Hansson <ulf.hansson@linaro.org>,
"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
Chris Ball <chris@printf.net>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-msm@vger.kernel.org" <linux-arm-msm@vger.kernel.org>
Subject: Re: [PATCH v2 14/14] mmc: mmci: Add Qcom specific pio_read function.
Date: Fri, 23 May 2014 12:53:07 +0100 [thread overview]
Message-ID: <537F36A3.7020006@linaro.org> (raw)
In-Reply-To: <CACRpkdbQ_uNoZpW9w7Yf==wt44wun4e+P7WzMp_t0tuCVeUX_g@mail.gmail.com>
Hi Linus W,
On 23/05/14 10:31, Linus Walleij wrote:
> static int mmci_qcom_pio_read(struct mmci_host *host, char *buffer,
> unsigned int remain)
> {
> u32 *ptr = (u32*) buffer;
> unsigned int count = 0;
> unsigned int words;
> unsigned int fifo_size = host->variant->fifosize;
>
> words = DIV_ROUND_UP(remain, 4);
> while (readl(host->base + MMCISTATUS) & MCI_RXDATAAVLBL) {
> *ptr = readl(host->base + MMCIFIFO + (count % fifo_size));
> ptr++;
> count += 4;
> remain--;
> if (!remain)
> break;
> }
> return count;
> }
>
> I guess you will run into additional problems when you come to doing
> SDIO. This function can return*more* bytes than asked for, as it rounds
> up. It won't happen with MMC/SD transfers since these are always
> divisible by 8, but it*will* happen on SDIO!
That's a good point,
Qualcomm will need SDIO support in future, so I have slightly modified
the code to address this. Other thing I tried was to fit in this in
mmci_pio_read, It became very ugly, as the FIFOCNT register behaviour is
totally different and there is no way to tell how many bytes are ready
to be consumed. So finally I think having a separate pio read for
qualcomm looks much neater.
final mmci_qcom_pio_read looks like:
static int mmci_qcom_pio_read(struct mmci_host *host, char *buffer,
unsigned int remain)
{
u32 *ptr = (u32*) buffer;
unsigned int count = 0;
unsigned int words, bytes;
unsigned int fifo_size = host->variant->fifosize;
words = remain >> 2;
bytes = remain % 4;
/* read full words followed by leftover bytes */
if (words) {
while (readl(host->base + MMCISTATUS) & MCI_RXDATAAVLBL) {
*ptr = readl(host->base + MMCIFIFO + (count % fifo_size));
ptr++;
count += 4;
words--;
if (!words)
break;
}
}
/* read leftover bytes */
if (unlikely(bytes)) {
unsigned char buf[4];
if (readl(host->base + MMCISTATUS) & MCI_RXDATAAVLBL) {
*buf = readl(host->base + MMCIFIFO + (count % fifo_size));
memcpy(ptr, buf, bytes);
count += bytes;
}
}
return count;
}
Thanks,
srini
next prev parent reply other threads:[~2014-05-23 11:53 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-21 21:43 [PATCH RFC 00/12] Add Qualcomm SD Card Controller support srinivas.kandagatla
2014-04-21 21:47 ` [PATCH RFC 01/12] ARM: amba: Add Qualcomm vendor ID srinivas.kandagatla
2014-04-21 21:47 ` [PATCH RFC 02/12] mmc: mmci: Add Qualcomm Id to amba id table srinivas.kandagatla
2014-04-21 21:47 ` [PATCH RFC 03/12] mmc: mmci: Add Qcom datactrl register variant srinivas.kandagatla
2014-04-21 21:47 ` [PATCH RFC 04/12] mmc: mmci: Add register read/write wrappers srinivas.kandagatla
2014-04-21 21:47 ` [PATCH RFC 05/12] mmc: mmci: use NSEC_PER_SEC macro srinivas.kandagatla
2014-04-21 21:48 ` [PATCH RFC 06/12] mmc: mmci: Add write delay to variant structure srinivas.kandagatla
2014-04-21 22:08 ` Felipe Balbi
2014-04-22 8:15 ` Srinivas Kandagatla
2014-04-21 21:48 ` [PATCH RFC 07/12] mmc: mmci: Qcomm: Add 3 clock cycle delay after each register write srinivas.kandagatla
2014-04-21 21:48 ` [PATCH RFC 08/12] mmc: mmci: move ST specific register extensions access under condition srinivas.kandagatla
2014-04-21 21:48 ` [PATCH RFC 09/12] mmc: mmci: Qcom fix MCICLK register settings srinivas.kandagatla
2014-04-21 21:49 ` [PATCH RFC 10/12] mmc: mmci: Add clock support for Qualcomm srinivas.kandagatla
2014-04-21 22:20 ` Stephen Boyd
2014-04-22 10:03 ` Srinivas Kandagatla
2014-04-21 21:49 ` [PATCH RFC 11/12] mmc: mmci: Add Qcom variations to MCICommand register srinivas.kandagatla
2014-04-21 21:49 ` [PATCH RFC 12/12] mmc: mmci: Add Qcom specific pio_read function srinivas.kandagatla
2014-04-22 12:58 ` [PATCH RFC 00/12] Add Qualcomm SD Card Controller support Christopher Covington
2014-04-22 14:16 ` Srinivas Kandagatla
2014-04-29 8:18 ` [PATCH v1 00/11] " srinivas.kandagatla
2014-04-29 8:19 ` [PATCH v1 01/11] ARM: amba: Add Qualcomm vendor ID srinivas.kandagatla
2014-05-13 7:16 ` Linus Walleij
2014-05-13 9:41 ` Srinivas Kandagatla
2014-05-13 22:13 ` Stephen Boyd
2014-05-14 6:45 ` Srinivas Kandagatla
2014-05-16 16:24 ` Linus Walleij
2014-05-16 16:43 ` Stephen Boyd
2014-05-22 21:54 ` Linus Walleij
2014-04-29 8:19 ` [PATCH v1 02/11] mmc: mmci: Add Qualcomm Id to amba id table srinivas.kandagatla
2014-05-13 7:17 ` Linus Walleij
2014-05-13 9:00 ` Srinivas Kandagatla
2014-04-29 8:19 ` [PATCH v1 03/11] mmc: mmci: Add Qcom datactrl register variant srinivas.kandagatla
2014-05-13 7:19 ` Linus Walleij
2014-04-29 8:19 ` [PATCH v1 04/11] mmc: mmci: Add register read/write wrappers srinivas.kandagatla
2014-04-29 8:20 ` [PATCH v1 05/11] mmc: mmci: use NSEC_PER_SEC macro srinivas.kandagatla
2014-05-13 7:20 ` Linus Walleij
2014-05-13 9:02 ` Srinivas Kandagatla
2014-04-29 8:20 ` [PATCH v1 06/11] mmc: mmci: Qcomm: Add 3 clock cycle delay after register write srinivas.kandagatla
2014-05-13 7:29 ` Linus Walleij
2014-05-13 9:14 ` Srinivas Kandagatla
2014-04-29 8:20 ` [PATCH v1 07/11] mmc: mmci: move ST specific register extensions access under condition srinivas.kandagatla
2014-05-13 8:08 ` Linus Walleij
2014-05-13 9:33 ` Srinivas Kandagatla
2014-04-29 8:20 ` [PATCH v1 08/11] mmc: mmci: Qcom fix MCICLK register settings srinivas.kandagatla
2014-05-13 8:19 ` Linus Walleij
2014-05-13 9:36 ` Srinivas Kandagatla
2014-04-29 8:20 ` [PATCH v1 09/11] mmc: mmci: Add clock support for Qualcomm srinivas.kandagatla
2014-05-13 8:28 ` Linus Walleij
2014-05-13 9:39 ` Srinivas Kandagatla
2014-04-29 8:21 ` [PATCH v1 10/11] mmc: mmci: Add Qcom variations to MCICommand register srinivas.kandagatla
2014-05-13 8:29 ` Linus Walleij
2014-04-29 8:21 ` [PATCH v1 11/11] mmc: mmci: Add Qcom specific pio_read function srinivas.kandagatla
2014-05-13 8:34 ` Linus Walleij
2014-05-13 9:42 ` Srinivas Kandagatla
2014-05-09 17:56 ` [PATCH v1 00/11] Add Qualcomm SD Card Controller support Bjorn Andersson
2014-05-09 18:32 ` Srinivas Kandagatla
2014-05-13 10:04 ` Ulf Hansson
2014-05-13 10:21 ` Srinivas Kandagatla
[not found] ` <1400146447-29803-1-git-send-email-srinivas.kandagatla@linaro.org>
2014-05-15 9:36 ` [PATCH v2 01/14] mmc: mmci: use NSEC_PER_SEC macro srinivas.kandagatla
2014-05-15 9:36 ` [PATCH v2 02/14] mmc: mmci: convert register bits to use BIT() macro srinivas.kandagatla
2014-05-15 9:36 ` [PATCH v2 03/14] mmc: mmci: Add Qualcomm Id to amba id table srinivas.kandagatla
2014-05-15 9:36 ` [PATCH v2 04/14] mmc: mmci: Add Qcom datactrl register variant srinivas.kandagatla
2014-05-15 9:36 ` [PATCH v2 05/14] mmc: mmci: Add register read/write wrappers srinivas.kandagatla
2014-05-23 9:04 ` Linus Walleij
2014-05-15 9:37 ` [PATCH v2 06/14] mmc: mmci: Qcomm: Add 3 clock cycle delay after register write srinivas.kandagatla
2014-05-23 9:03 ` Linus Walleij
2014-05-15 9:37 ` [PATCH v2 07/14] mmc: mmci: add ddrmode mask to variant data srinivas.kandagatla
2014-05-23 9:05 ` Linus Walleij
2014-05-15 9:37 ` [PATCH v2 08/14] mmc: mmci: add 8bit bus support in " srinivas.kandagatla
2014-05-23 9:05 ` Linus Walleij
2014-05-15 9:37 ` [PATCH v2 09/14] mmc: mmci: add edge support to data and command out " srinivas.kandagatla
2014-05-23 9:06 ` Linus Walleij
2014-05-15 9:37 ` [PATCH v2 10/14] mmc: mmci: add Qcom specifics of clk and datactrl registers srinivas.kandagatla
2014-05-23 9:08 ` Linus Walleij
2014-05-15 9:37 ` [PATCH v2 11/14] mmc: mmci: Add support to data commands via variant structure srinivas.kandagatla
2014-05-23 9:09 ` Linus Walleij
2014-05-23 9:10 ` Srinivas Kandagatla
2014-05-15 9:37 ` [PATCH v2 12/14] mmc: mmci: add support for fbclk to latch data and cmd srinivas.kandagatla
2014-05-23 9:12 ` Linus Walleij
2014-05-23 9:20 ` Srinivas Kandagatla
2014-05-15 9:37 ` [PATCH v2 13/14] mmc: mmci: add qcom specific clk control srinivas.kandagatla
2014-05-23 9:14 ` Linus Walleij
2014-05-15 9:38 ` [PATCH v2 14/14] mmc: mmci: Add Qcom specific pio_read function srinivas.kandagatla
2014-05-23 9:31 ` Linus Walleij
2014-05-23 9:42 ` Srinivas Kandagatla
2014-05-23 11:53 ` Srinivas Kandagatla [this message]
[not found] ` <537EF50B.2010101@linaro.org>
[not found] ` <CAPDyKFpTXrURM8OzNjO-RRfCFWGct4+_M4D8COdEurUhY46GWg@mail.gmail.com>
2014-05-23 8:11 ` [PATCH v2 00/14] Add Qualcomm SD Card Controller support Srinivas Kandagatla
2014-05-19 22:08 ` [PATCH RFC 00/12] " Bjorn Andersson
2014-05-20 8:10 ` Srinivas Kandagatla
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=537F36A3.7020006@linaro.org \
--to=srinivas.kandagatla@linaro.org \
--cc=chris@printf.net \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--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;
as well as URLs for NNTP newsgroup(s).