Hi Henk, On Mon, Mar 8, 2010 at 8:20 AM, Henk Stegeman <henk.stege...@gmail.com> wrote: > I'm trying to make use of the GPT as interrupt controller. > My driver is getting most, but not all of the interrupts, besides that > I'm getting a whole bunch of spurious IRQs, so I'm trying to figure > out what's wrong. > > gpt6: ti...@660 { > compatible = "fsl,mpc5200b-gpt","fsl,mpc5200-gpt"; > reg = <0x660 0x10>; > interrupts = <1 15 0>; > interrupt-controller; > #interrupt-cells = <1>; > }; > > My device has the interrupt-parent property which links it to the > above interrupt controller. > > ...@f00 { > #address-cells = <1>; > #size-cells = <0>; > compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi"; > reg = <0xf00 0x20>; > interrupts = <2 13 0 2 14 0>; > > io-control...@0 { > compatible = "microkey,smc4000io"; > linux,modalias = "of_smc4000io"; > spi-max-frequency = <800000>; > spi-cpha; > reg = <0>; > word-delay-us = <30>; > interrupt-parent = <&gpt6>; > interrupts = <2>; // And make it edge falling > }; > > There are two things I find suspicious: > - First of all my interrupt is listed as virq# 16, shouldn't it be > virq# 0x50 ? (16 is te L2 value virq# 0x50 of mpc52xx_irqhost_map)
The GPT irq registered as a different IRQ controller, so it will be assigned an entirely different number within the virq range. > - Secondly in mpc52xx_gpt.c mpc52xx_gpt_irq_mask() and > mpc52xx_gpt_irq_unmask() resp. clear and set the IrqEn bit of the GPT, > which is described in the MPC5200B_UM as "enables interrupt generation > to the CPU for all modes". The word 'generation' makes me suspicious, > because it could mean that while irqEn is cleared an edge on the GPT's > input does not even request an IRQ immediately after the bit is > cleared. Or in other words, clearing the bit could do more that just > masking. Could be, the IRQ support has not gotten extensive testing. It may require additional work. > ~ # cat /proc/interrupts > CPU0 > 16: 1338686 MPC52xx GPT Edge smc4000io > 129: 83224 MPC52xx Peripherals Level mpc52xx_psc_uart > 130: 1 MPC52xx Peripherals Level mpc52xx_psc_uart > 133: 0 MPC52xx Peripherals Level mpc52xx-fec_ctrl > 134: 0 MPC52xx Peripherals Level ohci_hcd:usb1 > 135: 16127 MPC52xx Peripherals Level mpc52xx_ata > 141: 0 MPC52xx Peripherals Level mpc5200-spi-modf > 142: 79184 MPC52xx Peripherals Level mpc5200-spi-spif > 192: 0 MPC52xx SDMA Level ATA task > 193: 15 MPC52xx SDMA Level mpc52xx-fec_rx > 194: 35615 MPC52xx SDMA Level mpc52xx-fec_tx > LOC: 134286 Local timer interrupts > SPU: 576958 Spurious interrupts > CNT: 0 Performance monitoring interrupts > MCE: 0 Machine check exceptions > > ~ # dmesg |grep 660 > [ 1.975928] irq: irq 0 on host /soc5...@f0000000/ti...@660 mapped > to virtual irq 16 > > ~ # dmesg | grep host_map > [ 0.000000] mpc52xx_irqhost_map: virq=81, l1=2, l2=1 > [ 0.319272] mpc52xx_irqhost_map: External IRQ1 virq=41, hw=41. type=8 > [ 0.376117] mpc52xx_irqhost_map: virq=49, l1=1, l2=9 > [ 0.417213] mpc52xx_irqhost_map: virq=4a, l1=1, l2=10 > [ 0.452119] mpc52xx_irqhost_map: virq=4b, l1=1, l2=11 > [ 0.487031] mpc52xx_irqhost_map: virq=4c, l1=1, l2=12 > [ 0.529899] mpc52xx_irqhost_map: virq=4d, l1=1, l2=13 > [ 0.564821] mpc52xx_irqhost_map: virq=4e, l1=1, l2=14 > [ 0.599744] mpc52xx_irqhost_map: virq=4f, l1=1, l2=15 > [ 0.634669] mpc52xx_irqhost_map: virq=50, l1=1, l2=16 > [ 1.629764] mpc52xx_irqhost_map: virq=82, l1=2, l2=2 > [ 1.667194] mpc52xx_irqhost_map: virq=84, l1=2, l2=4 > [ 1.763299] mpc52xx_irqhost_map: virq=87, l1=2, l2=7 > [ 1.790510] mpc52xx_irqhost_map: virq=c0, l1=3, l2=0 > [ 1.909341] mpc52xx_irqhost_map: virq=8d, l1=2, l2=13 > [ 1.936712] mpc52xx_irqhost_map: virq=8e, l1=2, l2=14 > [ 2.055579] mpc52xx_irqhost_map: virq=c1, l1=3, l2=1 > [ 2.083018] mpc52xx_irqhost_map: virq=c2, l1=3, l2=2 > [ 2.110345] mpc52xx_irqhost_map: virq=85, l1=2, l2=5 > [ 2.211890] mpc52xx_irqhost_map: virq=86, l1=2, l2=6 This grep only shows the output from mpc52xx_intc.c. The GPT driver has its own IRQ mapping function; mpc52xx_gpt_irq_map(), which is why you're not seeing your IRQ map debug message. Cheers, g. -- Grant Likely, B.Sc., P.Eng. Secret Lab Technologies Ltd. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev