Skip to contentSkip to conversation

Add support for Broadcom BCM2712 IOMMU driver (Raspberry Pi 5)

PATCH Applied Daniel Drake 6 participants 17 messages Aug 25 – Sep 24

Subsystems (4)

v3 of 7 Applied Latest is v7 →

lore
Share & tools
lore

Daniel Drake

author maintainer
#0 lore raw

v3 cover Add support for Broadcom BCM2712 IOMMU driver (Raspberry Pi 5)

Hi,

This series adds a driver for the Broadcom BCM2712 IOMMU found on Raspberry Pi 5, and hooks up the display controller IOMMU for efficient management of graphics memory. This is adapted from the downstream driver from Raspberry Pi (original author Nick Hollinghurst), with main changes:
- In page mapping mode, operate the translation aperture from address 0, with no bypass window. More like a IOMMU and less like a GART.
- Implement the page table management using generic_pt
- Support 4MB hugepage mapping in top level page table
- Implement brcm,iommu-cache as standards-compliant DT property
- Drop the dma-iova-offset hack, used to work around some issue seen with dma-ranges. This will need to be investigated separately and solved properly. (It's not needed for display controller iommu support included here.)
- Misc simplifications/standardisations/cleanups

The IOMMU works strictly with 4KB pages. This means that unfortunately when the kernel is compiled with PAGE_SIZE=16KB (the Raspberry Pi 5 kernel default), 12KB is wasted in each page that is allocated for page tables. I plan to address this in followup work.

It has been tested on Raspberry Pi 5 using a 3D-accelerated graphical environment which causes plenty of IOMMU maps & unmaps.

Thanks for the review comments and discussion. Further feedback and testing welcome!

Changes in v3:
- Switch from a aperture and bypass window GART-like approach
to IOMMU-like 0-based translation
- Add 3 SW bits which seem unused (per the chipset docs); drop patch
for NO_SW_BIT handling. This reduces the claimed address space, so I had
to tweak a iommu_pt test accordingly.
- Disallow domain sharing across multiple hardware IOMMU instances
- Clear and flush local MMU TLB during domain attach
- Handle unattached domains safely during TLB sync
- Set cache platform driver data late during probe to prevent race condition
- Improved handling of cache flush timeouts
- Use format string for device name in iommu_device_sysfs_add()
- Use cleanup.h helpers for scope management
- Expand DT binding descriptions for IOMMU and IOMMUC
- Add iommus property to HVS display node in DT
- Drop iommuc back-compat with current RPi DT
- Link to v2: https://lore.kernel.org/r/[email protected]

Changes in v2:
- Use iommu_fwspec in xlate & probe_device
- Add blocked_domain support
- Simplify page size configuration between iommu driver and format
- Introduce PT_FEAT_NO_SW_BIT flag to allow formats to explicitly opt-in to
a defensive flushing algorithm when no sw bit is available
- Implement 4MB pages at Level 1; this is more efficient and means the
"allow full-table contiguous leaves in unit tests" commit has been
dropped because it is no longer needed.
- Hardcode the aperture in an unused part of the address space, removing
it from DT (it's a software-specific decision, not an attribute of the
hardware), adding more explanatory comments
- Use pt_full_va_prefix to have the PT format operate within the aperture
space, enabling use of IOMMU_PT_DOMAIN_OPS
- Add more dt-bindings explanation to brcm,iommu-cache and drop docs
around the cache property used in RPi firmware (the driver still supports
this however, for fw compat reasons)
- Correct iommu device address in bcm2712.dtsi
- Link to v1: https://lore.kernel.org/r/[email protected]

---
Daniel Drake (5):
iommu_pt: Fix test_pgsize_boundary() failure on narrow-OA formats
dt-bindings: iommu: Add Broadcom BCM2712 IOMMU iommu/generic_pt: Add Broadcom BCM2712 page table format
iommu: Add Broadcom BCM2712 IOMMU driver
arm64: dts: broadcom: bcm2712: Add GPU IOMMU and IOMMU cache nodes

 .../bindings/iommu/brcm,bcm2712-iommu.yaml         |  52 ++
 .../bindings/iommu/brcm,bcm2712-iommuc.yaml        |  38 ++
 arch/arm64/boot/dts/broadcom/bcm2712.dtsi          |  15 +
 drivers/iommu/Kconfig                              |  15 +
 drivers/iommu/Makefile                             |   1 +
 drivers/iommu/bcm2712-iommu-cache.c                |  83 +++
 drivers/iommu/bcm2712-iommu-cache.h                |   9 +
 drivers/iommu/bcm2712-iommu.c                      | 556 +++++++++++++++++++++
 drivers/iommu/generic_pt/.kunitconfig              |   1 +
 drivers/iommu/generic_pt/Kconfig                   |  10 +
 drivers/iommu/generic_pt/fmt/Makefile              |   2 +
 drivers/iommu/generic_pt/fmt/bcm2712.h             | 288 +++++++++++
 drivers/iommu/generic_pt/fmt/defs_bcm2712.h        |  18 +
 drivers/iommu/generic_pt/fmt/iommu_bcm2712.c       |   6 +
 drivers/iommu/generic_pt/kunit_iommu_pt.h          |   2 +-
 include/linux/generic_pt/common.h                  |   6 +
 include/linux/generic_pt/iommu.h                   |  12 +
 17 files changed, 1113 insertions(+), 1 deletion(-)

---
base-commit: 47096fc3d064a07c0842f748b99ebf01be120f2b
change-id: 20260712-bcm2712-iommu-submit-2e09899e65c4

Best regards,

Signature · 1 line
Daniel Drake <[email protected]>
author maintainer
#1 lore raw

PATCH v3 1/5 iommu_pt: Fix test_pgsize_boundary() failure on narrow-OA formats

test_pgsize_boundary() tests boundary mapping with a hardcoded physical address that requires 38 bits of physical address space. However, the upcoming page table format for the Broadcom BCM2712 IOMMU only supports 37 bits of output address space.

This causes a test failure as iommu_map() rejects the large address with -ERANGE.

Drop the high bits of the address (they are not relevant to the boundary calculations being tested) so that it fits into 32 bits.

---
 drivers/iommu/generic_pt/kunit_iommu_pt.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iommu/generic_pt/kunit_iommu_pt.h +1 -1
index ece1c9b8c55d..9fc71db74234 100644
@@ -403,7 +403,7 @@ static void test_pgsize_boundary(struct kunit *test)
 	    priv->smallest_pgsz != SZ_4K)
 		kunit_skip(test, "Format does not have the required range");
 
