[PATCH v1] iommu/riscv: Skip IRQ count check when using MSI interrupts
Andrew Jones
andrew.jones at oss.qualcomm.com
Wed Feb 4 08:32:30 PST 2026
On Fri, Jan 30, 2026 at 02:54:20PM +0800, Yaxing Guo wrote:
> In RISC-V IOMMU platform devices that use MSI interrupts (indicated by the
> presence of 'msi-parent' in the device tree), there are no wired interrupt
> lines, so calling platform_get_irq_count() returns 0 or -ENXIO, causing the
> driver to fail during probe.
>
> However, MSI interrupts are allocated dynamically via the MSI subsystem and
> do not appear in the device tree 'interrupts' property. Therefore, the
> driver should not require a non-zero IRQ count when 'msi-parent' is present.
>
> This patch fixes the bug where probe fails when using MSI interrupts
> (which do not have an 'interrupts' property in the device tree)..
>
> Fixes: <d5f88acdd6ff> ("iommu/riscv: Add support for platform msi")
>
> Signed-off-by: Yaxing Guo <guoyaxing at bosc.ac.cn>
> ---
> drivers/iommu/riscv/iommu-platform.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/iommu/riscv/iommu-platform.c b/drivers/iommu/riscv/iommu-platform.c
> index 83a28c83f991..8f15b06e8499 100644
> --- a/drivers/iommu/riscv/iommu-platform.c
> +++ b/drivers/iommu/riscv/iommu-platform.c
> @@ -68,12 +68,7 @@ static int riscv_iommu_platform_probe(struct platform_device *pdev)
> iommu->caps = riscv_iommu_readq(iommu, RISCV_IOMMU_REG_CAPABILITIES);
> iommu->fctl = riscv_iommu_readl(iommu, RISCV_IOMMU_REG_FCTL);
>
> - iommu->irqs_count = platform_irq_count(pdev);
> - if (iommu->irqs_count <= 0)
> - return dev_err_probe(dev, -ENODEV,
> - "no IRQ resources provided\n");
> - if (iommu->irqs_count > RISCV_IOMMU_INTR_COUNT)
> - iommu->irqs_count = RISCV_IOMMU_INTR_COUNT;
> + iommu->irqs_count = RISCV_IOMMU_INTR_COUNT;
>
> igs = FIELD_GET(RISCV_IOMMU_CAPABILITIES_IGS, iommu->caps);
> switch (igs) {
> @@ -120,6 +115,13 @@ static int riscv_iommu_platform_probe(struct platform_device *pdev)
> fallthrough;
>
> case RISCV_IOMMU_CAPABILITIES_IGS_WSI:
> + iommu->irqs_count = platform_irq_count(pdev);
> + if (iommu->irqs_count <= 0)
> + return dev_err_probe(dev, -ENODEV,
> + "no IRQ resources provided\n");
> + if (iommu->irqs_count > RISCV_IOMMU_INTR_COUNT)
> + iommu->irqs_count = RISCV_IOMMU_INTR_COUNT;
> +
> for (vec = 0; vec < iommu->irqs_count; vec++)
> iommu->irqs[vec] = platform_get_irq(pdev, vec);
>
> --
> 2.34.1
>
Reviewed-by: Andrew Jones <andrew.jones at oss.qualcomm.com>
Thanks,
drew
More information about the linux-riscv
mailing list