spi: rpc-if: Add write support for memory-mapped area
authorBiju Das <biju.das.jz@bp.renesas.com>
Thu, 24 Apr 2025 08:59:55 +0000 (09:59 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 8 May 2025 14:12:38 +0000 (23:12 +0900)
Add write support for memory-mapped area as xSPI interface require
it.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250424090000.136804-8-biju.das.jz@bp.renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-rpc-if.c

index e0c66a24a3cb461756ba5c145b7c476348eda790..627cffea5d5c7ea4ac78164755b9ba42341ff24e 100644 (file)
@@ -75,6 +75,19 @@ static bool rpcif_spi_mem_supports_op(struct spi_mem *mem,
        return true;
 }
 
+static ssize_t xspi_spi_mem_dirmap_write(struct spi_mem_dirmap_desc *desc,
+                                        u64 offs, size_t len, const void *buf)
+{
+       struct rpcif *rpc = spi_controller_get_devdata(desc->mem->spi->controller);
+
+       if (offs + desc->info.offset + len > U32_MAX)
+               return -EINVAL;
+
+       rpcif_spi_mem_prepare(desc->mem->spi, &desc->info.op_tmpl, &offs, &len);
+
+       return xspi_dirmap_write(rpc->dev, offs, len, buf);
+}
+
 static ssize_t rpcif_spi_mem_dirmap_read(struct spi_mem_dirmap_desc *desc,
                                         u64 offs, size_t len, void *buf)
 {
@@ -103,7 +116,7 @@ static int rpcif_spi_mem_dirmap_create(struct spi_mem_dirmap_desc *desc)
        if (!rpc->dirmap)
                return -EOPNOTSUPP;
 
-       if (desc->info.op_tmpl.data.dir != SPI_MEM_DATA_IN)
+       if (!rpc->xspi && desc->info.op_tmpl.data.dir != SPI_MEM_DATA_IN)
                return -EOPNOTSUPP;
 
        return 0;
@@ -125,6 +138,7 @@ static const struct spi_controller_mem_ops rpcif_spi_mem_ops = {
        .exec_op        = rpcif_spi_mem_exec_op,
        .dirmap_create  = rpcif_spi_mem_dirmap_create,
        .dirmap_read    = rpcif_spi_mem_dirmap_read,
+       .dirmap_write   = xspi_spi_mem_dirmap_write,
 };
 
 static int rpcif_spi_probe(struct platform_device *pdev)