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