powerpc{32,64} randconfigs

10 messages, 4 authors, 2022-03-02 · open the first message on its own page

powerpc{32,64} randconfigs

From: Randy Dunlap <hidden>
Date: 2021-04-20 23:32:18

Hi,

Is there a way to do this?

$ make ARCH=powerpc randconfig # and force PPC32

and separately
$ make ARCH=powerpc randconfig # and force PPC64


I suppose that I could do something like this (for PPC64):

$ make ARCH=powerpc randconfig
$ ./scripts/config -d PPC32 -e PPC64
$ make ARCH=powerpc olddefconfig
$ make ARCH=powerpc all

but that's awkward and sort of defeats the randomness -- i.e.,
the randomness is done before the ARCH=PPC{32,64} is forced,
and then some of the config items won't be valid during the
'make olddefconfig'.

If the answer is No, then I will try to make a patch (at least
for local use) that does something like x86 does for
i386 | x86_64, or sparc does for sparc32 | sparc64.

[time passes]

OK, I have a patch that seems for work as far as setting
PPC32=y or PPC64=y... but it has a problem during linking
of vmlinux:

crosstool/gcc-9.3.0-nolibc/powerpc-linux/bin/powerpc-linux-ld:./arch/powerpc/kernel/vmlinux.lds:6: syntax error

and the (bad) generated vmlinux.lds file says (at line 6):

OUTPUT_ARCH(1:common)

while it should say:

OUTPUT_ARCH(powerpc:common)

Does anyone have any ideas about this problem?

The ARCH=ppc32 / ARCH=ppc64 patch is below FYI.
It is missing an update to Documentation/kbuild/kbuild.rst (aliases).


thanks.
-- 
---
 Makefile                               |    8 ++++++++
 arch/powerpc/Makefile                  |   14 +++++++-------
 arch/powerpc/kernel/vdso64/Makefile    |    2 +-
 arch/powerpc/platforms/Kconfig.cputype |    5 +++--
 4 files changed, 19 insertions(+), 10 deletions(-)
--- linux-next-20210420.orig/Makefile
+++ linux-next-20210420/Makefile
@@ -411,6 +411,14 @@ ifeq ($(ARCH),sh64)
        SRCARCH := sh
 endif
 
+# Additional ARCH settings for powerpc
+ifeq ($(ARCH),ppc32)
+        SRCARCH := powerpc
+endif
+ifeq ($(ARCH),ppc64)
+        SRCARCH := powerpc
+endif
+
 export cross_compiling :=
 ifneq ($(SRCARCH),$(SUBARCH))
 cross_compiling := 1
--- linux-next-20210420.orig/arch/powerpc/platforms/Kconfig.cputype
+++ linux-next-20210420/arch/powerpc/platforms/Kconfig.cputype
@@ -1,11 +1,12 @@
 # SPDX-License-Identifier: GPL-2.0
 config PPC32
 	bool
-	default y if !PPC64
+	default y if !PPC64 || "$(ARCH)" = "ppc32"
 	select KASAN_VMALLOC if KASAN && MODULES
 
 config PPC64
-	bool "64-bit kernel"
+	bool "64-bit kernel" if "$(ARCH)" = "powerpc"
+	default y if "$(ARCH)" = "ppc64"
 	select ZLIB_DEFLATE
 	help
 	  This option selects whether a 32-bit or a 64-bit kernel
--- linux-next-20210420.orig/arch/powerpc/kernel/vdso64/Makefile
+++ linux-next-20210420/arch/powerpc/kernel/vdso64/Makefile
@@ -30,7 +30,7 @@ ccflags-y := -shared -fno-common -fno-bu
 asflags-y := -D__VDSO64__ -s
 
 targets += vdso64.lds
