2023-07-18 21:27:09

by Zhangjin Wu

[permalink] [raw]
Subject: [PATCH v1 0/8] tools/nolibc: add 32/64-bit powerpc support

Hi, Willy

Here is the powerpc support, includes 32-bit big-endian powerpc, 64-bit
little endian and big endian powerpc.

All of them passes run-user with the default powerpc toolchain from
Ubuntu 20.04:

$ make run-user DEFCONFIG=tinyconfig XARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- | grep status
165 test(s): 157 passed, 8 skipped, 0 failed => status: warning
$ make run-user DEFCONFIG=tinyconfig XARCH=powerpc64 CROSS_COMPILE=powerpc64le-linux-gnu- | grep status
165 test(s): 157 passed, 8 skipped, 0 failed => status: warning
$ make run-user DEFCONFIG=tinyconfig XARCH=powerpc64le CROSS_COMPILE=powerpc64le-linux-gnu- | grep status
165 test(s): 157 passed, 8 skipped, 0 failed => status: warning

For the slow 'run' target, I have run with defconfig before, and just
verified them via the fast tinyconfig + run with a new patch from next
patchset, all of them passes:

165 test(s): 156 passed, 9 skipped, 0 failed => status: warning

Note, the big endian crosstool powerpc64-linux-gcc from
https://mirrors.edge.kernel.org/pub/tools/crosstool/ has been used to
test both little endian and big endian powerpc64 too, both passed.

Here simply explain what they are:

* tools/nolibc: add support for powerpc
tools/nolibc: add support for powerpc64

32-bit & 64-bit powerpc support of nolibc.

* selftests/nolibc: select_null: fix up for big endian powerpc64

fix up a test case for big endian powerpc64.

* selftests/nolibc: add extra config file customize support

add extconfig target to allow enable extra config options via
configs/<ARCH>.config

applied suggestion from Thomas to use config files instead of config
lines.

* selftests/nolibc: add XARCH and ARCH mapping support

applied suggestions from Willy, use XARCH as the input of our nolibc
test, use ARCH as the pure kernel input, at last build the mapping
between XARCH and ARCH.

Customize the variables via the input XARCH.

* selftests/nolibc: add test support for powerpc

Require to use extconfig to enable the console options specified in
configs/powerpc.config

currently, we should manually run extconfig after defconfig, in next
patchset, we will do this automatically.

* selftests/nolibc: add test support for powerpc64le
selftests/nolibc: add test support for powerpc64

Very simple, but customize CFLAGS carefully to let them work with
powerpc64le-linux-gnu-gcc (from Linux distributions) and
powerpc64-linux-gcc (from mirrors.edge.kernel.org)

The next patchset will not be tinyconfig, but some prepare patches, will
be sent out soon.

Best regards,
Zhangjin
---

Zhangjin Wu (8):
tools/nolibc: add support for powerpc
tools/nolibc: add support for powerpc64
selftests/nolibc: select_null: fix up for big endian powerpc64
selftests/nolibc: add extra config file customize support
selftests/nolibc: add XARCH and ARCH mapping support
selftests/nolibc: add test support for powerpc
selftests/nolibc: add test support for powerpc64le
selftests/nolibc: add test support for powerpc64

tools/include/nolibc/arch-powerpc.h | 170 ++++++++++++++++++
tools/testing/selftests/nolibc/Makefile | 55 ++++--
.../selftests/nolibc/configs/powerpc.config | 3 +
tools/testing/selftests/nolibc/nolibc-test.c | 2 +-
4 files changed, 217 insertions(+), 13 deletions(-)
create mode 100644 tools/include/nolibc/arch-powerpc.h
create mode 100644 tools/testing/selftests/nolibc/configs/powerpc.config

--
2.25.1



2023-07-18 21:32:24

by Zhangjin Wu

[permalink] [raw]
Subject: [PATCH v1 8/8] selftests/nolibc: add test support for powerpc64

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/[email protected]/

Signed-off-by: Zhangjin Wu <[email protected]>
---
tools/testing/selftests/nolibc/Makefile | 6 ++++++
1 file changed, 6 insertions(+)

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
--
2.25.1


2023-07-22 12:37:10

by Willy Tarreau

[permalink] [raw]
Subject: Re: [PATCH v1 8/8] selftests/nolibc: add test support for powerpc64

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

2023-07-23 09:13:40

by Thomas Weißschuh

[permalink] [raw]
Subject: Re: [PATCH v1 0/8] tools/nolibc: add 32/64-bit powerpc support

On 2023-07-19 05:09:42+0800, Zhangjin Wu wrote:
> Here is the powerpc support, includes 32-bit big-endian powerpc, 64-bit
> little endian and big endian powerpc.
>
> [..]
>
> Zhangjin Wu (8):
> tools/nolibc: add support for powerpc
> tools/nolibc: add support for powerpc64
> selftests/nolibc: select_null: fix up for big endian powerpc64
> selftests/nolibc: add extra config file customize support
> selftests/nolibc: add XARCH and ARCH mapping support
> selftests/nolibc: add test support for powerpc
> selftests/nolibc: add test support for powerpc64le
> selftests/nolibc: add test support for powerpc64

For the full series, after comment for patch 1 is addressed:

Reviewed-by: Thomas Weißschuh <[email protected]>

2023-07-25 06:14:42

by Zhangjin Wu

[permalink] [raw]
Subject: Re: [PATCH v1 8/8] selftests/nolibc: add test support for powerpc64

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

2023-07-25 06:23:34

by Willy Tarreau

[permalink] [raw]
Subject: Re: [PATCH v1 8/8] selftests/nolibc: add test support for powerpc64

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