[PATCH v2] plat-versatile: modernize FPGA IRQ controller

Linus Walleij linus.walleij at linaro.org
Mon Apr 16 15:31:38 EDT 2012

On Sat, Apr 14, 2012 at 11:38 PM, Rob Herring <robherring2 at gmail.com> wrote:

>> +     fpga_irq_init(VA_SIC_BASE, "SIC", IRQ_SIC_START,
>> +             IRQ_VICSOURCE31, ~PIC_MASK, np);
> This needs some work...
> For DT, you want to be calling of_irq_init and have a fpga_irq_dt_init
> function which gets all this info from the dts. That's fine to do as a
> follow on patch.

Yeah I need to do this stepwise or I'll end up tearing my hair.

>>       for (i = 0; i < 32; i++) {
> This loop should be replaced by the domain .map function. For a legacy
> domain, .map will be called by irq_domain_add_legacy 32 times.

OK ... of course it works like a charm. Will post v3 soon-ish.

On small obstacle: the .map function does not pass the
void *host_data, so I worked around this by using a static
file-local but this is a bit ugly...

> If you have a valid mask, then I think you should be able to skip the holes.

Sure can. Works fine.

>> +     f->domain = irq_domain_add_legacy(node, 32, f->irq_start, 0,
> I think the fact that you always pass in 32 is your problem. You should
> use "fls(valid) - 1" here.

Since the function takes an absolute number of IRQs I guess
it's just fls(valid)? It worked for me anyway...

Thanks a lot Rob!
Linus Walleij

More information about the linux-arm-kernel mailing list