On Fri, 28 Aug 2015, Qais Yousef wrote: > Thanks a lot for the detailed explanation. I wasn't looking for a quick and > dirty solution but my view of the problem is much simpler than yours so my > idea of a solution would look quick and dirty. I have a better appreciation of > the problem now and a way to approach it :-) > > From DT point of view are we OK with this form then > > coprocessor { > interrupt-source = <&intc INT_SPEC COP_HWAFFINITY>; > interrupt-sink = <&intc INT_SPEC CPU_HWAFFINITY>; > } > > and if the root controller sends normal IPI as it sends normal device > interrupts then interrupt-sink can be a standard interrupts property (like in > my case) > > coprocessor { > interrupt-source = <&intc INT_SPEC COP_HWAFFINITY>; > interrupts = <INT_SPEC>; > } > > Does this look right to you? Is there something else that needs to be covered > still? I'm not an DT wizard. I leave that to the DT experts. > One more thing I can think of now is that the coprocessor will need the raw > irq numbers that are picked by linux so that it can use them to trigger the > IPI. Are we ok to add a function that returns this raw irq number (as opposed > to linux irq number) directly from DT? The way this is communicated to the > coprocessor will be platform specific. Why do you want that to be hacked into DT? > > To configure your coprocessor proper, we need a translation > > mechanism from the linux interrupt number to the magic value which > > needs to be written into the trigger register when the coprocessor > > wants to send an interrupt or an IPI. > > > > int irq_get_irq_hwcfg(unsigned int irq, struct irq_hwcfg *cfg); > > > > struct irq_hwcfg needs to be defined, but it might look like this: > > > > { > > /* Generic fields */ > > x; > > ... > > union { > > mips_gic; > > ... > > }; > > }; That function provides you the information which you have to hand over to your coprocessor firmware. Thanks, tglx