diff options
author | David Woodhouse <dwmw2@infradead.org> | 2005-11-02 17:34:20 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-11-07 19:16:41 -0500 |
commit | a82765b6eee3d1267ded3320ca67b39fe1844599 (patch) | |
tree | 2b9273f931724303d1c1c968684bed0146e2da61 | |
parent | 24bfb00123e82a2e70bd115277d922438813515b (diff) |
[PATCH] powerpc: Fix ppc32 initrd
OK, the Fedora ppc32 and ppc64 kernels should both be arch/powerpc by
tomorrow. They're booting on G5, POWER5, and my powerbook. I'll test
pmac SMP and Pegasos later -- but pmac smp is known broken in arch/ppc
anyway, and I'll live with a potential Pegasos regression for now; it
wasn't supported officially in FC4 either.
I needed to fix ppc32 initrd -- we were never setting initrd_start.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | arch/powerpc/kernel/setup-common.c | 40 | ||||
-rw-r--r-- | arch/powerpc/kernel/setup_32.c | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/setup_64.c | 37 |
3 files changed, 41 insertions, 37 deletions
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index d43fa8c0e5ac..e22856ecb5a0 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c | |||
@@ -405,6 +405,46 @@ static int __init set_preferred_console(void) | |||
405 | console_initcall(set_preferred_console); | 405 | console_initcall(set_preferred_console); |
406 | #endif /* CONFIG_PPC_MULTIPLATFORM */ | 406 | #endif /* CONFIG_PPC_MULTIPLATFORM */ |
407 | 407 | ||
408 | void __init check_for_initrd(void) | ||
409 | { | ||
410 | #ifdef CONFIG_BLK_DEV_INITRD | ||
411 | unsigned long *prop; | ||
412 | |||
413 | DBG(" -> check_for_initrd()\n"); | ||
414 | |||
415 | if (of_chosen) { | ||
416 | prop = (unsigned long *)get_property(of_chosen, | ||
417 | "linux,initrd-start", NULL); | ||
418 | if (prop != NULL) { | ||
419 | initrd_start = (unsigned long)__va(*prop); | ||
420 | prop = (unsigned long *)get_property(of_chosen, | ||
421 | "linux,initrd-end", NULL); | ||
422 | if (prop != NULL) { | ||
423 | initrd_end = (unsigned long)__va(*prop); | ||
424 | initrd_below_start_ok = 1; | ||
425 | } else | ||
426 | initrd_start = 0; | ||
427 | } | ||
428 | } | ||
429 | |||
430 | /* If we were passed an initrd, set the ROOT_DEV properly if the values | ||
431 | * look sensible. If not, clear initrd reference. | ||
432 | */ | ||
433 | if (initrd_start >= KERNELBASE && initrd_end >= KERNELBASE && | ||
434 | initrd_end > initrd_start) | ||
435 | ROOT_DEV = Root_RAM0; | ||
436 | else { | ||
437 | printk("Bogus initrd %08lx %08lx\n", initrd_start, initrd_end); | ||
438 | initrd_start = initrd_end = 0; | ||
439 | } | ||
440 | |||
441 | if (initrd_start) | ||
442 | printk("Found initrd at 0x%lx:0x%lx\n", initrd_start, initrd_end); | ||
443 | |||
444 | DBG(" <- check_for_initrd()\n"); | ||
445 | #endif /* CONFIG_BLK_DEV_INITRD */ | ||
446 | } | ||
447 | |||
408 | #ifdef CONFIG_SMP | 448 | #ifdef CONFIG_SMP |
409 | 449 | ||
410 | /** | 450 | /** |
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index b45eedbb4b3a..3af2631e3fab 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
@@ -286,6 +286,7 @@ void __init setup_arch(char **cmdline_p) | |||
286 | loops_per_jiffy = 500000000 / HZ; | 286 | loops_per_jiffy = 500000000 / HZ; |
287 | 287 | ||
288 | unflatten_device_tree(); | 288 | unflatten_device_tree(); |
289 | check_for_initrd(); | ||
289 | finish_device_tree(); | 290 | finish_device_tree(); |
290 | 291 | ||
291 | smp_setup_cpu_maps(); | 292 | smp_setup_cpu_maps(); |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 785fd9d7b386..0471e843b6c5 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -395,43 +395,6 @@ static void __init initialize_cache_info(void) | |||
395 | DBG(" <- initialize_cache_info()\n"); | 395 | DBG(" <- initialize_cache_info()\n"); |
396 | } | 396 | } |
397 | 397 | ||
398 | static void __init check_for_initrd(void) | ||
399 | { | ||
400 | #ifdef CONFIG_BLK_DEV_INITRD | ||
401 | u64 *prop; | ||
402 | |||
403 | DBG(" -> check_for_initrd()\n"); | ||
404 | |||
405 | if (of_chosen) { | ||
406 | prop = (u64 *)get_property(of_chosen, | ||
407 | "linux,initrd-start", NULL); | ||
408 | if (prop != NULL) { | ||
409 | initrd_start = (unsigned long)__va(*prop); | ||
410 | prop = (u64 *)get_property(of_chosen, | ||
411 | "linux,initrd-end", NULL); | ||
412 | if (prop != NULL) { | ||
413 | initrd_end = (unsigned long)__va(*prop); | ||
414 | initrd_below_start_ok = 1; | ||
415 | } else | ||
416 | initrd_start = 0; | ||
417 | } | ||
418 | } | ||
419 | |||
420 | /* If we were passed an initrd, set the ROOT_DEV properly if the values | ||
421 | * look sensible. If not, clear initrd reference. | ||
422 | */ | ||
423 | if (initrd_start >= KERNELBASE && initrd_end >= KERNELBASE && | ||
424 | initrd_end > initrd_start) | ||
425 | ROOT_DEV = Root_RAM0; | ||
426 | else | ||
427 | initrd_start = initrd_end = 0; | ||
428 | |||
429 | if (initrd_start) | ||
430 | printk("Found initrd at 0x%lx:0x%lx\n", initrd_start, initrd_end); | ||
431 | |||
432 | DBG(" <- check_for_initrd()\n"); | ||
433 | #endif /* CONFIG_BLK_DEV_INITRD */ | ||
434 | } | ||
435 | 398 | ||
436 | /* | 399 | /* |
437 | * Do some initial setup of the system. The parameters are those which | 400 | * Do some initial setup of the system. The parameters are those which |