mbox series

[00/13] Arm64 big endian enablement

Message ID 20240519-aarch64-be-v1-0-75cc328eddfa@flygoat.com
Headers show
Series Arm64 big endian enablement | expand

Message

Jiaxun Yang May 19, 2024, 12:56 p.m. UTC
Hi all,

This series enabled big endian support for arm64, enabled qemu-arm
board for arm64be and slightly adjusted our Kconfig handling on endianness.

In practical I think most Arm SoCs do support little endian only,
for those SoCs with big endian support they are usually bi-endian
and expected bootloader in little endian. The only big-endian only
Arm SoC I know is a network processor from ZTE ZXIC, I doubt if upstream
U-Boot will ever support it.

However enabling arm64be can enable us to take more care on big endian
targets, given that arm64 is the most feature rich arch in U-Boot,
we can run more test on big endian systems.

Boot tested on qemu.

Please review.

Thanks

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
---
Jiaxun Yang (13):
      tools/relocate-rela: Fix Big Endian elf64 handling
      arm: Don't select ARM_ASM_UNIFIED on arm64
      arm: Fix assembler.h for arm64
      arm: Introduce CPU_LE/CPU_BE macros
      arm: Define endian related bits in system.h
      armv8: Big Endian enablement for compiler and linker
      arm: Perform byte swap for read and write in io.h
      armv8: Allow endianness to be setted at reset entry
      armv8: spin_table: Perform byte swap for jump address
      lib/crc32: Don't perform byte swap for arm64 crc32b
      Kconfig: Unify endian support option
      config: Use CONFIG_SYS_BIG_ENDIAN in code whenever possible
      qemu-arm: Big endian enablement for arm64

 Makefile                                           |  2 +-
 arch/Kconfig                                       | 34 ++++++++---
 arch/arc/include/asm/arc-bcr.h                     | 10 +--
 arch/arm/Kconfig                                   |  3 +-
 arch/arm/config.mk                                 | 14 +++++
 arch/arm/cpu/armv8/Kconfig                         |  9 +++
 .../arm/cpu/armv8/linux-kernel-image-header-vars.h |  4 +-
 arch/arm/cpu/armv8/spin_table_v8.S                 |  2 +
 arch/arm/cpu/armv8/start.S                         | 26 ++++++++
 arch/arm/cpu/armv8/u-boot-spl.lds                  |  6 ++
 arch/arm/cpu/armv8/u-boot.lds                      |  4 ++
 arch/arm/include/asm/assembler.h                   | 25 ++++++++
 arch/arm/include/asm/io.h                          | 12 ++--
 arch/arm/include/asm/system.h                      |  3 +
 arch/arm/lib/elf_aarch64_efi.lds                   |  7 +++
 arch/mips/Kconfig                                  | 20 +++---
 arch/mips/mach-ath79/Kconfig                       |  8 +--
 arch/mips/mach-bmips/Kconfig                       | 20 +++---
 arch/mips/mach-jz47xx/Kconfig                      |  2 +-
 arch/mips/mach-mscc/Kconfig                        |  4 +-
 arch/mips/mach-pic32/Kconfig                       |  2 +-
 board/emulation/qemu-arm/Kconfig                   |  2 +
 board/emulation/qemu-arm/MAINTAINERS               |  1 +
 configs/qemu_arm64be_defconfig                     | 71 ++++++++++++++++++++++
 doc/board/emulation/qemu-arm.rst                   |  7 ++-
 drivers/mtd/nand/raw/brcmnand/brcmnand.c           |  2 +-
 lib/crc32.c                                        |  3 +-
 scripts/Makefile.build                             |  2 +-
 scripts/Makefile.lib                               |  3 +-
 tools/relocate-rela.c                              | 40 +++++++-----
 30 files changed, 271 insertions(+), 77 deletions(-)
---
base-commit: 3be9f399e911cfc437a37ac826441f1d96da1c9b
change-id: 20240518-aarch64-be-1ec99cf7f28b

Best regards,

Comments

Ilias Apalodimas June 11, 2024, 1:25 p.m. UTC | #1
Hi Jiaxun,

On Sun, 19 May 2024 at 15:56, Jiaxun Yang <jiaxun.yang@flygoat.com> wrote:
>
> Hi all,

