[coreboot] SeaBIOS and noisy irqs

Kevin O'Connor kevin at koconnor.net
Tue Feb 3 00:11:13 CET 2009


On Mon, Feb 02, 2009 at 02:31:38PM -0700, Myles Watson wrote:
> Got noisy pic1 irq 00000000
> ...
> 
> I'm trying to get Coreboot+SeaBIOS to boot the grub installed on my
> hard drive.  I have a Tyan s2895.
> 
> Sometimes it gets past this, sometimes it doesn't.  Is there a workaround?

This looks like there is something wrong with the irq routing in
coreboot.  A hardware irq handler is being called, but the pic doesn't
report any irqs pending.

Technically, seabios shouldn't be masking irqs - so, it is possible
that is causing a problem if your board is also running option roms
(eg, network or disk).

We've also seen issues with option roms getting confused by coreboot
not setting the PCI_INTERRUPT_LINE setting.

Finally, if the failures are sporadic, I guess it could be the
reporting itself that is causing a problem.  You could try the patch
below (which also disables masking).

-Kevin


--- a/src/pic.c
+++ b/src/pic.c
@@ -34,20 +34,24 @@ pic_setup()
 void VISIBLE16
 handle_hwpic1(struct bregs *regs)
 {
+#if 0
     u8 isr = get_pic1_isr();
     dprintf(DEBUG_ISR_hwpic1, "Got noisy pic1 irq %x\n", isr);
     isr &= ~PIC1_IRQ2; // don't ever mask the cascaded irq
     if (isr)
         mask_pic1(isr);
+#endif
     eoi_pic1();
 }
 
 void VISIBLE16
 handle_hwpic2(struct bregs *regs)
 {
+#if 0
     u8 isr = get_pic2_isr();
     dprintf(DEBUG_ISR_hwpic2, "Got noisy pic2 irq %x\n", isr);
     if (isr)
         mask_pic2(isr);
+#endif
     eoi_pic2();
 }




More information about the coreboot mailing list