[kernel] r7439 - in dists/trunk/linux-2.6/debian: . patches

Sven Luther luther at costa.debian.org
Mon Sep 18 12:08:38 UTC 2006


Author: luther
Date: Mon Sep 18 12:08:36 2006
New Revision: 7439

Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/powerpc-oldworld-boot-fix.patch

Log:
Added new patch by Benjamin Herrenschmidt for the powermac/oldworld/quik ramdisk bug.


Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	(original)
+++ dists/trunk/linux-2.6/debian/changelog	Mon Sep 18 12:08:36 2006
@@ -20,9 +20,9 @@
     port, but at the cost powermac pcmcia serial cards support.
     Thanks go to Mark Hymers for providing the patch.
     (Closes: #364637, #375194)
-  * [powerpc] Added tentative patch to fix oldworld ramdisk size bug. 
-    Thanks fo to Christian Aichinger for investigating and providing the
-    patch. (Closes: #366620, #375035).
+  * [powerpc] Added patch to fix oldworld/quik booting.
+    Thanks fo to Christian Aichinger for investigating to Benjamin
+    Herrenschmidt for providingthe patch. (Closes: #366620, #375035).
   * [powerpc] Fixes hvc_console caused suspsend-to-disk breakage. Thanks to
     Andrew Morton for providing the patch. (Closes: #387178)
 

Modified: dists/trunk/linux-2.6/debian/patches/powerpc-oldworld-boot-fix.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/powerpc-oldworld-boot-fix.patch	(original)
+++ dists/trunk/linux-2.6/debian/patches/powerpc-oldworld-boot-fix.patch	Mon Sep 18 12:08:36 2006
@@ -1,40 +1,54 @@
-#
-# Patch author: Christian Aichinger <Greek0 at gmx.net>
+# Patch author: Benjamin Herrenschmidt <benh at kernel.crashing.org>
 # Description: Fix oldworld initrd loading problems.
-#  The kernel somehow loses the information where the initrd image is
-#  placed in memory. The correct data is there in
-#  arch/powerpc/kernel/prom_init.c:prom_check_initrd(), but in
-#  init/initramfs.c:populate_rootfs() it's wrong, initrd_{start,end}
-#  are both 0.
-#  arch/powerpc/kernel/prom_init.c:prom_check_initrd() is broken. The
-#  relevant part of the code is:
+#  It looks like older OF "setprop" is bogus and isn't actually copying the
+#  data but just taking a pointer. The LongTrail workaround also has that
+#  problem as "property" will not copy the data. This fixes the workaround
+#  and applies it to Apple OF 1.0.5.
+# Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
 # Closes:
 #  375035: Kernel 2.6.16 attempts to access root device before running initramfs init
 #  366620: initramfs-tools: 2.6.16-1-powerpc fails to mount rootfs, 2.6.15-1-powerpc works
 #
 
---- a/arch/powerpc/kernel/prom_init.c	2006-09-15 18:33:50.000000000 +0200
-+++ b/arch/powerpc/kernel/prom_init.c	2006-09-15 18:33:44.000000000 +0200
-@@ -2141,17 +2141,17 @@
-        	struct prom_t *_prom = &RELOC(prom);
+Index: linux-tika/arch/powerpc/kernel/prom_init.c
+===================================================================
+--- linux-tika.orig/arch/powerpc/kernel/prom_init.c	2006-09-02 09:53:00.000000000 +1000
++++ linux-tika/arch/powerpc/kernel/prom_init.c	2006-09-18 20:55:26.000000000 +1000
+@@ -102,7 +102,7 @@
+ #endif
  
- 	if (r3 && r4 && r4 != 0xdeadbeef) {
--		unsigned long val;
-+		unsigned long *ptr;
+ #define OF_WA_CLAIM	1	/* do phys/virt claim separately, then map */
+-#define OF_WA_LONGTRAIL	2	/* work around longtrail bugs */
++#define OF_WA_SETPROP	2	/* work around setprop bugs */
  
- 		RELOC(prom_initrd_start) = is_kernel_addr(r3) ? __pa(r3) : r3;
- 		RELOC(prom_initrd_end) = RELOC(prom_initrd_start) + r4;
+ #define PROM_BUG() do {						\
+         prom_printf("kernel BUG at %s line 0x%x!\n",		\
+@@ -472,7 +472,7 @@
+ {
+ 	char cmd[256], *p;
  
--		val = RELOC(prom_initrd_start);
-+		ptr = &RELOC(prom_initrd_start);
- 		prom_setprop(_prom->chosen, "/chosen", "linux,initrd-start",
--			     &val, sizeof(val));
--		val = RELOC(prom_initrd_end);
-+			     ptr, sizeof(prom_initrd_start));
-+		ptr = &RELOC(prom_initrd_end);
- 		prom_setprop(_prom->chosen, "/chosen", "linux,initrd-end",
--			     &val, sizeof(val));
-+			     ptr, sizeof(prom_initrd_end));
+-	if (!(OF_WORKAROUNDS & OF_WA_LONGTRAIL))
++	if (!(OF_WORKAROUNDS & OF_WA_SETPROP))
+ 		return call_prom("setprop", 4, 1, node, ADDR(pname),
+ 				 (u32)(unsigned long) value, (u32) valuelen);
  
- 		reserve_mem(RELOC(prom_initrd_start),
- 			    RELOC(prom_initrd_end) - RELOC(prom_initrd_start));
+@@ -482,6 +482,7 @@
+ 	add_string(&p, nodename);
+ 	add_string(&p, tohex((u32)(unsigned long) value));
+ 	add_string(&p, tohex(valuelen));
++	add_string(&p, "encode-bytes");
+ 	add_string(&p, tohex(ADDR(pname)));
+ 	add_string(&p, tohex(strlen(RELOC(pname))));
+ 	add_string(&p, "property");
+@@ -1466,9 +1467,9 @@
+ 	version[sizeof(version) - 1] = 0;
+ 	/* XXX might need to add other versions here */
+ 	if (strcmp(version, "Open Firmware, 1.0.5") == 0)
+-		of_workarounds = OF_WA_CLAIM;
++		of_workarounds = OF_WA_CLAIM | OF_WA_SETPROP;
+ 	else if (strncmp(version, "FirmWorks,3.", 12) == 0) {
+-		of_workarounds = OF_WA_CLAIM | OF_WA_LONGTRAIL;
++		of_workarounds = OF_WA_CLAIM | OF_WA_SETPROP;
+ 		call_prom("interpret", 1, 1, "dev /memory 0 to allow-reclaim");
+ 	} else
+ 		return;



More information about the Kernel-svn-changes mailing list