diff options
author | Anton Blanchard <anton@samba.org> | 2006-12-08 02:22:09 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-12-08 19:39:06 -0500 |
commit | a223535425eb28082a0925b0ce2f02f962936cf4 (patch) | |
tree | 37e8ccf0d904fb0836d40fd0f64c35013f41c0d7 /arch/powerpc | |
parent | 5773bbcdec54b7258cb9e2aa6f3459b4cbfd9dc5 (diff) |
[POWERPC] dont allow pSeries_probe to succeed without initialising MMU
pSeries_probe can decide that we are a pseries but then fail to
initialise the MMU. If an rtas node doesnt exist, we continually fall
out of pSeries_probe_hypertas early and never get to the MMU init code.
While pseries without RTAS is an illegal combination, the way we
currently fail is a pain to track down, and can happen if your flattened
device tree code has issues (like mine did :).
With the following patch we init the MMU, come up and print some
warnings about RTAS not existing, instead of looping on 0x400 exceptions.
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/platforms/pseries/setup.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 3e2f7467057d..042ecae107ac 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
@@ -422,11 +422,6 @@ static int __init pSeries_probe_hypertas(unsigned long node, | |||
422 | if (of_get_flat_dt_prop(node, "ibm,hypertas-functions", NULL) != NULL) | 422 | if (of_get_flat_dt_prop(node, "ibm,hypertas-functions", NULL) != NULL) |
423 | powerpc_firmware_features |= FW_FEATURE_LPAR; | 423 | powerpc_firmware_features |= FW_FEATURE_LPAR; |
424 | 424 | ||
425 | if (firmware_has_feature(FW_FEATURE_LPAR)) | ||
426 | hpte_init_lpar(); | ||
427 | else | ||
428 | hpte_init_native(); | ||
429 | |||
430 | return 1; | 425 | return 1; |
431 | } | 426 | } |
432 | 427 | ||
@@ -452,6 +447,11 @@ static int __init pSeries_probe(void) | |||
452 | /* Now try to figure out if we are running on LPAR */ | 447 | /* Now try to figure out if we are running on LPAR */ |
453 | of_scan_flat_dt(pSeries_probe_hypertas, NULL); | 448 | of_scan_flat_dt(pSeries_probe_hypertas, NULL); |
454 | 449 | ||
450 | if (firmware_has_feature(FW_FEATURE_LPAR)) | ||
451 | hpte_init_lpar(); | ||
452 | else | ||
453 | hpte_init_native(); | ||
454 | |||
455 | DBG("Machine is%s LPAR !\n", | 455 | DBG("Machine is%s LPAR !\n", |
456 | (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not"); | 456 | (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not"); |
457 | 457 | ||