[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>
This commit is contained in:
Родитель
24bfb00123
Коммит
a82765b6ee
|
@ -405,6 +405,46 @@ static int __init set_preferred_console(void)
|
|||
console_initcall(set_preferred_console);
|
||||
#endif /* CONFIG_PPC_MULTIPLATFORM */
|
||||
|
||||
void __init check_for_initrd(void)
|
||||
{
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
unsigned long *prop;
|
||||
|
||||
DBG(" -> check_for_initrd()\n");
|
||||
|
||||
if (of_chosen) {
|
||||
prop = (unsigned long *)get_property(of_chosen,
|
||||
"linux,initrd-start", NULL);
|
||||
if (prop != NULL) {
|
||||
initrd_start = (unsigned long)__va(*prop);
|
||||
prop = (unsigned long *)get_property(of_chosen,
|
||||
"linux,initrd-end", NULL);
|
||||
if (prop != NULL) {
|
||||
initrd_end = (unsigned long)__va(*prop);
|
||||
initrd_below_start_ok = 1;
|
||||
} else
|
||||
initrd_start = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* If we were passed an initrd, set the ROOT_DEV properly if the values
|
||||
* look sensible. If not, clear initrd reference.
|
||||
*/
|
||||
if (initrd_start >= KERNELBASE && initrd_end >= KERNELBASE &&
|
||||
initrd_end > initrd_start)
|
||||
ROOT_DEV = Root_RAM0;
|
||||
else {
|
||||
printk("Bogus initrd %08lx %08lx\n", initrd_start, initrd_end);
|
||||
initrd_start = initrd_end = 0;
|
||||
}
|
||||
|
||||
if (initrd_start)
|
||||
printk("Found initrd at 0x%lx:0x%lx\n", initrd_start, initrd_end);
|
||||
|
||||
DBG(" <- check_for_initrd()\n");
|
||||
#endif /* CONFIG_BLK_DEV_INITRD */
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
/**
|
||||
|
|
|
@ -286,6 +286,7 @@ void __init setup_arch(char **cmdline_p)
|
|||
loops_per_jiffy = 500000000 / HZ;
|
||||
|
||||
unflatten_device_tree();
|
||||
check_for_initrd();
|
||||
finish_device_tree();
|
||||
|
||||
smp_setup_cpu_maps();
|
||||
|
|
|
@ -395,43 +395,6 @@ static void __init initialize_cache_info(void)
|
|||
DBG(" <- initialize_cache_info()\n");
|
||||
}
|
||||
|
||||
static void __init check_for_initrd(void)
|
||||
{
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
u64 *prop;
|
||||
|
||||
DBG(" -> check_for_initrd()\n");
|
||||
|
||||
if (of_chosen) {
|
||||
prop = (u64 *)get_property(of_chosen,
|
||||
"linux,initrd-start", NULL);
|
||||
if (prop != NULL) {
|
||||
initrd_start = (unsigned long)__va(*prop);
|
||||
prop = (u64 *)get_property(of_chosen,
|
||||
"linux,initrd-end", NULL);
|
||||
if (prop != NULL) {
|
||||
initrd_end = (unsigned long)__va(*prop);
|
||||
initrd_below_start_ok = 1;
|
||||
} else
|
||||
initrd_start = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* If we were passed an initrd, set the ROOT_DEV properly if the values
|
||||
* look sensible. If not, clear initrd reference.
|
||||
*/
|
||||
if (initrd_start >= KERNELBASE && initrd_end >= KERNELBASE &&
|
||||
initrd_end > initrd_start)
|
||||
ROOT_DEV = Root_RAM0;
|
||||
else
|
||||
initrd_start = initrd_end = 0;
|
||||
|
||||
if (initrd_start)
|
||||
printk("Found initrd at 0x%lx:0x%lx\n", initrd_start, initrd_end);
|
||||
|
||||
DBG(" <- check_for_initrd()\n");
|
||||
#endif /* CONFIG_BLK_DEV_INITRD */
|
||||
}
|
||||
|
||||
/*
|
||||
* Do some initial setup of the system. The parameters are those which
|
||||
|
|
Загрузка…
Ссылка в новой задаче