diff mbox series

wifi: brcmfmac: of: Support interrupts-extended

Message ID 20240621225558.280462-1-knaerzche@gmail.com (mailing list archive)
State Changes Requested
Delegated to: Kalle Valo
Headers show
Series wifi: brcmfmac: of: Support interrupts-extended | expand

Commit Message

Alex Bee June 21, 2024, 10:55 p.m. UTC
This "new" version of defining external interrupts is around for a very
long time now and supported and preferred by irq_of_parse_and_map
respectively of_irq_parse_one.

Support it in brcmfmac as well by checking if either "interrupts" or
"interrupts-extended" property exists as indication if irq_of_parse_and_map
should be called.

Signed-off-by: Alex Bee <knaerzche@gmail.com>
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Arend van Spriel June 22, 2024, 1:38 p.m. UTC | #1
On June 22, 2024 12:56:02 AM Alex Bee <knaerzche@gmail.com> wrote:

> This "new" version of defining external interrupts is around for a very
> long time now and supported and preferred by irq_of_parse_and_map
> respectively of_irq_parse_one.
>
> Support it in brcmfmac as well by checking if either "interrupts" or
> "interrupts-extended" property exists as indication if irq_of_parse_and_map
> should be called.

All very interesting, but why should we add code for something that is not 
specified in the bindings documentation?

NAK (for now). Feel free to update the bindings document.

Regards,
Arend
Arend van Spriel June 22, 2024, 1:49 p.m. UTC | #2
On June 22, 2024 3:38:32 PM Arend Van Spriel <arend.vanspriel@broadcom.com> 
wrote:

> On June 22, 2024 12:56:02 AM Alex Bee <knaerzche@gmail.com> wrote:
>
>> This "new" version of defining external interrupts is around for a very
>> long time now and supported and preferred by irq_of_parse_and_map
>> respectively of_irq_parse_one.
>>
>> Support it in brcmfmac as well by checking if either "interrupts" or
>> "interrupts-extended" property exists as indication if irq_of_parse_and_map
>> should be called.
>
> All very interesting, but why should we add code for something that is not
> specified in the bindings documentation?
>
> NAK (for now). Feel free to update the bindings document.

So looked up the interrupts-extended definition:

The "interrupts-extended" property is a special form; useful when a node needs
to reference multiple interrupt parents or a different interrupt parent than
the inherited one. Each entry in this property contains both the parent phandle
and the interrupt specifier.

Given that brcmfmac device will only have one interrupt item defined there 
is no need to use it. If someone can give a good argument to support it 
please chime in.

Regards,
Arend
Alex Bee June 22, 2024, 2:07 p.m. UTC | #3
Am 22.06.24 um 15:49 schrieb Arend Van Spriel:
> On June 22, 2024 3:38:32 PM Arend Van Spriel 
> <arend.vanspriel@broadcom.com> wrote:
>
>> On June 22, 2024 12:56:02 AM Alex Bee <knaerzche@gmail.com> wrote:
>>
>>> This "new" version of defining external interrupts is around for a very
>>> long time now and supported and preferred by irq_of_parse_and_map
>>> respectively of_irq_parse_one.
>>>
>>> Support it in brcmfmac as well by checking if either "interrupts" or
>>> "interrupts-extended" property exists as indication if 
>>> irq_of_parse_and_map
>>> should be called.
>>
>> All very interesting, but why should we add code for something that 
>> is not
>> specified in the bindings documentation?
>>
>> NAK (for now). Feel free to update the bindings document.
>
Sure, if you insist on it, I can update the bindings document. So far not
many (no) users did that, as it is clearly specified as an alternative in
devicetree/bindings/interrupt-controller/interrupts.txt (sure, it's not yet
converted to yaml yet).
> So looked up the interrupts-extended definition:
>
> The "interrupts-extended" property is a special form; useful when a 
> node needs
> to reference multiple interrupt parents or a different interrupt 
> parent than
> the inherited one. Each entry in this property contains both the 
> parent phandle
> and the interrupt specifier.
>
They point in this particular case is not how many interrupts exsist, but
"... or a different interrupt parent than
the inherited ..." which is almost always the case for brcmfmac, as it
usually specifies a gpio controller as interrupt parent. So:

...
         interrupt-parent = <&gpio0>;
         interrupts = <RK_PA0 IRQ_TYPE_LEVEL_HIGH>;
...

gets to (a single line):
...
     interrupts-extended:  = <&gpio0 RK_PA0 IRQ_TYPE_LEVEL_HIGH>;