Apologies for taking time to review, got a lot in my backlog


>
> This series enabled big endian support for arm64, enabled qemu-arm
> board for arm64be and slightly adjusted our Kconfig handling on endianness.
>
> In practical I think most Arm SoCs do support little endian only,
> for those SoCs with big endian support they are usually bi-endian
> and expected bootloader in little endian. The only big-endian only
> Arm SoC I know is a network processor from ZTE ZXIC, I doubt if upstream
> U-Boot will ever support it.
>
> However enabling arm64be can enable us to take more care on big endian
> targets, given that arm64 is the most feature rich arch in U-Boot,
> we can run more test on big endian systems.
>
> Boot tested on qemu.

This is not a nak, but I dont see why we should have the extra
maintenace burden if people don't use it.

I'd like more feedback from the community on whether this is useful or not

Cheers
/Ilias

>
> Please review.
>
> Thanks
>
> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> ---
> Jiaxun Yang (13):
>       tools/relocate-rela: Fix Big Endian elf64 handling
>       arm: Don't select ARM_ASM_UNIFIED on arm64
>       arm: Fix assembler.h for arm64
>       arm: Introduce CPU_LE/CPU_BE macros
>       arm: Define endian related bits in system.h
>       armv8: Big Endian enablement for compiler and linker
>       arm: Perform byte swap for read and write in io.h
>       armv8: Allow endianness to be setted at reset entry
>       armv8: spin_table: Perform byte swap for jump address
>       lib/crc32: Don't perform byte swap for arm64 crc32b
>       Kconfig: Unify endian support option
>       config: Use CONFIG_SYS_BIG_ENDIAN in code whenever possible
>       qemu-arm: Big endian enablement for arm64
>
>  Makefile                                           |  2 +-
>  arch/Kconfig                                       | 34 ++++++++---
>  arch/arc/include/asm/arc-bcr.h                     | 10 +--
>  arch/arm/Kconfig                                   |  3 +-
>  arch/arm/config.mk                                 | 14 +++++
>  arch/arm/cpu/armv8/Kconfig                         |  9 +++
>  .../arm/cpu/armv8/linux-kernel-image-header-vars.h |  4 +-
>  arch/arm/cpu/armv8/spin_table_v8.S                 |  2 +
>  arch/arm/cpu/armv8/start.S                         | 26 ++++++++
>  arch/arm/cpu/armv8/u-boot-spl.lds                  |  6 ++
>  arch/arm/cpu/armv8/u-boot.lds                      |  4 ++
>  arch/arm/include/asm/assembler.h                   | 25 ++++++++
>  arch/arm/include/asm/io.h                          | 12 ++--
>  arch/arm/include/asm/system.h                      |  3 +
>  arch/arm/lib/elf_aarch64_efi.lds                   |  7 +++
>  arch/mips/Kconfig                                  | 20 +++---
>  arch/mips/mach-ath79/Kconfig                       |  8 +--
>  arch/mips/mach-bmips/Kconfig                       | 20 +++---
>  arch/mips/mach-jz47xx/Kconfig                      |  2 +-
>  arch/mips/mach-mscc/Kconfig                        |  4 +-
>  arch/mips/mach-pic32/Kconfig                       |  2 +-
>  board/emulation/qemu-arm/Kconfig                   |  2 +
>  board/emulation/qemu-arm/MAINTAINERS               |  1 +
>  configs/qemu_arm64be_defconfig                     | 71 ++++++++++++++++++++++
>  doc/board/emulation/qemu-arm.rst                   |  7 ++-
>  drivers/mtd/nand/raw/brcmnand/brcmnand.c           |  2 +-
>  lib/crc32.c                                        |  3 +-
>  scripts/Makefile.build                             |  2 +-
>  scripts/Makefile.lib                               |  3 +-
>  tools/relocate-rela.c                              | 40 +++++++-----
>  30 files changed, 271 insertions(+), 77 deletions(-)
> ---
> base-commit: 3be9f399e911cfc437a37ac826441f1d96da1c9b
> change-id: 20240518-aarch64-be-1ec99cf7f28b
>
> Best regards,
> --
> Jiaxun Yang <jiaxun.yang@flygoat.com>
>