linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Warren <swarren@wwwdotorg.org>
To: Scott Branden <sbranden@broadcom.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Russell King <rmk+kernel@arm.linux.org.uk>,
	Peter Griffin <peter.griffin@linaro.org>,
	Chris Ball <chris@printf.net>, Piotr Krol <pietrushnic@gmail.com>
Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org,
	Joe Perches <joe@perches.com>,
	linux-rpi-kernel@lists.infradead.org, Ray Jui <rjui@broadcom.com>,
	bcm-kernel-feedback-list@broadcom.com
Subject: Re: [PATCHv2 3/5] mmc: shdci-bcm2835: add efficient back-to-back write workaround
Date: Wed, 05 Nov 2014 21:48:49 -0700	[thread overview]
Message-ID: <545AFDB1.80008@wwwdotorg.org> (raw)
In-Reply-To: <5459C9C8.9070800@broadcom.com>

On 11/04/2014 11:55 PM, Scott Branden wrote:
> On 14-11-04 08:57 PM, Stephen Warren wrote:
>> On 10/30/2014 12:36 AM, Scott Branden wrote:
>>> The bcm2835 has clock domain issues when back to back writes to certain
>>> registers are written.  The existing driver works around this issue with
>>> udelay.  A more efficient method is to store the 8 and 16 bit writes
>>> to the registers affected and then write them as 32 bits at the
>>> appropriate
>>> time.
>>
>>> diff --git a/drivers/mmc/host/sdhci-bcm2835.c
>>> b/drivers/mmc/host/sdhci-bcm2835.c
>>
>>>   static void bcm2835_sdhci_writew(struct sdhci_host *host, u16 val,
>>> int reg)
>>>   {
>>>       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
>>> -    struct bcm2835_sdhci *bcm2835_host = pltfm_host->priv;
>>> -    u32 oldval = (reg == SDHCI_COMMAND) ? bcm2835_host->shadow :
>>> -        bcm2835_sdhci_readl(host, reg & ~3);
>>> +    struct bcm2835_sdhci_host *bcm2835_host = pltfm_host->priv;
>>
>> Is that type change for bcm2835_host really correct?
>
> Yes - at the top of the patch the structure has been expanded and named
> appropriately.
> 
> -struct bcm2835_sdhci {
> -    u32 shadow;
> +struct bcm2835_sdhci_host {
> +    u32 shadow_cmd;
> +    u32 shadow_blk;
>  };

Ah yes, sorry for missing that.

>>> +    } else {
>>> +        /* Read reg, all other registers are not shadowed */
>>> +        oldval = readl(host->ioaddr + (reg & ~3));
>>
>> Is there any reason to use readl() directly here rather than calling
>> bcm2835_readl()? ...
>
> Yes, bcm2835_readl does not need to be called in read-modify-write and
> shadow register situations and just adds overhead.  All that needs to be
> called is readl.  bcm2835_readl has some existing ugly code in it to
> modify the capabilities register on a read function.  This info never
> needs to be for write as you can't overwrite the capabilities register.

To be honest, it seems better to do all the read/write through
consistent functions. One advantage of bcm2835_readl() is that it
consistently adds on the base address internally so you don't have to
write it out every time manually. Still, the code ought to work fine
after this change, so I guess it's OK.

> I hope to get rid of the capabilities hack in a future patch as this
> should never have been acceptable in upstreamed code to begin with.  The
> capabilities override should have been passed in through a device tree
> entry.

It's a pretty common technique with precedent. I certainly don't agree
that it should be configured by DT. Arguably, DT makes sense to describe
board-to-board variations, but there's almost zero point putting data
into DT that is SoC description rather than board description; just put
it into the driver to avoid continually parsing the same data over and
over from DT just to get back to the same data that could have been
encoded into the driver. If the data varies between similar controllers,
an of_match table can easily be used to parameterize it based on
compatible value.

  reply	other threads:[~2014-11-06  4:48 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Scott Branden <sbranden@broadcom.com>
2014-10-15  2:01 ` [PATCH 0/1] sdhci-bcm2835: added quirk and removed udelay in write ops Scott Branden
2014-10-15  2:01   ` [PATCH 1/1] mmc: " Scott Branden
2014-10-17  2:50     ` Stephen Warren
2014-10-15 16:43 ` Scott Branden
2014-10-18  2:37   ` Stephen Warren
2014-10-18  6:40     ` Scott Branden
2014-10-30  6:36 ` [PATCHv2 0/5] " Scott Branden
2014-10-30  6:36   ` [PATCHv2 1/5] mmc: sdhci-bcm2835: group read and write functions to improve readability Scott Branden
2014-10-30  6:36   ` [PATCHv2 2/5] mmc: sdhci-bcm2835: make shift calculations consistent Scott Branden
2014-11-05  4:48     ` Stephen Warren
2014-11-05  5:19       ` Scott Branden
2014-10-30  6:36   ` [PATCHv2 3/5] mmc: shdci-bcm2835: add efficient back-to-back write workaround Scott Branden
2014-11-05  4:57     ` Stephen Warren
2014-11-05  6:55       ` Scott Branden
2014-11-06  4:48         ` Stephen Warren [this message]
2014-11-07 18:29           ` Scott Branden
2014-10-30  6:36   ` [PATCHv2 4/5] mmc: shdci-bcm2835: add verify for 32-bit back-to-back workaround Scott Branden
2014-11-05  4:44     ` Stephen Warren
2014-11-05  5:26       ` Scott Branden
2014-11-05  4:59     ` Stephen Warren
2014-11-05  7:00       ` Scott Branden
2014-11-06  5:01         ` Stephen Warren
2014-11-07 18:31           ` Scott Branden
2015-12-22 15:55             ` Stefan Wahren
2015-12-22 19:23               ` Scott Branden
2015-12-22 20:13                 ` Stefan Wahren
2014-10-30  6:36   ` [PATCHv2 5/5] mmc: sdhci-bcm2835: add sdhci quirk SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 Scott Branden
2014-11-05  5:00     ` Stephen Warren
2014-11-05  7:02       ` Scott Branden
2014-11-06  4:50         ` Stephen Warren
2014-11-07 18:30           ` Scott Branden
2014-12-05  0:11 ` [PATCH] mmc: sdhci: add quirk for ACMD23 broken Scott Branden
2014-12-05  0:16 ` [PATCH v2] " Scott Branden
2014-12-17 18:36   ` Scott Branden
2014-12-17 19:48   ` Chris Ball
2014-12-17 20:42     ` Scott Branden
2015-02-10  0:06 ` [PATCH 0/4] Add support for IPROC SDHCI controller Scott Branden
2015-02-10  0:06   ` [PATCH 1/4] mmc: sdhci: add quirk for ACMD23 broken Scott Branden
2015-02-10  0:06   ` [PATCH 2/4] mmc: sdhci: do not set AUTO_CMD12 for multi-block CMD53 Scott Branden
2015-02-10  0:06   ` [PATCH 3/4] mmc: sdhci-iproc: add IPROC SDHCI driver Scott Branden
2015-02-10  0:06   ` [PATCH 4/4] mmc: sdhci-iproc: add device tree bindings Scott Branden
2015-03-02 23:50     ` Florian Fainelli
2015-03-04 23:14       ` Scott Branden
     [not found]   ` <1423526791-29453-1-git-send-email-sbranden-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2015-02-26 17:28     ` [PATCH 0/4] Add support for IPROC SDHCI controller Scott Branden
2015-03-05 15:59 ` [PATCH RESEND " Scott Branden
2015-03-05 15:59   ` [PATCH 1/4] mmc: sdhci: add quirk for ACMD23 broken Scott Branden
2015-03-05 15:59   ` [PATCH 2/4] mmc: sdhci: do not set AUTO_CMD12 for multi-block CMD53 Scott Branden
2015-03-05 15:59   ` [PATCH 3/4] mmc: sdhci-iproc: add IPROC SDHCI driver Scott Branden
2015-03-05 15:59   ` [PATCH 4/4] mmc: sdhci-iproc: add device tree bindings Scott Branden
2015-03-05 16:16   ` [PATCH RESEND 0/4] Add support for IPROC SDHCI controller Ulf Hansson
2015-03-05 19:57     ` Florian Fainelli
2015-03-10 18:35 ` [PATCH] mmc: sdhci: fix card presence logic in sdhci_request function Scott Branden
2015-03-13 10:14   ` 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=545AFDB1.80008@wwwdotorg.org \
    --to=swarren@wwwdotorg.org \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=chris@printf.net \
    --cc=joe@perches.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-rpi-kernel@lists.infradead.org \
    --cc=peter.griffin@linaro.org \
    --cc=pietrushnic@gmail.com \
    --cc=rjui@broadcom.com \
    --cc=rmk+kernel@arm.linux.org.uk \
    --cc=sbranden@broadcom.com \
    --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).