iommu/rockchip: Don't use platform_get_irq to implicitly count irqs
Till now the Rockchip iommu driver walked through the irq list via
platform_get_irq() until it encountered an ENXIO error. With the
recent change to add a central error message, this always results
in such an error for each iommu on probe and shutdown.
To not confuse people, switch to platform_count_irqs() to get the
actual number of interrupts before walking through them.
Fixes: 7723f4c5ec
("driver core: platform: Add an error message to platform_get_irq*()")
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
a52e197d95
commit
f9258156c7
|
@ -100,6 +100,7 @@ struct rk_iommu {
|
|||
struct device *dev;
|
||||
void __iomem **bases;
|
||||
int num_mmu;
|
||||
int num_irq;
|
||||
struct clk_bulk_data *clocks;
|
||||
int num_clocks;
|
||||
bool reset_disabled;
|
||||
|
@ -1136,7 +1137,7 @@ static int rk_iommu_probe(struct platform_device *pdev)
|
|||
struct rk_iommu *iommu;
|
||||
struct resource *res;
|
||||
int num_res = pdev->num_resources;
|
||||
int err, i, irq;
|
||||
int err, i;
|
||||
|
||||
iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL);
|
||||
if (!iommu)
|
||||
|
@ -1163,6 +1164,10 @@ static int rk_iommu_probe(struct platform_device *pdev)
|
|||
if (iommu->num_mmu == 0)
|
||||
return PTR_ERR(iommu->bases[0]);
|
||||
|
||||
iommu->num_irq = platform_irq_count(pdev);
|
||||
if (iommu->num_irq < 0)
|
||||
return iommu->num_irq;
|
||||
|
||||
iommu->reset_disabled = device_property_read_bool(dev,
|
||||
"rockchip,disable-mmu-reset");
|
||||
|
||||
|
@ -1219,8 +1224,9 @@ static int rk_iommu_probe(struct platform_device *pdev)
|
|||
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
i = 0;
|
||||
while ((irq = platform_get_irq(pdev, i++)) != -ENXIO) {
|
||||
for (i = 0; i < iommu->num_irq; i++) {
|
||||
int irq = platform_get_irq(pdev, i);
|
||||
|
||||
if (irq < 0)
|
||||
return irq;
|
||||
|
||||
|
@ -1245,10 +1251,13 @@ err_unprepare_clocks:
|
|||
static void rk_iommu_shutdown(struct platform_device *pdev)
|
||||
{
|
||||
struct rk_iommu *iommu = platform_get_drvdata(pdev);
|
||||
int i = 0, irq;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < iommu->num_irq; i++) {
|
||||
int irq = platform_get_irq(pdev, i);
|
||||
|
||||
while ((irq = platform_get_irq(pdev, i++)) != -ENXIO)
|
||||
devm_free_irq(iommu->dev, irq, iommu);
|
||||
}
|
||||
|
||||
pm_runtime_force_suspend(&pdev->dev);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue