----- Original Message ----- From: "Benjamin Herrenschmidt" <b...@kernel.crashing.org>
To: "Thirumalai" <thirumala...@datapatterns.co.in>
Cc: <scottw...@freescale.com>
Sent: Wednesday, November 04, 2009 11:55 AM
Subject: Re: Regarding FPGA based cascaded PIC


On Wed, 2009-11-04 at 10:48 +0530, Thirumalai wrote:
Hi Ben,
I am a having MPC8640D based board on which i am in the process of
writing cascaded interrupt handler for my FPGA based PIC. I need some
clarification on writing customized cascaded interrupt handler. As for as my understanding we need to use irq_alloc_host() function for allocating the irq_host for my FPGA pic and we should use irq_of_parse_and_map() function for parsing and assignment of virtual IRQ from my device tree. In my case my FPGA based PIC is giving interrupts to 3 external interrupt of MPC8640D i.e
1,2,3 . So i have written my fpga-pic node as follows on my device tree.

Please post to the mailing list linuxppc-dev@lists.ozlabs.org for such
questions.

fpga-...@dc000000 {
                        compatible = "dp,fpga-pic";
                        reg = <0xdc000000 0x7fff>;
                        interrupt-controller;
                        #interrupt-cells = <3>;
                        interrupts = <1 1 2 1 3 1>;
                        interrupt-parent = <&mpic>;
};

3 cells per interrupt ? that's a lot :-) What do you put in there ?

 mpic: p...@40000 {
                        clock-frequency = <0>;
                        interrupt-controller;
                        #address-cells = <0>;
                        #interrupt-cells = <2>;
                        reg = <0x40000 0x40000>;
                        compatible = "chrp,open-pic";
                        device_type = "open-pic";
                        big-endian;
                };

So far it looks reasonable...

The function irq_of_parse_and_map is returning VIRQ as 16,17,18
successfully. i hooked my chained interrupt handler for this VIRQ using
set_irq_chained_handler function. On my user defined interrupt handler when i am searching the vector need to be returned i am getting 0 as vector. ie
using the function irq_linear_revmap.

So here my doubt:
============
Even irq_alloc_host has returned a irq_host for my pic, Why my custom map
funtion is not called during irq_of_parse_and_map function. Instead of my
map/xlate function it is calling mpic's map/xlate function?

That's where I don't follow you...

So interrupts 1,2,3 in your example are outputs of the FPGA PIC
connected to inputs 1,2,3 of the MPIC. Those get mapped to virq 16.17
and 18. Those are really MPIC interrupts.

At some stage some interrupts -below- your FPGA PIC (whatever devices
you have on the FPGA) are going to fire. it's -those- interrupts that
will use map/xlate from the FPGA host when irq_of_parse_and_map() is
called for them


you understood correctly. Here the problem lies.Correct me if i am wrong. So you are telling that irq_of_parse_and_map() will invoke the map/xlate of my FPGA pic. Right.

But this is what not happening. Instead of calling my map/xlate functions the irq_of_parse_and_map() function is invoking mpic's map/xlate function.

Here is the piece of code that we are using.

fpga_pic_irq_host = irq_alloc_host(pic, IRQ_HOST_MAP_LINEAR,
                       DPVPX0659_FPGA_NUM_IRQS,&fpga_pic_host_ops,
                       NO_IRQ);
       if (fpga_pic_irq_host == NULL) {
               printk("FPGA PIC: Unable to allocate host\n");
               return;
       }

       for (i = 0; i < 3; i++) {
               fpga_irqs[i] = irq_of_parse_and_map(pic, i);
               if (fpga_irqs[i] == NO_IRQ) {
                       printk("FPGA PIC: can't get irq %d.\n", i);
                       continue;
               }
               printk("interrupt from device tree : %d \n",fpga_irqs[i]);
               
set_irq_chained_handler(dpvpx0659_fpga_irqs[i],dpvpx0659_fpga_pic_cascade);
       }

IE. When -those- fire, the FPGA emits one of the 3 interrupts, and your
cascade handler gets called. It will then fetch off the FPGA PIC what
interrupts happened and revmap that.

Cheers,
Ben.

Kindly reply me soon.
Regards
Thirumalai


Thank you
Thirumalai

**************** CAUTION - Disclaimer *****************This email may contain 
confidential and privileged material for the
sole use of the intended recipient(s). Any review, use, retention, distribution or disclosure by others is strictly prohibited. If you are not the intended recipient (or authorized to receive for the recipient), please contact the sender by reply email and delete all copies of this message. Also, email is susceptible to data corruption, interception, tampering, unauthorized amendment and viruses. We only send and receive emails on the basis that we are not liable for any such corruption, interception, tampering, amendment or viruses or any consequence thereof. *********** End of Disclaimer ***********DataPatterns ITS Group**********

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to