Re: kilauea/405ex external interrupts
On Friday 19 June 2009 10:00:52 Lada Podivin wrote: I'm writing a linux driver that uses an external interrupt (ppc 405ex). I'm using GPIO pin 30 (external IRQ 1) connected to UIC1. I'm aware of the virtual interrupt stuff, so I added a new node to my device tree in order to get proper virtual IRQ number. This node describes an external event and its connection to UIC via the mentioned ext. int. Here is a sample of the divce-tree: snip EXTEVENT: external_event { device_type = external; #address-cells = 0; #size-cells = 0; #interrupt-cells = 2; interrupts = 0x1e 0x1; interrupt-parent = UIC1; }; ... Then I use function irq_of_parse_and_map() which returns the virtual IRQ number 22. So, request_irq() seems to be satisfied with this number. I can see this interrupt in the /proc/interrupts. But! When I connect a signal source to the pin 30, nothing happens - the interrupt service routine isn't called. Am I suppose to configure anything else? (e. g. pin multiplexing, further device-tree tuning...) Thank you! Yes, this could very well be a problem of pin multiplexing. From looking at the Kilauea GPIO/Pin mux configuration in U-Boot, GPIO30 is configured as GPIO input and not as IRQ1. So this can't work. The easiest way to change this is in U-Boot (include/configs/kilauea.h). BTW: Are you using Kilauea or a custom 405EX board? Best regards, Stefan ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: kilauea/405ex external interrupts
Thanks for replies! 2009/6/22 Stefan Roese s...@denx.de Yes, this could very well be a problem of pin multiplexing. From looking at the Kilauea GPIO/Pin mux configuration in U-Boot, GPIO30 is configured as GPIO input and not as IRQ1. So this can't work. The easiest way to change this is in U-Boot (include/configs/kilauea.h). Right, the pin multiplexing was the problem. I didn't know that U-BOOT can do that - very useful information, thank you again! BTW: Are you using Kilauea or a custom 405EX board? Best regards, Stefan Yes, it's the Kilauea board. ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
RE: kilauea/405ex external interrupts
You will have to program GPIO's to select appropriate external IRQ as they are shared . From: linuxppc-dev-bounces+tmarri=amcc@lists.ozlabs.org [mailto:linuxppc-dev-bounces+tmarri=amcc@lists.ozlabs.org] On Behalf Of Lada Podivin Sent: Friday, June 19, 2009 1:01 AM To: linuxppc-dev@lists.ozlabs.org Subject: kilauea/405ex external interrupts Hi, I'm writing a linux driver that uses an external interrupt (ppc 405ex). I'm using GPIO pin 30 (external IRQ 1) connected to UIC1. I'm aware of the virtual interrupt stuff, so I added a new node to my device tree in order to get proper virtual IRQ number. This node describes an external event and its connection to UIC via the mentioned ext. int. Here is a sample of the divce-tree: .. UIC1: interrupt-controller1 { compatible = ibm,uic-405ex,ibm,uic; interrupt-controller; cell-index = 1; dcr-reg = 0x0d0 0x009; #address-cells = 0; #size-cells = 0; #interrupt-cells = 2; interrupts = 0x1e 0x4 0x1f 0x4; /* cascade */ interrupt-parent = UIC0; }; EXTEVENT: external_event { device_type = external; #address-cells = 0; #size-cells = 0; #interrupt-cells = 2; interrupts = 0x1e 0x1; interrupt-parent = UIC1; }; ... Then I use function irq_of_parse_and_map() which returns the virtual IRQ number 22. So, request_irq() seems to be satisfied with this number. I can see this interrupt in the /proc/interrupts. But! When I connect a signal source to the pin 30, nothing happens - the interrupt service routine isn't called. Am I suppose to configure anything else? (e. g. pin multiplexing, further device-tree tuning...) Thank you! Best regards, Ladi ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev