* [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend
@ 2026-07-27 10:34 Prabhakar
2026-07-27 10:34 ` [PATCH v2 1/6] memory: renesas-rpc-if: Mark XSPI_CDD1BUF0 as volatile Prabhakar
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Prabhakar @ 2026-07-27 10:34 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-kernel, linux-renesas-soc, Prabhakar, Biju Das,
Fabrizio Castro, Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Hi all,
This patch series optimizes the Renesas RPC-IF driver by significantly
reducing software overhead in both the direct memory-mapped (dirmap) and
manual transfer paths, maximizing transaction throughput, and introducing
runtime PM autosuspend to prevent aggressive power gating during
consecutive flash operations.
v1->v2:
- Dropped `spi: spi-rpc-if: Implement 200ms runtime PM autosuspend delay`
patch as this has been merged via SPI subsystem.
---
Performance Results:
These changes were benchmarked using flash_speed on the RZ/T2H EVK with
xSPI0/1 interfaces operating in 1S-1S-1S mode for write operations:
xSPI0(MX25LW51245G):
Without With Fixes
Write Speed: 806 KiB/s 942 KiB/s
Read Speed: 5333 KiB/s 5361 KiB/s
xSPI1(AT25SF128A):
Write Speed: 467 KiB/s 501 KiB/s
Read Speed: 17964 KiB/s 18285 KiB/s
Note:
- Patches have been rebased on top of next-20260726.
Cheers,
Prabhakar
Lad Prabhakar (6):
memory: renesas-rpc-if: Mark XSPI_CDD1BUF0 as volatile
memory: renesas-rpc-if: Move static bridge configurations out of
dirmap hot paths
memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in write path
memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in read path
memory: renesas-rpc-if: Consolidate command setup register programming
memory: renesas-rpc-if: Use runtime PM autosuspend after transfers
drivers/memory/renesas-rpc-if.c | 87 ++++++++++++++-------------------
1 file changed, 36 insertions(+), 51 deletions(-)
--
2.54.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/6] memory: renesas-rpc-if: Mark XSPI_CDD1BUF0 as volatile
2026-07-27 10:34 [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Prabhakar
@ 2026-07-27 10:34 ` Prabhakar
2026-07-27 10:34 ` [PATCH v2 2/6] memory: renesas-rpc-if: Move static bridge configurations out of dirmap hot paths Prabhakar
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Prabhakar @ 2026-07-27 10:34 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-kernel, linux-renesas-soc, Prabhakar, Biju Das,
Fabrizio Castro, Lad Prabhakar, stable
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Add XSPI_CDD1BUF0 to the xSPI regmap volatile register table.
XSPI_CDD1BUF0 is a data buffer register used during manual transfers and,
like XSPI_CDD0BUF0, its contents are transient and should not be cached
by regmap. Mark it as volatile so reads always access the hardware
register.
Fixes: 687cac9559d8 ("memory: renesas-rpc-if: Add RZ/G3E xSPI support")
Cc: stable@vger.kernel.org
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/memory/renesas-rpc-if.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/memory/renesas-rpc-if.c b/drivers/memory/renesas-rpc-if.c
index 3755956ae906..104c28532c20 100644
--- a/drivers/memory/renesas-rpc-if.c
+++ b/drivers/memory/renesas-rpc-if.c
@@ -34,6 +34,7 @@ static const struct regmap_access_table rpcif_volatile_table = {
static const struct regmap_range xspi_volatile_ranges[] = {
regmap_reg_range(XSPI_CDD0BUF0, XSPI_CDD0BUF0),
+ regmap_reg_range(XSPI_CDD1BUF0, XSPI_CDD1BUF0),
};
static const struct regmap_access_table xspi_volatile_table = {
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/6] memory: renesas-rpc-if: Move static bridge configurations out of dirmap hot paths
2026-07-27 10:34 [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Prabhakar
2026-07-27 10:34 ` [PATCH v2 1/6] memory: renesas-rpc-if: Mark XSPI_CDD1BUF0 as volatile Prabhakar
@ 2026-07-27 10:34 ` Prabhakar
2026-07-27 10:34 ` [PATCH v2 3/6] memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in write path Prabhakar
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Prabhakar @ 2026-07-27 10:34 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-kernel, linux-renesas-soc, Prabhakar, Biju Das,
Fabrizio Castro, Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Move the initialization of the xSPI Bridge Control Register 0
(XSPI_BMCTL0) and Bridge Configuration Register (XSPI_BMCFG) from the
dirmap read and write implementations into the hardware initialization
function.
The bridge configuration values remain unchanged across sequential dirmap
transfers. Keeping these regmap_update_bits() calls inside the hot paths
(xspi_dirmap_read_impl and xspi_dirmap_write) introduces significant
software overhead and redundant register locking cycles.
Statically setting CS0ACC to 0x3 during xspi_hw_init_impl() permanently
enables the memory area for both read and write operations.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/memory/renesas-rpc-if.c | 26 ++++++++------------------
1 file changed, 8 insertions(+), 18 deletions(-)
diff --git a/drivers/memory/renesas-rpc-if.c b/drivers/memory/renesas-rpc-if.c
index 104c28532c20..50294e5d2bf5 100644
--- a/drivers/memory/renesas-rpc-if.c
+++ b/drivers/memory/renesas-rpc-if.c
@@ -312,6 +312,14 @@ static int xspi_hw_init_impl(struct rpcif_priv *xspi, bool hyperflash)
regmap_update_bits(xspi->regmap, XSPI_INTE, XSPI_INTE_CMDCMPE,
XSPI_INTE_CMDCMPE);
+ regmap_update_bits(xspi->regmap, XSPI_BMCTL0,
+ XSPI_BMCTL0_CS0ACC(0xff), XSPI_BMCTL0_CS0ACC(0x03));
+
+ regmap_update_bits(xspi->regmap, XSPI_BMCFG,
+ XSPI_BMCFG_WRMD | XSPI_BMCFG_MWRCOMB |
+ XSPI_BMCFG_MWRSIZE(0xff) | XSPI_BMCFG_PREEN,
+ 0 | XSPI_BMCFG_MWRCOMB | XSPI_BMCFG_MWRSIZE(0x0f) |
+ XSPI_BMCFG_PREEN);
return 0;
}
@@ -869,15 +877,6 @@ static size_t xspi_dirmap_read_impl(struct rpcif_priv *xspi, u64 offs,
XSPI_CMCFG1_RDCMD_UPPER_BYTE(xspi->command) |
XSPI_CMCFG1_RDLATE(xspi->dummy));
- regmap_update_bits(xspi->regmap, XSPI_BMCTL0, XSPI_BMCTL0_CS0ACC(0xff),
- XSPI_BMCTL0_CS0ACC(0x01));
-
- regmap_update_bits(xspi->regmap, XSPI_BMCFG,
- XSPI_BMCFG_WRMD | XSPI_BMCFG_MWRCOMB |
- XSPI_BMCFG_MWRSIZE(0xff) | XSPI_BMCFG_PREEN,
- 0 | XSPI_BMCFG_MWRCOMB | XSPI_BMCFG_MWRSIZE(0x0f) |
- XSPI_BMCFG_PREEN);
-
regmap_update_bits(xspi->regmap, XSPI_LIOCFGCS0, XSPI_LIOCFG_PRTMD(0x3ff),
XSPI_LIOCFG_PRTMD(xspi->proto));
@@ -945,15 +944,6 @@ ssize_t xspi_dirmap_write(struct device *dev, u64 offs, size_t len, const void *
XSPI_CMCFG2_WRCMD_UPPER(xspi->command) |
XSPI_CMCFG2_WRLATE(xspi->dummy));
- regmap_update_bits(xspi->regmap, XSPI_BMCTL0,
- XSPI_BMCTL0_CS0ACC(0xff), XSPI_BMCTL0_CS0ACC(0x03));
-
- regmap_update_bits(xspi->regmap, XSPI_BMCFG,
- XSPI_BMCFG_WRMD | XSPI_BMCFG_MWRCOMB |
- XSPI_BMCFG_MWRSIZE(0xff) | XSPI_BMCFG_PREEN,
- 0 | XSPI_BMCFG_MWRCOMB | XSPI_BMCFG_MWRSIZE(0x0f) |
- XSPI_BMCFG_PREEN);
-
regmap_update_bits(xspi->regmap, XSPI_LIOCFGCS0, XSPI_LIOCFG_PRTMD(0x3ff),
XSPI_LIOCFG_PRTMD(xspi->proto));
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 3/6] memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in write path
2026-07-27 10:34 [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Prabhakar
2026-07-27 10:34 ` [PATCH v2 1/6] memory: renesas-rpc-if: Mark XSPI_CDD1BUF0 as volatile Prabhakar
2026-07-27 10:34 ` [PATCH v2 2/6] memory: renesas-rpc-if: Move static bridge configurations out of dirmap hot paths Prabhakar
@ 2026-07-27 10:34 ` Prabhakar
2026-07-27 10:34 ` [PATCH v2 4/6] memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in read path Prabhakar
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Prabhakar @ 2026-07-27 10:34 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-kernel, linux-renesas-soc, Prabhakar, Biju Das,
Fabrizio Castro, Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Program the XSPI_CDTBUF0 TRTYPE, DATASIZE and ADDSIZE fields with a
single regmap_update_bits() call in the RPCIF_DATA_OUT transfer path.
The existing code updates these fields through three separate
read-modify-write operations even though all values are known before the
transfer request is issued. Combine the updates into a single register
access to reduce overhead and simplify the configuration sequence.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/memory/renesas-rpc-if.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/memory/renesas-rpc-if.c b/drivers/memory/renesas-rpc-if.c
index 50294e5d2bf5..e406afc42616 100644
--- a/drivers/memory/renesas-rpc-if.c
+++ b/drivers/memory/renesas-rpc-if.c
@@ -660,17 +660,12 @@ static int xspi_manual_xfer_impl(struct rpcif_priv *xspi)
u32 bytes_left = xspi->xferlen - pos;
u32 nbytes, data[2], *p = data;
- regmap_update_bits(xspi->regmap, XSPI_CDTBUF0,
- XSPI_CDTBUF_TRTYPE, XSPI_CDTBUF_TRTYPE);
-
nbytes = bytes_left >= max ? max : bytes_left;
regmap_update_bits(xspi->regmap, XSPI_CDTBUF0,
- XSPI_CDTBUF_DATASIZE(0xf),
- XSPI_CDTBUF_DATASIZE(nbytes));
-
- regmap_update_bits(xspi->regmap, XSPI_CDTBUF0,
+ XSPI_CDTBUF_TRTYPE | XSPI_CDTBUF_DATASIZE(0xf) |
XSPI_CDTBUF_ADDSIZE(0x7),
+ XSPI_CDTBUF_TRTYPE | XSPI_CDTBUF_DATASIZE(nbytes) |
XSPI_CDTBUF_ADDSIZE(xspi->addr_nbytes));
memcpy(data, xspi->buffer + pos, nbytes);
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 4/6] memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in read path
2026-07-27 10:34 [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Prabhakar
` (2 preceding siblings ...)
2026-07-27 10:34 ` [PATCH v2 3/6] memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in write path Prabhakar
@ 2026-07-27 10:34 ` Prabhakar
2026-07-27 10:34 ` [PATCH v2 5/6] memory: renesas-rpc-if: Consolidate command setup register programming Prabhakar
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Prabhakar @ 2026-07-27 10:34 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-kernel, linux-renesas-soc, Prabhakar, Biju Das,
Fabrizio Castro, Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Program the XSPI_CDTBUF0 fields used by the RPCIF_DATA_IN transfer path
through a single regmap_update_bits() call.
The existing code updates TRTYPE, DATASIZE, ADDSIZE and LATE using
multiple read-modify-write operations on the same register, even though
all field values are known before the transfer starts.
Build the register mask and value first, then perform a single register
update. This reduces register accesses and simplifies the transfer setup
without changing functionality.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/memory/renesas-rpc-if.c | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/drivers/memory/renesas-rpc-if.c b/drivers/memory/renesas-rpc-if.c
index e406afc42616..c768e9c18556 100644
--- a/drivers/memory/renesas-rpc-if.c
+++ b/drivers/memory/renesas-rpc-if.c
@@ -697,30 +697,33 @@ static int xspi_manual_xfer_impl(struct rpcif_priv *xspi)
while (pos < xspi->xferlen) {
u32 bytes_left = xspi->xferlen - pos;
u32 nbytes, data[2], *p = data;
-
- regmap_update_bits(xspi->regmap, XSPI_CDTBUF0,
- XSPI_CDTBUF_TRTYPE,
- ~(u32)XSPI_CDTBUF_TRTYPE);
+ u32 cdtbuf0_mask, cdtbuf0_val;
/* nbytes can be up to 8 bytes */
nbytes = bytes_left >= max ? max : bytes_left;
- regmap_update_bits(xspi->regmap, XSPI_CDTBUF0,
- XSPI_CDTBUF_DATASIZE(0xf),
- XSPI_CDTBUF_DATASIZE(nbytes));
+ /* clear TRTYPE */
+ cdtbuf0_mask = XSPI_CDTBUF_TRTYPE;
+ cdtbuf0_val = 0;
- regmap_update_bits(xspi->regmap, XSPI_CDTBUF0,
- XSPI_CDTBUF_ADDSIZE(0x7),
- XSPI_CDTBUF_ADDSIZE(xspi->addr_nbytes));
+ /* program DATASIZE */
+ cdtbuf0_mask |= XSPI_CDTBUF_DATASIZE(0xf);
+ cdtbuf0_val |= XSPI_CDTBUF_DATASIZE(nbytes);
+
+ /* program ADDSIZE */
+ cdtbuf0_mask |= XSPI_CDTBUF_ADDSIZE(0x7);
+ cdtbuf0_val |= XSPI_CDTBUF_ADDSIZE(xspi->addr_nbytes);
+
+ /* program LATE */
+ cdtbuf0_mask |= XSPI_CDTBUF_LATE(0x1f);
+ cdtbuf0_val |= XSPI_CDTBUF_LATE(xspi->dummy);
+
+ regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, cdtbuf0_mask, cdtbuf0_val);
if (xspi->addr_nbytes)
regmap_write(xspi->regmap, XSPI_CDABUF0,
xspi->smadr + pos);
- regmap_update_bits(xspi->regmap, XSPI_CDTBUF0,
- XSPI_CDTBUF_LATE(0x1f),
- XSPI_CDTBUF_LATE(xspi->dummy));
-
regmap_update_bits(xspi->regmap, XSPI_CDCTL0,
XSPI_CDCTL0_TRREQ, XSPI_CDCTL0_TRREQ);
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 5/6] memory: renesas-rpc-if: Consolidate command setup register programming
2026-07-27 10:34 [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Prabhakar
` (3 preceding siblings ...)
2026-07-27 10:34 ` [PATCH v2 4/6] memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in read path Prabhakar
@ 2026-07-27 10:34 ` Prabhakar
2026-07-27 10:34 ` [PATCH v2 6/6] memory: renesas-rpc-if: Use runtime PM autosuspend after transfers Prabhakar
2026-07-27 15:51 ` [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Wolfram Sang
6 siblings, 0 replies; 9+ messages in thread
From: Prabhakar @ 2026-07-27 10:34 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-kernel, linux-renesas-soc, Prabhakar, Biju Das,
Fabrizio Castro, Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Simplify the command setup sequence in xspi_manual_xfer_impl() by
combining updates to XSPI_CDCTL0 and XSPI_CDTBUF0.
Clear the TRNUM and TRREQ fields in XSPI_CDCTL0 with a single
regmap_update_bits() call. Likewise, program the command, command size
and address size fields in XSPI_CDTBUF0 with a single regmap_write(),
eliminating the subsequent ADDSIZE update. The intermediate write of
zero to XSPI_CDABUF0 is also redundant, as the register is immediately
programmed with the transfer address.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/memory/renesas-rpc-if.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/drivers/memory/renesas-rpc-if.c b/drivers/memory/renesas-rpc-if.c
index c768e9c18556..d98991266887 100644
--- a/drivers/memory/renesas-rpc-if.c
+++ b/drivers/memory/renesas-rpc-if.c
@@ -636,18 +636,14 @@ static int xspi_manual_xfer_impl(struct rpcif_priv *xspi)
u32 pos = 0, max = 8;
int ret = 0;
- regmap_update_bits(xspi->regmap, XSPI_CDCTL0, XSPI_CDCTL0_TRNUM(0x3),
+ /* Clear transaction number and request */
+ regmap_update_bits(xspi->regmap, XSPI_CDCTL0,
+ XSPI_CDCTL0_TRNUM(0x3) | XSPI_CDCTL0_TRREQ,
XSPI_CDCTL0_TRNUM(0));
- regmap_update_bits(xspi->regmap, XSPI_CDCTL0, XSPI_CDCTL0_TRREQ, 0);
-
regmap_write(xspi->regmap, XSPI_CDTBUF0,
- XSPI_CDTBUF_CMDSIZE(0x1) | XSPI_CDTBUF_CMD_FIELD(xspi->command));
-
- regmap_write(xspi->regmap, XSPI_CDABUF0, 0);
-
- regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, XSPI_CDTBUF_ADDSIZE(0x7),
- XSPI_CDTBUF_ADDSIZE(xspi->addr_nbytes));
+ XSPI_CDTBUF_CMDSIZE(0x1) | XSPI_CDTBUF_CMD_FIELD(xspi->command) |
+ XSPI_CDTBUF_ADDSIZE(xspi->addr_nbytes));
regmap_write(xspi->regmap, XSPI_CDABUF0, xspi->smadr);
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 6/6] memory: renesas-rpc-if: Use runtime PM autosuspend after transfers
2026-07-27 10:34 [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Prabhakar
` (4 preceding siblings ...)
2026-07-27 10:34 ` [PATCH v2 5/6] memory: renesas-rpc-if: Consolidate command setup register programming Prabhakar
@ 2026-07-27 10:34 ` Prabhakar
2026-07-27 15:51 ` [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Wolfram Sang
6 siblings, 0 replies; 9+ messages in thread
From: Prabhakar @ 2026-07-27 10:34 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-kernel, linux-renesas-soc, Prabhakar, Biju Das,
Fabrizio Castro, Lad Prabhakar
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Replace pm_runtime_put() with pm_runtime_put_autosuspend() after manual
transfers and direct memory-mapped read/write operations.
Flash page programming may be performed as a sequence of closely spaced
transfer operations. Calling pm_runtime_put() after each operation allows
the runtime PM core to suspend the controller between successive
transfers, introducing unnecessary suspend/resume cycles and potentially
interrupting multi-step transfer sequences.
Use pm_runtime_put_autosuspend() instead so the controller remains
active while transfers continue, allowing it to suspend only after an
idle period.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
Note corresponding pm_runtime_set_autosuspend_delay()/pm_runtime_use_autosuspend()
calls are already present in SPI driver.
---
drivers/memory/renesas-rpc-if.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/memory/renesas-rpc-if.c b/drivers/memory/renesas-rpc-if.c
index d98991266887..ec901a5a99aa 100644
--- a/drivers/memory/renesas-rpc-if.c
+++ b/drivers/memory/renesas-rpc-if.c
@@ -776,7 +776,7 @@ int rpcif_manual_xfer(struct device *dev)
ret = rpc->info->impl->manual_xfer(rpc);
- pm_runtime_put(dev);
+ pm_runtime_put_autosuspend(dev);
return ret;
}
@@ -891,7 +891,7 @@ ssize_t rpcif_dirmap_read(struct device *dev, u64 offs, size_t len, void *buf)
read = rpc->info->impl->dirmap_read(rpc, offs, len, buf);
- pm_runtime_put(dev);
+ pm_runtime_put_autosuspend(dev);
return read;
}
@@ -948,7 +948,7 @@ ssize_t xspi_dirmap_write(struct device *dev, u64 offs, size_t len, const void *
regmap_update_bits(xspi->regmap, XSPI_BMCTL1,
XSPI_BMCTL1_MWRPUSH, XSPI_BMCTL1_MWRPUSH);
- pm_runtime_put(dev);
+ pm_runtime_put_autosuspend(dev);
return writebytes;
}
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend
2026-07-27 10:34 [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Prabhakar
` (5 preceding siblings ...)
2026-07-27 10:34 ` [PATCH v2 6/6] memory: renesas-rpc-if: Use runtime PM autosuspend after transfers Prabhakar
@ 2026-07-27 15:51 ` Wolfram Sang
2026-07-27 17:58 ` Lad, Prabhakar
6 siblings, 1 reply; 9+ messages in thread
From: Wolfram Sang @ 2026-07-27 15:51 UTC (permalink / raw)
To: Prabhakar
Cc: Krzysztof Kozlowski, linux-kernel, linux-renesas-soc, Prabhakar,
Biju Das, Fabrizio Castro, Lad Prabhakar
[-- Attachment #1: Type: text/plain, Size: 679 bytes --]
Hi Prabhakar,
> This patch series optimizes the Renesas RPC-IF driver by significantly
> reducing software overhead in both the direct memory-mapped (dirmap) and
> manual transfer paths, maximizing transaction throughput, and introducing
> runtime PM autosuspend to prevent aggressive power gating during
> consecutive flash operations.
Sounds great. I want to test it on R-Car V4H SparrowHawk.
> These changes were benchmarked using flash_speed on the RZ/T2H EVK with
> xSPI0/1 interfaces operating in 1S-1S-1S mode for write operations:
'flash_speed' from mtd-utils, I assume. Did you use other options than
'-d' for testing writes?
Thanks and happy hacking,
Wolfram
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend
2026-07-27 15:51 ` [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Wolfram Sang
@ 2026-07-27 17:58 ` Lad, Prabhakar
0 siblings, 0 replies; 9+ messages in thread
From: Lad, Prabhakar @ 2026-07-27 17:58 UTC (permalink / raw)
To: Wolfram Sang
Cc: Krzysztof Kozlowski, linux-kernel, linux-renesas-soc, Prabhakar,
Biju Das, Fabrizio Castro, Lad Prabhakar
Hi Wolfram,
On Mon, Jul 27, 2026 at 4:51 PM Wolfram Sang
<wsa+renesas@sang-engineering.com> wrote:
>
> Hi Prabhakar,
>
> > This patch series optimizes the Renesas RPC-IF driver by significantly
> > reducing software overhead in both the direct memory-mapped (dirmap) and
> > manual transfer paths, maximizing transaction throughput, and introducing
> > runtime PM autosuspend to prevent aggressive power gating during
> > consecutive flash operations.
>
> Sounds great. I want to test it on R-Car V4H SparrowHawk.
>
Thank you.
> > These changes were benchmarked using flash_speed on the RZ/T2H EVK with
> > xSPI0/1 interfaces operating in 1S-1S-1S mode for write operations:
>
> 'flash_speed' from mtd-utils, I assume. Did you use other options than
> '-d' for testing writes?
>
Apart from the -d option I used `-c 256` option too.
Cheers,
Prabhakar
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-07-27 17:59 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-27 10:34 [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Prabhakar
2026-07-27 10:34 ` [PATCH v2 1/6] memory: renesas-rpc-if: Mark XSPI_CDD1BUF0 as volatile Prabhakar
2026-07-27 10:34 ` [PATCH v2 2/6] memory: renesas-rpc-if: Move static bridge configurations out of dirmap hot paths Prabhakar
2026-07-27 10:34 ` [PATCH v2 3/6] memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in write path Prabhakar
2026-07-27 10:34 ` [PATCH v2 4/6] memory: renesas-rpc-if: Consolidate XSPI_CDTBUF0 updates in read path Prabhakar
2026-07-27 10:34 ` [PATCH v2 5/6] memory: renesas-rpc-if: Consolidate command setup register programming Prabhakar
2026-07-27 10:34 ` [PATCH v2 6/6] memory: renesas-rpc-if: Use runtime PM autosuspend after transfers Prabhakar
2026-07-27 15:51 ` [PATCH v2 0/6] memory: renesas-rpc-if: Optimize transfer overhead and implement runtime PM autosuspend Wolfram Sang
2026-07-27 17:58 ` Lad, Prabhakar
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.