Firstly you should make sure which interrupt level is used to trigger
the external interrupt. High level, low level, rising edge or falling
edge? 
------
 0 = low to high edge sensitive type enabled
 1 = active low level sensitive type enabled
 2 = active high level sensitive type enabled
 3 = high to low edge sensitive type enable  
 
Then set the appropriate sense and level for your external interrupt.
And you have to ensure the FPGA issue the real interrupt. Maybe you can
use the hardware tool to probe if there is a interrupt signal on
external interrupt pin.
 
Additionally I think your 'reg' property is wrong unless you have
abnormal way to parse that :)
 
Cheers
Tiejun
 


________________________________

        From:
linuxppc-dev-bounces+tiejun.chen=windriver....@lists.ozlabs.org
[mailto:linuxppc-dev-bounces+tiejun.chen=windriver....@lists.ozlabs.org]
On Behalf Of deebul nair
        Sent: Wednesday, September 22, 2010 4:15 PM
        To: linuxppc-dev@lists.ozlabs.org
        Subject: external interrupt mapping with FPGA on loacl bus
        
        
         
        Hi
         
        i have a FPGA called mcmc which is connected to the powerpc
mpc8572 on the local bus. It provides 2 interrupts which are connected
to the
        external interupts IRQ1 and IRQ3 of the mpc8572.
        the fpga is memory mapped on the local bus at address 0xc0000000

        I am able to register the interrupt and obtain virq , but no
interrupts.
        is the modifications made in the dts file enought/right for
getting an external interrupt??
         
         
        The modified dts file for enrm8572
         
        local...@e0005000 {
         

                #address-cells = <2>;
                 
                #size-cells = <1>;
                 
                compatible = "fsl,mpc8572-elbc", "fsl,elbc",
"simple-bus";
                 
                reg = <0xe0005000 0x1000>;
                 
                interrupts = <19 2>;
                 
                interrupt-parent = <&mpic>;
                 
                ranges = <0x0 0x0 0xfc000000 0x04000000
                 
                0x1 0x0 0xc0000000 0x00080000
                 
                0x2 0x0 0x90100000 0x00008000
                 
                0x3 0x0 0x90000000 0x00040000
                 
                0x4 0x0 0x91000000 0x00008000>;
                 
                n...@3,0 {
                 
                #address-cells = <1>;
                 
                #size-cells = <1>;
                 
                compatible = "fsl,mpc8572-fcm-nand",
                 
                "fsl,elbc-fcm-nand";
                 
                reg = <0x3 0x0 0x40000>;
                 
                u-b...@0 {
                 
                reg = <0x0 0x02000000>;
                 
                read-only;
                 
                };
                 
                jf...@2000000 {
                 
                reg = <0x02000000 0x10000000>;
                 
                };
                 
                ramd...@12000000 {
                 
                reg = <0x12000000 0x08000000>;
                 
                read-only;
                 
                };
                 
                ker...@1a000000 {
                 
                reg = <0x1a000000 0x04000000>;
                 
                };
                 
                d...@1e000000 {
                 
                reg = <0x1e000000 0x01000000>;
                 
                read-only;
                 
                };
                 
                em...@1f000000 {
                 
                reg = <0x1f000000 0x21000000>;
                 
                };
                 
                };
                 
                 
                 
                m...@1,0 {
                 
                compatible = "fsl,fpga-pixis";
                 
                reg = <1 0 32>;
                 
                interrupts = <1 1 3 1>;
                 
                interrupt-parent = <&mpic>;
                 
                };

         
        };
         
        code for registering the interrupt :
         
        np = of_find_compatible_node(NULL, NULL, "fsl,fpga-pixis");
         
        mcmc_irq = irq;
         
        virq = irq_of_parse_and_map(np, mcmc_irq);
         
        if(virq == NO_IRQ){
         
        printk(KERN_ERR "mcmc: failed to map interrupt");
         
        }
         
        printk(KERN_INFO "mcmc: interrupt mapped to virq %d\n", virq);
         
        ret = request_irq(virq, mcmc_interrupt, IRQF_DISABLED,"mcmc",
NULL);
         
        if(ret){
         
        printk(KERN_INFO "mcmc : cant get assigned irq %i\n errno :
<%d>\n",mcmc_irq,ret);
         
        }
         
        else{
         
        printk(KERN_ALERT "Interrupt requested OK\n");
         
        }
         
        d :
         
        when i register the driver the following output is obtaine
         
        for irq=1
         
        irq_of_parse_and_map
         
        irq : irq_create_mapping(0xc0fffb40,0x1)
         
        irq : using host @ c0fffb40
         
        irq : obtained virq 18
         
        irq : virq=12 <6>mcmc : interrupt mapped to irq 18
         
        Interrupt requested OK!
         
        for irq=0
         
        irq_of_parse_and_map
         
        irq : irq_create_mapping(0xc0fffb40,0x3)
         
        irq : using host @ c0fffb40
         
        irq : obtained virq 20
         
        irq : virq=14 <6>mcmc : interrupt mapped to irq 20
         
        Interrupt requested OK!
         
         
         
         
         
        --
        Cheeers
         
        Deebul !!!!!!
         
         

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

Reply via email to