[PROPOSAL v2] Fix platform device irq domain support and gpio irq DT


Grant Likely
 

There isn't a need for interrupt-lines work anymore. Support has been
merged for a similar property called interrupts-extended. However, the
gpio-as-irq problem still exists and needs to be resolved.

g.

On Thu, Nov 21, 2013 at 5:34 AM, Jean-Christophe PLAGNIOL-VILLARD
<plagnioj@...> wrote:
HI Tim,

is this ok for this time

Best Regards,
J.
On 07:07 Tue 22 Oct , Jean-Christophe PLAGNIOL-VILLARD wrote:
HI,

== Description ==
Fix IRQ Domain DT support issues and gpio IRQ

Today the kernel have multiple issues arround the IRQ

* IRQ Domain platfrom driver support

Today if you register an irq domain via a platform driver and then use the irq
in DT such as this

eth0: ethernet at 30000000 {
compatible = "micrel,ks8851-mll";
reg = <0x30000000 0x1
0x30000002 0xff>;
interrupt-parent = <&pioD>;
interrupts = <21 IRQ_TYPE_EDGE_BOTH>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_board_eth0>;
status = "okay";
};

the irq in the platform resource will not be fill as the resolve is done at of_platform_populate
To fix this we need to resolve the irq at driver probe time.

* Multiple interrupt-parent support

Today if you need the irq from 2 interrupt controler it's impossible.
Such as a hw irq and a GPIO irq both provided via dt

To fix this implement a new property "interrupt-lines"

that will work in a same way as gpios by providing firt the phandle of the controller
and then the cell data

interrupt-lines = <&aic 0 4 0 & pioD 21 IRQ_TYPE_EDGE_BOTH>;

* gpio irq DT

Today you need to use a gpio as IRQ you need to configure it and then use it
As a in the kernel we make the disctinction between standard IRQ and gpio IRQ.
This should have never been the case and need to be fix up widely.
By droping all the gpio_to_irq in the drivers and ONLY provide interrupts

== Related work ==
http://permalink.gmane.org/gmane.linux.drivers.devicetree/36679


== Scope ==

I think this will take about 3 to 5 month depending on the discussion on the
kernel mainling list with an effort of about 240 to 300 hours.

== Contractor Candidates ==

Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
== Comments ==

By Linus Walleij

Actually I have that problem today. An MMC card slot
with two IRQs for the traffic and another totally different
IRQ for the card insertion IRQ, sitting on a different controller,
and this one is not even a GPIO, so I cannot cheat and have
it as a GPIO that I then translate into an IRQ.

Overall Jean-Christophe's proposal is correctly pinpointing
some serious unhandled corner cases we have in DT land.


Best Regards,
J.


Jean-Christophe PLAGNIOL-VILLARD
 

HI Tim,

is this ok for this time

Best Regards,
J.

On 07:07 Tue 22 Oct , Jean-Christophe PLAGNIOL-VILLARD wrote:
HI,

== Description ==
Fix IRQ Domain DT support issues and gpio IRQ

Today the kernel have multiple issues arround the IRQ

* IRQ Domain platfrom driver support

Today if you register an irq domain via a platform driver and then use the irq
in DT such as this

eth0: ethernet at 30000000 {
compatible = "micrel,ks8851-mll";
reg = <0x30000000 0x1
0x30000002 0xff>;
interrupt-parent = <&pioD>;
interrupts = <21 IRQ_TYPE_EDGE_BOTH>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_board_eth0>;
status = "okay";
};

the irq in the platform resource will not be fill as the resolve is done at of_platform_populate
To fix this we need to resolve the irq at driver probe time.

* Multiple interrupt-parent support

Today if you need the irq from 2 interrupt controler it's impossible.
Such as a hw irq and a GPIO irq both provided via dt

To fix this implement a new property "interrupt-lines"

that will work in a same way as gpios by providing firt the phandle of the controller
and then the cell data

interrupt-lines = <&aic 0 4 0 & pioD 21 IRQ_TYPE_EDGE_BOTH>;

* gpio irq DT

Today you need to use a gpio as IRQ you need to configure it and then use it
As a in the kernel we make the disctinction between standard IRQ and gpio IRQ.
This should have never been the case and need to be fix up widely.
By droping all the gpio_to_irq in the drivers and ONLY provide interrupts

== Related work ==
http://permalink.gmane.org/gmane.linux.drivers.devicetree/36679


== Scope ==

I think this will take about 3 to 5 month depending on the discussion on the
kernel mainling list with an effort of about 240 to 300 hours.

== Contractor Candidates ==

Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
== Comments ==

By Linus Walleij

Actually I have that problem today. An MMC card slot
with two IRQs for the traffic and another totally different
IRQ for the card insertion IRQ, sitting on a different controller,
and this one is not even a GPIO, so I cannot cheat and have
it as a GPIO that I then translate into an IRQ.

Overall Jean-Christophe's proposal is correctly pinpointing
some serious unhandled corner cases we have in DT land.


Best Regards,
J.


Jean-Christophe PLAGNIOL-VILLARD
 

HI,

== Description ==
Fix IRQ Domain DT support issues and gpio IRQ

Today the kernel have multiple issues arround the IRQ

* IRQ Domain platfrom driver support

Today if you register an irq domain via a platform driver and then use the irq
in DT such as this

eth0: ethernet at 30000000 {
compatible = "micrel,ks8851-mll";
reg = <0x30000000 0x1
0x30000002 0xff>;
interrupt-parent = <&pioD>;
interrupts = <21 IRQ_TYPE_EDGE_BOTH>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_board_eth0>;
status = "okay";
};

the irq in the platform resource will not be fill as the resolve is done at of_platform_populate
To fix this we need to resolve the irq at driver probe time.

* Multiple interrupt-parent support

Today if you need the irq from 2 interrupt controler it's impossible.
Such as a hw irq and a GPIO irq both provided via dt

To fix this implement a new property "interrupt-lines"

that will work in a same way as gpios by providing firt the phandle of the controller
and then the cell data

interrupt-lines = <&aic 0 4 0 & pioD 21 IRQ_TYPE_EDGE_BOTH>;

* gpio irq DT

Today you need to use a gpio as IRQ you need to configure it and then use it
As a in the kernel we make the disctinction between standard IRQ and gpio IRQ.
This should have never been the case and need to be fix up widely.
By droping all the gpio_to_irq in the drivers and ONLY provide interrupts

== Related work ==
http://permalink.gmane.org/gmane.linux.drivers.devicetree/36679


== Scope ==

I think this will take about 3 to 5 month depending on the discussion on the
kernel mainling list with an effort of about 240 to 300 hours.

== Contractor Candidates ==

Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
== Comments ==

By Linus Walleij

Actually I have that problem today. An MMC card slot
with two IRQs for the traffic and another totally different
IRQ for the card insertion IRQ, sitting on a different controller,
and this one is not even a GPIO, so I cannot cheat and have
it as a GPIO that I then translate into an IRQ.

Overall Jean-Christophe's proposal is correctly pinpointing
some serious unhandled corner cases we have in DT land.


Best Regards,
J.