-CPPFLAGS_vdso64.lds += -P -C -U$(ARCH)
+CPPFLAGS_vdso64.lds += -P -C -U$(SRCARCH)
 
 # link rule for the .so file, .lds has to be first
 $(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday.o FORCE
--- linux-next-20210420.orig/arch/powerpc/Makefile
+++ linux-next-20210420/arch/powerpc/Makefile
@@ -204,7 +204,7 @@ endif
 
 asinstr := $(call as-instr,lis 9$(comma)foo@high,-DHAVE_AS_ATHIGH=1)
 
-KBUILD_CPPFLAGS	+= -I $(srctree)/arch/$(ARCH) $(asinstr)
+KBUILD_CPPFLAGS	+= -I $(srctree)/arch/$(SRCARCH) $(asinstr)
 KBUILD_AFLAGS	+= $(AFLAGS-y)
 KBUILD_CFLAGS	+= $(call cc-option,-msoft-float)
 KBUILD_CFLAGS	+= -pipe $(CFLAGS-y)
@@ -279,7 +279,7 @@ BOOT_TARGETS2 := zImage% dtbImage% treeI
 
 PHONY += $(BOOT_TARGETS1) $(BOOT_TARGETS2)
 
-boot := arch/$(ARCH)/boot
+boot := arch/$(SRCARCH)/boot
 
 $(BOOT_TARGETS1): vmlinux
 	$(Q)$(MAKE) $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
@@ -297,8 +297,8 @@ bootwrapper_install:
 # without the .config suffix.
 define merge_into_defconfig
 	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh \
-		-m -O $(objtree) $(srctree)/arch/$(ARCH)/configs/$(1) \
-		$(foreach config,$(2),$(srctree)/arch/$(ARCH)/configs/$(config).config)
+		-m -O $(objtree) $(srctree)/arch/$(SRCARCH)/configs/$(1) \
+		$(foreach config,$(2),$(srctree)/arch/$(SRCARCH)/configs/$(config).config)
 	+$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
 endef
 
@@ -378,7 +378,7 @@ ppc64_book3e_allmodconfig:
 
 define archhelp
   @echo '* zImage          - Build default images selected by kernel config'
-  @echo '  zImage.*        - Compressed kernel image (arch/$(ARCH)/boot/zImage.*)'
+  @echo '  zImage.*        - Compressed kernel image (arch/$(SRCARCH)/boot/zImage.*)'
   @echo '  uImage          - U-Boot native image format'
   @echo '  cuImage.<dt>    - Backwards compatible U-Boot image for older'
   @echo '                    versions which do not support device trees'
@@ -389,12 +389,12 @@ define archhelp
   @echo '                    (your) ~/bin/$(INSTALLKERNEL) or'
   @echo '                    (distribution) /sbin/$(INSTALLKERNEL) or'
   @echo '                    install to $$(INSTALL_PATH) and run lilo'
-  @echo '  *_defconfig     - Select default config from arch/$(ARCH)/configs'
+  @echo '  *_defconfig     - Select default config from arch/$(SRCARCH)/configs'
   @echo ''
   @echo '  Targets with <dt> embed a device tree blob inside the image'
   @echo '  These targets support board with firmware that does not'
   @echo '  support passing a device tree directly.  Replace <dt> with the'
-  @echo '  name of a dts file from the arch/$(ARCH)/boot/dts/ directory'
+  @echo '  name of a dts file from the arch/$(SRCARCH)/boot/dts/ directory'
   @echo '  (minus the .dts extension).'
 endef
 

Re: powerpc{32,64} randconfigs

From: Christophe Leroy <hidden>
Date: 2021-04-21 06:03:52

Hi

Le 21/04/2021 à 01:31, Randy Dunlap a écrit :
[time passes]

OK, I have a patch that seems for work as far as setting
PPC32=y or PPC64=y... but it has a problem during linking
of vmlinux:

crosstool/gcc-9.3.0-nolibc/powerpc-linux/bin/powerpc-linux-ld:./arch/powerpc/kernel/vmlinux.lds:6: syntax error

and the (bad) generated vmlinux.lds file says (at line 6):

OUTPUT_ARCH(1:common)

while it should say:

OUTPUT_ARCH(powerpc:common)

Does anyone have any ideas about this problem?
The following change fixes the problem, allthough I guess that's not what you want to do at the end.
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 1b6094a13034..00f72699c518 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -358,7 +358,7 @@ targets += $(lib-y) $(always-y) $(MAKECMDGOALS)
  # Linker scripts preprocessor (.lds.S -> .lds)
  # ---------------------------------------------------------------------------
  quiet_cmd_cpp_lds_S = LDS     $@
-      cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -U$(ARCH) \
+      cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -U$(SRCARCH) \
  	                     -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $<

  $(obj)/%.lds: $(src)/%.lds.S FORCE

The ARCH=ppc32 / ARCH=ppc64 patch is below FYI.
It is missing an update to Documentation/kbuild/kbuild.rst (aliases).


thanks.

Re: powerpc{32,64} randconfigs

From: Christophe Leroy <hidden>
Date: 2021-04-21 06:13:10


Le 21/04/2021 à 01:31, Randy Dunlap a écrit :
quoted hunk
--- linux-next-20210420.orig/arch/powerpc/platforms/Kconfig.cputype
+++ linux-next-20210420/arch/powerpc/platforms/Kconfig.cputype
@@ -1,11 +1,12 @@
  # SPDX-License-Identifier: GPL-2.0
  config PPC32
  	bool
-	default y if !PPC64
+	default y if !PPC64 || "$(ARCH)" = "ppc32"
I don't think you need that change. If the ARCH is neither 'powerpc' not 'ppc64' CONFIG_PPC64 isn't 
set so CONFIG_PPC32 is set.

  	select KASAN_VMALLOC if KASAN && MODULES
  
  config PPC64
-	bool "64-bit kernel"
+	bool "64-bit kernel" if "$(ARCH)" = "powerpc"
+	default y if "$(ARCH)" = "ppc64"
  	select ZLIB_DEFLATE
  	help
  	  This option selects whether a 32-bit or a 64-bit kernel

Re: powerpc{32,64} randconfigs

From: Christophe Leroy <hidden>
Date: 2021-04-21 06:38:10


Le 21/04/2021 à 01:31, Randy Dunlap a écrit :
quoted hunk
--- linux-next-20210420.orig/arch/powerpc/kernel/vdso64/Makefile
+++ linux-next-20210420/arch/powerpc/kernel/vdso64/Makefile
@@ -30,7 +30,7 @@ ccflags-y := -shared -fno-common -fno-bu
  asflags-y := -D__VDSO64__ -s
  
  targets += vdso64.lds
-CPPFLAGS_vdso64.lds += -P -C -U$(ARCH)
+CPPFLAGS_vdso64.lds += -P -C -U$(SRCARCH)
Maybe it would be better to do -Upowerpc like in VDSO32
quoted hunk
  
  # link rule for the .so file, .lds has to be first
  $(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday.o FORCE
--- linux-next-20210420.orig/arch/powerpc/Makefile

Re: powerpc{32,64} randconfigs

From: Randy Dunlap <hidden>
Date: 2021-04-21 06:45:57

On 4/20/21 11:37 PM, Christophe Leroy wrote:

Le 21/04/2021 à 01:31, Randy Dunlap a écrit :
quoted
--- linux-next-20210420.orig/arch/powerpc/kernel/vdso64/Makefile
+++ linux-next-20210420/arch/powerpc/kernel/vdso64/Makefile
@@ -30,7 +30,7 @@ ccflags-y := -shared -fno-common -fno-bu
  asflags-y := -D__VDSO64__ -s
    targets += vdso64.lds
-CPPFLAGS_vdso64.lds += -P -C -U$(ARCH)
+CPPFLAGS_vdso64.lds += -P -C -U$(SRCARCH)
Maybe it would be better to do -Upowerpc like in VDSO32
OK, thanks for getting that done. :)
quoted
    # link rule for the .so file, .lds has to be first
  $(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday.o FORCE
--- linux-next-20210420.orig/arch/powerpc/Makefile

-- 
~Randy

Re: powerpc{32,64} randconfigs

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2021-04-21 07:16:19

Randy Dunlap [off-list ref] writes:
Hi,

Is there a way to do this?

$ make ARCH=powerpc randconfig # and force PPC32
Sort of:

$ KCONFIG_ALLCONFIG=arch/powerpc/configs/book3s_32.config make randconfig

But that also forces BOOK3S.
and separately
$ make ARCH=powerpc randconfig # and force PPC64
No.

...
OK, I have a patch that seems for work as far as setting
PPC32=y or PPC64=y... but it has a problem during linking
of vmlinux:

crosstool/gcc-9.3.0-nolibc/powerpc-linux/bin/powerpc-linux-ld:./arch/powerpc/kernel/vmlinux.lds:6: syntax error

and the (bad) generated vmlinux.lds file says (at line 6):

OUTPUT_ARCH(1:common)

while it should say:

OUTPUT_ARCH(powerpc:common)

Does anyone have any ideas about this problem?
I guess your patch broke something? :D
Not sure sorry.

What about something like this?

cheers

diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 3212d076ac6a..712c5e8768ce 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -376,6 +376,16 @@ PHONY += ppc64_book3e_allmodconfig
 	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/85xx-64bit.config \
 		-f $(srctree)/Makefile allmodconfig
 
+PHONY += ppc32_randconfig
+ppc32_randconfig:
+	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/32-bit.config \
+		-f $(srctree)/Makefile randconfig
+
+PHONY += ppc64_randconfig
+ppc64_randconfig:
+	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/64-bit.config \
+		-f $(srctree)/Makefile randconfig
+
 define archhelp
   @echo '* zImage          - Build default images selected by kernel config'
   @echo '  zImage.*        - Compressed kernel image (arch/$(ARCH)/boot/zImage.*)'
diff --git a/arch/powerpc/configs/32-bit.config b/arch/powerpc/configs/32-bit.config
new file mode 100644
index 000000000000..bdf833009006
--- /dev/null
+++ b/arch/powerpc/configs/32-bit.config
@@ -0,0 +1 @@
+CONFIG_PPC64=n
diff --git a/arch/powerpc/configs/64-bit.config b/arch/powerpc/configs/64-bit.config
new file mode 100644
index 000000000000..0fe6406929e2
--- /dev/null
+++ b/arch/powerpc/configs/64-bit.config
@@ -0,0 +1 @@
+CONFIG_PPC64=y

Re: powerpc{32,64} randconfigs

From: Masahiro Yamada <masahiroy@kernel.org>
Date: 2021-04-21 10:10:17

On Wed, Apr 21, 2021 at 4:15 PM Michael Ellerman [off-list ref] wrote:
quoted hunk
Randy Dunlap [off-list ref] writes:
quoted
Hi,

Is there a way to do this?

$ make ARCH=powerpc randconfig # and force PPC32
Sort of:

$ KCONFIG_ALLCONFIG=arch/powerpc/configs/book3s_32.config make randconfig

But that also forces BOOK3S.
quoted
and separately
$ make ARCH=powerpc randconfig # and force PPC64
No.

...
quoted
OK, I have a patch that seems for work as far as setting
PPC32=y or PPC64=y... but it has a problem during linking
of vmlinux:

crosstool/gcc-9.3.0-nolibc/powerpc-linux/bin/powerpc-linux-ld:./arch/powerpc/kernel/vmlinux.lds:6: syntax error

and the (bad) generated vmlinux.lds file says (at line 6):

OUTPUT_ARCH(1:common)

while it should say:

OUTPUT_ARCH(powerpc:common)

Does anyone have any ideas about this problem?
I guess your patch broke something? :D
Not sure sorry.

What about something like this?

cheers

diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 3212d076ac6a..712c5e8768ce 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -376,6 +376,16 @@ PHONY += ppc64_book3e_allmodconfig
        $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/85xx-64bit.config \
                -f $(srctree)/Makefile allmodconfig

+PHONY += ppc32_randconfig
+ppc32_randconfig:
+       $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/32-bit.config \
+               -f $(srctree)/Makefile randconfig
+
+PHONY += ppc64_randconfig
+ppc64_randconfig:
+       $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/64-bit.config \
+               -f $(srctree)/Makefile randconfig
+
 define archhelp
   @echo '* zImage          - Build default images selected by kernel config'
   @echo '  zImage.*        - Compressed kernel image (arch/$(ARCH)/boot/zImage.*)'
diff --git a/arch/powerpc/configs/32-bit.config b/arch/powerpc/configs/32-bit.config
new file mode 100644
index 000000000000..bdf833009006
--- /dev/null
+++ b/arch/powerpc/configs/32-bit.config
@@ -0,0 +1 @@
+CONFIG_PPC64=n
Please do:

# CONFIG_PPC64 is not set




quoted hunk
diff --git a/arch/powerpc/configs/64-bit.config b/arch/powerpc/configs/64-bit.config
new file mode 100644
index 000000000000..0fe6406929e2
--- /dev/null
+++ b/arch/powerpc/configs/64-bit.config
@@ -0,0 +1 @@
+CONFIG_PPC64=y

-- 
Best Regards
Masahiro Yamada

Re: powerpc{32,64} randconfigs

From: Randy Dunlap <hidden>
Date: 2021-04-27 23:46:07

On 4/21/21 12:15 AM, Michael Ellerman wrote:
quoted hunk
Randy Dunlap [off-list ref] writes:
quoted
Hi,

Is there a way to do this?

$ make ARCH=powerpc randconfig # and force PPC32
Sort of:

$ KCONFIG_ALLCONFIG=arch/powerpc/configs/book3s_32.config make randconfig

But that also forces BOOK3S.
quoted
and separately
$ make ARCH=powerpc randconfig # and force PPC64
No.

...
quoted
OK, I have a patch that seems for work as far as setting
PPC32=y or PPC64=y... but it has a problem during linking
of vmlinux:

crosstool/gcc-9.3.0-nolibc/powerpc-linux/bin/powerpc-linux-ld:./arch/powerpc/kernel/vmlinux.lds:6: syntax error

and the (bad) generated vmlinux.lds file says (at line 6):

OUTPUT_ARCH(1:common)

while it should say:

OUTPUT_ARCH(powerpc:common)

Does anyone have any ideas about this problem?
I guess your patch broke something? :D
Not sure sorry.

What about something like this?

cheers

diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 3212d076ac6a..712c5e8768ce 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -376,6 +376,16 @@ PHONY += ppc64_book3e_allmodconfig
 	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/85xx-64bit.config \
 		-f $(srctree)/Makefile allmodconfig
 
+PHONY += ppc32_randconfig
+ppc32_randconfig:
+	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/32-bit.config \
+		-f $(srctree)/Makefile randconfig
+
+PHONY += ppc64_randconfig
+ppc64_randconfig:
+	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/64-bit.config \
+		-f $(srctree)/Makefile randconfig
+
 define archhelp
   @echo '* zImage          - Build default images selected by kernel config'
   @echo '  zImage.*        - Compressed kernel image (arch/$(ARCH)/boot/zImage.*)'
diff --git a/arch/powerpc/configs/32-bit.config b/arch/powerpc/configs/32-bit.config
new file mode 100644
index 000000000000..bdf833009006
--- /dev/null
+++ b/arch/powerpc/configs/32-bit.config
@@ -0,0 +1 @@
+CONFIG_PPC64=n
I used the suggested change here (above).
quoted hunk
diff --git a/arch/powerpc/configs/64-bit.config b/arch/powerpc/configs/64-bit.config
new file mode 100644
index 000000000000..0fe6406929e2
--- /dev/null
+++ b/arch/powerpc/configs/64-bit.config
@@ -0,0 +1 @@
+CONFIG_PPC64=y
Reviewed-by: Randy Dunlap <redacted>
Tested-by: Randy Dunlap <redacted>


Please merge this. :)

thanks.
-- 
~Randy

Re: powerpc{32,64} randconfigs

From: Randy Dunlap <hidden>
Date: 2021-04-28 01:32:47

On 4/20/21 11:45 PM, Randy Dunlap wrote:
On 4/20/21 11:37 PM, Christophe Leroy wrote:
quoted

Le 21/04/2021 à 01:31, Randy Dunlap a écrit :
quoted
--- linux-next-20210420.orig/arch/powerpc/kernel/vdso64/Makefile
+++ linux-next-20210420/arch/powerpc/kernel/vdso64/Makefile
@@ -30,7 +30,7 @@ ccflags-y := -shared -fno-common -fno-bu
  asflags-y := -D__VDSO64__ -s
    targets += vdso64.lds
-CPPFLAGS_vdso64.lds += -P -C -U$(ARCH)
+CPPFLAGS_vdso64.lds += -P -C -U$(SRCARCH)
Maybe it would be better to do -Upowerpc like in VDSO32
OK, thanks for getting that done. :)
quoted
quoted
    # link rule for the .so file, .lds has to be first
  $(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday.o FORCE
--- linux-next-20210420.orig/arch/powerpc/Makefile
Just to wrap this up, I got this method working also.
Thanks for all of your help, Christophe.

-- 
~Randy

Re: powerpc{32,64} randconfigs

From: Christophe Leroy <hidden>
Date: 2022-03-02 16:15:22


Le 28/04/2021 à 01:45, Randy Dunlap a écrit :
On 4/21/21 12:15 AM, Michael Ellerman wrote:
quoted
Randy Dunlap [off-list ref] writes:
Reviewed-by: Randy Dunlap <redacted>
Tested-by: Randy Dunlap <redacted>


Please merge this. :)
Merged as f259fb893c69 ("powerpc/Makefile: Add ppc32/ppc64_randconfig 
targets")
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help