...

Which is a much nicer form, imho.
And by the way for instance
arch/arm/boot/dts/qcom/qcom-apq8026-lg-lenok.dts already uses it that way
and the interrupt will currently not picked up (at least not by this
driver).

Alex

> Given that brcmfmac device will only have one interrupt item defined 
> there is no need to use it. If someone can give a good argument to 
> support it please chime in.
>
> Regards,
> Arend
>
>
>
Alex Bee June 22, 2024, 2:40 p.m. UTC | #4
Am 22.06.24 um 16:07 schrieb Alex Bee:
>
> Am 22.06.24 um 15:49 schrieb Arend Van Spriel:
>> On June 22, 2024 3:38:32 PM Arend Van Spriel 
>> <arend.vanspriel@broadcom.com> wrote:
>>
>>> On June 22, 2024 12:56:02 AM Alex Bee <knaerzche@gmail.com> wrote:
>>>
>>>> This "new" version of defining external interrupts is around for a 
>>>> very
>>>> long time now and supported and preferred by irq_of_parse_and_map
>>>> respectively of_irq_parse_one.
>>>>
>>>> Support it in brcmfmac as well by checking if either "interrupts" or
>>>> "interrupts-extended" property exists as indication if 
>>>> irq_of_parse_and_map
>>>> should be called.
>>>
>>> All very interesting, but why should we add code for something that 
>>> is not
>>> specified in the bindings documentation?
>>>
>>> NAK (for now). Feel free to update the bindings document.
>>
> Sure, if you insist on it, I can update the bindings document. So far not
> many (no) users did that, as it is clearly specified as an alternative in
> devicetree/bindings/interrupt-controller/interrupts.txt (sure, it's 
> not yet
> converted to yaml yet).
If you are worried about schema validation: Some magic will accept both
"interrupts" and "interrupts-extended" if only "interrupts" is specified in
the binding. Not sure that happens.

>> So looked up the interrupts-extended definition:
>>
>> The "interrupts-extended" property is a special form; useful when a 
>> node needs
>> to reference multiple interrupt parents or a different interrupt 
>> parent than
>> the inherited one. Each entry in this property contains both the 
>> parent phandle
>> and the interrupt specifier.
>>
> They point in this particular case is not how many interrupts exsist, but
> "... or a different interrupt parent than
> the inherited ..." which is almost always the case for brcmfmac, as it
> usually specifies a gpio controller as interrupt parent. So:
>
Maybe I should resend with a verbosity-increased commit message?
> ...
>         interrupt-parent = <&gpio0>;
>         interrupts = <RK_PA0 IRQ_TYPE_LEVEL_HIGH>;
> ...
>
> gets to (a single line):
> ...
>     interrupts-extended:  = <&gpio0 RK_PA0 IRQ_TYPE_LEVEL_HIGH>;
> ...
>
> Which is a much nicer form, imho.
> And by the way for instance
> arch/arm/boot/dts/qcom/qcom-apq8026-lg-lenok.dts already uses it that way
> and the interrupt will currently not picked up (at least not by this
> driver).
>
> Alex
>
>> Given that brcmfmac device will only have one interrupt item defined 
>> there is no need to use it. If someone can give a good argument to 
>> support it please chime in.
>>
>> Regards,
>> Arend
>>
>>
>>
Arend van Spriel June 22, 2024, 5:46 p.m. UTC | #5
On June 22, 2024 4:07:40 PM Alex Bee <knaerzche@gmail.com> wrote:

> Am 22.06.24 um 15:49 schrieb Arend Van Spriel:
>> On June 22, 2024 3:38:32 PM Arend Van Spriel
>> <arend.vanspriel@broadcom.com> wrote:
>>
>>> On June 22, 2024 12:56:02 AM Alex Bee <knaerzche@gmail.com> wrote:
>>>
>>>> This "new" version of defining external interrupts is around for a very
>>>> long time now and supported and preferred by irq_of_parse_and_map
>>>> respectively of_irq_parse_one.
>>>>
>>>> Support it in brcmfmac as well by checking if either "interrupts" or
>>>> "interrupts-extended" property exists as indication if
>>>> irq_of_parse_and_map
>>>> should be called.
>>>
>>> All very interesting, but why should we add code for something that
>>> is not
>>> specified in the bindings documentation?
>>>
>>> NAK (for now). Feel free to update the bindings document.
> Sure, if you insist on it, I can update the bindings document. So far not
> many (no) users did that, as it is clearly specified as an alternative in
> devicetree/bindings/interrupt-controller/interrupts.txt (sure, it's not yet
> converted to yaml yet).

