From: Greg Ungerer <gerg@kernel.org>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org,
arnd@kernel.org, Greg Ungerer <gerg@linux-m68k.org>,
adureghello@baylibre.com, linux-mmc@vger.kernel.org
Subject: Re: [RFC 3/4] mmc: sdhci-esdhc-mcf: do not use readl()/writel() on ColdFire
Date: Wed, 10 Jun 2026 00:31:33 +1000 [thread overview]
Message-ID: <490153c1-b6e4-4933-99e6-0f0ee96bb500@kernel.org> (raw)
In-Reply-To: <CAPDyKFpZ3h7Kx845K+f1EZs2ijgjBmKsLOX8GCuP=C5WV-d8KQ@mail.gmail.com>
On 12/5/26 01:11, Ulf Hansson wrote:
> On Wed, 6 May 2026 at 16:34, Greg Ungerer <gerg@kernel.org> wrote:
>>
>> From: Greg Ungerer <gerg@linux-m68k.org>
>>
>> The implementation of the readX() and writeX() family of IO access
>> functions is non-standard on ColdFire platforms. They check the supplied
>> IO address and will return either big or little endian results based on
>> that check. This is non-standard, they are expected to always return
>> little-endian byte ordered data. Unfortunately this behavior also means
>> that ioreadX()/iowroteX() and their big-endian counter parts
>> ioreadXbe()/iowriteXbe() are wrong. This is now in the process of being
>> cleaned up and fixed.
>>
>> Change the use of the readX() and writeX() access functions in this driver
>> to use the recently defined specific ColdFire internal SoC hardware IO
>> access functions mcf_read8()/mcf_read16()/mcf_read32() and
>> mcf_write8()/mcf_write16()/mcf_write32().
>>
>> There is no functional change to the driver. Though it does have the
>> effect of making the IO access slightly more efficient, since there is
>> no longer a need to do the address check at every register access.
>>
>> Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
>> ---
>> drivers/mmc/host/sdhci-esdhc-mcf.c | 24 ++++++++++++------------
>> 1 file changed, 12 insertions(+), 12 deletions(-)
>>
>> Note that the patches to introduce mcf_readX() and mcf_writeX functions
>> are not in mainline yet. They are currently in the m68knommu git tree
>> for-next branch, and so should also be in linux-next.
>
> Okay, so please resubmit the $subject patch when the mcf_readX|writeX
> functions are available in a v7.x-rc so I can pick it up.
>
> Another option is if someone can host an immutable branch for me to
> pull in the changes for mcf_readX|writeX.
Those changes are now on an immutable branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu.git
cf-internal-io branch
I will follow up after 7.2-rc1 is out with this patch set as well.
Regards
Greg
> Kind regards
> Uffe
>
>>
>> diff --git a/drivers/mmc/host/sdhci-esdhc-mcf.c b/drivers/mmc/host/sdhci-esdhc-mcf.c
>> index 375fce5639d7..6853521e8b2c 100644
>> --- a/drivers/mmc/host/sdhci-esdhc-mcf.c
>> +++ b/drivers/mmc/host/sdhci-esdhc-mcf.c
>> @@ -55,7 +55,7 @@ static inline void esdhc_clrset_be(struct sdhci_host *host,
>> if (reg == SDHCI_HOST_CONTROL)
>> val |= ESDHC_PROCTL_D3CD;
>>
>> - writel((readl(base) & ~mask) | val, base);
>> + mcf_write32((mcf_read32(base) & ~mask) | val, base);
>> }
>>
>> /*
>> @@ -71,7 +71,7 @@ static void esdhc_mcf_writeb_be(struct sdhci_host *host, u8 val, int reg)
>> if (reg == SDHCI_HOST_CONTROL) {
>> u32 host_ctrl = ESDHC_DEFAULT_HOST_CONTROL;
>> u8 dma_bits = (val & SDHCI_CTRL_DMA_MASK) >> 3;
>> - u8 tmp = readb(host->ioaddr + SDHCI_HOST_CONTROL + 1);
>> + u8 tmp = mcf_read8(host->ioaddr + SDHCI_HOST_CONTROL + 1);
>>
>> tmp &= ~0x03;
>> tmp |= dma_bits;
>> @@ -82,12 +82,12 @@ static void esdhc_mcf_writeb_be(struct sdhci_host *host, u8 val, int reg)
>> */
>> host_ctrl |= val;
>> host_ctrl |= (dma_bits << 8);
>> - writel(host_ctrl, host->ioaddr + SDHCI_HOST_CONTROL);
>> + mcf_write32(host_ctrl, host->ioaddr + SDHCI_HOST_CONTROL);
>>
>> return;
>> }
>>
>> - writel((readl(base) & mask) | (val << shift), base);
>> + mcf_write32((mcf_read32(base) & mask) | (val << shift), base);
>> }
>>
>> static void esdhc_mcf_writew_be(struct sdhci_host *host, u16 val, int reg)
>> @@ -110,24 +110,24 @@ static void esdhc_mcf_writew_be(struct sdhci_host *host, u16 val, int reg)
>> * As for the fsl driver,
>> * we have to set the mode in a single write here.
>> */
>> - writel(val << 16 | mcf_data->aside,
>> + mcf_write32(val << 16 | mcf_data->aside,
>> host->ioaddr + SDHCI_TRANSFER_MODE);
>> return;
>> }
>>
>> - writel((readl(base) & mask) | (val << shift), base);
>> + mcf_write32((mcf_read32(base) & mask) | (val << shift), base);
>> }
>>
>> static void esdhc_mcf_writel_be(struct sdhci_host *host, u32 val, int reg)
>> {
>> - writel(val, host->ioaddr + reg);
>> + mcf_write32(val, host->ioaddr + reg);
>> }
>>
>> static u8 esdhc_mcf_readb_be(struct sdhci_host *host, int reg)
>> {
>> if (reg == SDHCI_HOST_CONTROL) {
>> u8 __iomem *base = host->ioaddr + (reg & ~3);
>> - u16 val = readw(base + 2);
>> + u16 val = mcf_read16(base + 2);
>> u8 dma_bits = (val >> 5) & SDHCI_CTRL_DMA_MASK;
>> u8 host_ctrl = val & 0xff;
>>
>> @@ -137,7 +137,7 @@ static u8 esdhc_mcf_readb_be(struct sdhci_host *host, int reg)
>> return host_ctrl;
>> }
>>
>> - return readb(host->ioaddr + (reg ^ 0x3));
>> + return mcf_read8(host->ioaddr + (reg ^ 0x3));
>> }
>>
>> static u16 esdhc_mcf_readw_be(struct sdhci_host *host, int reg)
>> @@ -149,14 +149,14 @@ static u16 esdhc_mcf_readw_be(struct sdhci_host *host, int reg)
>> if (reg == SDHCI_HOST_VERSION)
>> reg -= 2;
>>
>> - return readw(host->ioaddr + (reg ^ 0x2));
>> + return mcf_read16(host->ioaddr + (reg ^ 0x2));
>> }
>>
>> static u32 esdhc_mcf_readl_be(struct sdhci_host *host, int reg)
>> {
>> u32 val;
>>
>> - val = readl(host->ioaddr + reg);
>> + val = mcf_read32(host->ioaddr + reg);
>>
>> /*
>> * RM (25.3.9) sd pin clock must never exceed 25Mhz.
>> @@ -245,7 +245,7 @@ static void esdhc_mcf_pltfm_set_clock(struct sdhci_host *host,
>> * fvco = fsys * outdvi1 + 1
>> * fshdc = fvco / outdiv3 + 1
>> */
>> - temp = readl(pll_dr);
>> + temp = mcf_read32(pll_dr);
>> fsys = pltfm_host->clock;
>> fvco = fsys * ((temp & 0x1f) + 1);
>> fesdhc = fvco / (((temp >> 10) & 0x1f) + 1);
>> --
>> 2.54.0
>>
>>
>
next prev parent reply other threads:[~2026-06-09 14:31 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-06 14:26 [RFC 1/4] net: fec: do not use readl()/writel() for ColdFire Greg Ungerer
2026-05-06 14:26 ` [RFC 2/4] net: smc91x: do not use readw()/writew() on ColdFire platforms Greg Ungerer
2026-05-06 14:26 ` [RFC 3/4] mmc: sdhci-esdhc-mcf: do not use readl()/writel() on ColdFire Greg Ungerer
2026-05-11 15:11 ` Ulf Hansson
2026-06-09 14:31 ` Greg Ungerer [this message]
2026-05-17 19:00 ` Angelo Dureghello
2026-05-18 7:17 ` Greg Ungerer
2026-05-06 14:26 ` [RFC 4/4] m68k: coldfire: fix non-standard readX()/writeX() functions Greg Ungerer
2026-05-06 16:14 ` Frank Li
2026-05-06 19:12 ` Arnd Bergmann
2026-05-07 12:43 ` Greg Ungerer
2026-05-07 12:59 ` Arnd Bergmann
2026-05-17 19:43 ` Angelo Dureghello
2026-05-17 20:08 ` Arnd Bergmann
2026-05-17 22:04 ` Angelo Dureghello
2026-05-17 22:41 ` Angelo Dureghello
2026-05-24 21:17 ` Angelo Dureghello
2026-05-24 21:34 ` Angelo Dureghello
2026-05-25 13:39 ` Angelo Dureghello
2026-05-31 13:42 ` Greg Ungerer
2026-06-01 14:43 ` Christoph Hellwig
2026-06-09 21:30 ` Angelo Dureghello
2026-06-10 0:39 ` Greg Ungerer
2026-05-07 13:30 ` Marc Kleine-Budde
2026-05-07 14:33 ` Greg Ungerer
2026-05-08 2:46 ` [RFC 1/4] net: fec: do not use readl()/writel() for ColdFire Wei Fang
2026-05-08 8:40 ` David Laight
2026-05-08 13:14 ` Greg Ungerer
2026-05-08 13:11 ` Greg Ungerer
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=490153c1-b6e4-4933-99e6-0f0ee96bb500@kernel.org \
--to=gerg@kernel.org \
--cc=adureghello@baylibre.com \
--cc=arnd@kernel.org \
--cc=gerg@linux-m68k.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mmc@vger.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.