-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
arm64: KVM: Switch to C-based stage2 init
There is no real need to leave the stage2 initialization as part of the early HYP bootstrap, and we can easily postpone it to the point where we can safely run C code. This will help VHE, which doesn't need any of this bootstrap. Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
- Loading branch information
Marc Zyngier
committed
Feb 29, 2016
1 parent
57c841f
commit 3a3604b
Showing
5 changed files
with
50 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* | ||
* Copyright (C) 2016 - ARM Ltd | ||
* Author: Marc Zyngier <marc.zyngier@arm.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#include <linux/types.h> | ||
#include <asm/kvm_arm.h> | ||
#include <asm/kvm_asm.h> | ||
|
||
#include "hyp.h" | ||
|
||
void __hyp_text __init_stage2_translation(void) | ||
{ | ||
u64 val = VTCR_EL2_FLAGS; | ||
u64 tmp; | ||
|
||
/* | ||
* Read the PARange bits from ID_AA64MMFR0_EL1 and set the PS | ||
* bits in VTCR_EL2. Amusingly, the PARange is 4 bits, while | ||
* PS is only 3. Fortunately, bit 19 is RES0 in VTCR_EL2... | ||
*/ | ||
val |= (read_sysreg(id_aa64mmfr0_el1) & 7) << 16; | ||
|
||
/* | ||
* Read the VMIDBits bits from ID_AA64MMFR1_EL1 and set the VS | ||
* bit in VTCR_EL2. | ||
*/ | ||
tmp = (read_sysreg(id_aa64mmfr1_el1) >> 4) & 0xf; | ||
val |= (tmp == 2) ? VTCR_EL2_VS : 0; | ||
|
||
write_sysreg(val, vtcr_el2); | ||
} |