aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/boot/of.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2007-04-12 20:46:21 -0400
committerPaul Mackerras <paulus@samba.org>2007-04-12 20:46:21 -0400
commit390cbb56a731546edc0f35fbc4c5045676467581 (patch)
tree04d9b93ef11262d5b22c5b31810f1cdcb17affe9 /arch/powerpc/boot/of.c
parent0727702a3a6a9e33db4a4f9a038327d014753b6e (diff)
[POWERPC] Fix detection of loader-supplied initrd on OF platforms
Commit 79c8541924a220964f9f2cbed31eaa9fdb042eab introduced code to move the initrd if it was in a place where it would get overwritten by the kernel image. Unfortunately this exposed the fact that the code that checks whether the values passed in r3 and r4 are intended to indicate the start address and size of an initrd image was not as thorough as the kernel's checks. The symptom is that on OF-based platforms, the bootwrapper can cause an exception which causes the system to drop back into OF. Previously it didn't matter so much if the code incorrectly thought that there was an initrd, since the values for start and size were just passed through to the kernel. Now the bootwrapper needs to apply the same checks as the kernel since it is now using the initrd data itself (in the process of copying it if necessary). This adds the code to do that. Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/boot/of.c')
-rw-r--r--arch/powerpc/boot/of.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/powerpc/boot/of.c b/arch/powerpc/boot/of.c
index 2cec5c17fb60..8fb42b63ec53 100644
--- a/arch/powerpc/boot/of.c
+++ b/arch/powerpc/boot/of.c
@@ -282,6 +282,8 @@ void platform_init(unsigned long a1, unsigned long a2, void *promptr)
282 282
283 prom = (int (*)(void *))promptr; 283 prom = (int (*)(void *))promptr;
284 loader_info.promptr = promptr; 284 loader_info.promptr = promptr;
285 loader_info.initrd_addr = a1; 285 if (a1 && a2 && a2 != 0xdeadbeef) {
286 loader_info.initrd_size = a2; 286 loader_info.initrd_addr = a1;
287 loader_info.initrd_size = a2;
288 }
287} 289}