[PATCH v3 00/13] media: iris: Migrate iommus to iris sub nodes
From: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Date: 2026-09-09 14:57:31
Also in:
linux-arm-msm, linux-iommu, linux-media, lkml
The VPU issues DMA through several SMMU streams, and the hardware does
not restricts specific streams with specific addressable range. The
non-pixel stream is restricted to use 0-600MB of IOVA space, while the
pixel stream can address the full range:
+-----------------------------------------------------------+
| non-pixel stream addressable range (600 MB - 3.5 GB) |
| 0x25800000 - 0xe0000000 |
+-----------------------------------------------------------+
| pixel stream addressable range (0 - 3.5 GB) |
| 0x00000000 - 0xe0000000 |
+-----------------------------------------------------------+
A single "iommus" property on the video-codec node puts every stream in
one IOMMU domain sharing one IOVA allocator, so nothing keeps a
non-pixel buffer inside the low 600 MB. Once an allocation lands below
that boundary the hardware faults, which shows up as unhandled SMMU page
faults and spontaneous reboots:
https://gitlab.freedesktop.org/drm/msm/-/work_items/100
Fix was made in iris/venus driver to reserve the 0-600MB range and
thereby prevent iova allocation from that range.
https://lore.kernel.org/all/20260818-reserve_iova_in_driver-v2-0-5005a1154408@oss.qualcomm.com (local)
Given that the address range restriction is for specific VPU stream, it
should be ideally moved to that stream. To achieve the same, a subset
of streams is now represented as subnodes, so that each can be
associated with its respective addressable range.
In the past, this limitation was addressed with an iommu-map approach,
with the iris driver dynamically creating the devices. That approach
was later concluded to be a hack to avoid having subnodes, and was NAKed
by the iommu maintainers. It was discussed in detail here:
https://lore.kernel.org/all/c7b956a9-d3e8-4e18-b780-5d08f5cd2ca1@kernel.org/ (local)
The maintainers agreed to proceed with the subnode approach to address
the VPU hardware limitation.
Reserving the iova address using "iommu-addresses" requires it to be
placed in the reserved-memory node. But when "iommu-addresses" is the
*only* property being described and there is no backing "reg" (i.e. no
actual reserved system memory), it does not really belong to
reserved-memory node. A device IOVA range is very much specific to the
way device own address space is mapped, and not a description of memory
shared across the system. Given this, "iommu-addresses" backed by a
"reg", should be placed inside reserved-memory, otherwise, it should be
defined within the device node. More info on this discussion can be
found at
https://lore.kernel.org/all/662f7093-fb0a-4564-9ca0-98e03e68ba9a@kernel.org (local)
"iommu-addresses" property expects a phandle, which does not make sense
when the same is defined within individual device node itself.
Introduced a new property, "iommu-ranges", for the IOVA ranges required
for DMA memory mapping to that device node and when there is no physical
memory reservation.
"iommu-ranges" is defined with the schema PR
https://github.com/devicetree-org/dt-schema/pull/207
This series migrate vpu3x platforms to subnodes. All new SOC having
iris3x or onwards(4x 5x..) should follow the subnode approach.
For VPU2x and AR50Lite SOCs, which are being migrated to iris, the
subnode support would be added once the SOC is migrated away from venus
to iris. There is no plan to upgrade venus enabled SOC to subnodes.
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
---
Changes in v3:
- Drop iommu-addresses from reserved memory (Rob)
- Defined a new property iommu-ranges (Krzysztof, Dmitry)
- Moved the vpu specific context bank handling to common(Dmitry)
- Dropped fixes tag.
- Link to v2: https://lore.kernel.org/r/20260731-vpu_iommu_iova_handling-v2-0-da52b5228dbd@oss.qualcomm.com (local)
Changes in v2:
- Fixed sashiko issues.
- Moved subnodes into common schema (Dmitry)
- Kept the firmware name as the one defained earlier (Dmitry)
- Added dma-ranges to specify parent-child address translation
- Moved context bank hooks to VPU ops (Dmitry)
- Updated commit description.
- Link to v1: https://lore.kernel.org/r/20260709-vpu_iommu_iova_handling-v1-0-72bb62cb2dfd@oss.qualcomm.com (local)
---
Vikash Garodia (13):
dt-bindings: media: qcom,venus: Add context bank subnodes to common schema
dt-bindings: media: qcom,sm8550-iris: Add context bank subnodes
dt-bindings: media: qcom,sm8750-iris: Add context bank subnodes
iommu: of_iommu: Add support for "iommu-ranges" on a device node
media: iris: Add non-pixel and pixel context bank devices
media: iris: Route buffers to the matching context bank device
media: iris: Skip DMA mask setup when the core device has no IOMMU
arm64: dts: qcom: hamoa: Add Iris context bank subnodes
arm64: dts: qcom: sm8550: Add Iris context bank subnodes
arm64: dts: qcom: lemans: Add Iris context bank subnodes
arm64: dts: qcom: monaco: Add Iris context bank subnodes
arm64: dts: qcom: sm8650: Add Iris context bank subnodes
arm64: dts: qcom: sm8750: Add Iris context bank subnodes
.../bindings/media/qcom,sc7180-venus.yaml | 15 --
.../bindings/media/qcom,sm8550-iris.yaml | 118 +++++++------
.../bindings/media/qcom,sm8750-iris.yaml | 187 +++++++++++----------
.../bindings/media/qcom,venus-common.yaml | 97 +++++++++++
arch/arm64/boot/dts/qcom/hamoa.dtsi | 15 +-
arch/arm64/boot/dts/qcom/lemans.dtsi | 15 +-
arch/arm64/boot/dts/qcom/monaco.dtsi | 15 +-
arch/arm64/boot/dts/qcom/sm8550.dtsi | 15 +-
arch/arm64/boot/dts/qcom/sm8650.dtsi | 16 +-
arch/arm64/boot/dts/qcom/sm8750.dtsi | 15 +-
drivers/iommu/of_iommu.c | 107 +++++++++++-
drivers/media/platform/qcom/iris/iris_buffer.c | 8 +-
drivers/media/platform/qcom/iris/iris_core.h | 4 +
drivers/media/platform/qcom/iris/iris_hfi_queue.c | 16 +-
drivers/media/platform/qcom/iris/iris_probe.c | 79 ++++++++-
drivers/media/platform/qcom/iris/iris_resources.c | 41 +++++
drivers/media/platform/qcom/iris/iris_resources.h | 1 +
drivers/media/platform/qcom/iris/iris_vidc.c | 4 +-
18 files changed, 579 insertions(+), 189 deletions(-)
---
base-commit: a9d7ced84989ec05be09b4b8428759ef60450a0f
change-id: 20260701-vpu_iommu_iova_handling-556e969a1f1c
Best regards,
--
Vikash Garodia [off-list ref]