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

Rob Herring robherring2 at gmail.com
Tue Apr 17 11:36:42 EDT 2012


On 04/16/2012 02:31 PM, Linus Walleij wrote:
> 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...

You can't use domain->host_data ptr?

>> 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...

Ah, you're right. I was thinking bit position, not number.

Rob
> 
> Thanks a lot Rob!
> Linus Walleij




More information about the linux-arm-kernel mailing list