Message ID | 1407355347-30286-1-git-send-email-f.fainelli@gmail.com |
---|---|
State | Accepted, archived |
Commit | a9ecdc0fdc54aa499604dbd43132988effcac9b4 |
Headers | show |
On Wed, Aug 06, 2014 at 01:02:27PM -0700, Florian Fainelli wrote: > In case the Device Tree blob passed by the boot agent supplies both an > 'interrupts-extended' and an 'interrupts' property in order to allow for > older kernels to be usable, prefer the new-style 'interrupts-extended' > property which conveys a lot more information. > > This allows us to have bootloaders willingly maintaining backwards > compatibility with older kernels without entirely deprecating the > 'interrupts' property. > > Update the bindings documentation to describe a situation where both the > 'interrupts-extended' and the 'interrupts' property are present, and > which one takes precedence over the other. > > Acked-by: Rob Herring <robh@kernel.org> > Signed-off-by: Brian Norris <computersforpeace@gmail.com> > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Might we add this? Cc: <stable@vger.kernel.org> # 3.13+ Brian -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 6 Aug 2014 13:15:00 -0700, Brian Norris <computersforpeace@gmail.com> wrote: > On Wed, Aug 06, 2014 at 01:02:27PM -0700, Florian Fainelli wrote: > > In case the Device Tree blob passed by the boot agent supplies both an > > 'interrupts-extended' and an 'interrupts' property in order to allow for > > older kernels to be usable, prefer the new-style 'interrupts-extended' > > property which conveys a lot more information. > > > > This allows us to have bootloaders willingly maintaining backwards > > compatibility with older kernels without entirely deprecating the > > 'interrupts' property. > > > > Update the bindings documentation to describe a situation where both the > > 'interrupts-extended' and the 'interrupts' property are present, and > > which one takes precedence over the other. > > > > Acked-by: Rob Herring <robh@kernel.org> > > Signed-off-by: Brian Norris <computersforpeace@gmail.com> > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > > Might we add this? > > Cc: <stable@vger.kernel.org> # 3.13+ > > Brian Applied, thanks. g. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt b/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt index 1486497a24c1..ce6a1a072028 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt +++ b/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt @@ -4,11 +4,13 @@ Specifying interrupt information for devices 1) Interrupt client nodes ------------------------- -Nodes that describe devices which generate interrupts must contain an either an -"interrupts" property or an "interrupts-extended" property. These properties -contain a list of interrupt specifiers, one per output interrupt. The format of -the interrupt specifier is determined by the interrupt controller to which the -interrupts are routed; see section 2 below for details. +Nodes that describe devices which generate interrupts must contain an +"interrupts" property, an "interrupts-extended" property, or both. If both are +present, the latter should take precedence; the former may be provided simply +for compatibility with software that does not recognize the latter. These +properties contain a list of interrupt specifiers, one per output interrupt. The +format of the interrupt specifier is determined by the interrupt controller to +which the interrupts are routed; see section 2 below for details. Example: interrupt-parent = <&intc1>; diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 3e06a699352d..1471e0a223a5 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -301,16 +301,17 @@ int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_ar /* Get the reg property (if any) */ addr = of_get_property(device, "reg", NULL); + /* Try the new-style interrupts-extended first */ + res = of_parse_phandle_with_args(device, "interrupts-extended", + "#interrupt-cells", index, out_irq); + if (!res) + return of_irq_parse_raw(addr, out_irq); + /* Get the interrupts property */ intspec = of_get_property(device, "interrupts", &intlen); - if (intspec == NULL) { - /* Try the new-style interrupts-extended */ - res = of_parse_phandle_with_args(device, "interrupts-extended", - "#interrupt-cells", index, out_irq); - if (res) - return -EINVAL; - return of_irq_parse_raw(addr, out_irq); - } + if (intspec == NULL) + return -EINVAL; + intlen /= sizeof(*intspec); pr_debug(" intspec=%d intlen=%d\n", be32_to_cpup(intspec), intlen);