IDE driver support in PPC440
Xupei Liang
tliang at yahoo.com
Fri May 16 00:56:17 EST 2003
Hi, Eugene,
Thank you for pointing out this. I have updated
ibm440.h and ppc4xx_pic.c as well. Now, in
ppc405_disable_and_ack(), besides acking the
interrupt, it will clear UIC0_UIC1NC bit in the
UIC0_SR register as well. That works for my
board.
Thanks.
Regards,
Terry L.
--- Eugene Surovegin <ebs at ebshome.net> wrote:
>
> At 08:20 AM 5/14/2003, Xupei Liang wrote:
> >Hi, Eugene,
> >
> >The IRQ7 is setup as level trigger and active low.
>
> <snip>
>
> >This time, ppc405_pic_get_irq() returns irq 64
> because
> >the routine knows that all interrupts have been
> >disabled (I have looked at UIC_ER0 and UIC_ER1
> >and verified that is the case).
>
> No, this is not correct, it should return -1.
> Otherwise do_IRQ will spin forever (see
> arch/ppc/kernel/irq.c)
>
> Here is the code in question:
>
> int
> ppc405_pic_get_irq(struct pt_regs *regs)
> {
>
> ........
>
> if (irq == (NR_UIC_IRQS * NR_UICS))
> irq = -1;
>
> #ifdef UIC_DEBUG
> printk("ppc405_pic_get_irq - irq %d bit
> 0x%x\n", irq, bits);
> #endif
>
> return (irq);
> }
>
>
> Check, that NR_UIC_IRQS == 32 (defined in
> include/arch-ppc/irq.h)
> and NR_UICS == 2 (defined in
> /include/arch-ppc/ibm440.h) in your tree.
>
> They weren't set correctly in some early versions of
> 440GP code.
>
> Eugene
>
>
>
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list