From: cov@codeaurora.org (Christopher Covington)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 11/14] arm64: big-endian: set correct endianess on kernel entry
Date: Tue, 15 Oct 2013 14:46:41 -0400 [thread overview]
Message-ID: <525D8D91.6010307@codeaurora.org> (raw)
In-Reply-To: <1381499540-28794-12-git-send-email-matthew.leach@arm.com>
Hi Matthew,
On 10/11/2013 09:52 AM, Matthew Leach wrote:
> The endianness of memory accesses at EL2 and EL1 are configured by
> SCTLR_EL2.EE and SCTLR_EL1.EE respectively. When the kernel is booted,
> the state of SCTLR_EL{2,1}.EE is unknown, and thus the kernel must
> ensure that they are set before performing any memory accesses.
>
> This patch ensures that SCTLR_EL{2,1} are configured appropriately at
> boot for kernels of either endianness.
[...]
> --- a/arch/arm64/kernel/head.S
> +++ b/arch/arm64/kernel/head.S
> @@ -159,12 +159,22 @@ ENTRY(el2_setup)
> mrs x0, CurrentEL
> cmp x0, #PSR_MODE_EL2t
> ccmp x0, #PSR_MODE_EL2h, #0x4, ne
> - b.eq 1f
> + b.ne 1f
> + mrs x0, sctlr_el2
> +CPU_BE( orr x0, x0, #(1 << 25) ) // Set the EE bit for EL2
> +CPU_LE( bic x0, x0, #(1 << 25) ) // Clear the EE bit for EL2
> + msr sctlr_el2, x0
> + b 2f
> +1: mrs x0, sctlr_el1
> +CPU_BE( orr x0, x0, #(2 << 24) ) // Set the EE and E0E bits for EL1
> +CPU_LE( bic x0, x0, #(2 << 24) ) // Clear the EE and E0E bits for EL1
> + msr sctlr_el1, x0
> mov w20, #BOOT_CPU_MODE_EL1 // This cpu booted in EL1
> + isb
Could you please comment on why this barrier is necessary?
> ret
>
> /* Hyp configuration. */
> -1: mov x0, #(1 << 31) // 64-bit EL1
> +2: mov x0, #(1 << 31) // 64-bit EL1
> msr hcr_el2, x0
>
> /* Generic timers. */
> @@ -181,7 +191,8 @@ ENTRY(el2_setup)
>
> /* sctlr_el1 */
> mov x0, #0x0800 // Set/clear RES{1,0} bits
> - movk x0, #0x30d0, lsl #16
> +CPU_BE( movk x0, #0x33d0, lsl #16 ) // Set EE and E0E on BE systems
> +CPU_LE( movk x0, #0x30d0, lsl #16 ) // Clear EE and E0E on LE systems
Although the CPU_[BL]E macros make the ifdef'ery here and above prettier than
they would be otherwise, I wonder if making the set and clear operations and
this magic number macros instead could improve readability and fall more in
line with the "#ifdefs are ugly" guideline in Documentation/SubmittingPatches.
> msr sctlr_el1, x0
>
> /* Coprocessor traps. */
[...]
Thanks,
Christopher
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by the Linux Foundation.
next prev parent reply other threads:[~2013-10-15 18:46 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-11 13:52 [PATCH 00/14] AArch64 BE Support Matthew Leach
2013-10-11 13:52 ` [PATCH 01/14] Docs: arm64: booting: clarify boot requirements Matthew Leach
2013-10-11 13:52 ` [PATCH 02/14] arm64: big-endian: add big-endian support to top-level arch Makefile Matthew Leach
2013-10-11 13:52 ` [PATCH 03/14] arm64: big-endian: fix byteorder include Matthew Leach
2013-10-11 13:52 ` [PATCH 04/14] arm64: ELF: add support for big-endian executables Matthew Leach
2013-10-11 13:52 ` [PATCH 05/14] arm64: setup: report ELF_PLATFORM as the machine for utsname Matthew Leach
2013-10-11 13:52 ` [PATCH 06/14] arm64: compat: add support for big-endian (BE8) AArch32 binaries Matthew Leach
2013-10-11 14:36 ` Mark Rutland
2013-10-11 13:52 ` [PATCH 07/14] arm64: compat: correct register concatenation for syscall wrappers Matthew Leach
2013-10-11 13:52 ` [PATCH 08/14] arm64: big-endian: don't treat code as data when copying sigret code Matthew Leach
2013-10-11 13:52 ` [PATCH 09/14] arm64: asm: add CPU_LE & CPU_BE assembler helpers Matthew Leach
2013-10-11 13:52 ` [PATCH 10/14] arm64: head: create a new function for setting the boot_cpu_mode flag Matthew Leach
2013-10-11 13:52 ` [PATCH 11/14] arm64: big-endian: set correct endianess on kernel entry Matthew Leach
2013-10-15 18:46 ` Christopher Covington [this message]
2013-10-24 15:46 ` Catalin Marinas
2013-10-11 13:52 ` [PATCH 12/14] arm64: big-endian: write CPU holding pen address as LE Matthew Leach
2013-10-11 13:52 ` [PATCH 13/14] arm64: kconfig: allow CPU_BIG_ENDIAN to be selected Matthew Leach
2013-10-11 13:52 ` [PATCH 14/14] net: smc91x: dont't use SMC_outw for fixing up halfword-aligned data Matthew Leach
2013-10-11 13:52 ` Matthew Leach
2013-10-11 20:41 ` Nicolas Pitre
2013-10-11 20:41 ` Nicolas Pitre
2013-10-11 21:56 ` David Miller
2013-10-11 21:56 ` David Miller
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=525D8D91.6010307@codeaurora.org \
--to=cov@codeaurora.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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: link
Be 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.