Interrupt-problem mpc5200
WITTROCK
jwittrock at maginst.com
Wed Sep 12 10:47:58 EST 2007
Is it possible the interrupt is going off as soon as you unmask it? Can you
show your "intmod_isr".
I had a similar problem when I pulled a "wittrock" and forgot to make the
interrupt edge sensitive, but from what I can see you have made yours edge
sensitive.
-WITTROCK
S. Fricke wrote:
>
>
> Dear Linux-enthusiasts,
>
> I'm still at the same problem.
>
> I have now implemented a irq_chip for the hardwired IRQ2. Now I have
>
>
> --==>
> volatile static struct mpc52xx_intr __iomem *intr;
> unsigned long flags;
> static DEFINE_SPINLOCK(my_irq_controller_lock);
>
> /*
> * HELPER-Function
> */
> static inline void io_be_setbit(u32 __iomem *addr, int bitno)
> {
> out_be32(addr, in_be32(addr) | (1 << bitno));
> }
>
> static inline void io_be_clrbit(u32 __iomem *addr, int bitno)
> {
> out_be32(addr, in_be32(addr) & ~(1 << bitno));
> }
>
> /*
> * IRQ-Zeugs
> */
> static void my_irq_ack(unsigned int irq)
> {
> printk("%s(%s/%d):\n", __FILE__, __FUNCTION__, __LINE__);
> spin_lock_irqsave(&my_irq_controller_lock, flags);
> if(intr)
> io_be_setbit(&intr->ctrl, 25);
> spin_unlock_irqrestore(&my_irq_controller_lock, flags);
> printk("%s(%s/%d):\n", __FILE__, __FUNCTION__, __LINE__);
> }
>
> /* irq - disabled */
> static void my_irq_mask(unsigned int irq)
> {
> printk("%s(%s/%d):\n", __FILE__, __FUNCTION__, __LINE__);
> spin_lock_irqsave(&my_irq_controller_lock, flags);
> if(intr)
> io_be_clrbit(&intr->ctrl, 9);
> spin_unlock_irqrestore(&my_irq_controller_lock, flags);
> printk("%s(%s/%d):\n", __FILE__, __FUNCTION__, __LINE__);
> }
>
> /* irq - enable */
> static void my_irq_unmask(unsigned int irq)
> {
> printk("%s(%s/%d):\n", __FILE__, __FUNCTION__, __LINE__);
> spin_lock_irqsave(&my_irq_controller_lock, flags);
> if(intr)
> io_be_setbit(&intr->ctrl, 9);
> spin_unlock_irqrestore(&my_irq_controller_lock, flags);
> printk("%s(%s/%d):\n", __FILE__, __FUNCTION__, __LINE__);
> }
>
> static struct irq_chip my_irq_chip = {
> .typename = "MY_IRQ_TEST",
> .ack = my_irq_ack,
> .mask = my_irq_mask,
> .unmask = my_irq_unmask,
> };
>
> static int __init mod_init( void )
> {
> // ...
>
> intr = mpc52xx_find_and_map("mpc52xx-pic");
> if(!intr) {
> panic(__FILE__ ": mpc52xx-pic - MAP failed");
> }
>
> set_irq_chip(MPC52xx_IRQ2, &my_irq_chip);
> a = request_irq(2, intmod_isr, IRQF_DISABLED , "intmod",
> INTMOD_IRQ_BOARD);
> printk("a: 0x%08x\n", a);
>
> // ...
> }
>
> <==--
>
> Now my code hangs on the my_irq_unmask(...)-function on "io_be_setbit".
> Why?
> Can anyone help me, or point me to the right newsgroup/forum?
>
> So long!
>
> Silvio
>
>
> --
> -- S. Fricke ----------------------------- MAILTO:silvio.fricke at gmail.com
> --
> Diplom-Informatiker (FH)
> Linux-Entwicklung JABBER: fricke at jabber.org
> ----------------------------------------------------------------------------
>
>
>
> _______________________________________________
> Linuxppc-embedded mailing list
> Linuxppc-embedded at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-embedded
>
--
View this message in context: http://www.nabble.com/Interrupt-problem-mpc5200-tf4413834.html#a12626802
Sent from the linuxppc-embedded mailing list archive at Nabble.com.
More information about the Linuxppc-embedded
mailing list