<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">2013/6/6 Jean-Christophe PLAGNIOL-VILLARD <span dir="ltr"><<a href="mailto:plagnioj@jcrosoft.com" target="_blank">plagnioj@jcrosoft.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 10:39 Thu 06 Jun     , Michal Simek wrote:<br>
> On 06/06/2013 10:29 AM, Jean-Christophe PLAGNIOL-VILLARD wrote:<br>
> > On 18:45 Fri 31 May     , Michal Simek wrote:<br>
> >> On 05/31/2013 05:16 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:<br>
> >>> On 15:57 Fri 31 May     , Michal Simek wrote:<br>
> >>>> On 05/31/2013 01:00 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:<br>
> >>>>> On 10:14 Fri 31 May     , Michal Simek wrote:<br>
> >>>>>> Hi Jean-Christophe,<br>
> >>>>>><br>
> >>>>>> On 05/30/2013 10:17 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:<br>
> >>>>>>> On 15:49 Thu 30 May     , Michal Simek wrote:<br>
> >>>>>>>> Export of_irq_count for modules.<br>
> >>>>>>><br>
> >>>>>>> can you explain why do you need to call of_irq_count<br>
> >>>>>><br>
> >>>>>> I need to count number of irq written in the DTS node.<br>
> >>>>>> It is not fixed size that's why I need to proper way how to<br>
> >>>>>> find it out.<br>
> >>>>>><br>
> >>>>>> I am using this loop.<br>
> >>>>>>        count = of_irq_count(pdev->dev.of_node);<br>
> >>>>>>        /* Alloc IRQ based on DTS to be sure that no other driver will use it */<br>
> >>>>>>        while (count--) {<br>
> >>>>>>                tmp->irq = irq_of_parse_and_map(pdev->dev.of_node, count);<br>
> >>>>>>                dev_info(&pdev->dev, "%d: Alloc irq: %d\n", count, tmp->irq);<br>
> >>>>>>                ret = request_irq(tmp->irq, zynq_remoteproc_interrupt, 0,<br>
> >>>>>>                                        dev_name(&pdev->dev), &pdev->dev);<br>
> >>>>>>                if (ret) {<br>
> >>>>>>                        ...<br>
> >>>>>>                }<br>
> >>>>>>        }<br>
> >>>>>><br>
> >>>>>> But of course if you think that this is incorrect to export it<br>
> >>>>>> I can use what it is in of_irq_count body<br>
> >>>>>> 368 int of_irq_count(struct device_node *dev)<br>
> >>>>>> 369 {<br>
> >>>>>> 370         int nr = 0;<br>
> >>>>>> 371<br>
> >>>>>> 372         while (of_irq_to_resource(dev, nr, NULL))<br>
> >>>>>> 373                 nr++;<br>
> >>>>>> 374<br>
> >>>>>> 375         return nr;<br>
> >>>>>> 376 }<br>
> >>>>>><br>
> >>>>>> Because of_irq_to_resource is exported for modules.<br>
> >>>>>> Or is there any better way how to loop over all interrupts in DT node?<br>
> >>>>><br>
> >>>>> can just explain me why you need to call irq_of_parse_and_map in your driver?<br>
> >>>>><br>
> >>>>> as the irq will be provided in the resources normally<br>
> >>>><br>
> >>>> It is quite a long time I have written this driver on v3.1 or 3.3.<br>
> >>>> But is this better?<br>
> >>>><br>
> >>>>  struct resource *res;<br>
> >>>>  int i = 0;<br>
> >>>>  do {<br>
> >>>>          res = platform_get_resource(pdev, IORESOURCE_IRQ, i++);<br>
> >>>>          if (res)<br>
> >>>>                  do something<br>
> >>>>  } while(res);<br>
> >>>><br>
> >>>> Also what about of_irq_to_resource()? Is it deprecated and all drivers<br>
> >>>> shouldn't use it?<br>
> >>>><br>
> >>>> I have no problem to rewrite the driver to use platform_get_resource.<br>
> >>> yeah it's better but be aware there is a but in DT that I'm working on to fix<br>
> >>> if you use irq that are registered by a pdev this will not work<br>
> >>><br>
> >>> I hope to fix it for 3.11<br>
> >>> and already send an RFC that fix it<br>
> >><br>
> >> ok. good to know. Btw: Let's return to my origin point why not to<br>
> >> export of_irq_count for modules?<br>
> >> Or opposite question if platform_get_resource is correct way<br>
> >> why to export of_irq_to_resource for modules?<br>
> ><br>
> > for old ppc drivers that are not converted yet to pdev<br>
> ><br>
> > if you can do so just use pdev resource I should have fix the pb or irq_domain<br>
> > hopefully for 3.11<br>
><br>
> ok. It means it is currently deprecated.<br>
> I just wanted to be sure that I understand it correctly.<br>
><br>
> I have changed my drivers not to use this function and using resources as<br>
> we discussed.<br>
><br>
> btw: I have sent one email to device-tree ML about describing missing<br>
> connection between cpu and the first interrupt controller.<br>
> Can you please look at it and comment it?<br>
> <a href="https://lists.ozlabs.org/pipermail/devicetree-discuss/2013-May/033955.html" target="_blank">https://lists.ozlabs.org/pipermail/devicetree-discuss/2013-May/033955.html</a><br>
<br>
</div></div>for the record as discussed with Grant I'm preparing to add a new property<br>
to handle interrupts so you will never have to use "interrupt-parent" any more<br>
and just do this<br>
<br>
interrupt-lines = <&aic 5 0 &pioA 4><br>
<br>
it will be more like gpio and will allow to have irq from different<br>
interrupt-parent in the same node<br>
<br>
but wait a few I'll be really back next week as I'm half off this week<br></blockquote><div><br> </div>Good. I am definitely interested in this topic because we can connect<br></div><div class="gmail_quote">and test this pretty easily. <br>
</div><div class="gmail_quote">Also I hope there will be also description between interrupt controller<br>and cpu. <br></div><div class="gmail_quote">Anyway I will wait till you are back.<br><br></div><div class="gmail_quote">
thanks,<br></div><div class="gmail_quote">Michal<br></div><div class="gmail_quote"><br clear="all"></div><br>-- <br>Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91<br>w: <a href="http://www.monstr.eu" target="_blank">www.monstr.eu</a> p: +42-0-721842854<br>
Maintainer of Linux kernel - Microblaze cpu - <a href="http://www.monstr.eu/fdt/" target="_blank">http://www.monstr.eu/fdt/</a><br>Maintainer of Linux kernel - Xilinx Zynq ARM architecture<br>Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
</div></div>