-	do_map(test, 0xfef80000, 0x208b95d000, 0xfef9ffff - 0xfef80000 + 1);
+	do_map(test, 0xfef80000, 0x8b95d000, 0xfef9ffff - 0xfef80000 + 1);
 }
 
 /* See https://lore.kernel.org/r/[email protected] */
Signature · 1 line
2.55.0
Reviewed-by on v3 1/5
#2 lore raw

Re: [PATCH v3 1/5] iommu_pt: Fix test_pgsize_boundary() failure on narrow-OA formats

Quoted 9 lines · Daniel Drake

test_pgsize_boundary() tests boundary mapping with a hardcoded physical address that requires 38 bits of physical address space. However, the upcoming page table format for the Broadcom BCM2712 IOMMU only supports 37 bits of output address space.

This causes a test failure as iommu_map() rejects the large address with -ERANGE.

[...]

Signature · 1 line
Jason
author maintainer
#3 lore raw

PATCH v3 2/5 dt-bindings: iommu: Add Broadcom BCM2712 IOMMU

In reply to Daniel Drake

Add bindings for the Broadcom BCM2712 IOMMUs and their shared TLB cache.

---
 .../bindings/iommu/brcm,bcm2712-iommu.yaml         | 52 ++++++++++++++++++++++
 .../bindings/iommu/brcm,bcm2712-iommuc.yaml        | 38 ++++++++++++++++
 2 files changed, 90 insertions(+)
Documentation/devicetree/bindings/iommu/brcm,bcm2712-iommu.yaml new file +52 -0
new file mode 100644
index 000000000000..50274f03e50c
@@ -0,0 +1,52 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iommu/brcm,bcm2712-iommu.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Broadcom BCM2712 IOMMU
+
+maintainers:
+  - Daniel Drake <[email protected]>
+
+description:
+  The BCM2712 SoC features multiple independent IOMMU instances providing
+  address translation for multimedia hardware blocks, such as the VC6 display
+  pipeline, camera receivers, and ISP. Each IOMMU has its own page tables,
+  control registers, and local TLB, and is additionally linked to a centralized
+  L2 TLB (IOMMUC).
+
+properties:
+  compatible:
+    const: brcm,bcm2712-iommu
+
+  reg:
+    maxItems: 1
+
+  '#iommu-cells':
+    const: 0
+
+  brcm,iommu-cache:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description:
+      Phandle to the shared IOMMU cache (IOMMUC). Each IOMMU instance caches
+      translated descriptors in this centralized L2 TLB cache block and must
+      trigger cache invalidation commands on it when updating or unmapping page
+      table entries.
+
+required:
+  - compatible
+  - reg
+  - '#iommu-cells'
+  - brcm,iommu-cache
+
+additionalProperties: false
+
+examples:
+  - |
+    iommu@5200 {
+        compatible = "brcm,bcm2712-iommu";
+        reg = <0x5200 0x80>;
+        brcm,iommu-cache = <&iommuc>;
+        #iommu-cells = <0>;
+    };
Documentation/devicetree/bindings/iommu/brcm,bcm2712-iommuc.yaml new file +38 -0
new file mode 100644
index 000000000000..1d892d1dd809
@@ -0,0 +1,38 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iommu/brcm,bcm2712-iommuc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Broadcom BCM2712 Shared IOMMU Cache (IOMMUC)
+
+maintainers:
+  - Daniel Drake <[email protected]>
+
+description:
+  The BCM2712 IOMMUC is a centralized Translation Lookaside Buffer (TLB) cache
+  which accelerates address translation across the SoC's IOMMU devices. If an
+  address mapping is not found in the IOMMU's local TLB cache, then this
+  IOMMUC is consulted as a L2 TLB. The SoC includes a single IOMMUC which is
+  shared between all IOMMUs, and it must be explicitly invalidated when
+  modifying or unmapping IOMMU page tables.
+
+properties:
+  compatible:
+    const: brcm,bcm2712-iommuc
+
+  reg:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    iommuc@5b00 {
+        compatible = "brcm,bcm2712-iommuc";
+        reg = <0x5b00 0x80>;
+    };
Signature · 1 line
2.55.0
maintainer
#4 lore raw

Re: [PATCH v3 2/5] dt-bindings: iommu: Add Broadcom BCM2712 IOMMU

Quoted 3 lines · Daniel Drake

Add bindings for the Broadcom BCM2712 IOMMUs and their shared TLB cache.

Only if you need to re-submit, would you mind listing Jim and myself as bindings maintainer for these two files?

Thanks!

Signature · 1 line
Florian
Reviewed-by on v3 2/5
#5 lore raw

Re: [PATCH v3 2/5] dt-bindings: iommu: Add Broadcom BCM2712 IOMMU

In reply to Daniel Drake
Quoted 7 lines · Daniel Drake

Add bindings for the Broadcom BCM2712 IOMMUs and their shared TLB cache.

---
 .../bindings/iommu/brcm,bcm2712-iommu.yaml         | 52 ++++++++++++++++++++++
 .../bindings/iommu/brcm,bcm2712-iommuc.yaml        | 38 ++++++++++++++++
 2 files changed, 90 insertions(+)

Best regards,
Krzysztof

author maintainer
#6 lore raw

PATCH v3 3/5 iommu/generic_pt: Add Broadcom BCM2712 page table format

In reply to Daniel Drake

Implement generic_pt support for the 2-level page table format used by the BCM2712 IOMMUs.

Adapted from Raspberry Pi's downstream bcm2712-iommu driver (original author Nick Hollinghurst).

---
 drivers/iommu/generic_pt/.kunitconfig        |   1 +
 drivers/iommu/generic_pt/Kconfig             |  10 +
 drivers/iommu/generic_pt/fmt/Makefile        |   2 +
 drivers/iommu/generic_pt/fmt/bcm2712.h       | 288 +++++++++++++++++++++++++++
 drivers/iommu/generic_pt/fmt/defs_bcm2712.h  |  18 ++
 drivers/iommu/generic_pt/fmt/iommu_bcm2712.c |   6 +
 include/linux/generic_pt/common.h            |   6 +
 include/linux/generic_pt/iommu.h             |  12 ++
 8 files changed, 343 insertions(+)
