changeset 240:41d57d7ba5e1

Kernel fixes to get PowerPC to work under qemu.
author Rob Landley <rob@landley.net>
date Wed, 31 Oct 2007 13:54:54 -0500
parents c36355e307b4
children 31ebe0042324
files sources/patches/linux-2.6.23-fixppcnet.patch sources/patches/linux-2.6.23-ppcne2khack.patch
diffstat 2 files changed, 89 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sources/patches/linux-2.6.23-fixppcnet.patch	Wed Oct 31 13:54:54 2007 -0500
@@ -0,0 +1,75 @@
+What this patch actually fixes is the interrupt handling in the ISA controller.
+Since both IDE and NE2K go through ISA on Prep...
+
+Date: Fri, 19 Oct 2007 21:39:25 +0200
+From: Aurelien Jarno <aurelien@aurel32.net>
+To: Jocelyn Mayer <l_indien@magic.fr>
+Subject: Re: [Qemu-devel] I got a kernel booted under qemu-system-ppc !
+Message-ID: <20071019193925.GA30604@hall.aurel32.net>
+
+On Fri, Oct 19, 2007 at 07:39:47PM +0200, Jocelyn Mayer wrote:
+> > The small patch below fixes the IDE problem, but not the NE2000 ISA one.
+> > Please apply.
+> 
+> Interesting, thanks. I'll test this and apply or check for more fixes if
+> needed... I'll also try to check what's happening with the NE2000. Could
+> it be the ne2000_irq table in ppc_prep.c would not be correct ? It may
+> also be usefull to be able to use PCI network devices, if the target
+> runs properly, isn't it ?
+
+Well the problem is actually in the kernel, MIPS got the exact same
+problem a few times ago. The same fix apply for PowerPC:
+
+Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
+
+diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c
+index ad87adc..9134b2e 100644
+--- a/arch/powerpc/sysdev/i8259.c
++++ b/arch/powerpc/sysdev/i8259.c
+@@ -138,6 +138,7 @@ static void i8259_unmask_irq(unsigned int irq_nr)
+ static struct irq_chip i8259_pic = {
+ 	.typename	= " i8259    ",
+ 	.mask		= i8259_mask_irq,
++	.disable	= i8259_mask_irq,
+ 	.unmask		= i8259_unmask_irq,
+ 	.mask_ack	= i8259_mask_and_ack_irq,
+ };
+
+
+I will submit it later this week-end.
+
+
+> If the proposed ROM image is best suitable to make PreP target run (and
+> as I don't spend a lot of time hacking OHW those days), it may also be
+> interesting to add a ppc_prep_rom.bin to the repository... In fact, it
+> was maybe not a good idea to try to use the same BIOS image on all
+> PowerPC targets...
+
+I would say that the main avantage of this proposed ROM is that it is
+plainly functional with a recent kernel. I think that it is something
+really important, as it will bring more users who will improve qemu ppc
+by reporting bugs or even submitting patches. 
+
+And if a better ROM image (e.g. OpenBIOS) that matches real hardware
+comes later it would be possible to change that again.
+
+
+I have used QEMU CVS with a Debian Sid image. It basically works, I am
+even able to login via SSH, but I have noticed two problems:
+
+- Some process hang, stay into "D" state and become unkillable. It seems
+  it can happen to all processes, but it is always reproducible with
+  uptime or top. I still don't know if it is a problem of the kernel or
+  if it comes from the emulation.
+- The target CPU never gets into idle loop, so the host CPU is always
+  used at 100%
+
+-- 
+  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
+ : :' :  Debian developer           | Electrical Engineer
+ `. `'   aurel32@debian.org         | aurelien@aurel32.net
+   `-    people.debian.org/~aurel32 | www.aurel32.net
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sources/patches/linux-2.6.23-ppcne2khack.patch	Wed Oct 31 13:54:54 2007 -0500
@@ -0,0 +1,14 @@
+# Force ISA ne2000 card to fallback to irq9 if it can't figure it out.
+
+--- linux/drivers/net/ne.c	2007-10-13 23:23:11.000000000 -0500
++++ linux/drivers/net/ne.c	2007-10-28 09:56:56.000000000 -0500
+@@ -477,7 +478,8 @@
+ 		dev->irq = probe_irq_off(cookie);
+ 		if (ei_debug > 2)
+ 			printk(" autoirq is %d\n", dev->irq);
+-	} else if (dev->irq == 2)
++	}
++	if (!dev->irq || dev->irq == 2)
+ 		/* Fixup for users that don't know that IRQ 2 is really IRQ 9,
+ 		   or don't know which one to set. */
+ 		dev->irq = 9;