[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