Re: [PATCH v4 1/7] iommu: Add IOMMU uclass

2021-10-31 Thread Tom Rini
On Sat, Oct 23, 2021 at 04:58:01PM +0200, Mark Kettenis wrote:

> This uclass is intended to manage IOMMUs on systems where the
> IOMMUs are not in bypass mode by default.  In that case U-Boot
> cannot ignore the IOMMUs if it wants to use devices that need
> to do DMA and sit behind such an IOMMU.
> 
> This initial IOMMU uclass implementation does not implement and
> device ops and is intended for IOMMUs that have a bypass mode
> that does not require address translation.  Support for IOMMUs
> that do require address translation is planned and device ops
> will be defined when support for such IOMMUs will be added.
> 
> Signed-off-by: Mark Kettenis 
> Reviewed-by: Simon Glass 

Applied to u-boot/master, thanks!

-- 
Tom


signature.asc
Description: PGP signature


Re: [PATCH v4 1/7] iommu: Add IOMMU uclass

2021-10-28 Thread Simon Glass
On Sat, 23 Oct 2021 at 08:58, Mark Kettenis  wrote:
>
> This uclass is intended to manage IOMMUs on systems where the
> IOMMUs are not in bypass mode by default.  In that case U-Boot
> cannot ignore the IOMMUs if it wants to use devices that need
> to do DMA and sit behind such an IOMMU.
>
> This initial IOMMU uclass implementation does not implement and
> device ops and is intended for IOMMUs that have a bypass mode
> that does not require address translation.  Support for IOMMUs
> that do require address translation is planned and device ops
> will be defined when support for such IOMMUs will be added.
>
> Signed-off-by: Mark Kettenis 
> ---
>
> ChangeLog:
>
> v4: - Copy generic IOMMU DT bindings from Linux
> - Explain IOMMU KConfig option
> - Rename dev_iommu_probe()
>
>
>  doc/device-tree-bindings/iommu/iommu.txt | 206 +++
>  drivers/Kconfig  |   2 +
>  drivers/Makefile |   1 +
>  drivers/core/device.c|   8 +
>  drivers/iommu/Kconfig|  17 ++
>  drivers/iommu/Makefile   |   3 +
>  drivers/iommu/iommu-uclass.c |  45 +
>  include/dm/uclass-id.h   |   1 +
>  include/iommu.h  |  16 ++
>  9 files changed, 299 insertions(+)
>  create mode 100644 doc/device-tree-bindings/iommu/iommu.txt
>  create mode 100644 drivers/iommu/Kconfig
>  create mode 100644 drivers/iommu/Makefile
>  create mode 100644 drivers/iommu/iommu-uclass.c
>  create mode 100644 include/iommu.h

Reviewed-by: Simon Glass 


[PATCH v4 1/7] iommu: Add IOMMU uclass

2021-10-23 Thread Mark Kettenis
This uclass is intended to manage IOMMUs on systems where the
IOMMUs are not in bypass mode by default.  In that case U-Boot
cannot ignore the IOMMUs if it wants to use devices that need
to do DMA and sit behind such an IOMMU.

This initial IOMMU uclass implementation does not implement and
device ops and is intended for IOMMUs that have a bypass mode
that does not require address translation.  Support for IOMMUs
that do require address translation is planned and device ops
will be defined when support for such IOMMUs will be added.

Signed-off-by: Mark Kettenis 
---

ChangeLog:

v4: - Copy generic IOMMU DT bindings from Linux
- Explain IOMMU KConfig option
- Rename dev_iommu_probe()


 doc/device-tree-bindings/iommu/iommu.txt | 206 +++
 drivers/Kconfig  |   2 +
 drivers/Makefile |   1 +
 drivers/core/device.c|   8 +
 drivers/iommu/Kconfig|  17 ++
 drivers/iommu/Makefile   |   3 +
 drivers/iommu/iommu-uclass.c |  45 +
 include/dm/uclass-id.h   |   1 +
 include/iommu.h  |  16 ++
 9 files changed, 299 insertions(+)
 create mode 100644 doc/device-tree-bindings/iommu/iommu.txt
 create mode 100644 drivers/iommu/Kconfig
 create mode 100644 drivers/iommu/Makefile
 create mode 100644 drivers/iommu/iommu-uclass.c
 create mode 100644 include/iommu.h

diff --git a/doc/device-tree-bindings/iommu/iommu.txt 
b/doc/device-tree-bindings/iommu/iommu.txt
new file mode 100644
index 00..26ba9e530f
--- /dev/null
+++ b/doc/device-tree-bindings/iommu/iommu.txt
@@ -0,0 +1,206 @@
+This document describes the generic device tree binding for IOMMUs and their
+master(s).
+
+
+IOMMU device node:
+==
+
+An IOMMU can provide the following services:
+
+* Remap address space to allow devices to access physical memory ranges that
+  they otherwise wouldn't be capable of accessing.
+
+  Example: 32-bit DMA to 64-bit physical addresses
+
+* Implement scatter-gather at page level granularity so that the device does
+  not have to.
+
+* Provide system protection against "rogue" DMA by forcing all accesses to go
+  through the IOMMU and faulting when encountering accesses to unmapped
+  address regions.
+
+* Provide address space isolation between multiple contexts.
+
+  Example: Virtualization
+
+Device nodes compatible with this binding represent hardware with some of the
+above capabilities.
+
+IOMMUs can be single-master or multiple-master. Single-master IOMMU devices
+typically have a fixed association to the master device, whereas multiple-
+master IOMMU devices can translate accesses from more than one master.
+
+The device tree node of the IOMMU device's parent bus must contain a valid
+"dma-ranges" property that describes how the physical address space of the
+IOMMU maps to memory. An empty "dma-ranges" property means that there is a
+1:1 mapping from IOMMU to memory.
+
+Required properties:
+
+- #iommu-cells: The number of cells in an IOMMU specifier needed to encode an
+  address.
+
+The meaning of the IOMMU specifier is defined by the device tree binding of
+the specific IOMMU. Below are a few examples of typical use-cases:
+
+- #iommu-cells = <0>: Single master IOMMU devices are not configurable and
+  therefore no additional information needs to be encoded in the specifier.
+  This may also apply to multiple master IOMMU devices that do not allow the
+  association of masters to be configured. Note that an IOMMU can by design
+  be multi-master yet only expose a single master in a given configuration.
+  In such cases the number of cells will usually be 1 as in the next case.
+- #iommu-cells = <1>: Multiple master IOMMU devices may need to be configured
+  in order to enable translation for a given master. In such cases the single
+  address cell corresponds to the master device's ID. In some cases more than
+  one cell can be required to represent a single master ID.
+- #iommu-cells = <4>: Some IOMMU devices allow the DMA window for masters to
+  be configured. The first cell of the address in this may contain the master
+  device's ID for example, while the second cell could contain the start of
+  the DMA window for the given device. The length of the DMA window is given
+  by the third and fourth cells.
+
+Note that these are merely examples and real-world use-cases may use different
+definitions to represent their individual needs. Always refer to the specific
+IOMMU binding for the exact meaning of the cells that make up the specifier.
+
+
+IOMMU master node:
+==
+
+Devices that access memory through an IOMMU are called masters. A device can
+have multiple master interfaces (to one or more IOMMU devices).
+
+Required properties:
+
+- iommus: A list of phandle and IOMMU specifier pairs that describe the IOMMU
+  master interfaces of the device. One entry in the