Re: Question about shared interrupts in devicetree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Apr 7, 2015 at 7:06 PM, Stefan Wahren <stefan.wahren@xxxxxxxx> wrote:
> [add some possible interested developer in CC]
>
>> Mark Rutland <mark.rutland@xxxxxxx> hat am 7. April 2015 um 13:29 geschrieben:
>>
>>
>> On Sat, Apr 04, 2015 at 10:40:13PM +0100, Stefan Wahren wrote:
>> > Hi,
>>
>> Hi,
>>
>> > i'm currently working on drivers (regulator and power switch) for a power
>> > subsystem of a ARM9 processor (Freescale i.MX28). There are interrupts for
>> > the
>> > power subsystem which share the same interrupt line. This interrupt line is
>> > needed by both drivers (regulator and power switch).
>> >
>> > Now the question what is the right way (tm) to specify the interrupt in the
>> > devicetree and fetch the irq number during driver probe?
>>
>> If the interrupts are generated by the subsystem as a whole, then A
>> would be more correct. If you can read some shared register to determine
>> the particular sub-block which generated the interrupt, A would
>> certainly be the right way of describing the HW.
>>
>> If the subsystem is just a logical grouping, and the two units generate
>> separate interrupts which simply get muxed together (with nothing
>> special done at the subsystem level), then B would seem more correct, as
>> the two units are effectively independent.
>>
>> It really depends on way the HW is organised, and how the HW _could_ be
>> organised if reused, so this is a grey area generally.
>>
>> It looks like it would be possible to support both styles if we need to
>> (by checking the node first, then its parent), if we go for one option
>> and later discover we need the other.
>
> thanks for the good explanation. After looking into the reference manual [1] of
> the i.MX28 i still can't decide if the subsystem generate the interrupts as a
> whole or
> as a logical group. I only found this para in chapter 11.11:
>
>     The VDDA_BO_IRQ, VDDD_BO_IRQ, VDDIO_BO_IRQ, and BATT_BO_IRQ each
>     have their own interrupt line back to the interrupt collector.
>     However, the remaining five interrupts—VDD5V_GT_VDDIO_IRQ, DC_OK_IRQ,
>     VBUSVALID_IRQ, LINREG_OK_IRQ and PSWITCH_IRQ—all share a single
>     interrupt line. In this case, software must read the interrupt status
>     bits to discover which event caused the interrupt.
>
> In my case DC_OK_IRQ and PSWITCH_IRQ are relevant.
>
> Maybe someone else has a idea?

Perhaps you can implement an interrupt-controller to handle the multiplexing
of the 5 remaining interrupts?

Can they be disabled/enabled individually?

> Thanks Stefan
>
> [1] - http://cache.freescale.com/files/dsp/doc/ref_manual/MCIMX28RM.pdf
>
> Document Number: MCIMX28RM
> Rev 2, 08/2013
>
>>
>> Thanks,
>> Mark.
>>
>> >
>> > Option A (define interrupt in parent node):
>> >
>> > power: power@80044000 {
>> > compatible = "fsl,imx28-power", "syscon";
>> > reg = <0x80044000 0x2000>;
>> > interrupts = <6>;
>> >
>> > reg_vddd: regulator@1 {
>> > compatible = "fsl,imx28-vddd";
>> > };
>> >
>> > pswitch: pswitch@5 {
>> > compatible = "fsl,mxs-pswitch";
>> > linux,code = <116>;
>> > };
>> > }
>> >
>> > int irq = irq_of_parse_and_map(parent, 0);
>> >
>> > Option B (define interrupt for each child node):
>> >
>> > power: power@80044000 {
>> > compatible = "fsl,imx28-power", "syscon";
>> > reg = <0x80044000 0x2000>;
>> >
>> > reg_vddd: regulator@1 {
>> > compatible = "fsl,imx28-vddd";
>> > interrupts = <6>;
>> > };
>> >
>> > pswitch: pswitch@5 {
>> > compatible = "fsl,mxs-pswitch";
>> > linux,code = <116>;
>> > interrupts = <6>;
>> > };
>> > }
>> >
>> > int irq = platform_get_irq(pdev, 0);

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies





[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux