From: Alexandru Elisei <alexandru.elisei@arm.com> To: drjones@redhat.com, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu Subject: [kvm-unit-tests PATCH 5/6] arm64: Configure SCTLR_EL1 at boot Date: Sat, 27 Feb 2021 10:42:00 +0000 [thread overview] Message-ID: <20210227104201.14403-6-alexandru.elisei@arm.com> (raw) In-Reply-To: <20210227104201.14403-1-alexandru.elisei@arm.com> Some fields in SCTLR_EL1 are UNKNOWN at reset and the arm64 boot requirements, as stated by Linux in Documentation/arm64/booting.rst, do not specify a particular value for all the fields. Do not rely on the good will of the hypervisor and userspace to set SCTLR_EL1 to a sane value (by their definition of sane) and set SCTLR_EL1 explicitely before running setup(). This will ensure that all tests are performed with the hardware set up identically, regardless of the KVM or VMM versions. Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> --- lib/arm64/asm/sysreg.h | 7 +++++++ arm/cstart64.S | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/lib/arm64/asm/sysreg.h b/lib/arm64/asm/sysreg.h index 9d6b4fc66936..18c4ed39557a 100644 --- a/lib/arm64/asm/sysreg.h +++ b/lib/arm64/asm/sysreg.h @@ -8,6 +8,8 @@ #ifndef _ASMARM64_SYSREG_H_ #define _ASMARM64_SYSREG_H_ +#include <linux/const.h> + #define sys_reg(op0, op1, crn, crm, op2) \ ((((op0)&3)<<19)|((op1)<<16)|((crn)<<12)|((crm)<<8)|((op2)<<5)) @@ -87,4 +89,9 @@ asm( #define SCTLR_EL1_A (1 << 1) #define SCTLR_EL1_M (1 << 0) +#define SCTLR_EL1_RES1 (_BITUL(7) | _BITUL(8) | _BITUL(11) | _BITUL(20) | \ + _BITUL(22) | _BITUL(23) | _BITUL(28) | _BITUL(29)) +#define INIT_SCTLR_EL1_MMU_OFF \ + SCTLR_EL1_RES1 + #endif /* _ASMARM64_SYSREG_H_ */ diff --git a/arm/cstart64.S b/arm/cstart64.S index f6c5d2ebccf3..42a838ff4c38 100644 --- a/arm/cstart64.S +++ b/arm/cstart64.S @@ -52,6 +52,11 @@ start: b 1b 1: + /* set SCTLR_EL1 to a known value */ + ldr x4, =INIT_SCTLR_EL1_MMU_OFF + msr sctlr_el1, x4 + isb + /* set up stack */ mov x4, #1 msr spsel, x4 -- 2.30.1
WARNING: multiple messages have this Message-ID (diff)
From: Alexandru Elisei <alexandru.elisei@arm.com> To: drjones@redhat.com, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu Subject: [kvm-unit-tests PATCH 5/6] arm64: Configure SCTLR_EL1 at boot Date: Sat, 27 Feb 2021 10:42:00 +0000 [thread overview] Message-ID: <20210227104201.14403-6-alexandru.elisei@arm.com> (raw) In-Reply-To: <20210227104201.14403-1-alexandru.elisei@arm.com> Some fields in SCTLR_EL1 are UNKNOWN at reset and the arm64 boot requirements, as stated by Linux in Documentation/arm64/booting.rst, do not specify a particular value for all the fields. Do not rely on the good will of the hypervisor and userspace to set SCTLR_EL1 to a sane value (by their definition of sane) and set SCTLR_EL1 explicitely before running setup(). This will ensure that all tests are performed with the hardware set up identically, regardless of the KVM or VMM versions. Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> --- lib/arm64/asm/sysreg.h | 7 +++++++ arm/cstart64.S | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/lib/arm64/asm/sysreg.h b/lib/arm64/asm/sysreg.h index 9d6b4fc66936..18c4ed39557a 100644 --- a/lib/arm64/asm/sysreg.h +++ b/lib/arm64/asm/sysreg.h @@ -8,6 +8,8 @@ #ifndef _ASMARM64_SYSREG_H_ #define _ASMARM64_SYSREG_H_ +#include <linux/const.h> + #define sys_reg(op0, op1, crn, crm, op2) \ ((((op0)&3)<<19)|((op1)<<16)|((crn)<<12)|((crm)<<8)|((op2)<<5)) @@ -87,4 +89,9 @@ asm( #define SCTLR_EL1_A (1 << 1) #define SCTLR_EL1_M (1 << 0) +#define SCTLR_EL1_RES1 (_BITUL(7) | _BITUL(8) | _BITUL(11) | _BITUL(20) | \ + _BITUL(22) | _BITUL(23) | _BITUL(28) | _BITUL(29)) +#define INIT_SCTLR_EL1_MMU_OFF \ + SCTLR_EL1_RES1 + #endif /* _ASMARM64_SYSREG_H_ */ diff --git a/arm/cstart64.S b/arm/cstart64.S index f6c5d2ebccf3..42a838ff4c38 100644 --- a/arm/cstart64.S +++ b/arm/cstart64.S @@ -52,6 +52,11 @@ start: b 1b 1: + /* set SCTLR_EL1 to a known value */ + ldr x4, =INIT_SCTLR_EL1_MMU_OFF + msr sctlr_el1, x4 + isb + /* set up stack */ mov x4, #1 msr spsel, x4 -- 2.30.1 _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
next prev parent reply other threads:[~2021-02-27 10:43 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-27 10:41 [kvm-unit-tests PATCH 0/6] Misc assembly fixes and cleanups Alexandru Elisei 2021-02-27 10:41 ` Alexandru Elisei 2021-02-27 10:41 ` [kvm-unit-tests PATCH 1/6] arm64: Remove unnecessary ISB when writing to SPSel Alexandru Elisei 2021-02-27 10:41 ` Alexandru Elisei 2021-03-03 17:35 ` Andre Przywara 2021-03-03 17:35 ` Andre Przywara 2021-02-27 10:41 ` [kvm-unit-tests PATCH 2/6] arm/arm64: Remove dcache_line_size global variable Alexandru Elisei 2021-02-27 10:41 ` Alexandru Elisei 2021-03-04 15:00 ` Andre Przywara 2021-03-04 15:00 ` Andre Przywara 2021-03-15 15:46 ` Alexandru Elisei 2021-03-15 15:46 ` Alexandru Elisei 2021-03-16 15:40 ` Andre Przywara 2021-03-16 15:40 ` Andre Przywara 2021-03-22 12:01 ` Alexandru Elisei 2021-03-22 12:01 ` Alexandru Elisei 2021-02-27 10:41 ` [kvm-unit-tests PATCH 3/6] arm/arm64: Remove unnecessary ISB when doing dcache maintenance Alexandru Elisei 2021-02-27 10:41 ` Alexandru Elisei 2021-03-12 14:59 ` Andrew Jones 2021-03-12 14:59 ` Andrew Jones 2021-03-15 16:22 ` Alexandru Elisei 2021-03-15 16:22 ` Alexandru Elisei 2021-02-27 10:41 ` [kvm-unit-tests PATCH 4/6] lib: arm64: Consolidate register definitions to sysreg.h Alexandru Elisei 2021-02-27 10:41 ` Alexandru Elisei 2021-03-03 17:32 ` Andre Przywara 2021-03-03 17:32 ` Andre Przywara 2021-02-27 10:42 ` Alexandru Elisei [this message] 2021-02-27 10:42 ` [kvm-unit-tests PATCH 5/6] arm64: Configure SCTLR_EL1 at boot Alexandru Elisei 2021-03-03 17:32 ` Andre Przywara 2021-03-03 17:32 ` Andre Przywara 2021-02-27 10:42 ` [kvm-unit-tests PATCH 6/6] arm64: Disable TTBR1_EL1 translation table walks Alexandru Elisei 2021-02-27 10:42 ` Alexandru Elisei 2021-03-03 17:32 ` Andre Przywara 2021-03-03 17:32 ` Andre Przywara
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210227104201.14403-6-alexandru.elisei@arm.com \ --to=alexandru.elisei@arm.com \ --cc=drjones@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=kvmarm@lists.cs.columbia.edu \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.