Got noisy pic1 irq 00000000 Got noisy pic1 irq 00000000 Got noisy pic1 irq 00000000 Got noisy pic1 irq 00000000 Got noisy pic1 irq 00000000 Got noisy pic1 irq 00000000 Got noisy pic1 irq 00000000 Got noisy pic1 irq 00000000 Got noisy pic1 irq 00000000 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?
I didn't see anything that seemed related to this in the logs, so I didn't include the full log.
Thanks, Myles
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(); }