On Wed, Jan 17, 2018 at 4:08 PM, JeffyChen <jeffy.chen at rock-chips.com> wrote: > Hi Tomasz, > > Thanks for your reply. > > On 01/17/2018 12:21 PM, Tomasz Figa wrote: >> >> Hi Jeffy, >> >> Thanks for the patch. Please see my comments inline. >> >> On Tue, Jan 16, 2018 at 10:25 PM, Jeffy Chen <jeffy.chen at rock-chips.com> >> wrote: >> >> Please add patch description. > > > ok, will do. >> >> >>> Suggested-by: Robin Murphy <robin.murphy at arm.com> >>> Signed-off-by: Jeffy Chen <jeffy.chen at rock-chips.com> >>> --- >> >> [snip] >>> >>> - for (i = 0; i < iommu->num_irq; i++) { >>> - iommu->irq[i] = platform_get_irq(pdev, i); >>> - if (iommu->irq[i] < 0) { >>> - dev_err(dev, "Failed to get IRQ, %d\n", >>> iommu->irq[i]); >>> + num_irq = of_irq_count(dev->of_node); >>> + for (i = 0; i < num_irq; i++) { >>> + irq = platform_get_irq(pdev, i); >> >> >> This lacks consistency. of_irq_count() is used for counting, but >> platform_get_irq() is used for getting. Either platform_ or of_ API >> should be used for both and I'd lean for platform_, since it's more >> general. > > hmmm, right, i was thinking of removing num_irq, and do something like: > while (nr++) { > err = platform_get_irq(dev, nr); > if (err == -EPROBE_DEFER) > break; > if (err < 0) > return err; > .... > } > > but forgot to do that.. Was there anything wrong with platform_irq_count() used by existing code? > >> >>> + if (irq < 0) { >>> + dev_err(dev, "Failed to get IRQ, %d\n", irq); >>> return -ENXIO; >>> } >>> + err = devm_request_irq(iommu->dev, irq, rk_iommu_irq, >>> + IRQF_SHARED, dev_name(dev), >>> iommu); >>> + if (err) >>> + return err; >>> } >> >> >> Looks like there is some more initialization below. Is the driver okay >> with the IRQ being potentially fired right here? (Shared IRQ handlers >> might be run at request_irq() time for testing.) >> > right, forget about that. maybe we can check iommu->domain not NULL in > rk_iommu_irq() Maybe we could just move IRQ requesting to the end of probe? Best regards, Tomasz