* [PATCH 00/12] arm64: Remove unused big-endian support
@ 2026-08-11 14:01 Will Deacon
2026-08-11 14:01 ` [PATCH 01/12] selftests/arm64: Remove " Will Deacon
` (14 more replies)
0 siblings, 15 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Hi folks,
Big-endian support on arm64 (CONFIG_CPU_BIG_ENDIAN) has depended on
BROKEN since 1cf89b6bf660 ("arm64: Kconfig: Make CPU_BIG_ENDIAN depend
on BROKEN") and has already seen some clean-up patches removing some of
the unused support code (e.g. 5276ea17a23c ("lib/crc: arm64: Assume a
little-endian kernel")).
Finish the job, and remove the remaining big-endian support code from
arm64. Note that the SETEND emulation for 32-bit tasks remains and so
some of the mixed-endian EL0 helpers are retained.
I've broken this down into fairly coarse chunks, as it seemed a lot
easier to manage than one giant patch (even with the Kconfig being
effectively disabled already) and not all of it is just mindless
deletion. Despite that, I'm anticipating the whole thing going via the
arm64 tree.
Will
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Eric Biggers <ebiggers@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Oliver Upton <oupton@kernel.org>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Marc Zyngier <maz@kernel.org>
--->8
Will Deacon (12):
selftests/arm64: Remove big-endian support
arm64: bpf: Remove big-endian support from the JIT compiler
arm64: crypto: Assume a little-endian kernel
arm64: lib: Assume a little-endian kernel in custom library routines
arm64: lib: Assume a little-endian kernel in optimised string routines
arm64: assembler: Remove endianness helper macros
arm64: vdso32: Always build compat vDSO object as little-endian
KVM: arm64: Remove support for a big-endian hypervisor object
arm64: Remove all usage of CONFIG_CPU_BIG_ENDIAN
arm64: Remove all usage of __AARCH64EB__
arm64: image: Remove endianness handling for generating image header
arm64: Kbuild: Remove vestigial big-endian support
arch/arm64/Kconfig | 35 +-------
arch/arm64/Makefile | 12 +--
arch/arm64/crypto/aes-ce-ccm-core.S | 4 +-
arch/arm64/crypto/aes-neonbs-core.S | 4 +-
arch/arm64/crypto/ghash-ce-core.S | 6 +-
arch/arm64/crypto/sm4-ce-cipher-core.S | 4 +-
arch/arm64/include/asm/assembler.h | 42 ---------
arch/arm64/include/asm/compat.h | 14 ---
arch/arm64/include/asm/elf.h | 12 ---
arch/arm64/include/asm/processor.h | 2 -
arch/arm64/include/asm/ptrace.h | 6 --
arch/arm64/include/asm/sysreg.h | 50 +++--------
arch/arm64/include/asm/thread_info.h | 5 --
arch/arm64/include/asm/word-at-a-time.h | 6 --
arch/arm64/include/uapi/asm/byteorder.h | 4 -
arch/arm64/kernel/fpsimd.c | 21 +----
arch/arm64/kernel/head.S | 7 +-
arch/arm64/kernel/image.h | 38 +-------
arch/arm64/kernel/kexec_image.c | 5 +-
arch/arm64/kernel/kgdb.c | 3 -
arch/arm64/kernel/ptrace.c | 8 +-
arch/arm64/kernel/signal32.c | 13 ---
arch/arm64/kernel/sys32.c | 5 --
arch/arm64/kernel/vdso32/Makefile | 4 -
arch/arm64/kvm/hyp/include/nvhe/spinlock.h | 4 -
arch/arm64/kvm/hyp/nvhe/gen-hyprel.c | 16 ----
arch/arm64/lib/csum.c | 17 ----
arch/arm64/lib/memchr.S | 2 +-
arch/arm64/lib/memcmp.S | 2 -
arch/arm64/lib/strcmp.S | 34 +------
arch/arm64/lib/strlen.S | 26 ------
arch/arm64/lib/strncmp.S | 93 ++------------------
arch/arm64/lib/strnlen.S | 16 +---
arch/arm64/mm/extable.c | 5 --
arch/arm64/net/bpf_jit_comp.c | 11 ---
tools/testing/selftests/arm64/fp/fp-ptrace.c | 19 +---
tools/testing/selftests/rseq/rseq-arm64.h | 5 --
37 files changed, 50 insertions(+), 510 deletions(-)
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 01/12] selftests/arm64: Remove big-endian support
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 02/12] arm64: bpf: Remove big-endian support from the JIT compiler Will Deacon
` (13 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Big-endian support on arm64 depends on BROKEN, so the arm64 selftests do
not need to worry about testing this configuration any more.
Remove the 128-bit byte-swapping helper from the fp-ptrace test and the
big-endian definition of RSEQ_SIG_DATA from the rseq test.
Signed-off-by: Will Deacon <will@kernel.org>
---
tools/testing/selftests/arm64/fp/fp-ptrace.c | 19 +------------------
tools/testing/selftests/rseq/rseq-arm64.h | 5 -----
2 files changed, 1 insertion(+), 23 deletions(-)
diff --git a/tools/testing/selftests/arm64/fp/fp-ptrace.c b/tools/testing/selftests/arm64/fp/fp-ptrace.c
index 22c584b78be5..77d630444996 100644
--- a/tools/testing/selftests/arm64/fp/fp-ptrace.c
+++ b/tools/testing/selftests/arm64/fp/fp-ptrace.c
@@ -112,23 +112,6 @@ static void handle_alarm(int sig, siginfo_t *info, void *context)
got_alarm = true;
}
-#ifdef CONFIG_CPU_BIG_ENDIAN
-static __uint128_t arm64_cpu_to_le128(__uint128_t x)
-{
- u64 a = swab64(x);
- u64 b = swab64(x >> 64);
-
- return ((__uint128_t)a << 64) | b;
-}
-#else
-static __uint128_t arm64_cpu_to_le128(__uint128_t x)
-{
- return x;
-}
-#endif
-
-#define arm64_le128_to_cpu(x) arm64_cpu_to_le128(x)
-
static bool sve_supported(void)
{
return getauxval(AT_HWCAP) & HWCAP_SVE;
@@ -897,7 +880,7 @@ static void fpsimd_to_sve(__uint128_t *v, char *z, int vl)
for (i = 0; i < __SVE_NUM_ZREGS; i++) {
p = (__uint128_t *)&z[__SVE_ZREG_OFFSET(vq, i)];
- *p = arm64_cpu_to_le128(v[i]);
+ *p = v[i];
}
}
diff --git a/tools/testing/selftests/rseq/rseq-arm64.h b/tools/testing/selftests/rseq/rseq-arm64.h
index 21e1626a7235..f9fecf941bf2 100644
--- a/tools/testing/selftests/rseq/rseq-arm64.h
+++ b/tools/testing/selftests/rseq/rseq-arm64.h
@@ -12,12 +12,7 @@
* matches code endianness.
*/
#define RSEQ_SIG_CODE 0xd428bc00 /* BRK #0x45E0. */
-
-#ifdef __AARCH64EB__
-#define RSEQ_SIG_DATA 0x00bc28d4 /* BRK #0x45E0. */
-#else
#define RSEQ_SIG_DATA RSEQ_SIG_CODE
-#endif
#define RSEQ_SIG RSEQ_SIG_DATA
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 02/12] arm64: bpf: Remove big-endian support from the JIT compiler
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
2026-08-11 14:01 ` [PATCH 01/12] selftests/arm64: Remove " Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 03/12] arm64: crypto: Assume a little-endian kernel Will Deacon
` (12 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Big-endian support on arm64 depends on BROKEN. In preparation for
removing the dead code altogether, remove the big-endian-specific
support from the arm64 BPF JIT backend.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/net/bpf_jit_comp.c | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index b0075ece4a6e..044216c4acf6 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -1377,13 +1377,8 @@ static int build_insn(const struct bpf_verifier_env *env, const struct bpf_insn
case BPF_ALU | BPF_END | BPF_FROM_LE:
case BPF_ALU | BPF_END | BPF_FROM_BE:
case BPF_ALU64 | BPF_END | BPF_FROM_LE:
-#ifdef CONFIG_CPU_BIG_ENDIAN
- if (BPF_CLASS(code) == BPF_ALU && BPF_SRC(code) == BPF_FROM_BE)
- goto emit_bswap_uxt;
-#else /* !CONFIG_CPU_BIG_ENDIAN */
if (BPF_CLASS(code) == BPF_ALU && BPF_SRC(code) == BPF_FROM_LE)
goto emit_bswap_uxt;
-#endif
switch (imm) {
case 16:
emit(A64_REV16(is64, dst, dst), ctx);
@@ -2478,15 +2473,9 @@ static void clear_garbage(struct jit_ctx *ctx, int reg, int effective_bytes)
{
if (effective_bytes) {
int garbage_bits = 64 - 8 * effective_bytes;
-#ifdef CONFIG_CPU_BIG_ENDIAN
- /* garbage bits are at the right end */
- emit(A64_LSR(1, reg, reg, garbage_bits), ctx);
- emit(A64_LSL(1, reg, reg, garbage_bits), ctx);
-#else
/* garbage bits are at the left end */
emit(A64_LSL(1, reg, reg, garbage_bits), ctx);
emit(A64_LSR(1, reg, reg, garbage_bits), ctx);
-#endif
}
}
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 03/12] arm64: crypto: Assume a little-endian kernel
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
2026-08-11 14:01 ` [PATCH 01/12] selftests/arm64: Remove " Will Deacon
2026-08-11 14:01 ` [PATCH 02/12] arm64: bpf: Remove big-endian support from the JIT compiler Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 04/12] arm64: lib: Assume a little-endian kernel in custom library routines Will Deacon
` (11 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Commit 5276ea17a23c ("lib/crc: arm64: Assume a little-endian kernel")
removed all usage of the CPU_LE()/CPU_BE() macros from the arm64 CRC
assembly now that big-endian support depends on BROKEN.
Do the same for the crypto assembly code.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/crypto/aes-ce-ccm-core.S | 4 ++--
arch/arm64/crypto/aes-neonbs-core.S | 4 ++--
arch/arm64/crypto/ghash-ce-core.S | 6 +++---
arch/arm64/crypto/sm4-ce-cipher-core.S | 4 ++--
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/arch/arm64/crypto/aes-ce-ccm-core.S b/arch/arm64/crypto/aes-ce-ccm-core.S
index f2624238fd95..c2e8f500da14 100644
--- a/arch/arm64/crypto/aes-ce-ccm-core.S
+++ b/arch/arm64/crypto/aes-ce-ccm-core.S
@@ -50,7 +50,7 @@
ld1 {v0.16b}, [x5] /* load mac */
cbz x2, ce_aes_ccm_final
ldr x8, [x6, #8] /* load lower ctr */
-CPU_LE( rev x8, x8 ) /* keep swabbed ctr in reg */
+ rev x8, x8 /* keep swabbed ctr in reg */
0: /* outer loop */
ld1 {v1.8b}, [x6] /* load upper ctr */
prfm pldl1strm, [x1]
@@ -73,7 +73,7 @@ CPU_LE( rev x8, x8 ) /* keep swabbed ctr in reg */
eor v0.16b, v0.16b, v2.16b /* xor mac with pt ^ rk[last] */
st1 {v6.16b}, [x0], #16 /* write output block */
bne 0b
-CPU_LE( rev x8, x8 )
+ rev x8, x8
str x8, [x6, #8] /* store lsb end of ctr (BE) */
cbnz x7, ce_aes_ccm_final
st1 {v0.16b}, [x5] /* store mac */
diff --git a/arch/arm64/crypto/aes-neonbs-core.S b/arch/arm64/crypto/aes-neonbs-core.S
index baf450717b24..ba1f981a5464 100644
--- a/arch/arm64/crypto/aes-neonbs-core.S
+++ b/arch/arm64/crypto/aes-neonbs-core.S
@@ -824,8 +824,8 @@ SYM_FUNC_START(aesbs_ctr_encrypt)
frame_push 0
ldp x7, x8, [x5]
ld1 {v0.16b}, [x5]
-CPU_LE( rev x7, x7 )
-CPU_LE( rev x8, x8 )
+ rev x7, x7
+ rev x8, x8
adds x8, x8, #1
adc x7, x7, xzr
diff --git a/arch/arm64/crypto/ghash-ce-core.S b/arch/arm64/crypto/ghash-ce-core.S
index 33772d8fe6b5..ba350d57fc76 100644
--- a/arch/arm64/crypto/ghash-ce-core.S
+++ b/arch/arm64/crypto/ghash-ce-core.S
@@ -148,7 +148,7 @@ SYM_FUNC_START(pmull_ghash_update_p64)
sub w0, w0, #1
3: /* multiply XL by SHASH in GF(2^128) */
-CPU_LE( rev64 T1.16b, T1.16b )
+ rev64 T1.16b, T1.16b
ext T2.16b, XL.16b, XL.16b, #8
ext IN1.16b, T1.16b, T1.16b, #8
@@ -272,7 +272,7 @@ SYM_FUNC_END(pmull_ghash_update_p64)
cbz x0, 3f // tag only?
ldr w8, [x5, #12] // load lower counter
-CPU_LE( rev w8, w8 )
+ rev w8, w8
0: mov w9, #4 // max blocks per round
add x10, x0, #0xf
@@ -380,7 +380,7 @@ CPU_LE( rev w8, w8 )
ret
5:
-CPU_LE( rev w8, w8 )
+ rev w8, w8
str w8, [x5, #12] // store lower counter
st1 {XL.2d}, [x4]
b 4b
diff --git a/arch/arm64/crypto/sm4-ce-cipher-core.S b/arch/arm64/crypto/sm4-ce-cipher-core.S
index 4ac6cfbc5797..1682d727e097 100644
--- a/arch/arm64/crypto/sm4-ce-cipher-core.S
+++ b/arch/arm64/crypto/sm4-ce-cipher-core.S
@@ -18,7 +18,7 @@
SYM_FUNC_START(sm4_ce_do_crypt)
ld1 {v8.4s}, [x2]
ld1 {v0.4s-v3.4s}, [x0], #64
-CPU_LE( rev32 v8.16b, v8.16b )
+ rev32 v8.16b, v8.16b
ld1 {v4.4s-v7.4s}, [x0]
sm4e v8.4s, v0.4s
sm4e v8.4s, v1.4s
@@ -30,7 +30,7 @@ CPU_LE( rev32 v8.16b, v8.16b )
sm4e v8.4s, v7.4s
rev64 v8.4s, v8.4s
ext v8.16b, v8.16b, v8.16b, #8
-CPU_LE( rev32 v8.16b, v8.16b )
+ rev32 v8.16b, v8.16b
st1 {v8.4s}, [x1]
ret
SYM_FUNC_END(sm4_ce_do_crypt)
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 04/12] arm64: lib: Assume a little-endian kernel in custom library routines
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (2 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 03/12] arm64: crypto: Assume a little-endian kernel Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 05/12] arm64: lib: Assume a little-endian kernel in optimised string routines Will Deacon
` (10 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Commit 5276ea17a23c ("lib/crc: arm64: Assume a little-endian kernel")
removed all usage of the CPU_LE()/CPU_BE() macros from the arm64 CRC
assembly now that big-endian support depends on BROKEN.
Do the same for the rest of the custom arm64 library code, as well as
removing all usage of the '__LITTLE_ENDIAN' macro.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/lib/csum.c | 17 -----------------
arch/arm64/lib/memchr.S | 2 +-
2 files changed, 1 insertion(+), 18 deletions(-)
diff --git a/arch/arm64/lib/csum.c b/arch/arm64/lib/csum.c
index 2432683e48a6..75db718e5b6a 100644
--- a/arch/arm64/lib/csum.c
+++ b/arch/arm64/lib/csum.c
@@ -47,11 +47,7 @@ unsigned int __no_sanitize_address do_csum(const unsigned char *buff, int len)
*/
shift = offset * 8;
data = *ptr++;
-#ifdef __LITTLE_ENDIAN
data = (data >> shift) << shift;
-#else
- data = (data << shift) >> shift;
-#endif
/*
* Body: straightforward aligned loads from here on (the paired loads
@@ -94,13 +90,8 @@ unsigned int __no_sanitize_address do_csum(const unsigned char *buff, int len)
len -= 16;
ptr += 2;
-#ifdef __LITTLE_ENDIAN
data = tmp >> 64;
sum64 = accumulate(sum64, tmp);
-#else
- data = tmp;
- sum64 = accumulate(sum64, tmp >> 64);
-#endif
}
if (len > 0) {
sum64 = accumulate(sum64, data);
@@ -112,11 +103,7 @@ unsigned int __no_sanitize_address do_csum(const unsigned char *buff, int len)
* preserving odd/even alignment.
*/
shift = len * -8;
-#ifdef __LITTLE_ENDIAN
data = (data << shift) >> shift;
-#else
- data = (data >> shift) << shift;
-#endif
sum64 = accumulate(sum64, data);
/* Finally, folding */
@@ -140,11 +127,7 @@ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
dst = *(const __uint128_t *)daddr->s6_addr;
sum += (__force u32)htonl(len);
-#ifdef __LITTLE_ENDIAN
sum += (u32)proto << 24;
-#else
- sum += proto;
-#endif
src += (src >> 64) | (src << 64);
dst += (dst >> 64) | (dst << 64);
diff --git a/arch/arm64/lib/memchr.S b/arch/arm64/lib/memchr.S
index 37a9f2a4f7f4..b14b27cb8419 100644
--- a/arch/arm64/lib/memchr.S
+++ b/arch/arm64/lib/memchr.S
@@ -63,7 +63,7 @@ L(byte_loop):
sub srcin, srcin, #1
ret
L(found_word):
-CPU_LE( rev tmp, tmp)
+ rev tmp, tmp
clz tmp, tmp
sub tmp, tmp, #64
add result, srcin, tmp, asr #3
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 05/12] arm64: lib: Assume a little-endian kernel in optimised string routines
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (3 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 04/12] arm64: lib: Assume a little-endian kernel in custom library routines Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 06/12] arm64: assembler: Remove endianness helper macros Will Deacon
` (9 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Big-endian support on arm64 depends on BROKEN. In preparation for
removing the dead code altogether, remove the big-endian-specific
support from the arm64 optimised string routines. Although these
started life as a fork of Arm's "cortex strings" library and later got
updated with the "optimized-routines" code, the in-kernel implementation
has always been different enough that removing the unused big-endian
portion still makes sense.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/lib/memcmp.S | 2 -
arch/arm64/lib/strcmp.S | 34 +--------------
arch/arm64/lib/strlen.S | 26 -----------
arch/arm64/lib/strncmp.S | 93 +++-------------------------------------
arch/arm64/lib/strnlen.S | 16 +------
5 files changed, 8 insertions(+), 163 deletions(-)
diff --git a/arch/arm64/lib/memcmp.S b/arch/arm64/lib/memcmp.S
index a5ccf2c55f91..1f528ce046e4 100644
--- a/arch/arm64/lib/memcmp.S
+++ b/arch/arm64/lib/memcmp.S
@@ -103,10 +103,8 @@ L(last_bytes):
/* Compare data bytes and set return value to 0, -1 or 1. */
L(return):
-#ifndef __AARCH64EB__
rev data1, data1
rev data2, data2
-#endif
cmp data1, data2
L(ret_eq):
cset result, ne
diff --git a/arch/arm64/lib/strcmp.S b/arch/arm64/lib/strcmp.S
index 9b89b4533607..2389b47dca22 100644
--- a/arch/arm64/lib/strcmp.S
+++ b/arch/arm64/lib/strcmp.S
@@ -38,14 +38,6 @@
#define shift x9
#define off2 x10
-/* On big-endian early bytes are at MSB and on little-endian LSB.
- LS_FW means shifting towards early bytes. */
-#ifdef __AARCH64EB__
-# define LS_FW lsl
-#else
-# define LS_FW lsr
-#endif
-
/* NUL detection works on the principle that (X - 1) & (~X) & 0x80
(=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and
can be done in parallel across the entire word.
@@ -67,28 +59,17 @@ L(loop_aligned):
ldr data2, [src1, off2]
ldr data1, [src1], 8
L(start_realigned):
-#ifdef __AARCH64EB__
- rev tmp, data1
- sub has_nul, tmp, zeroones
- orr tmp, tmp, REP8_7f
-#else
sub has_nul, data1, zeroones
orr tmp, data1, REP8_7f
-#endif
bics has_nul, has_nul, tmp /* Non-zero if NUL terminator. */
ccmp data1, data2, 0, eq
b.eq L(loop_aligned)
-#ifdef __AARCH64EB__
- rev has_nul, has_nul
-#endif
eor diff, data1, data2
orr syndrome, diff, has_nul
L(end):
-#ifndef __AARCH64EB__
rev syndrome, syndrome
rev data1, data1
rev data2, data2
-#endif
clz shift, syndrome
/* The most-significant-non-zero bit of the syndrome marks either the
first bit that is different, or the top bit of the first zero byte.
@@ -113,7 +94,7 @@ L(mutual_align):
ldr data1, [src1], 8
neg shift, src2, lsl 3 /* Bits to alignment -64. */
mov tmp, -1
- LS_FW tmp, tmp, shift
+ lsr tmp, tmp, shift
orr data1, data1, tmp
orr data2, data2, tmp
b L(start_realigned)
@@ -135,9 +116,6 @@ L(src1_aligned):
neg shift, src2, lsl 3
bic src2, src2, 7
ldr data3, [src2], 8
-#ifdef __AARCH64EB__
- rev data3, data3
-#endif
lsr tmp, zeroones, shift
orr data3, data3, tmp
sub has_nul, data3, zeroones
@@ -152,9 +130,6 @@ L(src1_aligned):
L(loop_unaligned):
ldr data3, [src1, off1]
ldr data2, [src1, off2]
-#ifdef __AARCH64EB__
- rev data3, data3
-#endif
sub has_nul, data3, zeroones
orr tmp, data3, REP8_7f
ldr data1, [src1], 8
@@ -163,9 +138,6 @@ L(loop_unaligned):
b.eq L(loop_unaligned)
lsl tmp, has_nul, shift
-#ifdef __AARCH64EB__
- rev tmp, tmp
-#endif
eor diff, data1, data2
orr syndrome, diff, tmp
cbnz syndrome, L(end)
@@ -174,10 +146,6 @@ L(tail):
neg shift, shift
lsr data2, data3, shift
lsr has_nul, has_nul, shift
-#ifdef __AARCH64EB__
- rev data2, data2
- rev has_nul, has_nul
-#endif
eor diff, data1, data2
orr syndrome, diff, has_nul
b L(end)
diff --git a/arch/arm64/lib/strlen.S b/arch/arm64/lib/strlen.S
index 4919fe81ae54..a8c49a3886f6 100644
--- a/arch/arm64/lib/strlen.S
+++ b/arch/arm64/lib/strlen.S
@@ -85,14 +85,6 @@ SYM_FUNC_START(__pi_strlen)
cmp tmp1, MIN_PAGE_SIZE - 16
b.gt L(page_cross)
ldp data1, data2, [srcin]
-#ifdef __AARCH64EB__
- /* For big-endian, carry propagation (if the final byte in the
- string is 0x01) means we cannot use has_nul1/2 directly.
- Since we expect strings to be small and early-exit,
- byte-swap the data now so has_null1/2 will be correct. */
- rev data1, data1
- rev data2, data2
-#endif
sub tmp1, data1, zeroones
orr tmp2, data1, REP8_7f
sub tmp3, data2, zeroones
@@ -144,19 +136,7 @@ L(page_cross_entry):
/* Enter with C = has_nul1 == 0. */
L(tail):
-#ifdef __AARCH64EB__
- /* For big-endian, carry propagation (if the final byte in the
- string is 0x01) means we cannot use has_nul1/2 directly. The
- easiest way to get the correct byte is to byte-swap the data
- and calculate the syndrome a second time. */
- csel data1, data1, data2, cc
- rev data1, data1
- sub tmp1, data1, zeroones
- orr tmp2, data1, REP8_7f
- bic has_nul1, tmp1, tmp2
-#else
csel has_nul1, has_nul1, has_nul2, cc
-#endif
sub len, src, srcin
rev has_nul1, has_nul1
add tmp2, len, 8
@@ -194,13 +174,7 @@ L(page_cross):
ldp data1, data2, [src]
lsl tmp1, srcin, 3
mov tmp4, -1
-#ifdef __AARCH64EB__
- /* Big-endian. Early bytes are at MSB. */
- lsr tmp1, tmp4, tmp1 /* Shift (tmp1 & 63). */
-#else
- /* Little-endian. Early bytes are at LSB. */
lsl tmp1, tmp4, tmp1 /* Shift (tmp1 & 63). */
-#endif
orr tmp1, tmp1, REP8_80
orn data1, data1, tmp1
orn tmp2, data2, tmp1
diff --git a/arch/arm64/lib/strncmp.S b/arch/arm64/lib/strncmp.S
index fe7bbc0b42a7..e4fde8586089 100644
--- a/arch/arm64/lib/strncmp.S
+++ b/arch/arm64/lib/strncmp.S
@@ -45,19 +45,6 @@
#define offset pos
#define neg_offset x15
-/* Define endian dependent shift operations.
- On big-endian early bytes are at MSB and on little-endian LSB.
- LS_FW means shifting towards early bytes.
- LS_BK means shifting towards later bytes.
- */
-#ifdef __AARCH64EB__
-#define LS_FW lsl
-#define LS_BK lsr
-#else
-#define LS_FW lsr
-#define LS_BK lsl
-#endif
-
SYM_FUNC_START(__pi_strncmp)
cbz limit, L(ret0)
eor tmp1, src1, src2
@@ -86,7 +73,6 @@ L(start_realigned):
/* End of main loop */
L(full_check):
-#ifndef __AARCH64EB__
orr syndrome, diff, has_nul
add limit, limit, 8 /* Rewind limit to before last subs. */
L(syndrome_check):
@@ -105,55 +91,6 @@ L(syndrome_check):
sub result, data1, data2, lsr #56
csel result, result, xzr, hi
ret
-#else
- /* Not reached the limit, must have found the end or a diff. */
- tbz limit, #63, L(not_limit)
- add tmp1, limit, 8
- cbz limit, L(not_limit)
-
- lsl limit, tmp1, #3 /* Bits -> bytes. */
- mov mask, #~0
- lsr mask, mask, limit
- bic data1, data1, mask
- bic data2, data2, mask
-
- /* Make sure that the NUL byte is marked in the syndrome. */
- orr has_nul, has_nul, mask
-
-L(not_limit):
- /* For big-endian we cannot use the trick with the syndrome value
- as carry-propagation can corrupt the upper bits if the trailing
- bytes in the string contain 0x01. */
- /* However, if there is no NUL byte in the dword, we can generate
- the result directly. We can't just subtract the bytes as the
- MSB might be significant. */
- cbnz has_nul, 1f
- cmp data1, data2
- cset result, ne
- cneg result, result, lo
- ret
-1:
- /* Re-compute the NUL-byte detection, using a byte-reversed value. */
- rev tmp3, data1
- sub tmp1, tmp3, zeroones
- orr tmp2, tmp3, #REP8_7f
- bic has_nul, tmp1, tmp2
- rev has_nul, has_nul
- orr syndrome, diff, has_nul
- clz pos, syndrome
- /* The most-significant-non-zero bit of the syndrome marks either the
- first bit that is different, or the top bit of the first zero byte.
- Shifting left now will bring the critical information into the
- top bits. */
-L(end_quick):
- lsl data1, data1, pos
- lsl data2, data2, pos
- /* But we need to zero-extend (char is unsigned) the value and then
- perform a signed 32-bit subtraction. */
- lsr data1, data1, #56
- sub result, data1, data2, lsr #56
- ret
-#endif
L(mutual_align):
/* Sources are mutually aligned, but are not currently at an
@@ -167,7 +104,7 @@ L(mutual_align):
neg tmp3, count, lsl #3 /* 64 - bits(bytes beyond align). */
ldr data2, [src2], #8
mov tmp2, #~0
- LS_FW tmp2, tmp2, tmp3 /* Shift (count & 63). */
+ lsr tmp2, tmp2, tmp3 /* Shift (count & 63). */
/* Adjust the limit and ensure it doesn't overflow. */
adds limit, limit, count
csinv limit, limit, xzr, lo
@@ -236,15 +173,15 @@ L(src1_aligned):
neg neg_offset, offset
ldr data1, [src1], #8
ldp tmp1, tmp2, [src2], #16
- LS_BK mask, mask, neg_offset
+ lsl mask, mask, neg_offset
and neg_offset, neg_offset, #63 /* Need actual value for cmp later. */
/* Skip the first compare if data in tmp1 is irrelevant. */
tbnz offset, 6, L(misaligned_mid_loop)
L(loop_misaligned):
/* STEP_A: Compare full 8 bytes when there is enough data from SRC2.*/
- LS_FW data2, tmp1, offset
- LS_BK tmp1, tmp2, neg_offset
+ lsr data2, tmp1, offset
+ lsl tmp1, tmp2, neg_offset
subs limit, limit, #8
orr data2, data2, tmp1 /* 8 bytes from SRC2 combined from two regs.*/
sub has_nul, data1, zeroones
@@ -258,23 +195,12 @@ L(loop_misaligned):
ldr data1, [src1], #8
L(misaligned_mid_loop):
/* STEP_B: Compare first part of data1 to second part of tmp2. */
- LS_FW data2, tmp2, offset
-#ifdef __AARCH64EB__
- /* For big-endian we do a byte reverse to avoid carry-propagation
- problem described above. This way we can reuse the has_nul in the
- next step and also use syndrome value trick at the end. */
- rev tmp3, data1
- #define data1_fixed tmp3
-#else
+ lsr data2, tmp2, offset
#define data1_fixed data1
-#endif
sub has_nul, data1_fixed, zeroones
orr tmp3, data1_fixed, #REP8_7f
eor diff, data2, data1 /* Non-zero if differences found. */
bic has_nul, has_nul, tmp3 /* Non-zero if NUL terminator. */
-#ifdef __AARCH64EB__
- rev has_nul, has_nul
-#endif
cmp limit, neg_offset, lsr #3
orr syndrome, diff, has_nul
bic syndrome, syndrome, mask /* Ignore later bytes. */
@@ -284,7 +210,7 @@ L(misaligned_mid_loop):
/* STEP_C: Compare second part of data1 to first part of tmp1. */
ldp tmp1, tmp2, [src2], #16
cmp limit, #8
- LS_BK data2, tmp1, neg_offset
+ lsl data2, tmp1, neg_offset
eor diff, data2, data1 /* Non-zero if differences found. */
orr syndrome, diff, has_nul
and syndrome, syndrome, mask /* Ignore earlier bytes. */
@@ -295,13 +221,6 @@ L(misaligned_mid_loop):
sub limit, limit, #8
b L(loop_misaligned)
-#ifdef __AARCH64EB__
-L(syndrome_check):
- clz pos, syndrome
- cmp pos, limit, lsl #3
- b.lo L(end_quick)
-#endif
-
L(ret0):
mov result, #0
ret
diff --git a/arch/arm64/lib/strnlen.S b/arch/arm64/lib/strnlen.S
index d5ac0e10a01d..b20011d559f1 100644
--- a/arch/arm64/lib/strnlen.S
+++ b/arch/arm64/lib/strnlen.S
@@ -91,22 +91,10 @@ SYM_FUNC_START(__pi_strnlen)
*/
sub len, src, srcin
cbz has_nul1, .Lnul_in_data2
-CPU_BE( mov data2, data1 ) /*perpare data to re-calculate the syndrome*/
sub len, len, #8
mov has_nul2, has_nul1
.Lnul_in_data2:
- /*
- * For big-endian, carry propagation (if the final byte in the
- * string is 0x01) means we cannot use has_nul directly. The
- * easiest way to get the correct byte is to byte-swap the data
- * and calculate the syndrome a second time.
- */
-CPU_BE( rev data2, data2 )
-CPU_BE( sub tmp1, data2, zeroones )
-CPU_BE( orr tmp2, data2, #REP8_7f )
-CPU_BE( bic has_nul2, tmp1, tmp2 )
-
sub len, len, #8
rev has_nul2, has_nul2
clz pos, has_nul2
@@ -139,10 +127,8 @@ CPU_BE( bic has_nul2, tmp1, tmp2 )
lsl tmp4, tmp4, #3 /* Bytes beyond alignment -> bits. */
mov tmp2, #~0
- /* Big-endian. Early bytes are at MSB. */
-CPU_BE( lsl tmp2, tmp2, tmp4 ) /* Shift (tmp1 & 63). */
/* Little-endian. Early bytes are at LSB. */
-CPU_LE( lsr tmp2, tmp2, tmp4 ) /* Shift (tmp1 & 63). */
+ lsr tmp2, tmp2, tmp4 /* Shift (tmp1 & 63). */
cmp tmp1, #8
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 06/12] arm64: assembler: Remove endianness helper macros
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (4 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 05/12] arm64: lib: Assume a little-endian kernel in optimised string routines Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 15:04 ` Ard Biesheuvel
2026-08-11 14:01 ` [PATCH 07/12] arm64: vdso32: Always build compat vDSO object as little-endian Will Deacon
` (8 subsequent siblings)
14 siblings, 1 reply; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
The CPU_LE()/CPU_BE() helper macros are only used by head.S. Since
big-endian support depends on BROKEN, remove the last users along with
the macro definitions. The unused regs_to_64() assembly macro, which
somewhat bizarrely behaves differently depend on the endianness, is also
removed.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/include/asm/assembler.h | 31 ------------------------------
arch/arm64/kernel/head.S | 3 +--
2 files changed, 1 insertion(+), 33 deletions(-)
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index effae53e9739..45279e577ff5 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -133,37 +133,6 @@ lr .req x30 // link register
b \label
.endm
-/*
- * Select code when configured for BE.
- */
-#ifdef CONFIG_CPU_BIG_ENDIAN
-#define CPU_BE(code...) code
-#else
-#define CPU_BE(code...)
-#endif
-
-/*
- * Select code when configured for LE.
- */
-#ifdef CONFIG_CPU_BIG_ENDIAN
-#define CPU_LE(code...)
-#else
-#define CPU_LE(code...) code
-#endif
-
-/*
- * Define a macro that constructs a 64-bit value by concatenating two
- * 32-bit registers. Note that on big endian systems the order of the
- * registers is swapped.
- */
-#ifndef CONFIG_CPU_BIG_ENDIAN
- .macro regs_to_64, rd, lbits, hbits
-#else
- .macro regs_to_64, rd, hbits, lbits
-#endif
- orr \rd, \lbits, \hbits, lsl #32
- .endm
-
/*
* Pseudo-ops for PC-relative adr/ldr/str <reg>, <symbol> where
* <symbol> is within the range +/- 4 GB of the PC.
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index 87a822e5c4ca..8951ce693552 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -138,8 +138,7 @@ SYM_CODE_START_LOCAL(record_mmu_state)
b.ne 0f
mrs x19, sctlr_el2
0:
-CPU_LE( tbnz x19, #SCTLR_ELx_EE_SHIFT, 1f )
-CPU_BE( tbz x19, #SCTLR_ELx_EE_SHIFT, 1f )
+ tbnz x19, #SCTLR_ELx_EE_SHIFT, 1f
tst x19, #SCTLR_ELx_C // Z := (C == 0)
and x19, x19, #SCTLR_ELx_M // isolate M bit
csel x19, xzr, x19, eq // clear x19 if Z
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 07/12] arm64: vdso32: Always build compat vDSO object as little-endian
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (5 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 06/12] arm64: assembler: Remove endianness helper macros Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 08/12] KVM: arm64: Remove support for a big-endian hypervisor object Will Deacon
` (7 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Big-endian support on arm64 depends on BROKEN. In preparation for
removing the dead code altogether, remove support for building a
big-endian 32-bit vDSO.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/kernel/vdso32/Makefile | 4 ----
1 file changed, 4 deletions(-)
diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile
index bea3675fa668..00efdc5d2354 100644
--- a/arch/arm64/kernel/vdso32/Makefile
+++ b/arch/arm64/kernel/vdso32/Makefile
@@ -45,11 +45,7 @@ endif
# From arm Makefile
VDSO_CAFLAGS += $(call cc32-option,-fno-dwarf2-cfi-asm)
VDSO_CAFLAGS += -mabi=aapcs-linux -mfloat-abi=soft
-ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
-VDSO_CAFLAGS += -mbig-endian
-else
VDSO_CAFLAGS += -mlittle-endian
-endif
# From arm vDSO Makefile
VDSO_CAFLAGS += -fPIC -fno-builtin -fno-stack-protector
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 08/12] KVM: arm64: Remove support for a big-endian hypervisor object
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (6 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 07/12] arm64: vdso32: Always build compat vDSO object as little-endian Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 09/12] arm64: Remove all usage of CONFIG_CPU_BIG_ENDIAN Will Deacon
` (6 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Big-endian support on arm64 depends on BROKEN. In preparation for
removing the dead code altogether, remove the support for generating
ELF relocations for a big-endian hypervisor object and drop the unused
big-endian spinlock definition from nVHE.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/kvm/hyp/include/nvhe/spinlock.h | 4 ----
arch/arm64/kvm/hyp/nvhe/gen-hyprel.c | 16 ----------------
2 files changed, 20 deletions(-)
diff --git a/arch/arm64/kvm/hyp/include/nvhe/spinlock.h b/arch/arm64/kvm/hyp/include/nvhe/spinlock.h
index 7c7ea8c55405..b6978f03e86a 100644
--- a/arch/arm64/kvm/hyp/include/nvhe/spinlock.h
+++ b/arch/arm64/kvm/hyp/include/nvhe/spinlock.h
@@ -20,11 +20,7 @@
typedef union hyp_spinlock {
u32 __val;
struct {
-#ifdef __AARCH64EB__
- u16 next, owner;
-#else
u16 owner, next;
-#endif
};
} hyp_spinlock_t;
diff --git a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c
index b63f4e1c1033..99243e0fefb0 100644
--- a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c
+++ b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c
@@ -139,28 +139,12 @@ static struct {
const char *sh_string;
} elf;
-#if defined(CONFIG_CPU_LITTLE_ENDIAN)
-
#define elf16toh(x) le16toh(x)
#define elf32toh(x) le32toh(x)
#define elf64toh(x) le64toh(x)
#define ELFENDIAN ELFDATA2LSB
-#elif defined(CONFIG_CPU_BIG_ENDIAN)
-
-#define elf16toh(x) be16toh(x)
-#define elf32toh(x) be32toh(x)
-#define elf64toh(x) be64toh(x)
-
-#define ELFENDIAN ELFDATA2MSB
-
-#else
-
-#error PDP-endian sadly unsupported...
-
-#endif
-
#define fatal_error(fmt, ...) \
({ \
fprintf(stderr, "error: %s: " fmt "\n", \
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 09/12] arm64: Remove all usage of CONFIG_CPU_BIG_ENDIAN
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (7 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 08/12] KVM: arm64: Remove support for a big-endian hypervisor object Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:49 ` Marc Zyngier
2026-08-11 14:01 ` [PATCH 10/12] arm64: Remove all usage of __AARCH64EB__ Will Deacon
` (5 subsequent siblings)
14 siblings, 1 reply; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Big-endian support on arm64 depends on BROKEN. In preparation for
removing the dead code altogether, remove all usage of
CONFIG_CPU_BIG_ENDIAN from the arm64 kernel port.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/include/asm/processor.h | 2 --
arch/arm64/include/asm/ptrace.h | 6 ----
arch/arm64/include/asm/sysreg.h | 50 ++++++++--------------------
arch/arm64/include/asm/thread_info.h | 5 ---
arch/arm64/kernel/fpsimd.c | 21 ++----------
arch/arm64/kernel/image.h | 18 ++--------
arch/arm64/kernel/kexec_image.c | 5 ++-
arch/arm64/kernel/kgdb.c | 3 --
arch/arm64/kernel/ptrace.c | 8 ++---
arch/arm64/kernel/signal32.c | 3 --
arch/arm64/kernel/sys32.c | 5 ---
11 files changed, 22 insertions(+), 104 deletions(-)
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
index c2a627f39314..19a81f8d85a7 100644
--- a/arch/arm64/include/asm/processor.h
+++ b/arch/arm64/include/asm/processor.h
@@ -351,8 +351,6 @@ static inline void compat_start_thread(struct pt_regs *regs, unsigned long pc,
unsigned long pstate = PSR_AA32_MODE_USR;
if (pc & 1)
pstate |= PSR_AA32_T_BIT;
- if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
- pstate |= PSR_AA32_E_BIT;
start_thread_common(regs, pc, pstate);
spectre_v4_enable_task_mitigation(current);
diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrace.h
index 39582511ad72..4722201403ea 100644
--- a/arch/arm64/include/asm/ptrace.h
+++ b/arch/arm64/include/asm/ptrace.h
@@ -68,12 +68,6 @@
#define PSR_AA32_IT_MASK 0x0600fc00 /* If-Then execution state mask */
#define PSR_AA32_GE_MASK 0x000f0000
-#ifdef CONFIG_CPU_BIG_ENDIAN
-#define PSR_AA32_ENDSTATE PSR_AA32_E_BIT
-#else
-#define PSR_AA32_ENDSTATE 0
-#endif
-
/* AArch32 CPSR bits, as seen in AArch32 */
#define COMPAT_PSR_DIT_BIT 0x00200000
diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
index 7aa08d59d494..f97c60b5dfca 100644
--- a/arch/arm64/include/asm/sysreg.h
+++ b/arch/arm64/include/asm/sysreg.h
@@ -62,19 +62,10 @@
#else /* CONFIG_BROKEN_GAS_INST */
-#ifndef CONFIG_CPU_BIG_ENDIAN
-#define __INSTR_BSWAP(x) (x)
-#else /* CONFIG_CPU_BIG_ENDIAN */
-#define __INSTR_BSWAP(x) ((((x) << 24) & 0xff000000) | \
- (((x) << 8) & 0x00ff0000) | \
- (((x) >> 8) & 0x0000ff00) | \
- (((x) >> 24) & 0x000000ff))
-#endif /* CONFIG_CPU_BIG_ENDIAN */
-
#ifdef __ASSEMBLER__
-#define __emit_inst(x) .long __INSTR_BSWAP(x)
+#define __emit_inst(x) .long (x)
#else /* __ASSEMBLER__ */
-#define __emit_inst(x) ".long " __stringify(__INSTR_BSWAP(x)) "\n\t"
+#define __emit_inst(x) ".long " __stringify(x) "\n\t"
#endif /* __ASSEMBLER__ */
#endif /* CONFIG_BROKEN_GAS_INST */
@@ -835,39 +826,26 @@
#define SCTLR_ELx_A (BIT(1))
#define SCTLR_ELx_M (BIT(0))
-#ifdef CONFIG_CPU_BIG_ENDIAN
-#define ENDIAN_SET_EL2 SCTLR_ELx_EE
-#else
-#define ENDIAN_SET_EL2 0
-#endif
-
#define INIT_SCTLR_EL2_MMU_ON \
(SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA | SCTLR_ELx_I | \
- SCTLR_ELx_IESB | SCTLR_ELx_WXN | ENDIAN_SET_EL2 | \
- SCTLR_ELx_ITFSB | SCTLR_ELx_EIS | SCTLR_ELx_EOS | SCTLR_EL2_RES1)
+ SCTLR_ELx_IESB | SCTLR_ELx_WXN | SCTLR_ELx_ITFSB | \
+ SCTLR_ELx_EIS | SCTLR_ELx_EOS | SCTLR_EL2_RES1)
-#define INIT_SCTLR_EL2_MMU_OFF \
- (SCTLR_EL2_RES1 | ENDIAN_SET_EL2)
+#define INIT_SCTLR_EL2_MMU_OFF (SCTLR_EL2_RES1)
/* SCTLR_EL1 specific flags. */
-#ifdef CONFIG_CPU_BIG_ENDIAN
-#define ENDIAN_SET_EL1 (SCTLR_EL1_E0E | SCTLR_ELx_EE)
-#else
-#define ENDIAN_SET_EL1 0
-#endif
-
#define INIT_SCTLR_EL1_MMU_OFF \
- (ENDIAN_SET_EL1 | SCTLR_EL1_LSMAOE | SCTLR_EL1_nTLSMD | \
- SCTLR_EL1_EIS | SCTLR_EL1_TSCXT | SCTLR_EL1_EOS)
+ (SCTLR_EL1_LSMAOE | SCTLR_EL1_nTLSMD | SCTLR_EL1_EIS | \
+ SCTLR_EL1_TSCXT | SCTLR_EL1_EOS)
#define INIT_SCTLR_EL1_MMU_ON \
- (SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA | \
- SCTLR_EL1_SA0 | SCTLR_EL1_SED | SCTLR_ELx_I | \
- SCTLR_EL1_DZE | SCTLR_EL1_UCT | SCTLR_EL1_nTWE | \
- SCTLR_ELx_IESB | SCTLR_EL1_SPAN | SCTLR_ELx_ITFSB | \
- ENDIAN_SET_EL1 | SCTLR_EL1_UCI | SCTLR_EL1_EPAN | \
- SCTLR_EL1_LSMAOE | SCTLR_EL1_nTLSMD | SCTLR_EL1_EIS | \
- SCTLR_EL1_TSCXT | SCTLR_EL1_EOS)
+ (SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA | \
+ SCTLR_EL1_SA0 | SCTLR_EL1_SED | SCTLR_ELx_I | \
+ SCTLR_EL1_DZE | SCTLR_EL1_UCT | SCTLR_EL1_nTWE | \
+ SCTLR_ELx_IESB | SCTLR_EL1_SPAN | SCTLR_ELx_ITFSB | \
+ SCTLR_EL1_UCI | SCTLR_EL1_EPAN | SCTLR_EL1_LSMAOE | \
+ SCTLR_EL1_nTLSMD | SCTLR_EL1_EIS | SCTLR_EL1_TSCXT | \
+ SCTLR_EL1_EOS)
/* MAIR_ELx memory attributes (used by Linux) */
#define MAIR_ATTR_DEVICE_nGnRnE UL(0x00)
diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
index 5d7fe3e153c8..161b91762e93 100644
--- a/arch/arm64/include/asm/thread_info.h
+++ b/arch/arm64/include/asm/thread_info.h
@@ -29,13 +29,8 @@ struct thread_info {
union {
u64 preempt_count; /* 0 => preemptible, <0 => bug */
struct {
-#ifdef CONFIG_CPU_BIG_ENDIAN
- u32 need_resched;
- u32 count;
-#else
u32 count;
u32 need_resched;
-#endif
} preempt;
};
#ifdef CONFIG_SHADOW_CALL_STACK
diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
index e7f1682a3059..65e7147067aa 100644
--- a/arch/arm64/kernel/fpsimd.c
+++ b/arch/arm64/kernel/fpsimd.c
@@ -621,23 +621,6 @@ static int __init sme_sysctl_init(void) { return 0; }
#define ZREG(sve_state, vq, n) ((char *)(sve_state) + \
(SVE_SIG_ZREG_OFFSET(vq, n) - SVE_SIG_REGS_OFFSET))
-#ifdef CONFIG_CPU_BIG_ENDIAN
-static __uint128_t arm64_cpu_to_le128(__uint128_t x)
-{
- u64 a = swab64(x);
- u64 b = swab64(x >> 64);
-
- return ((__uint128_t)a << 64) | b;
-}
-#else
-static __uint128_t arm64_cpu_to_le128(__uint128_t x)
-{
- return x;
-}
-#endif
-
-#define arm64_le128_to_cpu(x) arm64_cpu_to_le128(x)
-
static void __fpsimd_to_sve(struct arm64_sve_state *sst,
struct user_fpsimd_state const *fst,
unsigned int vq)
@@ -647,7 +630,7 @@ static void __fpsimd_to_sve(struct arm64_sve_state *sst,
for (i = 0; i < SVE_NUM_ZREGS; ++i) {
p = (__uint128_t *)ZREG(sst, vq, i);
- *p = arm64_cpu_to_le128(fst->vregs[i]);
+ *p = fst->vregs[i];
}
}
@@ -702,7 +685,7 @@ static inline void sve_to_fpsimd(struct task_struct *task)
vq = sve_vq_from_vl(vl);
for (i = 0; i < SVE_NUM_ZREGS; ++i) {
p = (__uint128_t const *)ZREG(sst, vq, i);
- fst->vregs[i] = arm64_le128_to_cpu(*p);
+ fst->vregs[i] = *p;
}
}
diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
index 7bc3ba897901..5c10ca773363 100644
--- a/arch/arm64/kernel/image.h
+++ b/arch/arm64/kernel/image.h
@@ -24,28 +24,14 @@
* when PIE is in effect. So we need to split them up in 32-bit high and low
* words.
*/
-#ifdef CONFIG_CPU_BIG_ENDIAN
-#define DATA_LE32(data) \
- ((((data) & 0x000000ff) << 24) | \
- (((data) & 0x0000ff00) << 8) | \
- (((data) & 0x00ff0000) >> 8) | \
- (((data) & 0xff000000) >> 24))
-#else
-#define DATA_LE32(data) ((data) & 0xffffffff)
-#endif
-
#define DEFINE_IMAGE_LE64(sym, data) \
- sym##_lo32 = DATA_LE32((data) & 0xffffffff); \
- sym##_hi32 = DATA_LE32((data) >> 32)
+ sym##_lo32 = (data) & 0xffffffff; \
+ sym##_hi32 = (data) >> 32
#define __HEAD_FLAG(field) (__HEAD_FLAG_##field << \
ARM64_IMAGE_FLAG_##field##_SHIFT)
-#ifdef CONFIG_CPU_BIG_ENDIAN
-#define __HEAD_FLAG_BE ARM64_IMAGE_FLAG_BE
-#else
#define __HEAD_FLAG_BE ARM64_IMAGE_FLAG_LE
-#endif
#define __HEAD_FLAG_PAGE_SIZE ((PAGE_SHIFT - 10) / 2)
diff --git a/arch/arm64/kernel/kexec_image.c b/arch/arm64/kernel/kexec_image.c
index b70f4df15a1a..b8d0fb0a9daf 100644
--- a/arch/arm64/kernel/kexec_image.c
+++ b/arch/arm64/kernel/kexec_image.c
@@ -40,7 +40,7 @@ static void *image_load(struct kimage *image,
{
struct arm64_image_header *h;
u64 flags, value;
- bool be_image, be_kernel;
+ bool be_image;
struct kexec_buf kbuf = {};
unsigned long text_offset, kernel_segment_number;
struct kexec_segment *kernel_segment;
@@ -58,8 +58,7 @@ static void *image_load(struct kimage *image,
/* Check cpu features */
flags = le64_to_cpu(h->flags);
be_image = arm64_image_flag_field(flags, ARM64_IMAGE_FLAG_BE);
- be_kernel = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN);
- if ((be_image != be_kernel) && !system_supports_mixed_endian())
+ if (be_image && !system_supports_mixed_endian())
return ERR_PTR(-EINVAL);
value = arm64_image_flag_field(flags, ARM64_IMAGE_FLAG_PAGE_SIZE);
diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c
index 968324a79a89..41eb34c50721 100644
--- a/arch/arm64/kernel/kgdb.c
+++ b/arch/arm64/kernel/kgdb.c
@@ -61,9 +61,6 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
* detail.
*/
{ "pstate", 4, offsetof(struct pt_regs, pstate)
-#ifdef CONFIG_CPU_BIG_ENDIAN
- + 4
-#endif
},
{ "v0", 16, -1 },
{ "v1", 16, -1 },
diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
index 4d08598e2891..2f8663038c22 100644
--- a/arch/arm64/kernel/ptrace.c
+++ b/arch/arm64/kernel/ptrace.c
@@ -2467,12 +2467,8 @@ static int valid_compat_regs(struct user_pt_regs *regs)
{
regs->pstate &= ~SPSR_EL1_AARCH32_RES0_BITS;
- if (!system_supports_mixed_endian_el0()) {
- if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
- regs->pstate |= PSR_AA32_E_BIT;
- else
- regs->pstate &= ~PSR_AA32_E_BIT;
- }
+ if (!system_supports_mixed_endian_el0())
+ regs->pstate &= ~PSR_AA32_E_BIT;
if (user_mode(regs) && (regs->pstate & PSR_MODE32_BIT) &&
(regs->pstate & PSR_AA32_A_BIT) == 0 &&
diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c
index bb3b526ff43f..5edcab50f753 100644
--- a/arch/arm64/kernel/signal32.c
+++ b/arch/arm64/kernel/signal32.c
@@ -334,9 +334,6 @@ static void compat_setup_return(struct pt_regs *regs, struct k_sigaction *ka,
/* The IT state must be cleared for both ARM and Thumb-2 */
spsr &= ~PSR_AA32_IT_MASK;
- /* Restore the original endianness */
- spsr |= PSR_AA32_ENDSTATE;
-
if (ka->sa.sa_flags & SA_RESTORER) {
retcode = ptr_to_compat(ka->sa.sa_restorer);
} else {
diff --git a/arch/arm64/kernel/sys32.c b/arch/arm64/kernel/sys32.c
index 12a948f3a504..8ac07aeb018d 100644
--- a/arch/arm64/kernel/sys32.c
+++ b/arch/arm64/kernel/sys32.c
@@ -59,12 +59,7 @@ COMPAT_SYSCALL_DEFINE6(aarch32_mmap2, unsigned long, addr, unsigned long, len,
return ksys_mmap_pgoff(addr, len, prot, flags, fd, off_4k);
}
-#ifdef CONFIG_CPU_BIG_ENDIAN
-#define arg_u32p(name) u32, name##_hi, u32, name##_lo
-#else
#define arg_u32p(name) u32, name##_lo, u32, name##_hi
-#endif
-
#define arg_u64(name) (((u64)name##_hi << 32) | name##_lo)
COMPAT_SYSCALL_DEFINE6(aarch32_pread64, unsigned int, fd, char __user *, buf,
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 10/12] arm64: Remove all usage of __AARCH64EB__
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (8 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 09/12] arm64: Remove all usage of CONFIG_CPU_BIG_ENDIAN Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 11/12] arm64: image: Remove endianness handling for generating image header Will Deacon
` (4 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Big-endian support on arm64 depends on BROKEN. In preparation for
removing the dead code altogether, remove all usage of
__AARCH64EB__ from the arm64 kernel port.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/include/asm/compat.h | 14 --------------
arch/arm64/include/asm/elf.h | 12 ------------
arch/arm64/include/asm/word-at-a-time.h | 6 ------
arch/arm64/include/uapi/asm/byteorder.h | 4 ----
arch/arm64/kernel/signal32.c | 10 ----------
arch/arm64/mm/extable.c | 5 -----
6 files changed, 51 deletions(-)
diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h
index ae904a1ad529..5e4cc4d2f872 100644
--- a/arch/arm64/include/asm/compat.h
+++ b/arch/arm64/include/asm/compat.h
@@ -28,34 +28,20 @@ typedef u16 compat_ipc_pid_t;
#include <linux/sched.h>
#include <linux/sched/task_stack.h>
-#ifdef __AARCH64EB__
-#define COMPAT_UTS_MACHINE "armv8b\0\0"
-#else
#define COMPAT_UTS_MACHINE "armv8l\0\0"
-#endif
typedef u16 __compat_uid16_t;
typedef u16 __compat_gid16_t;
typedef s32 compat_nlink_t;
struct compat_stat {
-#ifdef __AARCH64EB__
- short st_dev;
- short __pad1;
-#else
compat_dev_t st_dev;
-#endif
compat_ino_t st_ino;
compat_mode_t st_mode;
compat_ushort_t st_nlink;
__compat_uid16_t st_uid;
__compat_gid16_t st_gid;
-#ifdef __AARCH64EB__
- short st_rdev;
- short __pad2;
-#else
compat_dev_t st_rdev;
-#endif
compat_off_t st_size;
compat_off_t st_blksize;
compat_off_t st_blocks;
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index d2779d604c7b..5a0bd3d38b1a 100644
--- a/arch/arm64/include/asm/elf.h
+++ b/arch/arm64/include/asm/elf.h
@@ -72,11 +72,7 @@
* These are used to set parameters in the core dumps.
*/
#define ELF_CLASS ELFCLASS64
-#ifdef __AARCH64EB__
-#define ELF_DATA ELFDATA2MSB
-#else
#define ELF_DATA ELFDATA2LSB
-#endif
#define ELF_ARCH EM_AARCH64
/*
@@ -85,11 +81,7 @@
* intent than poking at uname or /proc/cpuinfo.
*/
#define ELF_PLATFORM_SIZE 16
-#ifdef __AARCH64EB__
-#define ELF_PLATFORM ("aarch64_be")
-#else
#define ELF_PLATFORM ("aarch64")
-#endif
/*
* This is used to ensure we don't load something for the wrong architecture.
@@ -195,11 +187,7 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
#define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12))
#endif
-#ifdef __AARCH64EB__
-#define COMPAT_ELF_PLATFORM ("v8b")
-#else
#define COMPAT_ELF_PLATFORM ("v8l")
-#endif
/* AArch32 registers. */
#define COMPAT_ELF_NGREG 18
diff --git a/arch/arm64/include/asm/word-at-a-time.h b/arch/arm64/include/asm/word-at-a-time.h
index 824ca6987a51..d7a3b69dc8c6 100644
--- a/arch/arm64/include/asm/word-at-a-time.h
+++ b/arch/arm64/include/asm/word-at-a-time.h
@@ -7,8 +7,6 @@
#include <linux/uaccess.h>
-#ifndef __AARCH64EB__
-
#include <linux/bitops.h>
#include <linux/wordpart.h>
@@ -36,10 +34,6 @@ static inline unsigned long zero_bytemask(unsigned long bits)
return bits >> 7;
}
-#else /* __AARCH64EB__ */
-#include <asm-generic/word-at-a-time.h>
-#endif
-
/*
* Load an unaligned word from kernel space.
*
diff --git a/arch/arm64/include/uapi/asm/byteorder.h b/arch/arm64/include/uapi/asm/byteorder.h
index ca9cfdab33fc..b078e60f0506 100644
--- a/arch/arm64/include/uapi/asm/byteorder.h
+++ b/arch/arm64/include/uapi/asm/byteorder.h
@@ -17,10 +17,6 @@
#ifndef __ASM_BYTEORDER_H
#define __ASM_BYTEORDER_H
-#ifdef __AARCH64EB__
-#include <linux/byteorder/big_endian.h>
-#else
#include <linux/byteorder/little_endian.h>
-#endif
#endif /* __ASM_BYTEORDER_H */
diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c
index 5edcab50f753..3e1ce0b00a68 100644
--- a/arch/arm64/kernel/signal32.c
+++ b/arch/arm64/kernel/signal32.c
@@ -70,22 +70,12 @@ static inline int get_sigset_t(sigset_t *set,
/*
* VFP save/restore code.
- *
- * We have to be careful with endianness, since the fpsimd context-switch
- * code operates on 128-bit (Q) register values whereas the compat ABI
- * uses an array of 64-bit (D) registers. Consequently, we need to swap
- * the two halves of each Q register when running on a big-endian CPU.
*/
union __fpsimd_vreg {
__uint128_t raw;
struct {
-#ifdef __AARCH64EB__
- u64 hi;
- u64 lo;
-#else
u64 lo;
u64 hi;
-#endif
};
};
diff --git a/arch/arm64/mm/extable.c b/arch/arm64/mm/extable.c
index 6e0528831cd3..299a244f68e6 100644
--- a/arch/arm64/mm/extable.c
+++ b/arch/arm64/mm/extable.c
@@ -79,12 +79,7 @@ ex_handler_load_unaligned_zeropad(const struct exception_table_entry *ex,
addr &= ~0x7UL;
data = *(unsigned long*)addr;
-
-#ifndef __AARCH64EB__
data >>= 8 * offset;
-#else
- data <<= 8 * offset;
-#endif
pt_regs_write_reg(regs, reg_data, data);
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 11/12] arm64: image: Remove endianness handling for generating image header
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (9 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 10/12] arm64: Remove all usage of __AARCH64EB__ Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:01 ` [PATCH 12/12] arm64: Kbuild: Remove vestigial big-endian support Will Deacon
` (3 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Since big-endian support for arm64 depends on BROKEN, we don't need to
bother jumping through hoops to generate a little-endian kernel image
header for a big-endian target. We can just ignore the possibility
instead.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/include/asm/assembler.h | 11 -----------
arch/arm64/kernel/head.S | 4 ++--
arch/arm64/kernel/image.h | 24 ++----------------------
3 files changed, 4 insertions(+), 35 deletions(-)
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index 45279e577ff5..d3ce96c7b8ec 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -525,17 +525,6 @@ alternative_else_nop_endif
#define EXPORT_SYMBOL_NOKASAN(name) EXPORT_SYMBOL(name)
#endif
- /*
- * Emit a 64-bit absolute little endian symbol reference in a way that
- * ensures that it will be resolved at build time, even when building a
- * PIE binary. This requires cooperation from the linker script, which
- * must emit the lo32/hi32 halves individually.
- */
- .macro le64sym, sym
- .long \sym\()_lo32
- .long \sym\()_hi32
- .endm
-
/*
* mov_q - move an immediate constant into a 64-bit register using
* between 2 and 4 movz/movk instructions (depending on the
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index 8951ce693552..684896390258 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -61,8 +61,8 @@
efi_signature_nop // special NOP to identity as PE/COFF executable
b primary_entry // branch to kernel start, magic
.quad 0 // Image load offset from start of RAM, little-endian
- le64sym _kernel_size_le // Effective size of kernel image, little-endian
- le64sym _kernel_flags_le // Informative flags, little-endian
+ .quad _kernel_size_le // Effective size of kernel image, little-endian
+ .quad _kernel_flags_le // Informative flags, little-endian
.quad 0 // reserved
.quad 0 // reserved
.quad 0 // reserved
diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
index 5c10ca773363..208843f96b4d 100644
--- a/arch/arm64/kernel/image.h
+++ b/arch/arm64/kernel/image.h
@@ -13,21 +13,6 @@
#include <asm/image.h>
-/*
- * There aren't any ELF relocations we can use to endian-swap values known only
- * at link time (e.g. the subtraction of two symbol addresses), so we must get
- * the linker to endian-swap certain values before emitting them.
- *
- * Note that, in order for this to work when building the ELF64 PIE executable
- * (for KASLR), these values should not be referenced via R_AARCH64_ABS64
- * relocations, since these are fixed up at runtime rather than at build time
- * when PIE is in effect. So we need to split them up in 32-bit high and low
- * words.
- */
-#define DEFINE_IMAGE_LE64(sym, data) \
- sym##_lo32 = (data) & 0xffffffff; \
- sym##_hi32 = (data) >> 32
-
#define __HEAD_FLAG(field) (__HEAD_FLAG_##field << \
ARM64_IMAGE_FLAG_##field##_SHIFT)
@@ -41,13 +26,8 @@
__HEAD_FLAG(PAGE_SIZE) | \
__HEAD_FLAG(PHYS_BASE))
-/*
- * These will output as part of the Image header, which should be little-endian
- * regardless of the endianness of the kernel. While constant values could be
- * endian swapped in head.S, all are done here for consistency.
- */
#define HEAD_SYMBOLS \
- DEFINE_IMAGE_LE64(_kernel_size_le, _end - _text); \
- DEFINE_IMAGE_LE64(_kernel_flags_le, __HEAD_FLAGS);
+ _kernel_size_le = _end - _text; \
+ _kernel_flags_le = __HEAD_FLAGS;
#endif /* __ARM64_KERNEL_IMAGE_H */
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 12/12] arm64: Kbuild: Remove vestigial big-endian support
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (10 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 11/12] arm64: image: Remove endianness handling for generating image header Will Deacon
@ 2026-08-11 14:01 ` Will Deacon
2026-08-11 14:54 ` [PATCH 00/12] arm64: Remove unused " Marc Zyngier
` (2 subsequent siblings)
14 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2026-08-11 14:01 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, Will Deacon, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu, Marc Zyngier
Since 1cf89b6bf660 ("arm64: Kconfig: Make CPU_BIG_ENDIAN depend on
BROKEN"), CONFIG_CPU_BIG_ENDIAN has depended on BROKEN for arm64.
Remove the last traces of its existence and unconditionally force a
little-endian kernel build.
Signed-off-by: Will Deacon <will@kernel.org>
---
arch/arm64/Kconfig | 35 ++++-------------------------------
arch/arm64/Makefile | 12 ++----------
2 files changed, 6 insertions(+), 41 deletions(-)
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index b3afe0688919..84cf009c0021 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -73,7 +73,7 @@ config ARM64
select ARCH_SUPPORTS_HUGETLBFS
select ARCH_SUPPORTS_MEMORY_FAILURE
select ARCH_SUPPORTS_SHADOW_CALL_STACK if CC_HAVE_SHADOW_CALL_STACK
- select ARCH_SUPPORTS_LTO_CLANG if CPU_LITTLE_ENDIAN
+ select ARCH_SUPPORTS_LTO_CLANG
select ARCH_SUPPORTS_LTO_CLANG_THIN
select ARCH_SUPPORTS_CFI
select ARCH_SUPPORTS_ATOMIC_RMW
@@ -223,7 +223,7 @@ config ARM64
select HAVE_FUNCTION_ARG_ACCESS_API
select MMU_GATHER_RCU_TABLE_FREE
select HAVE_RSEQ
- select HAVE_RUST if RUSTC_SUPPORTS_ARM64
+ select HAVE_RUST
select HAVE_STACKPROTECTOR
select HAVE_STATIC_CALL if CFI
select HAVE_SYSCALL_TRACEPOINTS
@@ -262,10 +262,6 @@ config ARM64
help
ARM 64-bit (AArch64) Linux support.
-config RUSTC_SUPPORTS_ARM64
- def_bool y
- depends on CPU_LITTLE_ENDIAN
-
config CLANG_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS
def_bool CC_IS_CLANG
# https://github.com/ClangBuiltLinux/linux/issues/1507
@@ -1542,28 +1538,6 @@ config ARM64_LPA2
def_bool y
depends on ARM64_PA_BITS_52 && !ARM64_64K_PAGES
-choice
- prompt "Endianness"
- default CPU_LITTLE_ENDIAN
- help
- Select the endianness of data accesses performed by the CPU. Userspace
- applications will need to be compiled and linked for the endianness
- that is selected here.
-
-config CPU_BIG_ENDIAN
- bool "Build big-endian kernel"
- depends on BROKEN
- help
- Say Y if you plan on running a kernel with a big-endian userspace.
-
-config CPU_LITTLE_ENDIAN
- bool "Build little-endian kernel"
- help
- Say Y if you plan on running a kernel with a little-endian userspace.
- This is usually the case for distributions targeting arm64.
-
-endchoice
-
config NR_CPUS
int "Maximum number of CPUs (2-4096)"
range 2 4096
@@ -1801,7 +1775,6 @@ config KUSER_HELPERS
config COMPAT_VDSO
bool "Enable vDSO for 32-bit applications"
- depends on !CPU_BIG_ENDIAN
depends on (CC_IS_CLANG && LD_IS_LLD) || "$(CROSS_COMPILE_COMPAT)" != ""
default y
help
@@ -2263,7 +2236,7 @@ menu "ARMv9.6 architectural features"
config ARM64_LSUI
bool "Support Unprivileged Load Store Instructions (LSUI)"
default y
- depends on AS_HAS_LSUI && !CPU_BIG_ENDIAN
+ depends on AS_HAS_LSUI
help
The Unprivileged Load Store Instructions (LSUI) provides
variants load/store instructions that access user-space memory
@@ -2468,7 +2441,7 @@ config EFI_STUB
config EFI
bool "UEFI runtime support"
- depends on OF && !CPU_BIG_ENDIAN
+ depends on OF
depends on KERNEL_MODE_NEON
select ARCH_SUPPORTS_ACPI
select LIBFDT
diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
index 6b005c8fef70..04e1a0d12f8f 100644
--- a/arch/arm64/Makefile
+++ b/arch/arm64/Makefile
@@ -119,20 +119,12 @@ KBUILD_CFLAGS += -ffixed-x18
KBUILD_RUSTFLAGS += -Zfixed-x18
endif
-ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
-KBUILD_CPPFLAGS += -mbig-endian
-CHECKFLAGS += -D__AARCH64EB__
-# Prefer the baremetal ELF build target, but not all toolchains include
-# it so fall back to the standard linux version if needed.
-KBUILD_LDFLAGS += -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -z norelro)
-UTS_MACHINE := aarch64_be
-else
KBUILD_CPPFLAGS += -mlittle-endian
CHECKFLAGS += -D__AARCH64EL__
-# Same as above, prefer ELF but fall back to linux target if needed.
+# Prefer the baremetal ELF build target, but not all toolchains include
+# it so fall back to the standard linux version if needed.
KBUILD_LDFLAGS += -EL $(call ld-option, -maarch64elf, -maarch64linux -z norelro)
UTS_MACHINE := aarch64
-endif
ifeq ($(CONFIG_LD_IS_LLD), y)
KBUILD_LDFLAGS += -z norelro
--
2.55.0.679.g6767b8d81c-goog
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 09/12] arm64: Remove all usage of CONFIG_CPU_BIG_ENDIAN
2026-08-11 14:01 ` [PATCH 09/12] arm64: Remove all usage of CONFIG_CPU_BIG_ENDIAN Will Deacon
@ 2026-08-11 14:49 ` Marc Zyngier
0 siblings, 0 replies; 18+ messages in thread
From: Marc Zyngier @ 2026-08-11 14:49 UTC (permalink / raw)
To: Will Deacon
Cc: linux-arm-kernel, linux-kernel, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu
On Tue, 11 Aug 2026 15:01:28 +0100,
Will Deacon <will@kernel.org> wrote:
>
> Big-endian support on arm64 depends on BROKEN. In preparation for
> removing the dead code altogether, remove all usage of
> CONFIG_CPU_BIG_ENDIAN from the arm64 kernel port.
>
> Signed-off-by: Will Deacon <will@kernel.org>
[...]
> diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c
> index 968324a79a89..41eb34c50721 100644
> --- a/arch/arm64/kernel/kgdb.c
> +++ b/arch/arm64/kernel/kgdb.c
> @@ -61,9 +61,6 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
> * detail.
> */
> { "pstate", 4, offsetof(struct pt_regs, pstate)
> -#ifdef CONFIG_CPU_BIG_ENDIAN
> - + 4
> -#endif
> },
nit: this reads a bit odd now, and could be brought together on a
single line.
M.
--
Without deviation from the norm, progress is not possible.
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 00/12] arm64: Remove unused big-endian support
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (11 preceding siblings ...)
2026-08-11 14:01 ` [PATCH 12/12] arm64: Kbuild: Remove vestigial big-endian support Will Deacon
@ 2026-08-11 14:54 ` Marc Zyngier
2026-08-11 15:11 ` Arnd Bergmann
2026-08-11 15:43 ` Catalin Marinas
14 siblings, 0 replies; 18+ messages in thread
From: Marc Zyngier @ 2026-08-11 14:54 UTC (permalink / raw)
To: Will Deacon
Cc: linux-arm-kernel, linux-kernel, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Catalin Marinas,
Alexei Starovoitov, Oliver Upton, Herbert Xu
On Tue, 11 Aug 2026 15:01:19 +0100,
Will Deacon <will@kernel.org> wrote:
>
> Hi folks,
>
> Big-endian support on arm64 (CONFIG_CPU_BIG_ENDIAN) has depended on
> BROKEN since 1cf89b6bf660 ("arm64: Kconfig: Make CPU_BIG_ENDIAN depend
> on BROKEN") and has already seen some clean-up patches removing some of
> the unused support code (e.g. 5276ea17a23c ("lib/crc: arm64: Assume a
> little-endian kernel")).
>
> Finish the job, and remove the remaining big-endian support code from
> arm64. Note that the SETEND emulation for 32-bit tasks remains and so
> some of the mixed-endian EL0 helpers are retained.
>
> I've broken this down into fairly coarse chunks, as it seemed a lot
> easier to manage than one giant patch (even with the Kconfig being
> effectively disabled already) and not all of it is just mindless
> deletion. Despite that, I'm anticipating the whole thing going via the
> arm64 tree.
FWIW:
Acked-by: Marc Zyngier <maz@kernel.org>
M.
--
Without deviation from the norm, progress is not possible.
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 06/12] arm64: assembler: Remove endianness helper macros
2026-08-11 14:01 ` [PATCH 06/12] arm64: assembler: Remove endianness helper macros Will Deacon
@ 2026-08-11 15:04 ` Ard Biesheuvel
0 siblings, 0 replies; 18+ messages in thread
From: Ard Biesheuvel @ 2026-08-11 15:04 UTC (permalink / raw)
To: Will Deacon, linux-arm-kernel
Cc: linux-kernel, Arnd Bergmann, Eric Biggers, Daniel Borkmann,
Catalin Marinas, Alexei Starovoitov, Oliver Upton, Herbert Xu,
Marc Zyngier
On Tue, 11 Aug 2026, at 16:01, Will Deacon wrote:
> The CPU_LE()/CPU_BE() helper macros are only used by head.S. Since
> big-endian support depends on BROKEN, remove the last users along with
> the macro definitions. The unused regs_to_64() assembly macro, which
> somewhat bizarrely behaves differently depend on the endianness, is also
> removed.
>
> Signed-off-by: Will Deacon <will@kernel.org>
> ---
> arch/arm64/include/asm/assembler.h | 31 ------------------------------
> arch/arm64/kernel/head.S | 3 +--
> 2 files changed, 1 insertion(+), 33 deletions(-)
>
> diff --git a/arch/arm64/include/asm/assembler.h
> b/arch/arm64/include/asm/assembler.h
> index effae53e9739..45279e577ff5 100644
> --- a/arch/arm64/include/asm/assembler.h
> +++ b/arch/arm64/include/asm/assembler.h
> @@ -133,37 +133,6 @@ lr .req x30 // link register
> b \label
> .endm
>
> -/*
> - * Select code when configured for BE.
> - */
> -#ifdef CONFIG_CPU_BIG_ENDIAN
> -#define CPU_BE(code...) code
> -#else
> -#define CPU_BE(code...)
> -#endif
> -
> -/*
> - * Select code when configured for LE.
> - */
> -#ifdef CONFIG_CPU_BIG_ENDIAN
> -#define CPU_LE(code...)
> -#else
> -#define CPU_LE(code...) code
> -#endif
> -
> -/*
> - * Define a macro that constructs a 64-bit value by concatenating two
> - * 32-bit registers. Note that on big endian systems the order of the
> - * registers is swapped.
> - */
> -#ifndef CONFIG_CPU_BIG_ENDIAN
> - .macro regs_to_64, rd, lbits, hbits
> -#else
> - .macro regs_to_64, rd, hbits, lbits
> -#endif
> - orr \rd, \lbits, \hbits, lsl #32
> - .endm
> -
> /*
> * Pseudo-ops for PC-relative adr/ldr/str <reg>, <symbol> where
> * <symbol> is within the range +/- 4 GB of the PC.
> diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
> index 87a822e5c4ca..8951ce693552 100644
> --- a/arch/arm64/kernel/head.S
> +++ b/arch/arm64/kernel/head.S
> @@ -138,8 +138,7 @@ SYM_CODE_START_LOCAL(record_mmu_state)
> b.ne 0f
> mrs x19, sctlr_el2
> 0:
> -CPU_LE( tbnz x19, #SCTLR_ELx_EE_SHIFT, 1f )
> -CPU_BE( tbz x19, #SCTLR_ELx_EE_SHIFT, 1f )
> + tbnz x19, #SCTLR_ELx_EE_SHIFT, 1f
> tst x19, #SCTLR_ELx_C // Z := (C == 0)
> and x19, x19, #SCTLR_ELx_M // isolate M bit
> csel x19, xzr, x19, eq // clear x19 if Z
There is some more code that can be removed here - see
2ced0f30a426c7301350681f838344d5aea711e3
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 00/12] arm64: Remove unused big-endian support
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (12 preceding siblings ...)
2026-08-11 14:54 ` [PATCH 00/12] arm64: Remove unused " Marc Zyngier
@ 2026-08-11 15:11 ` Arnd Bergmann
2026-08-11 15:43 ` Catalin Marinas
14 siblings, 0 replies; 18+ messages in thread
From: Arnd Bergmann @ 2026-08-11 15:11 UTC (permalink / raw)
To: Will Deacon, linux-arm-kernel
Cc: linux-kernel, Ard Biesheuvel, Eric Biggers, Daniel Borkmann,
Catalin Marinas, Alexei Starovoitov, Oliver Upton, Herbert Xu,
Marc Zyngier, Linus Walleij
On Tue, Aug 11, 2026, at 16:01, Will Deacon wrote:
> Hi folks,
>
> Big-endian support on arm64 (CONFIG_CPU_BIG_ENDIAN) has depended on
> BROKEN since 1cf89b6bf660 ("arm64: Kconfig: Make CPU_BIG_ENDIAN depend
> on BROKEN") and has already seen some clean-up patches removing some of
> the unused support code (e.g. 5276ea17a23c ("lib/crc: arm64: Assume a
> little-endian kernel")).
>
> Finish the job, and remove the remaining big-endian support code from
> arm64. Note that the SETEND emulation for 32-bit tasks remains and so
> some of the mixed-endian EL0 helpers are retained.
I had not expected the removal to come this soon, but I'm not
complaining about that. I assume you are planning this for 7.4,
leaving 7.3-LTS to still have the code in case someone wants to
still use it, right?
Not sure if you saw
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm/mm/Kconfig?id=fe91e4e9da70765420538d9cbcf6d9a970237a8d
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm/mach-ixp4xx/Kconfig?id=2262f02ac2aa545560a7f182c8e6b5c98e72763c
so for 7.3, we have marked big-endian mode in arm32 as deprecated
as well, and also managed to get ixp4xx working again in little-endian
mode, which was slightly broken for a few years. It may be good to
add a reference to your series for context.
My suggestions there was to possibly remove arm32 big-endian mode at
the same time as on arm64, but that does feel a little rushed if
ixp4xx only has one release of supporting both, and removing be8
but leaving be32 for a little while longer is probably not worth it.
> I've broken this down into fairly coarse chunks, as it seemed a lot
> easier to manage than one giant patch (even with the Kconfig being
> effectively disabled already) and not all of it is just mindless
> deletion. Despite that, I'm anticipating the whole thing going via the
> arm64 tree.
I would have done even larger patches, this does already feel fairly
fine-grained to me ;-). I had a look at the individual patches to make
sure this all makes sense, and I found nothing wrong here.
For a 7.4 (or later) merge:
Acked-by: Arnd Bergmann <arnd@arndb.de>
There are also a few arm64 specific drivers that I think no
longer need a dependency, but none of that is important:
diff --git a/drivers/crypto/hisilicon/Kconfig b/drivers/crypto/hisilicon/Kconfig
index aeff08ccbadd..1ae7b146b241 100644
--- a/drivers/crypto/hisilicon/Kconfig
+++ b/drivers/crypto/hisilicon/Kconfig
@@ -53,7 +53,6 @@ config CRYPTO_DEV_HISI_ZIP
tristate "Support for HiSilicon ZIP accelerator"
depends on PCI_MSI
depends on ARM64 || (COMPILE_TEST && 64BIT)
- depends on !CPU_BIG_ENDIAN || COMPILE_TEST
depends on UACCE || UACCE=n
depends on ACPI
select CRYPTO_DEV_HISI_QM
diff --git a/drivers/firmware/qcom/Kconfig b/drivers/firmware/qcom/Kconfig
index c7f8413ab996..f0c1061b0005 100644
--- a/drivers/firmware/qcom/Kconfig
+++ b/drivers/firmware/qcom/Kconfig
@@ -18,7 +18,6 @@ config QCOM_PAS_TEE
tristate "Qualcomm PAS TEE interface driver"
select QCOM_PAS
depends on TEE
- depends on !CPU_BIG_ENDIAN
default m if ARCH_QCOM
help
Enable the generic Peripheral Authentication Service (PAS) provided
diff --git a/drivers/firmware/tegra/Kconfig b/drivers/firmware/tegra/Kconfig
index 3a9162706439..e9271d706726 100644
--- a/drivers/firmware/tegra/Kconfig
+++ b/drivers/firmware/tegra/Kconfig
@@ -14,7 +14,6 @@ config TEGRA_IVC
config TEGRA_BPMP
bool "Tegra BPMP driver"
depends on ARCH_TEGRA && TEGRA_HSP_MBOX
- depends on !CPU_BIG_ENDIAN
select TEGRA_IVC
help
BPMP (Boot and Power Management Processor) is designed to off-loading
diff --git a/drivers/soc/tegra/Kconfig b/drivers/soc/tegra/Kconfig
index 8b6fdb9ad1ea..318e7b604342 100644
--- a/drivers/soc/tegra/Kconfig
+++ b/drivers/soc/tegra/Kconfig
@@ -102,7 +102,6 @@ config ARCH_TEGRA_210_SOC
config ARCH_TEGRA_186_SOC
bool "NVIDIA Tegra186 SoC"
default ARCH_TEGRA
- depends on !CPU_BIG_ENDIAN
select PINCTRL_TEGRA186
select MAILBOX
select SOC_TEGRA_PMC
@@ -117,7 +116,6 @@ config ARCH_TEGRA_186_SOC
config ARCH_TEGRA_194_SOC
bool "NVIDIA Tegra194 SoC"
default ARCH_TEGRA
- depends on !CPU_BIG_ENDIAN
select MAILBOX
select PINCTRL_TEGRA194
select SOC_TEGRA_PMC
@@ -127,7 +125,6 @@ config ARCH_TEGRA_194_SOC
config ARCH_TEGRA_234_SOC
bool "NVIDIA Tegra234 SoC"
default ARCH_TEGRA
- depends on !CPU_BIG_ENDIAN
select MAILBOX
select PINCTRL_TEGRA234
select SOC_TEGRA_PMC
@@ -137,7 +134,6 @@ config ARCH_TEGRA_234_SOC
config ARCH_TEGRA_238_SOC
bool "NVIDIA Tegra238 SoC"
default ARCH_TEGRA
- depends on !CPU_BIG_ENDIAN
select MAILBOX
select SOC_TEGRA_PMC
help
@@ -152,7 +148,6 @@ config ARCH_TEGRA_241_SOC
config ARCH_TEGRA_264_SOC
bool "NVIDIA Tegra264 SoC"
default ARCH_TEGRA
- depends on !CPU_BIG_ENDIAN
select MAILBOX
select SOC_TEGRA_PMC
help
diff --git a/drivers/tee/qcomtee/Kconfig b/drivers/tee/qcomtee/Kconfig
index 9f19dee08db4..bd9be3e9a9ac 100644
--- a/drivers/tee/qcomtee/Kconfig
+++ b/drivers/tee/qcomtee/Kconfig
@@ -3,7 +3,6 @@
config QCOMTEE
tristate "Qualcomm TEE Support"
depends on ARCH_QCOM || COMPILE_TEST
- depends on !CPU_BIG_ENDIAN
select QCOM_SCM
select QCOM_TZMEM_MODE_SHMBRIDGE
help
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 00/12] arm64: Remove unused big-endian support
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
` (13 preceding siblings ...)
2026-08-11 15:11 ` Arnd Bergmann
@ 2026-08-11 15:43 ` Catalin Marinas
14 siblings, 0 replies; 18+ messages in thread
From: Catalin Marinas @ 2026-08-11 15:43 UTC (permalink / raw)
To: Will Deacon
Cc: linux-arm-kernel, linux-kernel, Arnd Bergmann, Ard Biesheuvel,
Eric Biggers, Daniel Borkmann, Alexei Starovoitov, Oliver Upton,
Herbert Xu, Marc Zyngier
On Tue, Aug 11, 2026 at 03:01:19PM +0100, Will Deacon wrote:
> Hi folks,
>
> Big-endian support on arm64 (CONFIG_CPU_BIG_ENDIAN) has depended on
> BROKEN since 1cf89b6bf660 ("arm64: Kconfig: Make CPU_BIG_ENDIAN depend
> on BROKEN") and has already seen some clean-up patches removing some of
> the unused support code (e.g. 5276ea17a23c ("lib/crc: arm64: Assume a
> little-endian kernel")).
>
> Finish the job, and remove the remaining big-endian support code from
> arm64. Note that the SETEND emulation for 32-bit tasks remains and so
> some of the mixed-endian EL0 helpers are retained.
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2026-08-11 15:44 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-11 14:01 [PATCH 00/12] arm64: Remove unused big-endian support Will Deacon
2026-08-11 14:01 ` [PATCH 01/12] selftests/arm64: Remove " Will Deacon
2026-08-11 14:01 ` [PATCH 02/12] arm64: bpf: Remove big-endian support from the JIT compiler Will Deacon
2026-08-11 14:01 ` [PATCH 03/12] arm64: crypto: Assume a little-endian kernel Will Deacon
2026-08-11 14:01 ` [PATCH 04/12] arm64: lib: Assume a little-endian kernel in custom library routines Will Deacon
2026-08-11 14:01 ` [PATCH 05/12] arm64: lib: Assume a little-endian kernel in optimised string routines Will Deacon
2026-08-11 14:01 ` [PATCH 06/12] arm64: assembler: Remove endianness helper macros Will Deacon
2026-08-11 15:04 ` Ard Biesheuvel
2026-08-11 14:01 ` [PATCH 07/12] arm64: vdso32: Always build compat vDSO object as little-endian Will Deacon
2026-08-11 14:01 ` [PATCH 08/12] KVM: arm64: Remove support for a big-endian hypervisor object Will Deacon
2026-08-11 14:01 ` [PATCH 09/12] arm64: Remove all usage of CONFIG_CPU_BIG_ENDIAN Will Deacon
2026-08-11 14:49 ` Marc Zyngier
2026-08-11 14:01 ` [PATCH 10/12] arm64: Remove all usage of __AARCH64EB__ Will Deacon
2026-08-11 14:01 ` [PATCH 11/12] arm64: image: Remove endianness handling for generating image header Will Deacon
2026-08-11 14:01 ` [PATCH 12/12] arm64: Kbuild: Remove vestigial big-endian support Will Deacon
2026-08-11 14:54 ` [PATCH 00/12] arm64: Remove unused " Marc Zyngier
2026-08-11 15:11 ` Arnd Bergmann
2026-08-11 15:43 ` Catalin Marinas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox