linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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


  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).