Thread (16 messages) 16 messages, 6 authors, 2022-01-03

RE: [PATCH v2 2/3] i2c: sh_mobile: Use platform_get_irq_optional() to get the interrupt

From: Prabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com>
Date: 2021-12-25 23:45:38
Also in: linux-i2c, linux-renesas-soc, lkml

Hi Andy,

Thank you for the review.
-----Original Message-----
From: Andy Shevchenko <redacted>
Sent: 25 December 2021 17:49
To: Prabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>; Ray Jui <rjui@broadcom.com>; Scott Branden
[off-list ref]; bcm-kernel-feedback-list [off-list ref]; Nicolas
Saenz Julienne [off-list ref]; Chris Brandt [off-list ref]; Wolfram Sang
[off-list ref]; linux-i2c [off-list ref]; linux-rpi-kernel <linux-
rpi-kernel@lists.infradead.org>; linux-arm Mailing List [off-list ref]; Linux-
Renesas [off-list ref]; Linux Kernel Mailing List [off-list ref];
Prabhakarprabhakar.csengg@gmail.com
Subject: Re: [PATCH v2 2/3] i2c: sh_mobile: Use platform_get_irq_optional() to get the interrupt

On Wed, Dec 22, 2021 at 2:41 PM Lad Prabhakar [off-list ref] wrote:
quoted
platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static
allocation of IRQ resources in DT core code, this causes an issue when
using hierarchical interrupt domains using "interrupts" property in
the node as this bypasses the hierarchical setup and messes up the irq
chaining.

In preparation for removal of static setup of IRQ resource from DT
core code use platform_get_irq_optional() for DT users only.
...
quoted
+       if (np) {
Same comments as per your other patches, i.e.
Why is this check here?
Because the interrupt resource has range of interrupts in one IRQ resource [0]. Let me know if there is any other alternative way to avoid such case.
quoted
+               int irq;
+
+               while ((irq = platform_get_irq_optional(dev, k)) !=
+ -ENXIO) {
Consider 0 as no IRQ.
OK.

[0] https://elixir.bootlin.com/linux/v5.16-rc6/source/arch/sh/kernel/cpu/sh4a/setup-sh7724.c#L454

Cheers,
Prabhakar
quoted
+                       if (irq < 0)
+                               return irq;
+                       ret = devm_request_irq(&dev->dev, irq, sh_mobile_i2c_isr,
+                                              0, dev_name(&dev->dev),
+ pd);
                        if (ret) {
-                               dev_err(&dev->dev, "cannot request IRQ %pa\n", &n);
+                               dev_err(&dev->dev, "cannot request IRQ
+ %d\n", irq);
                                return ret;
                        }
+                       k++;
+               };
+       } else {
+               struct resource *res;
+               resource_size_t n;
+
+               while ((res = platform_get_resource(dev, IORESOURCE_IRQ, k))) {
+                       for (n = res->start; n <= res->end; n++) {
+                               ret = devm_request_irq(&dev->dev, n, sh_mobile_i2c_isr,
+                                                      0, dev_name(&dev->dev), pd);
+                               if (ret) {
+                                       dev_err(&dev->dev, "cannot request IRQ %pa\n", &n);
+                                       return ret;
+                               }
+                       }
+                       k++;
                }
-               k++;
        }
--
With Best Regards,
Andy Shevchenko
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help