irq

Sébastien Chrétien sebastien.chretien.enseirb at gmail.com
Thu Sep 4 23:23:21 EST 2008


I try to write a device tree about irq :

IT_controller: irq_controller at 20006000 {
               clock-frequency = <0>;
               interrupt-controller;
            #address-cells = <0>;
               reg = <0x20006000 0x100>;
               compatible = "it";
               device_type = "it";
               big-endian;
           };

           uart at 200b1000{
               device_type="uart";
               compatible="uart";
               interrupts = <0x18 0>;
               interrupt-parent=<&IT_controller>;
           };


uart_irq=of_find_node_by_type(NULL, "uart");
    if(uart_irq==NULL)
         printk("%s: No uart node found !\n", __func__);

    virt=irq_of_parse_and_map(uart_irq, 0);
    printk("Virtual irq : %d \n",virt);


When I boot linux, virt=0;

What is wrong ?


2008/9/4, Sébastien Chrétien <sebastien.chretien.enseirb at gmail.com>:
>
> I read the booting_without_of.txt document and the Interrupt Mapping
> docucument from http://playground.sun.com/1275. But I don't understand all
> parameters. Can somebody help me to create my device tree about interrupt
> part ?
>
> I have an interrupt controller at the adresse 0x20006000. The irq_id range
> is 1 to 63.
> I would like to try UART interrupt, which have ids : 0x18 (tranmission fifo
> empty,
> 0x19 (reception fifo full), 0x1a (reception error), 0x1b (break emission).
> What other informations are needed ?
>
>
> Nothing is cascaded.
>
> Thanks
>
>
>
>
> 2008/9/4, Benjamin Herrenschmidt <benh at kernel.crashing.org>:
>>
>> On Wed, 2008-09-03 at 23:02 +0200, Sébastien Chrétien wrote:
>>
>> > irq_of_parse_and_map is equivalent to ioremap in the MMU case ?
>>
>>
>> On the powerpc architecture, we use virtualized IRQ numbers in order to
>> deal with the wide range of interrupt controllers around and multiple
>> of them cascaded.
>>
>> The base function to "map" a physical interrupt to a virtual interrupt
>> is irq_create_mapping(). It takes an irq_host argument which represent
>> the IRQ "domain" (typically irq controller) off which the interrupt you
>> are trying to map hangs.
>>
>> If you pass NULL, it will use the "default" controller, which doesn't
>> always exist, it depends on the platform. Usually, platforms set that
>> to the toplevel PIC.
>>
>> However, normally, that function shouldn't be used directly. Instead,
>> you should create a representation of your device in the device-tree
>> along with the appropriate interrupt mapping, and then use the
>> irq_of_parse_and_map() function to obtain a mapped virtual irq based
>> on the device-tree information. This will take care of finding the
>> right irq_host but will also properly setup the polarity of the
>> interrupt etc...
>>
>> Now, as to how you should represent the interrupt in the device-tree,
>> this should be explained in Documentation/booting-without-of.txt
>>
>> Cheers,
>> Ben.
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20080904/b32a4b57/attachment.htm>


More information about the Linuxppc-dev mailing list