Open Firmware and interrupt trigger
robert.thorhuus at ericsson.com
Thu Feb 24 08:18:50 EST 2011
I'm quite new to linux and Open Firmware.
I have a PPC processor. To this I have a Compact Flash connected. The Compact Flash is using external interrupt 0 of the processor.
In my DTS file I have specified a Compact Flash node and within it I have an interrupt element:
interrupt = <0 2 0 0>;
Here I thought the first number was the ID of the interrupt and the second one should be a number indicating how the interrupt is triggered (high, low, raising, falling).
The interrupt is active low.
But I could not get it to work which ever value I chose.
Looking in the code I found this in function __devinit pata_of_platform_probe in file pata_of_platform.c:
ret = of_irq_to_resource(dn, 0, &irq_res);
if (ret == NO_IRQ)
irq_res.start = irq_res.end = 0;
irq_res.flags = 0;
Here "flags" will be zero whatever I do in the DTS. As far as I can understand the flags are defined in interrupts.h:
#define IRQF_TRIGGER_NONE 0x00000000
#define IRQF_TRIGGER_RISING 0x00000001
#define IRQF_TRIGGER_FALLING 0x00000002
#define IRQF_TRIGGER_HIGH 0x00000004
#define IRQF_TRIGGER_LOW 0x00000008
So modifying the code to:
irq_res.flags = 2;
I get it to work.
Could someone please explain to me why the "flags" parameter is hardcoded zero or just point in a good direction.
More information about the Linuxppc-dev