powerpc/mm/radix: Update LPCR HR bit as per ISA
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Wed, 13 Jul 2016 09:35:21 +0000 (15:05 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 17 Jul 2016 06:42:50 +0000 (16:42 +1000)
PowerISA 3.0 requires the MMU mode (radix vs. hash) of the hypervisor
to be mirrored in the LPCR register, in addition to the partition table.
This is done to avoid fetching from the table when deciding, among other
things, how to perform transitions to HV mode on some interrupts.
So let's set it up appropriately

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Acked-by: Balbir Singh <bsingharora@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/reg.h
arch/powerpc/mm/pgtable-radix.c

index 6de6abe7deefbb8dfb39763546a0c8ce76891ecb..295a19aec9b97730b2aa34c91fc62c42633b40a1 100644 (file)
 #define   LPCR_HVICE   0x00000002      /* P9: HV interrupt enable */
 #define   LPCR_HDICE   0x00000001      /* Hyp Decr enable (HV,PR,EE) */
 #define   LPCR_UPRT    0x00400000      /* Use Process Table (ISA 3) */
+#define   LPCR_HR      0x00100000
 #ifndef SPRN_LPID
 #define SPRN_LPID      0x13F   /* Logical Partition Identifier */
 #endif
index 7931e1496f0d59d2ab5c015a48824d15e5fb3f05..4732fa3fe5911d77d28d679e7199ed5c951d6a02 100644 (file)
@@ -342,7 +342,7 @@ void __init radix__early_init_mmu(void)
        radix_init_page_sizes();
        if (!firmware_has_feature(FW_FEATURE_LPAR)) {
                lpcr = mfspr(SPRN_LPCR);
-               mtspr(SPRN_LPCR, lpcr | LPCR_UPRT);
+               mtspr(SPRN_LPCR, lpcr | LPCR_UPRT | LPCR_HR);
                radix_init_partition_table();
        }
 
@@ -357,7 +357,7 @@ void radix__early_init_mmu_secondary(void)
         */
        if (!firmware_has_feature(FW_FEATURE_LPAR)) {
                lpcr = mfspr(SPRN_LPCR);
-               mtspr(SPRN_LPCR, lpcr | LPCR_UPRT);
+               mtspr(SPRN_LPCR, lpcr | LPCR_UPRT | LPCR_HR);
 
                mtspr(SPRN_PTCR,
                      __pa(partition_tb) | (PATB_SIZE_SHIFT - 12));