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
 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 :)


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
	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
	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",
		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",
		reg = <0x3 0x0 0x40000>;
		u-boot at 0 {
		reg = <0x0 0x02000000>;
		jffs2 at 2000000 {
		reg = <0x02000000 0x10000000>;
		ramdisk at 12000000 {
		reg = <0x12000000 0x08000000>;
		kernel at 1a000000 {
		reg = <0x1a000000 0x04000000>;
		dtb at 1e000000 {
		reg = <0x1e000000 0x01000000>;
		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",
	printk(KERN_INFO "mcmc : cant get assigned irq %i\n errno :
	printk(KERN_ALERT "Interrupt requested OK\n");
	d :
	when i register the driver the following output is obtaine
	for irq=1
	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 : 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!
	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