* [PATCH v2 0/2] Enable 64-bit polling mode for R-Car Gen3 and RZ/G2+ family
@ 2025-07-27 16:07 Biju
2025-07-27 16:07 ` [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode Biju
2025-07-27 16:07 ` [PATCH v2 2/2] mmc: renesas_sdhi: Enable 64-bit " Biju
0 siblings, 2 replies; 8+ messages in thread
From: Biju @ 2025-07-27 16:07 UTC (permalink / raw)
To: Wolfram Sang, Ulf Hansson
Cc: Biju Das, linux-mmc, linux-renesas-soc, linux-kernel,
Geert Uytterhoeven, Prabhakar Mahadev Lad, Biju Das
From: Biju Das <biju.das.jz@bp.renesas.com>
As per the RZ/{G2L,G3E} HW manual SD_BUF0 can be accessed by 16/32/64
bits. Most of the data transfer in SD/SDIO/eMMC mode is more than 8 bytes.
During testing it is found that, if the DMA buffer is not aligned to 128
bit it fallback to PIO mode. In such cases, 64-bit access is much more
efficient than the current 16-bit.
RFT->v2:
* Collected tags
* Fixed the build error reported by the bot.
Biju Das (2):
mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode
mmc: renesas_sdhi: Enable 64-bit polling mode
drivers/mmc/host/renesas_sdhi_internal_dmac.c | 3 +-
drivers/mmc/host/tmio_mmc.h | 14 ++++++++
drivers/mmc/host/tmio_mmc_core.c | 33 +++++++++++++++++++
include/linux/platform_data/tmio.h | 3 ++
4 files changed, 52 insertions(+), 1 deletion(-)
--
2.43.0
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode 2025-07-27 16:07 [PATCH v2 0/2] Enable 64-bit polling mode for R-Car Gen3 and RZ/G2+ family Biju @ 2025-07-27 16:07 ` Biju 2025-07-30 6:27 ` kernel test robot 2025-07-27 16:07 ` [PATCH v2 2/2] mmc: renesas_sdhi: Enable 64-bit " Biju 1 sibling, 1 reply; 8+ messages in thread From: Biju @ 2025-07-27 16:07 UTC (permalink / raw) To: Wolfram Sang, Ulf Hansson Cc: Biju Das, linux-mmc, linux-renesas-soc, linux-kernel, Geert Uytterhoeven, Prabhakar Mahadev Lad, Biju Das From: Biju Das <biju.das.jz@bp.renesas.com> As per the RZ/{G2L,G3E} HW manual SD_BUF0 can be accessed by 16/32/64 bits. Most of the data transfer in SD/SDIO/eMMC mode is more than 8 bytes. During testing it is found that, if the DMA buffer is not aligned to 128 bit it fallback to PIO mode. In such cases, 64-bit access is much more efficient than the current 16-bit. Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> --- RFT->v2: * Collected tags * Fixed the buid error reported by the bot by guarding the code with CONFIG_64BIT. --- drivers/mmc/host/tmio_mmc.h | 14 +++++++++++++ drivers/mmc/host/tmio_mmc_core.c | 33 ++++++++++++++++++++++++++++++ include/linux/platform_data/tmio.h | 3 +++ 3 files changed, 50 insertions(+) diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h index d730b7633ae1..8cf9be9833b2 100644 --- a/drivers/mmc/host/tmio_mmc.h +++ b/drivers/mmc/host/tmio_mmc.h @@ -242,6 +242,20 @@ static inline void sd_ctrl_read32_rep(struct tmio_mmc_host *host, int addr, ioread32_rep(host->ctl + (addr << host->bus_shift), buf, count); } +#ifdef CONFIG_64BIT +static inline void sd_ctrl_read64_rep(struct tmio_mmc_host *host, int addr, + u64 *buf, int count) +{ + ioread64_rep(host->ctl + (addr << host->bus_shift), buf, count); +} + +static inline void sd_ctrl_write64_rep(struct tmio_mmc_host *host, int addr, + const u64 *buf, int count) +{ + iowrite64_rep(host->ctl + (addr << host->bus_shift), buf, count); +} +#endif + static inline void sd_ctrl_write16(struct tmio_mmc_host *host, int addr, u16 val) { diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c index 21c2f9095bac..775e0d9353d5 100644 --- a/drivers/mmc/host/tmio_mmc_core.c +++ b/drivers/mmc/host/tmio_mmc_core.c @@ -349,6 +349,39 @@ static void tmio_mmc_transfer_data(struct tmio_mmc_host *host, /* * Transfer the data */ +#ifdef CONFIG_64BIT + if (host->pdata->flags & TMIO_MMC_64BIT_DATA_PORT) { + u64 *buf64 = (u64 *)buf; + u64 data = 0; + + if (count >= 8) { + if (is_read) + sd_ctrl_read64_rep(host, CTL_SD_DATA_PORT, + buf64, count >> 3); + else + sd_ctrl_write64_rep(host, CTL_SD_DATA_PORT, + buf64, count >> 3); + } + + /* if count was multiple of 8 */ + if (!(count & 0x7)) + return; + + buf64 += count >> 3; + count %= 8; + + if (is_read) { + sd_ctrl_read64_rep(host, CTL_SD_DATA_PORT, &data, 1); + memcpy(buf64, &data, count); + } else { + memcpy(&data, buf64, count); + sd_ctrl_write64_rep(host, CTL_SD_DATA_PORT, &data, 1); + } + + return; + } +#endif + if (host->pdata->flags & TMIO_MMC_32BIT_DATA_PORT) { u32 data = 0; u32 *buf32 = (u32 *)buf; diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_data/tmio.h index b060124ba1ae..426291713b83 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -47,6 +47,9 @@ /* Some controllers have a CBSY bit */ #define TMIO_MMC_HAVE_CBSY BIT(11) +/* Some controllers have a 64-bit wide data port register */ +#define TMIO_MMC_64BIT_DATA_PORT BIT(12) + struct tmio_mmc_data { void *chan_priv_tx; void *chan_priv_rx; -- 2.43.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode 2025-07-27 16:07 ` [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode Biju @ 2025-07-30 6:27 ` kernel test robot 2025-07-30 9:17 ` Wolfram Sang 0 siblings, 1 reply; 8+ messages in thread From: kernel test robot @ 2025-07-30 6:27 UTC (permalink / raw) To: Biju, Wolfram Sang, Ulf Hansson Cc: llvm, oe-kbuild-all, Biju Das, linux-mmc, linux-renesas-soc, linux-kernel, Geert Uytterhoeven, Prabhakar Mahadev Lad Hi Biju, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on ulf-hansson-mmc-mirror/next v6.16 next-20250729] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Biju/mmc-tmio-Add-64-bit-read-write-support-for-SD_BUF0-in-polling-mode/20250728-001022 base: linus/master patch link: https://lore.kernel.org/r/20250727160731.106312-2-biju.das.jz%40bp.renesas.com patch subject: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode config: powerpc64-randconfig-001-20250730 (https://download.01.org/0day-ci/archive/20250730/202507301421.AmWhOZBk-lkp@intel.com/config) compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 78c460bbe8f1fc17e2e66b37edf419ccecbfecba) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250730/202507301421.AmWhOZBk-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202507301421.AmWhOZBk-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from drivers/mmc/host/uniphier-sd.c:21: >> drivers/mmc/host/tmio_mmc.h:249:2: error: call to undeclared function 'ioread64_rep'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 249 | ioread64_rep(host->ctl + (addr << host->bus_shift), buf, count); | ^ >> drivers/mmc/host/tmio_mmc.h:255:2: error: call to undeclared function 'iowrite64_rep'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 255 | iowrite64_rep(host->ctl + (addr << host->bus_shift), buf, count); | ^ 2 errors generated. vim +/ioread64_rep +249 drivers/mmc/host/tmio_mmc.h 244 245 #ifdef CONFIG_64BIT 246 static inline void sd_ctrl_read64_rep(struct tmio_mmc_host *host, int addr, 247 u64 *buf, int count) 248 { > 249 ioread64_rep(host->ctl + (addr << host->bus_shift), buf, count); 250 } 251 252 static inline void sd_ctrl_write64_rep(struct tmio_mmc_host *host, int addr, 253 const u64 *buf, int count) 254 { > 255 iowrite64_rep(host->ctl + (addr << host->bus_shift), buf, count); 256 } 257 #endif 258 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode 2025-07-30 6:27 ` kernel test robot @ 2025-07-30 9:17 ` Wolfram Sang 2025-07-30 13:56 ` Geert Uytterhoeven 0 siblings, 1 reply; 8+ messages in thread From: Wolfram Sang @ 2025-07-30 9:17 UTC (permalink / raw) To: kernel test robot Cc: Biju, Ulf Hansson, llvm, oe-kbuild-all, Biju Das, linux-mmc, linux-renesas-soc, linux-kernel, Geert Uytterhoeven, Prabhakar Mahadev Lad [-- Attachment #1: Type: text/plain, Size: 715 bytes --] > In file included from drivers/mmc/host/uniphier-sd.c:21: > >> drivers/mmc/host/tmio_mmc.h:249:2: error: call to undeclared function 'ioread64_rep'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > 249 | ioread64_rep(host->ctl + (addr << host->bus_shift), buf, count); > | ^ > >> drivers/mmc/host/tmio_mmc.h:255:2: error: call to undeclared function 'iowrite64_rep'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > 255 | iowrite64_rep(host->ctl + (addr << host->bus_shift), buf, count); > | ^ Sigh, then the guard seems to be ARM64 after all :( [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode 2025-07-30 9:17 ` Wolfram Sang @ 2025-07-30 13:56 ` Geert Uytterhoeven 2025-07-30 14:12 ` Biju Das 0 siblings, 1 reply; 8+ messages in thread From: Geert Uytterhoeven @ 2025-07-30 13:56 UTC (permalink / raw) To: Wolfram Sang Cc: kernel test robot, Biju, Ulf Hansson, llvm, oe-kbuild-all, Biju Das, linux-mmc, linux-renesas-soc, linux-kernel, Geert Uytterhoeven, Prabhakar Mahadev Lad Hi Wolfram, On Wed, 30 Jul 2025 at 11:17, Wolfram Sang <wsa-dev@sang-engineering.com> wrote: > > In file included from drivers/mmc/host/uniphier-sd.c:21: > > >> drivers/mmc/host/tmio_mmc.h:249:2: error: call to undeclared function 'ioread64_rep'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > > 249 | ioread64_rep(host->ctl + (addr << host->bus_shift), buf, count); > > | ^ > > >> drivers/mmc/host/tmio_mmc.h:255:2: error: call to undeclared function 'iowrite64_rep'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > > 255 | iowrite64_rep(host->ctl + (addr << host->bus_shift), buf, count); > > | ^ > > Sigh, then the guard seems to be ARM64 after all :( ioread64_rep() is defined in include/asm-generic/io.h, and powerpc does include that. Perhaps drivers/mmc/host/tmio_mmc.h should just include <linux/io.h>? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode 2025-07-30 13:56 ` Geert Uytterhoeven @ 2025-07-30 14:12 ` Biju Das 2025-07-30 14:52 ` Biju Das 0 siblings, 1 reply; 8+ messages in thread From: Biju Das @ 2025-07-30 14:12 UTC (permalink / raw) To: geert, Wolfram Sang Cc: kernel test robot, biju.das.au, Ulf Hansson, llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev, linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven, Prabhakar Mahadev Lad Hi Geert/Wolfram, > -----Original Message----- > From: Geert Uytterhoeven <geert@linux-m68k.org> > Sent: 30 July 2025 14:57 > Subject: Re: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode > > Hi Wolfram, > > On Wed, 30 Jul 2025 at 11:17, Wolfram Sang <wsa-dev@sang-engineering.com> wrote: > > > In file included from drivers/mmc/host/uniphier-sd.c:21: > > > >> drivers/mmc/host/tmio_mmc.h:249:2: error: call to undeclared > > > >> function 'ioread64_rep'; ISO C99 and later do not support > > > >> implicit function declarations [-Wimplicit-function-declaration] > > > 249 | ioread64_rep(host->ctl + (addr << host->bus_shift), buf, count); > > > | ^ > > > >> drivers/mmc/host/tmio_mmc.h:255:2: error: call to undeclared > > > >> function 'iowrite64_rep'; ISO C99 and later do not support > > > >> implicit function declarations [-Wimplicit-function-declaration] > > > 255 | iowrite64_rep(host->ctl + (addr << host->bus_shift), buf, count); > > > | ^ > > > > Sigh, then the guard seems to be ARM64 after all :( > > ioread64_rep() is defined in include/asm-generic/io.h, and powerpc does include that. > > Perhaps drivers/mmc/host/tmio_mmc.h should just include <linux/io.h>? This does not fix the issue. biju@biju:~/lkp-tests$ COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang-21 ~/lkp-tests/kbuild/make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash drivers/mmc/ Compiler will be installed in /home/biju/0day PATH=/home/biju/0day/llvm-21.1.0-rc2-x86_64/bin:/home/biju/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y LLVM=1 CROSS_COMPILE=powerpc64-linux- --jobs=64 KCFLAGS= -Wno-error=return-type -Wreturn-type -funsigned-char -Wundef W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash drivers/mmc/ make[1]: Entering directory '/home/biju/lkp-tests/build_dir' GEN Makefile CALL ../scripts/checksyscalls.sh CC [M] drivers/mmc/host/tmio_mmc_core.o CC [M] drivers/mmc/host/uniphier-sd.o In file included from ../drivers/mmc/host/uniphier-sd.c:21: ../drivers/mmc/host/tmio_mmc.h:250:2: error: call to undeclared function 'ioread64_rep'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 250 | ioread64_rep(host->ctl + (addr << host->bus_shift), buf, count); Cheers, Biju ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode 2025-07-30 14:12 ` Biju Das @ 2025-07-30 14:52 ` Biju Das 0 siblings, 0 replies; 8+ messages in thread From: Biju Das @ 2025-07-30 14:52 UTC (permalink / raw) To: geert, Wolfram Sang Cc: kernel test robot, biju.das.au, Ulf Hansson, llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev, linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven, Prabhakar Mahadev Lad Hi Geert, > -----Original Message----- > From: Biju Das > Sent: 30 July 2025 15:12 > Subject: RE: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode > > Hi Geert/Wolfram, > > > -----Original Message----- > > From: Geert Uytterhoeven <geert@linux-m68k.org> > > Sent: 30 July 2025 14:57 > > Subject: Re: [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support > > for SD_BUF0 in polling mode > > > > Hi Wolfram, > > > > On Wed, 30 Jul 2025 at 11:17, Wolfram Sang <wsa-dev@sang-engineering.com> wrote: > > > > In file included from drivers/mmc/host/uniphier-sd.c:21: > > > > >> drivers/mmc/host/tmio_mmc.h:249:2: error: call to undeclared > > > > >> function 'ioread64_rep'; ISO C99 and later do not support > > > > >> implicit function declarations > > > > >> [-Wimplicit-function-declaration] > > > > 249 | ioread64_rep(host->ctl + (addr << host->bus_shift), buf, count); > > > > | ^ > > > > >> drivers/mmc/host/tmio_mmc.h:255:2: error: call to undeclared > > > > >> function 'iowrite64_rep'; ISO C99 and later do not support > > > > >> implicit function declarations > > > > >> [-Wimplicit-function-declaration] > > > > 255 | iowrite64_rep(host->ctl + (addr << host->bus_shift), buf, count); > > > > | ^ > > > > > > Sigh, then the guard seems to be ARM64 after all :( > > > > ioread64_rep() is defined in include/asm-generic/io.h, and powerpc does include that. > > > > Perhaps drivers/mmc/host/tmio_mmc.h should just include <linux/io.h>? > > This does not fix the issue. Reason is CONFIG_GENERIC_IOMAP=y So, ioread64_rep() is excluded. Cheers, Biju ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/2] mmc: renesas_sdhi: Enable 64-bit polling mode 2025-07-27 16:07 [PATCH v2 0/2] Enable 64-bit polling mode for R-Car Gen3 and RZ/G2+ family Biju 2025-07-27 16:07 ` [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode Biju @ 2025-07-27 16:07 ` Biju 1 sibling, 0 replies; 8+ messages in thread From: Biju @ 2025-07-27 16:07 UTC (permalink / raw) To: Wolfram Sang, Ulf Hansson Cc: Biju Das, linux-mmc, linux-renesas-soc, linux-kernel, Geert Uytterhoeven, Prabhakar Mahadev Lad, Biju Das From: Biju Das <biju.das.jz@bp.renesas.com> Enable 64-bit polling mode for R-Car gen3 and RZ/G2L SoCs. Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> --- RFT->v2: * Collected tags --- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/host/renesas_sdhi_internal_dmac.c index 4b389e92399e..9e3ed0bcddd6 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -107,7 +107,8 @@ static const struct renesas_sdhi_of_data of_data_rza2 = { static const struct renesas_sdhi_of_data of_data_rcar_gen3 = { .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_CLK_ACTUAL | - TMIO_MMC_HAVE_CBSY | TMIO_MMC_MIN_RCAR2, + TMIO_MMC_HAVE_CBSY | TMIO_MMC_MIN_RCAR2 | + TMIO_MMC_64BIT_DATA_PORT, .capabilities = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_CMD23 | MMC_CAP_WAIT_WHILE_BUSY, .capabilities2 = MMC_CAP2_NO_WRITE_PROTECT | MMC_CAP2_MERGE_CAPABLE, -- 2.43.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-07-30 14:52 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-07-27 16:07 [PATCH v2 0/2] Enable 64-bit polling mode for R-Car Gen3 and RZ/G2+ family Biju 2025-07-27 16:07 ` [PATCH v2 1/2] mmc: tmio: Add 64-bit read/write support for SD_BUF0 in polling mode Biju 2025-07-30 6:27 ` kernel test robot 2025-07-30 9:17 ` Wolfram Sang 2025-07-30 13:56 ` Geert Uytterhoeven 2025-07-30 14:12 ` Biju Das 2025-07-30 14:52 ` Biju Das 2025-07-27 16:07 ` [PATCH v2 2/2] mmc: renesas_sdhi: Enable 64-bit " Biju
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox