external interrupt mapping with FPGA on loacl bus
Chen, Tiejun
Tiejun.Chen at windriver.com
Thu Sep 23 00:24:36 EST 2010
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.com at lists.ozlabs.org
[mailto:linuxppc-dev-bounces+tiejun.chen=windriver.com at lists.ozlabs.org]
On Behalf Of deebul nair
Sent: Wednesday, September 22, 2010 4:15 PM
To: linuxppc-dev at 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
localbus at 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>;
nand at 3,0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,mpc8572-fcm-nand",
"fsl,elbc-fcm-nand";
reg = <0x3 0x0 0x40000>;
u-boot at 0 {
reg = <0x0 0x02000000>;
read-only;
};
jffs2 at 2000000 {
reg = <0x02000000 0x10000000>;
};
ramdisk at 12000000 {
reg = <0x12000000 0x08000000>;
read-only;
};
kernel at 1a000000 {
reg = <0x1a000000 0x04000000>;
};
dtb at 1e000000 {
reg = <0x1e000000 0x01000000>;
read-only;
};
empty at 1f000000 {
reg = <0x1f000000 0x21000000>;
};
};
mcmc at 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 !!!!!!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20100922/bd6c069f/attachment-0001.html>
More information about the Linuxppc-dev
mailing list