public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] UIO: Let uio_pdrv_genirq support cached memory
@ 2022-05-04 14:52 Indan Zupancic
  2022-05-04 15:29 ` Greg KH
  2022-05-05 12:15 ` [PATCH v2] " Indan Zupancic
  0 siblings, 2 replies; 4+ messages in thread
From: Indan Zupancic @ 2022-05-04 14:52 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel

If 'cacheable' DT property exists, the memory mapping will be
done with UIO_MEM_IOVA instead of the default UIO_MEM_PHYS.
---
  Documentation/driver-api/uio-howto.rst | 3 ++-
  drivers/uio/uio_pdrv_genirq.c          | 8 ++++++--
  2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/Documentation/driver-api/uio-howto.rst 
b/Documentation/driver-api/uio-howto.rst
index 907ffa3b38f5..3cb48fc757d9 100644
--- a/Documentation/driver-api/uio-howto.rst
+++ b/Documentation/driver-api/uio-howto.rst
@@ -413,7 +413,8 @@ probed with the ``"of_id"`` module parameter set to 
the ``"compatible"``
  string of the node the driver is supposed to handle. By default, the
  node's name (without the unit address) is exposed as name for the
  UIO device in userspace. To set a custom name, a property named
-``"linux,uio-name"`` may be specified in the DT node.
+``"linux,uio-name"`` may be specified in the DT node. If a property
+named ``cacheable`` exists, the memory will be mapped cacheable.

  Using uio_dmem_genirq for platform devices
  ------------------------------------------
diff --git a/drivers/uio/uio_pdrv_genirq.c 
b/drivers/uio/uio_pdrv_genirq.c
index 63258b6accc4..269784ce0ba3 100644
--- a/drivers/uio/uio_pdrv_genirq.c
+++ b/drivers/uio/uio_pdrv_genirq.c
@@ -115,6 +115,7 @@ static int uio_pdrv_genirq_probe(struct 
platform_device *pdev)
  	struct uio_mem *uiomem;
  	int ret = -EINVAL;
  	int i;
+	int memtype = UIO_MEM_PHYS;

  	if (node) {
  		const char *name;
@@ -132,7 +133,10 @@ static int uio_pdrv_genirq_probe(struct 
platform_device *pdev)
  		else
  			uioinfo->name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
  						       "%pOFn", node);
-
+		if (of_get_property(node, "cacheable", NULL)) {
+			dev_info(&pdev->dev, "%s cacheable\n", uioinfo->name);
+			memtype = UIO_MEM_IOVA;
+		}
  		uioinfo->version = "devicetree";
  		/* Multiple IRQs are not supported */
  	}
@@ -204,7 +208,7 @@ static int uio_pdrv_genirq_probe(struct 
platform_device *pdev)
  			break;
  		}

-		uiomem->memtype = UIO_MEM_PHYS;
+		uiomem->memtype = memtype;
  		uiomem->addr = r->start & PAGE_MASK;
  		uiomem->offs = r->start & ~PAGE_MASK;
  		uiomem->size = (uiomem->offs + resource_size(r)
-- 

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-05-18  4:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-04 14:52 [PATCH] UIO: Let uio_pdrv_genirq support cached memory Indan Zupancic
2022-05-04 15:29 ` Greg KH
2022-05-05 12:15 ` [PATCH v2] " Indan Zupancic
2023-05-18  4:07   ` Hongren Zheng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox