iommu/riscv: Report cache coherency capability
Subsystems (3)
PATCH 1/1 iommu/riscv: Report cache coherency capability
VFIO and iommufd require IOMMU_CAP_CACHE_COHERENCY because they use IOMMU_CACHE mappings and have no userspace cache-maintenance path.
RISC-V page tables preserve physical memory attributes for IOMMU_CACHE mappings. Svpbmt marks mappings without IOMMU_CACHE as non-cacheable, but preserving physical attributes cannot make a noncoherent device path coherent.
Report the capability only for devices marked DMA coherent. This limits userspace assignment to paths that can honor cacheable mappings.
--- drivers/iommu/riscv/iommu.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/iommu/riscv/iommu.c +12 -0
@@ -16,6 +16,7 @@#include <linux/acpi_rimt.h> #include <linux/compiler.h> #include <linux/crash_dump.h> +#include <linux/dma-map-ops.h> #include <linux/init.h> #include <linux/iommu.h> #include <linux/iopoll.h>
@@ -1429,6 +1430,16 @@ static struct iommu_group *riscv_iommu_device_group(struct device *dev)return generic_device_group (dev); } +static bool riscv_iommu_capable (struct device *dev,enum iommu_cap cap) +{ +switch (cap) { +case IOMMU_CAP_CACHE_COHERENCY : +return dev_is_dma_coherent (dev); +default : +return false; + } +} +static int riscv_iommu_of_xlate (struct device *dev,const struct of_phandle_args *args) {return iommu_fwspec_add_ids (dev, args->args,1 );
@@ -1520,6 +1531,7 @@ static void riscv_iommu_get_resv_regions(struct device *dev, struct list_head *hstatic const struct iommu_ops riscv_iommu_ops = { .of_xlate = riscv_iommu_of_xlate, + .capable = riscv_iommu_capable, .identity_domain = &riscv_iommu_identity_domain, .blocked_domain = &riscv_iommu_blocking_domain, .release_domain = &riscv_iommu_blocking_domain,
Signature · 1 line
2.43.0
Quoted 2 lines · Andrew Jones
drivers/iommu/riscv/iommu.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
Applied, thanks.
This patch was applied to riscv/linux.git (fixes) by Joerg Roedel <[email protected]>:
Hello:
This patch was applied to riscv/linux.git (fixes)
by Joerg Roedel <[email protected]>:
Quoted 9 lines · On Fri, 21 Aug 2026 13:21:00 +0200 you wrote:
VFIO and iommufd require
IOMMU_CAP_CACHE_COHERENCYbecause they useIOMMU_CACHEmappings and have no userspace cache-maintenance path.RISC-V page tables preserve physical memory attributes for
IOMMU_CACHEmappings. Svpbmt marks mappings withoutIOMMU_CACHEas non-cacheable, but preserving physical attributes cannot make a noncoherent device path coherent.[...]
Here is the summary with links:
- iommu/riscv: Report cache coherency capability
https://git.kernel.org/riscv/c/3069e8f3e1e9
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html