Right. So in my opinion that should be handled by the interrupt subsystem. 
Hence I dived into irq_of_parse_and_map(). I would suggest to open code that:

/* make sure there are interrupts defined in the node */
- if (!of_property_present(np, "interrupts"))
+ if (of_irq_parse_one(...))
  return;

irq = irq_create_of_mapping(...);

> Which is a much nicer form, imho.
> And by the way for instance
> arch/arm/boot/dts/qcom/qcom-apq8026-lg-lenok.dts already uses it that way
> and the interrupt will currently not picked up (at least not by this
> driver).

I expected the "nicer" argument would be thrown in at some point. Esthetics 
are never a technical argument, but let's not debate that ;-) Hopefully you 
can agree with my suggestion.

Regards,
Arend
Alex Bee June 22, 2024, 8:57 p.m. UTC | #6
Am 22.06.24 um 19:46 schrieb Arend Van Spriel:
> On June 22, 2024 4:07:40 PM Alex Bee <knaerzche@gmail.com> wrote:
>
>> Am 22.06.24 um 15:49 schrieb Arend Van Spriel:
>>> On June 22, 2024 3:38:32 PM Arend Van Spriel
>>> <arend.vanspriel@broadcom.com> wrote:
>>>
>>>> On June 22, 2024 12:56:02 AM Alex Bee <knaerzche@gmail.com> wrote:
>>>>
>>>>> This "new" version of defining external interrupts is around for a 
>>>>> very
>>>>> long time now and supported and preferred by irq_of_parse_and_map
>>>>> respectively of_irq_parse_one.
>>>>>
>>>>> Support it in brcmfmac as well by checking if either "interrupts" or
>>>>> "interrupts-extended" property exists as indication if
>>>>> irq_of_parse_and_map
>>>>> should be called.
>>>>
>>>> All very interesting, but why should we add code for something that
>>>> is not
>>>> specified in the bindings documentation?
>>>>
>>>> NAK (for now). Feel free to update the bindings document.
>> Sure, if you insist on it, I can update the bindings document. So far 
>> not
>> many (no) users did that, as it is clearly specified as an 
>> alternative in
>> devicetree/bindings/interrupt-controller/interrupts.txt (sure, it's 
>> not yet
>> converted to yaml yet).
>
> Right. So in my opinion that should be handled by the interrupt 
> subsystem. Hence I dived into irq_of_parse_and_map(). I would suggest 
> to open code that:
>
And as you can see: It's already handled by the interrupt subsystem - all
what prevents it from working in it's intended behavior is this strange
of_property_present check.
> /* make sure there are interrupts defined in the node */
> - if (!of_property_present(np, "interrupts"))
> + if (of_irq_parse_one(...))
>  return;
>
Agreed. That's even better - I also didn't fully understand why this
of_property_present was chosen in the first place. Actually I wanted to
send something similar first with only calling of_irq_parse_one and return
early if it fails, but the result doesn't allow to differentiate between
"no interrupt defined" and "interrupt mapping failed" - so open coding it
seems required, unfortunately..
> irq = irq_create_of_mapping(...);
>
>> Which is a much nicer form, imho.
>> And by the way for instance
>> arch/arm/boot/dts/qcom/qcom-apq8026-lg-lenok.dts already uses it that 
>> way
>> and the interrupt will currently not picked up (at least not by this
>> driver).
>
> I expected the "nicer" argument would be thrown in at some point. 
> Esthetics are never a technical argument, but let's not debate that 
> ;-) Hopefully you can agree with my suggestion.
>
I wouldn't want the 'nicer'-argument to be an argument, as I don't like
that either: so sorry for that. My point was: Why wouldn’t we support it
in brcmfmac also?

So will resend with you suggestion applied: Remove !of_property_present
check completely and do the two steps of_irq_parse_one and
irq_create_of_mapping separately.

Alex

> Regards,
> Arend
>
>
diff mbox series

Patch

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
index e406e11481a6..6cdc941552e3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
@@ -129,7 +129,8 @@  void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
 		sdio->drive_strength = val;
 
 	/* make sure there are interrupts defined in the node */
-	if (!of_property_present(np, "interrupts"))
+	if (!of_property_present(np, "interrupts") &&
+	    !of_property_present(np, "interrupts-extended"))
 		return;
 
 	irq = irq_of_parse_and_map(np, 0);