drivers/iommu/generic_pt/.kunitconfig +1 -0
index 0bb98fe581fe..a3da74328f12 100644
@@ -7,6 +7,7 @@ CONFIG_IOMMU_PT_AMDV1=y
 CONFIG_IOMMU_PT_VTDSS=y
 CONFIG_IOMMU_PT_RISCV64=y
 CONFIG_IOMMU_PT_X86_64=y
+CONFIG_IOMMU_PT_BCM2712=y
 CONFIG_IOMMU_PT_KUNIT_TEST=y
 
 CONFIG_IOMMUFD=y
drivers/iommu/generic_pt/Kconfig +10 -0
index f4ed1add58b7..2a81dac960ac 100644
@@ -72,6 +72,15 @@ config IOMMU_PT_X86_64
 
 	  Selected automatically by an IOMMU driver that uses this format.
 
+config IOMMU_PT_BCM2712
+	tristate "IOMMU page table for Broadcom BCM2712"
+	help
+	  iommu_domain implementation for the Broadcom BCM2712 IOMMU found on
+	  Raspberry Pi 5. It supports 4K page sizes over a 2-level page table
+	  format.
+
+	  Selected automatically by an IOMMU driver that uses this format.
+
 config IOMMU_PT_KUNIT_TEST
 	tristate "IOMMU Page Table KUnit Test" if !KUNIT_ALL_TESTS
 	depends on KUNIT
@@ -79,6 +88,7 @@ config IOMMU_PT_KUNIT_TEST
 	depends on IOMMU_PT_RISCV64 || !IOMMU_PT_RISCV64
 	depends on IOMMU_PT_X86_64 || !IOMMU_PT_X86_64
 	depends on IOMMU_PT_VTDSS || !IOMMU_PT_VTDSS
+	depends on IOMMU_PT_BCM2712 || !IOMMU_PT_BCM2712
 	default KUNIT_ALL_TESTS
 	help
 	  Enable kunit tests for GENERIC_PT and IOMMU_PT that covers all the
drivers/iommu/generic_pt/fmt/Makefile +2 -0
index ea024d582594..82ca3c36823d 100644
@@ -9,6 +9,8 @@ iommu_pt_fmt-$(CONFIG_IOMMU_PT_RISCV64) += riscv64
 
 iommu_pt_fmt-$(CONFIG_IOMMU_PT_X86_64) += x86_64
 
+iommu_pt_fmt-$(CONFIG_IOMMU_PT_BCM2712) += bcm2712
+
 IOMMU_PT_KUNIT_TEST :=
 define create_format
 obj-$(2) += iommu_$(1).o
drivers/iommu/generic_pt/fmt/bcm2712.h new file +288 -0

288 lines not on this page · raw message

drivers/iommu/generic_pt/fmt/defs_bcm2712.h new file +18 -0
new file mode 100644
index 000000000000..f1d983be1716
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __GENERIC_PT_FMT_DEFS_BCM2712_H
+#define __GENERIC_PT_FMT_DEFS_BCM2712_H
+
+#include <linux/generic_pt/common.h>
+#include <linux/types.h>
+
+typedef u32 pt_bcm2712_entry_t;
+typedef u64 pt_vaddr_t;
+typedef u64 pt_oaddr_t;
+
+struct bcm2712pt_write_attrs {
+	pt_bcm2712_entry_t descriptor_bits;
+	gfp_t gfp;
+};
+#define pt_write_attrs bcm2712pt_write_attrs
+
+#endif
drivers/iommu/generic_pt/fmt/iommu_bcm2712.c new file +6 -0
new file mode 100644
index 000000000000..43fbc3cf3adc
@@ -0,0 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
+#define PT_FMT bcm2712
+#define PT_SUPPORTED_FEATURES BIT(PT_FEAT_DMA_INCOHERENT)
+
+#include <linux/generic_pt/iommu.h>
+#include "iommu_template.h"
include/linux/generic_pt/common.h +6 -0
index 07ef1c8341a4..1b39b27f0cfa 100644
@@ -213,4 +213,10 @@ enum {
 	PT_FEAT_X86_64_AMD_ENCRYPT_TABLES = PT_FEAT_FMT_START,
 };
 
+struct pt_bcm2712 {
+	struct pt_common common;
+	u8 bigpage_lg2;
+	u8 superpage_lg2;
+};
+
 #endif
