diff options
Diffstat (limited to 'arch/powerpc/kernel/prom_init.c')
-rw-r--r-- | arch/powerpc/kernel/prom_init.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index b72849ac7db3..2fdbc18ae94a 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
@@ -732,7 +732,7 @@ static struct fake_elf { | |||
732 | u32 ignore_me; | 732 | u32 ignore_me; |
733 | } rpadesc; | 733 | } rpadesc; |
734 | } rpanote; | 734 | } rpanote; |
735 | } fake_elf = { | 735 | } fake_elf __section(.fakeelf) = { |
736 | .elfhdr = { | 736 | .elfhdr = { |
737 | .e_ident = { 0x7f, 'E', 'L', 'F', | 737 | .e_ident = { 0x7f, 'E', 'L', 'F', |
738 | ELFCLASS32, ELFDATA2MSB, EV_CURRENT }, | 738 | ELFCLASS32, ELFDATA2MSB, EV_CURRENT }, |
@@ -774,13 +774,13 @@ static struct fake_elf { | |||
774 | .type = 0x12759999, | 774 | .type = 0x12759999, |
775 | .name = "IBM,RPA-Client-Config", | 775 | .name = "IBM,RPA-Client-Config", |
776 | .rpadesc = { | 776 | .rpadesc = { |
777 | .lpar_affinity = 0, | 777 | .lpar_affinity = 1, |
778 | .min_rmo_size = 64, /* in megabytes */ | 778 | .min_rmo_size = 128, /* in megabytes */ |
779 | .min_rmo_percent = 0, | 779 | .min_rmo_percent = 0, |
780 | .max_pft_size = 48, /* 2^48 bytes max PFT size */ | 780 | .max_pft_size = 46, /* 2^46 bytes max PFT size */ |
781 | .splpar = 1, | 781 | .splpar = 1, |
782 | .min_load = ~0U, | 782 | .min_load = ~0U, |
783 | .new_mem_def = 0 | 783 | .new_mem_def = 1 |
784 | } | 784 | } |
785 | } | 785 | } |
786 | }; | 786 | }; |
@@ -1321,7 +1321,7 @@ static void __init prom_initialize_tce_table(void) | |||
1321 | * | 1321 | * |
1322 | * -- Cort | 1322 | * -- Cort |
1323 | */ | 1323 | */ |
1324 | extern void __secondary_hold(void); | 1324 | extern char __secondary_hold; |
1325 | extern unsigned long __secondary_hold_spinloop; | 1325 | extern unsigned long __secondary_hold_spinloop; |
1326 | extern unsigned long __secondary_hold_acknowledge; | 1326 | extern unsigned long __secondary_hold_acknowledge; |
1327 | 1327 | ||
@@ -1342,13 +1342,7 @@ static void __init prom_hold_cpus(void) | |||
1342 | = (void *) LOW_ADDR(__secondary_hold_spinloop); | 1342 | = (void *) LOW_ADDR(__secondary_hold_spinloop); |
1343 | unsigned long *acknowledge | 1343 | unsigned long *acknowledge |
1344 | = (void *) LOW_ADDR(__secondary_hold_acknowledge); | 1344 | = (void *) LOW_ADDR(__secondary_hold_acknowledge); |
1345 | #ifdef CONFIG_PPC64 | ||
1346 | /* __secondary_hold is actually a descriptor, not the text address */ | ||
1347 | unsigned long secondary_hold | ||
1348 | = __pa(*PTRRELOC((unsigned long *)__secondary_hold)); | ||
1349 | #else | ||
1350 | unsigned long secondary_hold = LOW_ADDR(__secondary_hold); | 1345 | unsigned long secondary_hold = LOW_ADDR(__secondary_hold); |
1351 | #endif | ||
1352 | 1346 | ||
1353 | prom_debug("prom_hold_cpus: start...\n"); | 1347 | prom_debug("prom_hold_cpus: start...\n"); |
1354 | prom_debug(" 1) spinloop = 0x%x\n", (unsigned long)spinloop); | 1348 | prom_debug(" 1) spinloop = 0x%x\n", (unsigned long)spinloop); |
@@ -2315,13 +2309,14 @@ static void __init prom_check_initrd(unsigned long r3, unsigned long r4) | |||
2315 | 2309 | ||
2316 | unsigned long __init prom_init(unsigned long r3, unsigned long r4, | 2310 | unsigned long __init prom_init(unsigned long r3, unsigned long r4, |
2317 | unsigned long pp, | 2311 | unsigned long pp, |
2318 | unsigned long r6, unsigned long r7) | 2312 | unsigned long r6, unsigned long r7, |
2313 | unsigned long kbase) | ||
2319 | { | 2314 | { |
2320 | struct prom_t *_prom; | 2315 | struct prom_t *_prom; |
2321 | unsigned long hdr; | 2316 | unsigned long hdr; |
2322 | unsigned long offset = reloc_offset(); | ||
2323 | 2317 | ||
2324 | #ifdef CONFIG_PPC32 | 2318 | #ifdef CONFIG_PPC32 |
2319 | unsigned long offset = reloc_offset(); | ||
2325 | reloc_got2(offset); | 2320 | reloc_got2(offset); |
2326 | #endif | 2321 | #endif |
2327 | 2322 | ||
@@ -2355,9 +2350,11 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, | |||
2355 | */ | 2350 | */ |
2356 | RELOC(of_platform) = prom_find_machine_type(); | 2351 | RELOC(of_platform) = prom_find_machine_type(); |
2357 | 2352 | ||
2353 | #ifndef CONFIG_RELOCATABLE | ||
2358 | /* Bail if this is a kdump kernel. */ | 2354 | /* Bail if this is a kdump kernel. */ |
2359 | if (PHYSICAL_START > 0) | 2355 | if (PHYSICAL_START > 0) |
2360 | prom_panic("Error: You can't boot a kdump kernel from OF!\n"); | 2356 | prom_panic("Error: You can't boot a kdump kernel from OF!\n"); |
2357 | #endif | ||
2361 | 2358 | ||
2362 | /* | 2359 | /* |
2363 | * Check for an initrd | 2360 | * Check for an initrd |
@@ -2377,7 +2374,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, | |||
2377 | * Copy the CPU hold code | 2374 | * Copy the CPU hold code |
2378 | */ | 2375 | */ |
2379 | if (RELOC(of_platform) != PLATFORM_POWERMAC) | 2376 | if (RELOC(of_platform) != PLATFORM_POWERMAC) |
2380 | copy_and_flush(0, KERNELBASE + offset, 0x100, 0); | 2377 | copy_and_flush(0, kbase, 0x100, 0); |
2381 | 2378 | ||
2382 | /* | 2379 | /* |
2383 | * Do early parsing of command line | 2380 | * Do early parsing of command line |
@@ -2480,7 +2477,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, | |||
2480 | reloc_got2(-offset); | 2477 | reloc_got2(-offset); |
2481 | #endif | 2478 | #endif |
2482 | 2479 | ||
2483 | __start(hdr, KERNELBASE + offset, 0); | 2480 | __start(hdr, kbase, 0); |
2484 | 2481 | ||
2485 | return 0; | 2482 | return 0; |
2486 | } | 2483 | } |