diff options
Diffstat (limited to 'arch/powerpc/kernel/setup_64.c')
-rw-r--r-- | arch/powerpc/kernel/setup_64.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 6b52cce872be..b0994050024f 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -277,16 +277,21 @@ void __init early_setup(unsigned long dt_ptr) | |||
277 | DBG("Found, Initializing memory management...\n"); | 277 | DBG("Found, Initializing memory management...\n"); |
278 | 278 | ||
279 | /* | 279 | /* |
280 | * Initialize stab / SLB management | 280 | * Initialize the MMU Hash table and create the linear mapping |
281 | * of memory. Has to be done before stab/slb initialization as | ||
282 | * this is currently where the page size encoding is obtained | ||
281 | */ | 283 | */ |
282 | if (!firmware_has_feature(FW_FEATURE_ISERIES)) | 284 | htab_initialize(); |
283 | stab_initialize(lpaca->stab_real); | ||
284 | 285 | ||
285 | /* | 286 | /* |
286 | * Initialize the MMU Hash table and create the linear mapping | 287 | * Initialize stab / SLB management except on iSeries |
287 | * of memory | ||
288 | */ | 288 | */ |
289 | htab_initialize(); | 289 | if (!firmware_has_feature(FW_FEATURE_ISERIES)) { |
290 | if (cpu_has_feature(CPU_FTR_SLB)) | ||
291 | slb_initialize(); | ||
292 | else | ||
293 | stab_initialize(lpaca->stab_real); | ||
294 | } | ||
290 | 295 | ||
291 | DBG(" <- early_setup()\n"); | 296 | DBG(" <- early_setup()\n"); |
292 | } | 297 | } |
@@ -552,10 +557,12 @@ static void __init irqstack_early_init(void) | |||
552 | * SLB misses on them. | 557 | * SLB misses on them. |
553 | */ | 558 | */ |
554 | for_each_cpu(i) { | 559 | for_each_cpu(i) { |
555 | softirq_ctx[i] = (struct thread_info *)__va(lmb_alloc_base(THREAD_SIZE, | 560 | softirq_ctx[i] = (struct thread_info *) |
556 | THREAD_SIZE, 0x10000000)); | 561 | __va(lmb_alloc_base(THREAD_SIZE, |
557 | hardirq_ctx[i] = (struct thread_info *)__va(lmb_alloc_base(THREAD_SIZE, | 562 | THREAD_SIZE, 0x10000000)); |
558 | THREAD_SIZE, 0x10000000)); | 563 | hardirq_ctx[i] = (struct thread_info *) |
564 | __va(lmb_alloc_base(THREAD_SIZE, | ||
565 | THREAD_SIZE, 0x10000000)); | ||
559 | } | 566 | } |
560 | } | 567 | } |
561 | #else | 568 | #else |
@@ -583,8 +590,8 @@ static void __init emergency_stack_init(void) | |||
583 | limit = min(0x10000000UL, lmb.rmo_size); | 590 | limit = min(0x10000000UL, lmb.rmo_size); |
584 | 591 | ||
585 | for_each_cpu(i) | 592 | for_each_cpu(i) |
586 | paca[i].emergency_sp = __va(lmb_alloc_base(PAGE_SIZE, 128, | 593 | paca[i].emergency_sp = |
587 | limit)) + PAGE_SIZE; | 594 | __va(lmb_alloc_base(HW_PAGE_SIZE, 128, limit)) + HW_PAGE_SIZE; |
588 | } | 595 | } |
589 | 596 | ||
590 | /* | 597 | /* |