[v1,8/8] selftests/nolibc: add test support for powerpc64

Message ID dc634a44cf1a132d607e2c83874cda6cd6d6283f.1689713175.git.falcon@tinylab.org
State New
Headers
Series tools/nolibc: add 32/64-bit powerpc support |

Commit Message

Zhangjin Wu July 18, 2023, 9:18 p.m. UTC
  Here adds test support for big endian 64-bit PowerPC.

The powernv machine of qemu-system-ppc64 is used with
powernv_be_defconfig.

As the document [1] shows:

  PowerNV (as Non-Virtualized) is the “bare metal” platform using the
  OPAL firmware. It runs Linux on IBM and OpenPOWER systems and it can be
  used as an hypervisor OS, running KVM guests, or simply as a host OS.

Note, differs from little endian 64-bit PowerPC, vmlinux is used instead
of zImage, because big endian zImage [2] only boot on qemu with x-vof=on
(added from qemu v7.0) and a fixup patch [3] for qemu v7.0.51:

[1]: https://qemu.readthedocs.io/en/latest/system/ppc/powernv.html
[2]: https://github.com/linuxppc/issues/issues/402
[3]: https://lore.kernel.org/qemu-devel/20220504065536.3534488-1-aik@ozlabs.ru/

Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
---
 tools/testing/selftests/nolibc/Makefile | 6 ++++++
 1 file changed, 6 insertions(+)
  

Comments

Willy Tarreau July 22, 2023, 12:10 p.m. UTC | #1
On Wed, Jul 19, 2023 at 05:18:32AM +0800, Zhangjin Wu wrote:
>  # ARCH is supported by kernel
> +ARCH_powerpc64   = powerpc
>  ARCH_powerpc64le = powerpc

And similarly let's simply call this one ppc64.

Aside these few comments, the series looks nice, thanks!
Willy
  
Zhangjin Wu July 25, 2023, 5:50 a.m. UTC | #2
Hi, Willy

> 
> On Wed, Jul 19, 2023 at 05:18:32AM +0800, Zhangjin Wu wrote:
> >  # ARCH is supported by kernel
> > +ARCH_powerpc64   = powerpc
> >  ARCH_powerpc64le = powerpc
> 
> And similarly let's simply call this one ppc64.
>

Well, I like these short ones too, what about also a ppc alias for
powerpc?

    ARCH_ppc     = powerpc
    ARCH_ppc64   = powerpc
    ARCH_ppc64le = powerpc
  

> Aside these few comments, the series looks nice, thanks!

Have applied all of your suggestions, thanks very much.

Best regards,
Zhangjin

> Willy
  
Willy Tarreau July 25, 2023, 6:02 a.m. UTC | #3
On Tue, Jul 25, 2023 at 01:50:31PM +0800, Zhangjin Wu wrote:
> Hi, Willy
> 
> > 
> > On Wed, Jul 19, 2023 at 05:18:32AM +0800, Zhangjin Wu wrote:
> > >  # ARCH is supported by kernel
> > > +ARCH_powerpc64   = powerpc
> > >  ARCH_powerpc64le = powerpc
> > 
> > And similarly let's simply call this one ppc64.
> >
> 
> Well, I like these short ones too, what about also a ppc alias for
> powerpc?
> 
>     ARCH_ppc     = powerpc
>     ARCH_ppc64   = powerpc
>     ARCH_ppc64le = powerpc

I thought about it as well. It could avoid the confusion between the
arch name (powerpc) that's used for both 32/64 and the user-requested
one.

Willy
  

Patch

diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
index fbdf7fd9bf96..cced1d60ecf9 100644
--- a/tools/testing/selftests/nolibc/Makefile
+++ b/tools/testing/selftests/nolibc/Makefile
@@ -19,6 +19,7 @@  endif
 XARCH           ?= $(or $(XARCH_$(ARCH)),$(ARCH))
 
 # ARCH is supported by kernel
+ARCH_powerpc64   = powerpc
 ARCH_powerpc64le = powerpc
 ARCH            := $(or $(ARCH_$(XARCH)),$(XARCH))
 
@@ -30,6 +31,7 @@  IMAGE_arm64      = arch/arm64/boot/Image
 IMAGE_arm        = arch/arm/boot/zImage
 IMAGE_mips       = vmlinuz
 IMAGE_powerpc    = vmlinux
+IMAGE_powerpc64  = vmlinux
 IMAGE_powerpc64le= arch/powerpc/boot/zImage
 IMAGE_riscv      = arch/riscv/boot/Image
 IMAGE_s390       = arch/s390/boot/bzImage
@@ -45,6 +47,7 @@  DEFCONFIG_arm64      = defconfig
 DEFCONFIG_arm        = multi_v7_defconfig
 DEFCONFIG_mips       = malta_defconfig
 DEFCONFIG_powerpc    = pmac32_defconfig
+DEFCONFIG_powerpc64  = powernv_be_defconfig
 DEFCONFIG_powerpc64le= powernv_defconfig
 DEFCONFIG_riscv      = defconfig
 DEFCONFIG_s390       = defconfig
@@ -65,6 +68,7 @@  QEMU_ARCH_arm64      = aarch64
 QEMU_ARCH_arm        = arm
 QEMU_ARCH_mips       = mipsel  # works with malta_defconfig
 QEMU_ARCH_powerpc    = ppc
+QEMU_ARCH_powerpc64  = ppc64
 QEMU_ARCH_powerpc64le= ppc64le
 QEMU_ARCH_riscv      = riscv64
 QEMU_ARCH_s390       = s390x
@@ -79,6 +83,7 @@  QEMU_ARGS_arm64      = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC
 QEMU_ARGS_arm        = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
 QEMU_ARGS_mips       = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
 QEMU_ARGS_powerpc    = -M g3beige -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
+QEMU_ARGS_powerpc64  = -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
 QEMU_ARGS_powerpc64le= -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
 QEMU_ARGS_riscv      = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
 QEMU_ARGS_s390       = -M s390-ccw-virtio -m 1G -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
@@ -95,6 +100,7 @@  else
 Q=@
 endif
 
+CFLAGS_powerpc64 = -m64 -mbig-endian -mmultiple -Wl,-EB,-melf64ppc
 CFLAGS_powerpc64le = -m64 -mlittle-endian -Wl,-EL,-melf64ppc
 CFLAGS_s390 = -m64
 CFLAGS_mips = -EL