diff options
Diffstat (limited to 'arch/powerpc/mm/hash_utils_64.c')
-rw-r--r-- | arch/powerpc/mm/hash_utils_64.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index 2d282186cb4..3e8c37a4e39 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c | |||
@@ -55,6 +55,8 @@ | |||
55 | #include <asm/spu.h> | 55 | #include <asm/spu.h> |
56 | #include <asm/udbg.h> | 56 | #include <asm/udbg.h> |
57 | #include <asm/code-patching.h> | 57 | #include <asm/code-patching.h> |
58 | #include <asm/fadump.h> | ||
59 | #include <asm/firmware.h> | ||
58 | 60 | ||
59 | #ifdef DEBUG | 61 | #ifdef DEBUG |
60 | #define DBG(fmt...) udbg_printf(fmt) | 62 | #define DBG(fmt...) udbg_printf(fmt) |
@@ -625,6 +627,16 @@ static void __init htab_initialize(void) | |||
625 | /* Using a hypervisor which owns the htab */ | 627 | /* Using a hypervisor which owns the htab */ |
626 | htab_address = NULL; | 628 | htab_address = NULL; |
627 | _SDR1 = 0; | 629 | _SDR1 = 0; |
630 | #ifdef CONFIG_FA_DUMP | ||
631 | /* | ||
632 | * If firmware assisted dump is active firmware preserves | ||
633 | * the contents of htab along with entire partition memory. | ||
634 | * Clear the htab if firmware assisted dump is active so | ||
635 | * that we dont end up using old mappings. | ||
636 | */ | ||
637 | if (is_fadump_active() && ppc_md.hpte_clear_all) | ||
638 | ppc_md.hpte_clear_all(); | ||
639 | #endif | ||
628 | } else { | 640 | } else { |
629 | /* Find storage for the HPT. Must be contiguous in | 641 | /* Find storage for the HPT. Must be contiguous in |
630 | * the absolute address space. On cell we want it to be | 642 | * the absolute address space. On cell we want it to be |
@@ -745,12 +757,9 @@ void __init early_init_mmu(void) | |||
745 | */ | 757 | */ |
746 | htab_initialize(); | 758 | htab_initialize(); |
747 | 759 | ||
748 | /* Initialize stab / SLB management except on iSeries | 760 | /* Initialize stab / SLB management */ |
749 | */ | ||
750 | if (mmu_has_feature(MMU_FTR_SLB)) | 761 | if (mmu_has_feature(MMU_FTR_SLB)) |
751 | slb_initialize(); | 762 | slb_initialize(); |
752 | else if (!firmware_has_feature(FW_FEATURE_ISERIES)) | ||
753 | stab_initialize(get_paca()->stab_real); | ||
754 | } | 763 | } |
755 | 764 | ||
756 | #ifdef CONFIG_SMP | 765 | #ifdef CONFIG_SMP |
@@ -761,8 +770,7 @@ void __cpuinit early_init_mmu_secondary(void) | |||
761 | mtspr(SPRN_SDR1, _SDR1); | 770 | mtspr(SPRN_SDR1, _SDR1); |
762 | 771 | ||
763 | /* Initialize STAB/SLB. We use a virtual address as it works | 772 | /* Initialize STAB/SLB. We use a virtual address as it works |
764 | * in real mode on pSeries and we want a virtual address on | 773 | * in real mode on pSeries. |
765 | * iSeries anyway | ||
766 | */ | 774 | */ |
767 | if (mmu_has_feature(MMU_FTR_SLB)) | 775 | if (mmu_has_feature(MMU_FTR_SLB)) |
768 | slb_initialize(); | 776 | slb_initialize(); |