Thread (2 messages) 2 messages, 2 authors, 2010-08-30

Re: MPC85xx - accessing external interrupt

From: tiejun.chen <hidden>
Date: 2010-08-30 11:16:11

deebul nair wrote:
Hi all

I am trying to use the external interrupts on the Powerpc architecture
MPC8542 .

My  problem is that my driver is trying to request the external
interrupt IRQ1, and I dont know what number use in INTR_NUM:

request_irq(INTR_NUM, , , , )

As per the MPC85xx documentation
Documentation/powerpc/dts-bindings/fsl/mpic.txt
about the implementation of interrupts virtual numbers
the external interrupt virtual irq number for IRQ1 should be 1

but when i try to give INTR_NUM ins request_irq as 1 it gives error .

When i use irq_create_mapping() it gives me output as 16.. and it registers
.. but the problem is it is not fixed
neither it gives interrupts .
when i remove and add it registers to some other addresses

i even tried irq_of_parse_map()

for_each_node_by_type(np,"interrupt-controller"){
    if(of_device_is_compatible(np,"chrp,open-pic")){
           found=np;
           break;
}
}

virq = irq_of_parse_and_map(found, irq);

this always returns 0
whatever may be the irq value..
as a result the driver gives error for irq 0
Anyway the following path should be the correct path:

request_irq(virq)
	      |
	      + virq = irq_of_parse_and_map(hw_irq)
					      |
					      + We get this from the dts file.

So you should define the appropriate node for your device. Then convert your
hw_irq to vir_irq via irq_of_parse_and_map() to pass that to reuest_irq() on
your device driver. Sometime this process is wrapped by some functions so I
recommend you refer to the files on the directory, arch/powerpc/sysdev/.

But I think the root cause to your problem is that you cannot pass the proper
arguments to irq_of_parse_and_map().
------
unsigned int irq_of_parse_and_map(struct device_node *dev, int index)

You should do this like the following:
------
	struct device_node *np;
	unsigned int virq;

	np = of_find_compatible_node(NULL, NULL, "<the compatible property of your
device node on dts>");
	if (np) {
		irq_of_parse_and_map(np, 0);
	}

	request_irq(virq,......);

Here I assume you have only one irq property so set 'index' as '0' on the
function, irq_of_parse_and_map().

Cheers
Tiejun
		




------------------------------------------------------------------------

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help