Commit ee97b6b9 authored by Balbir Singh's avatar Balbir Singh Committed by Michael Ellerman

powerpc/mm/radix: Setup AMOR in HV mode to allow key 0

Setup AMOR (Authority Mask Override Register) in HV mode so that the
host and guest kernel can in turn setup IAMR.

This allows us to enable key 0 in a following patch.
Reported-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: default avatarBalbir Singh <bsingharora@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 378f96d3
...@@ -312,6 +312,18 @@ static void update_hid_for_radix(void) ...@@ -312,6 +312,18 @@ static void update_hid_for_radix(void)
cpu_relax(); cpu_relax();
} }
static void radix_init_amor(void)
{
/*
* In HV mode, we init AMOR (Authority Mask Override Register) so that
* the hypervisor and guest can setup IAMR (Instruction Authority Mask
* Register), enable key 0 and set it to 1.
*
* AMOR = 0b1100 .... 0000 (Mask for key 0 is 11)
*/
mtspr(SPRN_AMOR, (3ul << 62));
}
void __init radix__early_init_mmu(void) void __init radix__early_init_mmu(void)
{ {
unsigned long lpcr; unsigned long lpcr;
...@@ -368,6 +380,7 @@ void __init radix__early_init_mmu(void) ...@@ -368,6 +380,7 @@ void __init radix__early_init_mmu(void)
lpcr = mfspr(SPRN_LPCR); lpcr = mfspr(SPRN_LPCR);
mtspr(SPRN_LPCR, lpcr | LPCR_UPRT | LPCR_HR); mtspr(SPRN_LPCR, lpcr | LPCR_UPRT | LPCR_HR);
radix_init_partition_table(); radix_init_partition_table();
radix_init_amor();
} }
memblock_set_current_limit(MEMBLOCK_ALLOC_ANYWHERE); memblock_set_current_limit(MEMBLOCK_ALLOC_ANYWHERE);
...@@ -387,6 +400,7 @@ void radix__early_init_mmu_secondary(void) ...@@ -387,6 +400,7 @@ void radix__early_init_mmu_secondary(void)
mtspr(SPRN_PTCR, mtspr(SPRN_PTCR,
__pa(partition_tb) | (PATB_SIZE_SHIFT - 12)); __pa(partition_tb) | (PATB_SIZE_SHIFT - 12));
radix_init_amor();
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment