[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