include/linux/generic_pt/iommu.h +12 -0
index dd0edd02a48a..13ebb72a67de 100644
@@ -346,6 +346,18 @@ struct pt_iommu_x86_64_hw_info {
 
 IOMMU_FORMAT(x86_64, x86_64_pt);
 
+struct pt_iommu_bcm2712_cfg {
+	struct pt_iommu_cfg common;
+	u8 bigpage_lg2;
+	u8 superpage_lg2;
+};
+
+struct pt_iommu_bcm2712_hw_info {
+	phys_addr_t pt_base;
+};
+
+IOMMU_FORMAT(bcm2712, bcm2712pt);
+
 #undef IOMMU_PROTOTYPES
 #undef IOMMU_FORMAT
 #endif
Signature · 1 line
2.55.0
#7 lore raw

Re: [PATCH v3 3/5] iommu/generic_pt: Add Broadcom BCM2712 page table format

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [High] Silent truncation of the page table physical address if allocated above the 37-bit limit. --

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Silent truncation of the page table physical address if allocated above the 37-bit limit. --

commit d58086891d7da9b612c9b0e4a88de9a9dc4f255e
Author: Daniel Drake <[email protected]>

iommu/generic_pt: Add Broadcom BCM2712 page table format

Implement generic_pt support for the 2-level page table format used by the BCM2712 IOMMUs.

Quoted 6 lines
drivers/iommu/generic_pt/fmt/bcm2712.h new file +0 -0
new file mode 100644
index 0000000000000..2c5b034441c14
@@ -0,0 +1,288 @@

[ ... ]

drivers/iommu/generic_pt/fmt/bcm2712.h line 196

Quoted 11 lines
drivers/iommu/generic_pt/fmt/bcm2712.h new file +11 -0
+static inline bool bcm2712pt_install_table(struct pt_state *pts,
+					   pt_oaddr_t table_pa,
+					   const struct pt_write_attrs *attrs)
+{
+	pt_bcm2712_entry_t entry =
+		BCM2712PT_VALID |
+		FIELD_PREP(BCM2712PT_PFN,
+			   oalog2_div(table_pa, PT_GRANULE_LG2SZ));
+
+	return pt_table_install32(pts, entry);
+}

[Severity: High]
Can table_pa exceed the 37-bit physical address limit here?

Because GFP_KERNEL is used when allocating child tables, the memory allocations are not restricted to 32-bit or 37-bit physical addresses.

While the BCM2712 hardware might currently not exceed 16GB of RAM, the generic_pt KUnit test for this format can run on any architecture. On systems with >128GB of RAM, couldn't the child table memory be allocated above the 37-bit boundary?

If so, wouldn't FIELD_PREP() silently truncate the upper bits of table_pa since BCM2712PT_PFN is only 25 bits?

Could this cause the IOMMU hardware to access truncated physical addresses, reading random memory and leading to spurious test failures, faults, or DMA memory corruption?

Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=3
Reviewed-by on v3 3/5
#8 lore raw

Re: [PATCH v3 3/5] iommu/generic_pt: Add Broadcom BCM2712 page table format

In reply to Daniel Drake
Quoted 8 lines · Daniel Drake

Implement generic_pt support for the 2-level page table format used by the BCM2712 IOMMUs.

Adapted from Raspberry Pi's downstream bcm2712-iommu driver (original author Nick Hollinghurst).

[...]

Signature · 1 line
Jason
author maintainer
#9 lore raw

PATCH v3 4/5 iommu: Add Broadcom BCM2712 IOMMU driver

In reply to Daniel Drake

This IOMMU translates memory access requests for the VC6 display pipeline and various multimedia devices in the Broadcom BCM2712 SoC used on Raspberry Pi 5.

The driver uses the generic_pt framework to manage the 2-level page tables. It also provides support for the centralized L2 TLB (IOMMUC), which is shared across the SoC's IOMMU instances and must be flushed when modifying or unmapping page table entries.

Adapted from Raspberry Pi's downstream bcm2712-iommu driver (original author Nick Hollinghurst).

---
 drivers/iommu/Kconfig               |  15 +
 drivers/iommu/Makefile              |   1 +
 drivers/iommu/bcm2712-iommu-cache.c |  83 ++++++
 drivers/iommu/bcm2712-iommu-cache.h |   9 +
 drivers/iommu/bcm2712-iommu.c       | 556 ++++++++++++++++++++++++++++++++++++
 5 files changed, 664 insertions(+)
drivers/iommu/Kconfig +15 -0
index 6e07bd69467a..f2c8788158b0 100644
@@ -386,6 +386,21 @@ config VSI_IOMMU
 	  Say Y here if you want to use this IOMMU in front of these
 	  hardware blocks.
 
+config BCM2712_IOMMU
+	bool "BCM2712 IOMMU driver"
+	depends on (ARCH_BCM && ARM64) || COMPILE_TEST
+	select IOMMU_API
+	select GENERIC_PT
+	select IOMMU_PT
+	select IOMMU_PT_BCM2712
+	help
+	  Support for IOMMU on BCM2712 SoC. This IOMMU can be used by the
+	  display controller and various multimedia devices to perform
+	  efficient memory management.
+
+	  Say Y here if you want to use this IOMMU in front of these
+	  hardware blocks.
+
 config IOMMU_DEBUG_PAGEALLOC
 	bool "Debug IOMMU mappings against page allocations"
 	depends on DEBUG_PAGEALLOC && IOMMU_API && PAGE_EXTENSION
drivers/iommu/Makefile +1 -0
index 2f05725eaab1..29a26d2a3af1 100644
@@ -37,4 +37,5 @@ obj-$(CONFIG_IOMMU_IOPF) += io-pgfault.o
 obj-$(CONFIG_SPRD_IOMMU) += sprd-iommu.o
 obj-$(CONFIG_APPLE_DART) += apple-dart.o
 obj-$(CONFIG_VSI_IOMMU) += vsi-iommu.o
+obj-$(CONFIG_BCM2712_IOMMU) += bcm2712-iommu.o bcm2712-iommu-cache.o
 obj-$(CONFIG_IOMMU_DEBUG_PAGEALLOC) += iommu-debug-pagealloc.o
drivers/iommu/bcm2712-iommu-cache.c new file +83 -0

83 lines not on this page · raw message

drivers/iommu/bcm2712-iommu-cache.h new file +9 -0
new file mode 100644
index 000000000000..d2f7851831cc
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _BCM2712_IOMMU_CACHE_H
+#define _BCM2712_IOMMU_CACHE_H
+
+struct bcm2712_iommu_cache;
+
+void bcm2712_iommu_cache_flush(struct bcm2712_iommu_cache *cache);
+
+#endif
drivers/iommu/bcm2712-iommu.c new file +556 -0

556 lines not on this page · raw message

Signature · 1 line
2.55.0
#10 lore raw

Re: [PATCH v3 4/5] iommu: Add Broadcom BCM2712 IOMMU driver

Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider: - [Critical] The driver assigns devices sharing the same IOMMU to separate groups via…

Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [Critical] The driver assigns devices sharing the same IOMMU to separate groups via generic_single_device_group, breaking isolation and corrupting hardware state.
- [Critical] The blocking domain leaves the MMU enabled but does not clear MMMU_ILLEGAL_ADR_OFFSET, causing a Use-After-Free of the previous domain's default page.
- [High] Missing TLB and cache flush in bcm2712_iommu_blocking_attach allows DMA to bypass the blocking domain.
- [High] The default error page is allocated without __GFP_ZERO, leaking uninitialized kernel memory to devices on illegal DMA reads.
--

commit b630b8b804af580183dabdb17ea88c2d7bc1b777
Author: Daniel Drake <[email protected]>

iommu: Add Broadcom BCM2712 IOMMU driver

This commit adds a new IOMMU driver for the Broadcom BCM2712 SoC used in the Raspberry Pi 5. It uses the generic_pt framework for 2-level page tables and manages a centralized L2 TLB shared across the SoC's IOMMU instances.

Quoted 2 lines
drivers/iommu/bcm2712-iommu.c new file +0 -0

[ ... ]

Quoted 8 lines
drivers/iommu/bcm2712-iommu.c new file +8 -0
+static int bcm2712_iommu_blocking_attach(struct iommu_domain *blocking_domain,
+					 struct device *dev,
+					 struct iommu_domain *old)
+{
+	struct bcm2712_iommu *mmu = dev_iommu_priv_get(dev);
+
+	guard(spinlock_irqsave)(&mmu->hw_lock);
+

drivers/iommu/bcm2712-iommu.c line 205

Quoted 10 lines
drivers/iommu/bcm2712-iommu.c new file +10 -0
+	/*
+	 * Completely block DMA by disabling both the bypass window and the
+	 * translation aperture.
+	 */
+	MMU_WR(MMMU_BYPASS_START_OFFSET, 0);
+	MMU_WR(MMMU_BYPASS_END_OFFSET, 0);
+	MMU_WR(MMMU_ADDR_CAP_OFFSET, MMMU_ADDR_CAP_ENABLE);
+	MMU_WR(MMMU_CTRL_OFFSET, MMMU_CTRL_OPERATING_FLAGS);
+
+	mmu->domain = NULL;

[Severity: High]
Does this leave stale translations in the hardware TLB indefinitely? The IOMMU transitions to a blocking domain and the hardware remains enabled with MMMU_CTRL_OPERATING_FLAGS, but there is no TLB clear or cache flush performed before returning. Since mmu->domain is set to NULL here, subsequent unmap or iotlb_sync calls on the detached paging domain will return immediately without flushing, which might allow a blocked device to perform DMA to previously mapped pages.

[Severity: Critical]
Could this also lead to a use-after-free of the default page? When attaching the blocking domain, MMMU_ILLEGAL_ADR_OFFSET is not cleared, but the MMU is left enabled. When the previous paging domain is subsequently freed in bcm2712_iommu_domain_free(), it bypasses disabling the hardware because mmu->domain is NULL. It will then free mydomain->default_page, meaning the active hardware will redirect all further illegal DMA accesses to the physical address of a freed page.

Quoted 3 lines
drivers/iommu/bcm2712-iommu.c new file +3 -0
+
+	return 0;
+}

[ ... ]

Quoted 14 lines
drivers/iommu/bcm2712-iommu.c new file +14 -0
+static int bcm2712_iommu_attach_dev(struct iommu_domain *domain,
+				    struct device *dev,
+				    struct iommu_domain *old)
+{
+	struct bcm2712_iommu *mmu = dev_iommu_priv_get(dev);
+	struct bcm2712_iommu_domain *mydomain = to_bcm2712_domain(domain);
+	struct pt_iommu_bcm2712_hw_info info;
+	u32 default_page_pfn;
+	int ret = 0;
+
+	/* all attached devices must belong to the same IOMMU instance */
+	if (mydomain->mmu != mmu)
+		return -EINVAL;
+

drivers/iommu/bcm2712-iommu.c line 251

Quoted 10 lines
drivers/iommu/bcm2712-iommu.c new file +10 -0
+	scoped_guard(spinlock_irqsave, &mmu->hw_lock) {
+		if (mmu->domain == mydomain)
+			break;
+
+		mmu->domain = mydomain;
+
+		/* Configure translation aperture */
+		MMU_WR(MMMU_ADDR_CAP_OFFSET,
+		       MMMU_ADDR_CAP_ENABLE +
+		       (domain->geometry.aperture_end >> ADDR_CAP_SHIFT));

[Severity: Critical]
Will this break mappings for other devices sharing the IOMMU? The commit states there is no stream ID tagging to differentiate between requests from different devices. However, because bcm2712_iommu_ops configures generic_single_device_group, the IOMMU core assigns a distinct group and domain to each device. When a new device is attached here, it sequentially overwrites shared registers like MMMU_ADDR_CAP_OFFSET and MMMU_PT_PA_BASE_OFFSET, silently breaking DMA traffic for previously attached devices.

Quoted 3 lines
drivers/iommu/bcm2712-iommu.c new file +3 -0
+
+		/*
+		 * When the IOMMU handles a request, it adds the

[ ... ]

Quoted 6 lines
drivers/iommu/bcm2712-iommu.c new file +6 -0
+static struct iommu_domain *bcm2712_iommu_domain_alloc(struct device *dev)
+{
+	struct bcm2712_iommu *mmu = dev_iommu_priv_get(dev);
+	struct bcm2712_iommu_domain *domain;
+	struct pt_iommu_bcm2712_cfg cfg;
+	int ret;

[ ... ]

drivers/iommu/bcm2712-iommu.c line 422

Quoted 6 lines
drivers/iommu/bcm2712-iommu.c new file +6 -0
+	ret = pt_iommu_bcm2712_init(&domain->pt, &cfg, GFP_KERNEL);
+	if (ret)
+		goto err;
+
+	/* Set up a default (error) page used to catch illegal reads/writes */
+	domain->default_page = iommu_alloc_pages_sz(GFP_KERNEL, PAGE_SIZE);

[Severity: High]
Could this leak uninitialized kernel memory to devices? This page is configured as the sink/source for illegal DMA reads in MMMU_ILLEGAL_ADR_OFFSET. Without the __GFP_ZERO flag, the allocated page might contain leftover kernel data that a device could exfiltrate by issuing an illegal DMA read.

Quoted 5 lines
drivers/iommu/bcm2712-iommu.c new file +5 -0
+	if (!domain->default_page)
+		goto err;
+
+	domain->base.ops = &bcm2712_paging_domain_ops;
+	return &domain->base;
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=4
Reviewed-by on v3 4/5
#11 lore raw

Re: [PATCH v3 4/5] iommu: Add Broadcom BCM2712 IOMMU driver

In reply to Daniel Drake
Quoted 9 lines

This IOMMU translates memory access requests for the VC6 display pipeline and various multimedia devices in the Broadcom BCM2712 SoC used on Raspberry Pi 5.

The driver uses the generic_pt framework to manage the 2-level page tables. It also provides support for the centralized L2 TLB (IOMMUC), which is shared across the SoC's IOMMU instances and must be flushed when modifying or unmapping page table entries.

Quoted 4 lines

Adapted from Raspberry Pi's downstream bcm2712-iommu driver (original author Nick Hollinghurst).

This seems OK to me.

The sashiko remarks all look wrong except maybe the bit about leaving stale entries in the IOTLB and leaving the ILEGAL_ADR_OFFSET programed

Signature · 1 line
Jason
maintainer
#12 lore raw

Re: [PATCH v3 4/5] iommu: Add Broadcom BCM2712 IOMMU driver

In reply to Daniel Drake
Quoted 84 lines · Daniel Drake

This IOMMU translates memory access requests for the VC6 display pipeline and various multimedia devices in the Broadcom BCM2712 SoC used on Raspberry Pi 5.

The driver uses the generic_pt framework to manage the 2-level page tables. It also provides support for the centralized L2 TLB (IOMMUC), which is shared across the SoC's IOMMU instances and must be flushed when modifying or unmapping page table entries.

Adapted from Raspberry Pi's downstream bcm2712-iommu driver (original author Nick Hollinghurst).

---
  drivers/iommu/Kconfig               |  15 +
  drivers/iommu/Makefile              |   1 +
  drivers/iommu/bcm2712-iommu-cache.c |  83 ++++++
  drivers/iommu/bcm2712-iommu-cache.h |   9 +
  drivers/iommu/bcm2712-iommu.c       | 556 ++++++++++++++++++++++++++++++++++++
  5 files changed, 664 insertions(+)
drivers/iommu/Kconfig +15 -0
index 6e07bd69467a..f2c8788158b0 100644
@@ -386,6 +386,21 @@ config VSI_IOMMU
  	  Say Y here if you want to use this IOMMU in front of these
  	  hardware blocks.
 
+config BCM2712_IOMMU
+	bool "BCM2712 IOMMU driver"
+	depends on (ARCH_BCM && ARM64) || COMPILE_TEST
+	select IOMMU_API
+	select GENERIC_PT
+	select IOMMU_PT
+	select IOMMU_PT_BCM2712
+	help
+	  Support for IOMMU on BCM2712 SoC. This IOMMU can be used by the
+	  display controller and various multimedia devices to perform
+	  efficient memory management.
+
+	  Say Y here if you want to use this IOMMU in front of these
+	  hardware blocks.
+
  config IOMMU_DEBUG_PAGEALLOC
  	bool "Debug IOMMU mappings against page allocations"
  	depends on DEBUG_PAGEALLOC && IOMMU_API && PAGE_EXTENSION
drivers/iommu/Makefile +1 -0
index 2f05725eaab1..29a26d2a3af1 100644
@@ -37,4 +37,5 @@ obj-$(CONFIG_IOMMU_IOPF) += io-pgfault.o
  obj-$(CONFIG_SPRD_IOMMU) += sprd-iommu.o
  obj-$(CONFIG_APPLE_DART) += apple-dart.o
  obj-$(CONFIG_VSI_IOMMU) += vsi-iommu.o
+obj-$(CONFIG_BCM2712_IOMMU) += bcm2712-iommu.o bcm2712-iommu-cache.o
  obj-$(CONFIG_IOMMU_DEBUG_PAGEALLOC) += iommu-debug-pagealloc.o
drivers/iommu/bcm2712-iommu-cache.c new file +21 -0
new file mode 100644
index 000000000000..040cfc4ccf9f
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * IOMMU driver for BCM2712 TLB cache
+ *
+ * Copyright (c) 2023 Raspberry Pi Ltd.
+ * Copyright (c) 2026 Daniel Drake
+ *
+ * The BCM2712 IOMMUC is a centralized TLB which accelerates address translation
+ * across the SoC's IOMMU devices. If an address mapping is not found in the
+ * IOMMU's local TLB cache, then this IOMMUC is consulted. The IOMMUC must be
+ * explicitly invalidated when modifying or unmapping IOMMU page tables.
+ */
+
+#include <linux/cleanup.h>
+#include <linux/err.h>
+#include <linux/of_platform.h>
+#include <linux/platform_device.h>
+#include <linux/spinlock.h>
+#include <linux/iopoll.h>
+
+#include "bcm2712-iommu-cache.h"

drivers/iommu/bcm2712-iommu-cache.c line 31

Quoted 10 lines
drivers/iommu/bcm2712-iommu-cache.c new file +10 -0
+
+struct bcm2712_iommu_cache {
+	struct device *dev;
+	spinlock_t hw_lock;
+	void __iomem *reg_base;
+};
+
+#define MMUC_CONTROL_ENABLE   1
+#define MMUC_CONTROL_FLUSH    2
+#define MMUC_CONTROL_FLUSHING 4

Those should be BIT(0), BIT(1) and BIT(2) respectively.

Quoted 192 lines
drivers/iommu/bcm2712-iommu-cache.c new file +52 -0
+
+void bcm2712_iommu_cache_flush(struct bcm2712_iommu_cache *cache)
+{
+	u32 val;
+	int ret;
+
+	scoped_guard(spinlock_irqsave, &cache->hw_lock) {
+		writel(MMUC_CONTROL_ENABLE | MMUC_CONTROL_FLUSH,
+		       cache->reg_base);
+
+		ret = readl_poll_timeout_atomic(cache->reg_base, val,
+						!(val & MMUC_CONTROL_FLUSHING),
+						0, 50);
+	}
+
+	if (ret)
+		dev_err_ratelimited(cache->dev, "cache flush timed out\n");
+}
+
+static int bcm2712_iommu_cache_probe(struct platform_device *pdev)
+{
+	struct bcm2712_iommu_cache *cache;
+
+	cache = devm_kzalloc(&pdev->dev, sizeof(*cache), GFP_KERNEL);
+	if (!cache)
+		return -ENOMEM;
+
+	cache->dev = &pdev->dev;
+	spin_lock_init(&cache->hw_lock);
+
+	cache->reg_base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(cache->reg_base))
+		return PTR_ERR(cache->reg_base);
+
+	platform_set_drvdata(pdev, cache);
+	return 0;
+}
+
+static const struct of_device_id bcm2712_iommu_cache_of_match[] = {
+	{ .compatible = "brcm,bcm2712-iommuc" },
+	{ /* sentinel */ },
+};
+
+static struct platform_driver bcm2712_iommu_cache_driver = {
+	.probe = bcm2712_iommu_cache_probe,
+	.driver = {
+		.name = "bcm2712-iommu-cache",
+		.of_match_table = bcm2712_iommu_cache_of_match,
+		.suppress_bind_attrs = true,
+	},
+};
+builtin_platform_driver(bcm2712_iommu_cache_driver);
drivers/iommu/bcm2712-iommu-cache.h new file +9 -0
new file mode 100644
index 000000000000..d2f7851831cc
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _BCM2712_IOMMU_CACHE_H
+#define _BCM2712_IOMMU_CACHE_H
+
+struct bcm2712_iommu_cache;
+
+void bcm2712_iommu_cache_flush(struct bcm2712_iommu_cache *cache);
+
+#endif
drivers/iommu/bcm2712-iommu.c new file +119 -0
new file mode 100644
index 000000000000..1bb456a83df5
@@ -0,0 +1,556 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * IOMMU driver for Broadcom BCM2712
+ *
+ * Copyright (c) 2023-2025 Raspberry Pi Ltd.
+ * Copyright (c) 2026 Daniel Drake
+ *
+ * Each BCM2712 IOMMU has multiple devices hardwired into it, whose
+ * DMA transactions all route through the IOMMU. There is no stream ID tagging
+ * or any other kind of segmentation to differentiate between requests from
+ * different devices. It is also not possible to toggle a specific device
+ * between iommu-mapped and bypass modes.
+ *
+ * The hardware supports the simultaneous configuration of a bypass window
+ * (where memory accesses operate in identity mode) and a translation aperture
+ * (supporting page mapping). While combining these two would allow for
+ * GART-like operation, this driver's paging domain implementation configures
+ * only the translation aperture (starting at IOVA 0) offering a degree of
+ * memory protection.
+ *
+ * The page table format is a two-level format handled by generic_pt/bcm2712.
+ */
+
+#include <linux/bitfield.h>
+#include <linux/cleanup.h>
+#include <linux/dma-mapping.h>
+#include <linux/err.h>
+#include <linux/iommu.h>
+#include <linux/iopoll.h>
+#include <linux/of_platform.h>
+#include <linux/platform_device.h>
+#include <linux/spinlock.h>
+#include <linux/sizes.h>
+#include <linux/generic_pt/iommu.h>
+
+#include "bcm2712-iommu-cache.h"
+#include "dma-iommu.h"
+#include "iommu-pages.h"
+
+/* BCM2712 IOMMU is organized around 4Kbyte pages */
+#define IOMMU_PAGE_SHIFT       12
+#define IOMMU_PAGE_SIZE        (1ul << IOMMU_PAGE_SHIFT)
+/* A PTE is 4 bytes */
+#define PTE_SIZE_SHIFT         2
+/* L1/L2 table sizing (IOMMU hardware pages): 1024 entries per page */
+#define PTES_PER_IOPG_SHIFT    (IOMMU_PAGE_SHIFT - PTE_SIZE_SHIFT)
+
+#define MMMU_CTRL_OFFSET                       0x00
+#define MMMU_CTRL_CAP_EXCEEDED                 BIT(27)
+#define MMMU_CTRL_CAP_EXCEEDED_ABORT_EN        BIT(26)
+#define MMMU_CTRL_CAP_EXCEEDED_INT_EN          BIT(25)
+#define MMMU_CTRL_CAP_EXCEEDED_EXCEPTION_EN    BIT(24)
+#define MMMU_CTRL_PT_INVALID                   BIT(20)
+#define MMMU_CTRL_PT_INVALID_ABORT_EN          BIT(19)
+#define MMMU_CTRL_PT_INVALID_INT_EN            BIT(18)
+#define MMMU_CTRL_PT_INVALID_EXCEPTION_EN      BIT(17)
+#define MMMU_CTRL_PT_INVALID_EN                BIT(16)
+#define MMMU_CTRL_WRITE_VIOLATION              BIT(12)
+#define MMMU_CTRL_WRITE_VIOLATION_ABORT_EN     BIT(11)
+#define MMMU_CTRL_WRITE_VIOLATION_INT_EN       BIT(10)
+#define MMMU_CTRL_WRITE_VIOLATION_EXCEPTION_EN BIT(9)
+#define MMMU_CTRL_BYPASS                       BIT(8)
+#define MMMU_CTRL_TLB_CLEARING                 BIT(7)
+#define MMMU_CTRL_STATS_CLEAR                  BIT(3)
+#define MMMU_CTRL_TLB_CLEAR                    BIT(2)
+#define MMMU_CTRL_STATS_ENABLE                 BIT(1)
+#define MMMU_CTRL_ENABLE                       BIT(0)
+
+#define MMMU_CTRL_OPERATING_FLAGS (\
+	MMMU_CTRL_CAP_EXCEEDED_ABORT_EN    | \
+	MMMU_CTRL_PT_INVALID_ABORT_EN      | \
+	MMMU_CTRL_PT_INVALID_EN            | \
+	MMMU_CTRL_WRITE_VIOLATION_ABORT_EN | \
+	MMMU_CTRL_STATS_ENABLE             | \
+	MMMU_CTRL_ENABLE)
+
+#define MMMU_PT_PA_BASE_OFFSET                 0x04
+
+#define MMMU_ADDR_CAP_OFFSET                   0x14
+#define MMMU_ADDR_CAP_ENABLE                   BIT(31)
+#define ADDR_CAP_SHIFT                         ilog2(SZ_256M)
+
+#define MMMU_SHOOT_DOWN_OFFSET                 0x18
+#define MMMU_SHOOT_DOWN_SHOOTING               BIT(31)
+#define MMMU_SHOOT_DOWN_SHOOT                  BIT(30)
+
+#define MMMU_BYPASS_START_OFFSET               0x1c
+#define MMMU_BYPASS_START_ENABLE               BIT(31)
+
+#define MMMU_BYPASS_END_OFFSET                 0x20
+#define MMMU_BYPASS_END_ENABLE                 BIT(31)
+
+#define MMMU_MISC_OFFSET                       0x24
+#define MMMU_MISC_SINGLE_TABLE                 BIT(31)
+
+#define MMMU_ILLEGAL_ADR_OFFSET                0x30
+#define MMMU_ILLEGAL_ADR_ENABLE                BIT(31)
+
+#define MMMU_DEBUG_INFO_OFFSET                 0x38
+#define MMMU_DEBUG_INFO_VERSION_MASK           0x0000000Fu
+#define MMMU_DEBUG_INFO_VA_WIDTH_MASK          0x000000F0u
+#define MMMU_DEBUG_INFO_PA_WIDTH_MASK          0x00000F00u
+#define MMMU_DEBUG_INFO_BIGPAGE_WIDTH_MASK     0x000FF000u
+#define MMMU_DEBUG_INFO_SUPERPAGE_WIDTH_MASK   0x0FF00000u
+#define MMMU_DEBUG_INFO_BYPASS_4M              BIT(28)
+#define MMMU_DEBUG_INFO_BYPASS                 BIT(29)
+
+struct bcm2712_iommu {
+	struct device *dev;
+	struct iommu_device iommu;
+	struct bcm2712_iommu_domain *domain;
+	struct bcm2712_iommu_cache *cache;
+	void __iomem *reg_base;
+	spinlock_t hw_lock;
+	size_t bigpage_size;
+	size_t superpage_size;
+};
+
+struct bcm2712_iommu_domain {

drivers/iommu/bcm2712-iommu.c line 129

Quoted 10 lines
drivers/iommu/bcm2712-iommu.c new file +10 -0
+	union {
+		struct iommu_domain base;
+		struct pt_iommu_bcm2712 pt;
+	};
+	struct bcm2712_iommu *mmu;
+	void *default_page;
+};
+
+#define MMU_WR(off, val)  writel(val, mmu->reg_base + (off))
+#define MMU_RD(off)       readl(mmu->reg_base + (off))

I would prefer using static inline wrappers here because it gets super easy to just instrument those with debug prints by adding a couple of lines, it also gives you type validation at the same time.

[snip]

drivers/iommu/bcm2712-iommu.c line 217

Quoted 8 lines
drivers/iommu/bcm2712-iommu.c new file +8 -0
+static struct iommu_domain bcm2712_blocking_domain = {
+	.type = IOMMU_DOMAIN_BLOCKED,
+	.ops = &(const struct iommu_domain_ops) {
+		.attach_dev = bcm2712_iommu_blocking_attach,
+	},
+};
+
+static int bcm2712_iommu_enable_and_clear_tlb(struct bcm2712_iommu *mmu)

Maybe add __must_hold() here to indicate when this is called?

The rest looks good to me, but I defer to Jim for the functional review.

Signature · 1 line
Florian
author maintainer
#13 lore raw

PATCH v3 5/5 arm64: dts: broadcom: bcm2712: Add GPU IOMMU and IOMMU cache nodes

In reply to Daniel Drake

Define the IOMMU and IOMMUC nodes for the Broadcom BCM2712 SoC found in the Raspberry Pi 5. Enable use of the IOMMU for the graphics/display block.

---
 arch/arm64/boot/dts/broadcom/bcm2712.dtsi | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
arch/arm64/boot/dts/broadcom/bcm2712.dtsi +15 -0
index 45aa8ec5e2b1..f40651ea29bb 100644
@@ -626,6 +626,19 @@ pcie2: pcie@1000120000 {
 			status = "disabled";
 		};
 
+		iommu4: iommu@1000005200 {
+			/* IOMMU for VC4 (HVS & MPL/TXP), Unicam, PISP-FE, MiniBVN */
+			compatible = "brcm,bcm2712-iommu";
+			reg = <0x10 0x5200 0x0 0x80>;
+			#iommu-cells = <0>;
+			brcm,iommu-cache = <&iommuc>;
+		};
+
+		iommuc: iommuc@1000005b00 {
+			compatible = "brcm,bcm2712-iommuc";
+			reg = <0x10 0x5b00 0x0 0x80>;
+		};
+
 		mip0: msi-controller@1000130000 {
 			compatible = "brcm,bcm2712-mip";
 			reg = <0x10 0x00130000 0x00 0xc0>,
@@ -667,6 +680,7 @@ v3d: gpu@1002000000 {
 
 	vc4: gpu {
 		compatible = "brcm,bcm2712-vc6";
+		iommus = <&iommu4>;
 	};
 
 	timer {
@@ -701,5 +715,6 @@ hvs: hvs@107c580000 {
 		interrupt-parent = <&disp_intr>;
 		interrupts = <2>, <9>, <16>;
 		interrupt-names = "ch0-eof", "ch1-eof", "ch2-eof";
+		iommus = <&iommu4>;
 	};
 };
Signature · 1 line
2.55.0
maintainer Applied
#14 lore raw
In reply to Daniel Drake
Quoted 6 lines · Daniel Drake

Daniel Drake (5):
iommu_pt: Fix test_pgsize_boundary() failure on narrow-OA formats
dt-bindings: iommu: Add Broadcom BCM2712 IOMMU iommu/generic_pt: Add Broadcom BCM2712 page table format
iommu: Add Broadcom BCM2712 IOMMU driver
arm64: dts: broadcom: bcm2712: Add GPU IOMMU and IOMMU cache nodes

Applied, thanks.

Please submit a follow-on patch adding a MAINTAINERS entry for the new IOMMU driver.

author maintainer
#15 lore raw
Quoted 9 lines · Joerg Roedel (AMD)
Quoted 6 lines · Daniel Drake

Daniel Drake (5):
iommu_pt: Fix test_pgsize_boundary() failure on narrow-OA formats
dt-bindings: iommu: Add Broadcom BCM2712 IOMMU iommu/generic_pt: Add Broadcom BCM2712 page table format
iommu: Add Broadcom BCM2712 IOMMU driver
arm64: dts: broadcom: bcm2712: Add GPU IOMMU and IOMMU cache nodes

Applied, thanks.

I'm assuming you didn't apply the v3 version of the series, since that's an old submission and you also just acknowledged my plan to send a v6:
https://lore.kernel.org/all/[email protected]/

I'll go ahead with v6 submission now, but let me know if you prefer to handle this another way. Daniel

maintainer
#16 lore raw
Quoted 9 lines · Daniel Drake
Quoted 8 lines · Joerg Roedel (AMD)
Quoted 6 lines · Daniel Drake

Daniel Drake (5):
       iommu_pt: Fix test_pgsize_boundary() failure on narrow-OA formats
       dt-bindings: iommu: Add Broadcom BCM2712 IOMMU iommu/generic_pt: Add Broadcom BCM2712 page table format
       iommu: Add Broadcom BCM2712 IOMMU driver
       arm64: dts: broadcom: bcm2712: Add GPU IOMMU and IOMMU cache nodes

Quoted 9 lines
Quoted 1 line

Applied, thanks.

I'm assuming you didn't apply the v3 version of the series, since that's an old submission and you also just acknowledged my plan to send a v6:
https://lore.kernel.org/all/[email protected]/

I'll go ahead with v6 submission now, but let me know if you prefer to handle this another way. Daniel

Joerg, did you also want to take the DTS patch through your tree? I would prefer to carry it via the Broadcom ARM SoC tree to minimize conflicts on my side. Thanks

Signature · 1 line
Florian