[1/2] powerpc: Add ppc32_allmodconfig defconfig target

Message ID 20180709142426.26999-1-mpe@ellerman.id.au
State Accepted
Commit 8db0c9d416f26018cb7cabfb0b144f5108e29735
Headers show
Series
  • [1/2] powerpc: Add ppc32_allmodconfig defconfig target
Related show

Commit Message

Michael Ellerman July 9, 2018, 2:24 p.m.
Because the allmodconfig logic just sets every symbol to M or Y, it
has the effect of always generating a 64-bit config, because
CONFIG_PPC64 becomes Y.

So to make it easier for folks to test 32-bit code, provide a phony
defconfig target that generates a 32-bit allmodconfig.

The 32-bit port has several mutually exclusive CPU types, we choose
the Book3S variants as that's what the help text in Kconfig says is
most common.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/Makefile                 | 5 +++++
 arch/powerpc/configs/book3s_32.config | 2 ++
 2 files changed, 7 insertions(+)
 create mode 100644 arch/powerpc/configs/book3s_32.config

Comments

Mathieu Malaterre July 10, 2018, 7:58 a.m. | #1
On Mon, Jul 9, 2018 at 4:24 PM Michael Ellerman <mpe@ellerman.id.au> wrote:
>
> Because the allmodconfig logic just sets every symbol to M or Y, it
> has the effect of always generating a 64-bit config, because
> CONFIG_PPC64 becomes Y.
>
> So to make it easier for folks to test 32-bit code, provide a phony
> defconfig target that generates a 32-bit allmodconfig.
>
> The 32-bit port has several mutually exclusive CPU types, we choose
> the Book3S variants as that's what the help text in Kconfig says is
> most common.

Ok then.

> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> ---
>  arch/powerpc/Makefile                 | 5 +++++
>  arch/powerpc/configs/book3s_32.config | 2 ++
>  2 files changed, 7 insertions(+)
>  create mode 100644 arch/powerpc/configs/book3s_32.config
>
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index 2ea575cb3401..2556c2182789 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -354,6 +354,11 @@ mpc86xx_smp_defconfig:
>         $(call merge_into_defconfig,mpc86xx_basic_defconfig,\
>                 86xx-smp 86xx-hw fsl-emb-nonhw)
>
> +PHONY += ppc32_allmodconfig
> +ppc32_allmodconfig:
> +       $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \
> +               -f $(srctree)/Makefile allmodconfig
> +

I this a good time to update line 34 at the same time:

KBUILD_DEFCONFIG := $(shell uname -m)_defconfig

?

>  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/book3s_32.config b/arch/powerpc/configs/book3s_32.config
> new file mode 100644
> index 000000000000..8721eb7b1294
> --- /dev/null
> +++ b/arch/powerpc/configs/book3s_32.config
> @@ -0,0 +1,2 @@
> +CONFIG_PPC64=n
> +CONFIG_PPC_BOOK3S_32=y
> --
> 2.14.1
>
Michael Ellerman July 10, 2018, 1:47 p.m. | #2
Mathieu Malaterre <malat@debian.org> writes:
> On Mon, Jul 9, 2018 at 4:24 PM Michael Ellerman <mpe@ellerman.id.au> wrote:
>>
>> Because the allmodconfig logic just sets every symbol to M or Y, it
>> has the effect of always generating a 64-bit config, because
>> CONFIG_PPC64 becomes Y.
>>
>> So to make it easier for folks to test 32-bit code, provide a phony
>> defconfig target that generates a 32-bit allmodconfig.
>>
>> The 32-bit port has several mutually exclusive CPU types, we choose
>> the Book3S variants as that's what the help text in Kconfig says is
>> most common.
>
> Ok then.

That was just me taking a stab in the dark. You suggested we should
mimic the Debian config, what does that use?

>> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
>> index 2ea575cb3401..2556c2182789 100644
>> --- a/arch/powerpc/Makefile
>> +++ b/arch/powerpc/Makefile
>> @@ -354,6 +354,11 @@ mpc86xx_smp_defconfig:
>>         $(call merge_into_defconfig,mpc86xx_basic_defconfig,\
>>                 86xx-smp 86xx-hw fsl-emb-nonhw)
>>
>> +PHONY += ppc32_allmodconfig
>> +ppc32_allmodconfig:
>> +       $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \
>> +               -f $(srctree)/Makefile allmodconfig
>> +
>
> I this a good time to update line 34 at the same time:
>
> KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
>
> ?

34 or 36?

  ifeq ($(CROSS_COMPILE),)
  KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
  else
  KBUILD_DEFCONFIG := ppc64_defconfig
  endif

Do you mean the else case?

cheers
Mathieu Malaterre July 11, 2018, 7:09 a.m. | #3
On Tue, Jul 10, 2018 at 3:47 PM Michael Ellerman <mpe@ellerman.id.au> wrote:
>
> Mathieu Malaterre <malat@debian.org> writes:
> > On Mon, Jul 9, 2018 at 4:24 PM Michael Ellerman <mpe@ellerman.id.au> wrote:
> >>
> >> Because the allmodconfig logic just sets every symbol to M or Y, it
> >> has the effect of always generating a 64-bit config, because
> >> CONFIG_PPC64 becomes Y.
> >>
> >> So to make it easier for folks to test 32-bit code, provide a phony
> >> defconfig target that generates a 32-bit allmodconfig.
> >>
> >> The 32-bit port has several mutually exclusive CPU types, we choose
> >> the Book3S variants as that's what the help text in Kconfig says is
> >> most common.
> >
> > Ok then.
>
> That was just me taking a stab in the dark. You suggested we should
> mimic the Debian config, what does that use?

Sorry got confused for a minute. This is the correct value (at least
the one used in Debian).

> >> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> >> index 2ea575cb3401..2556c2182789 100644
> >> --- a/arch/powerpc/Makefile
> >> +++ b/arch/powerpc/Makefile
> >> @@ -354,6 +354,11 @@ mpc86xx_smp_defconfig:
> >>         $(call merge_into_defconfig,mpc86xx_basic_defconfig,\
> >>                 86xx-smp 86xx-hw fsl-emb-nonhw)
> >>
> >> +PHONY += ppc32_allmodconfig
> >> +ppc32_allmodconfig:
> >> +       $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \
> >> +               -f $(srctree)/Makefile allmodconfig
> >> +
> >
> > I this a good time to update line 34 at the same time:
> >
> > KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
> >
> > ?
>
> 34 or 36?
>
>   ifeq ($(CROSS_COMPILE),)
>   KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
>   else
>   KBUILD_DEFCONFIG := ppc64_defconfig
>   endif
>
> Do you mean the else case?

As far as I know uname -m on powerpc returns 'ppc' so the following
has always failed from a ppc32be machine:

$ make ARCH=powerpc defconfig

I was simply suggesting to mimic what was done for ppc64:

ifeq ($(CROSS_COMPILE),)
KBUILD_DEFCONFIG := ppc32_defconfig
else
KBUILD_DEFCONFIG := ppc64_defconfig
endif

If I followed the discussion one would want the file `ppc32_defconfig`
to contains pretty much the same thing as the .config generated from
`book3s_32.config`, right ?

> cheers
Michael Ellerman July 11, 2018, 1:50 p.m. | #4
Mathieu Malaterre <malat@debian.org> writes:
> On Tue, Jul 10, 2018 at 3:47 PM Michael Ellerman <mpe@ellerman.id.au> wrote:
>> Mathieu Malaterre <malat@debian.org> writes:
>> > On Mon, Jul 9, 2018 at 4:24 PM Michael Ellerman <mpe@ellerman.id.au> wrote:
>> >> Because the allmodconfig logic just sets every symbol to M or Y, it
>> >> has the effect of always generating a 64-bit config, because
>> >> CONFIG_PPC64 becomes Y.
>> >>
>> >> So to make it easier for folks to test 32-bit code, provide a phony
>> >> defconfig target that generates a 32-bit allmodconfig.
>> >>
>> >> The 32-bit port has several mutually exclusive CPU types, we choose
>> >> the Book3S variants as that's what the help text in Kconfig says is
>> >> most common.
>> >
>> > Ok then.
>>
>> That was just me taking a stab in the dark. You suggested we should
>> mimic the Debian config, what does that use?
>
> Sorry got confused for a minute. This is the correct value (at least
> the one used in Debian).

OK cool.

>> >> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
>> >> index 2ea575cb3401..2556c2182789 100644
>> >> --- a/arch/powerpc/Makefile
>> >> +++ b/arch/powerpc/Makefile
>> >> @@ -354,6 +354,11 @@ mpc86xx_smp_defconfig:
>> >>         $(call merge_into_defconfig,mpc86xx_basic_defconfig,\
>> >>                 86xx-smp 86xx-hw fsl-emb-nonhw)
>> >>
>> >> +PHONY += ppc32_allmodconfig
>> >> +ppc32_allmodconfig:
>> >> +       $(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \
>> >> +               -f $(srctree)/Makefile allmodconfig
>> >> +
>> >
>> > I this a good time to update line 34 at the same time:
>> >
>> > KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
>> >
>> > ?
>>
>> 34 or 36?
>>
>>   ifeq ($(CROSS_COMPILE),)
>>   KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
>>   else
>>   KBUILD_DEFCONFIG := ppc64_defconfig
>>   endif
>>
>> Do you mean the else case?
>
> As far as I know uname -m on powerpc returns 'ppc' so the following
> has always failed from a ppc32be machine:

Oh yep it does.

I've never built a kernel *on* a 32-bit machine ;)

> $ make ARCH=powerpc defconfig
>
> I was simply suggesting to mimic what was done for ppc64:
>
> ifeq ($(CROSS_COMPILE),)
> KBUILD_DEFCONFIG := ppc32_defconfig
> else
> KBUILD_DEFCONFIG := ppc64_defconfig
> endif

That wouldn't work, CROSS_COMPILE isn't a ppc/ppc64 thing.

In fact setting CROSS_COMPILE doesn't actually mean you're cross
compiling, it just means you're using a different toolchain. I do that
all the time, because I want to use a specific version of GCC, not the
distro one.


What about:

diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 2ea575c..e70d223 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -30,10 +30,13 @@ endif
 endif
 endif
 
-ifeq ($(CROSS_COMPILE),)
-KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
+host_arch := $(shell uname -m)
+ifeq ($(host_arch),ppc)
+       KBUILD_DEFCONFIG := ppc32_defconfig
+else ifeq ($(host_arch),ppc64)
+       KBUILD_DEFCONFIG := ppc64_defconfig
 else
-KBUILD_DEFCONFIG := ppc64_defconfig
+       KBUILD_DEFCONFIG := ppc64le_defconfig
 endif
 
 ifeq ($(CONFIG_PPC64),y)


We obviously need a ppc32_defconfig to make that work.

> If I followed the discussion one would want the file `ppc32_defconfig`
> to contains pretty much the same thing as the .config generated from
> `book3s_32.config`, right ?

Can you boot the resulting kernel if you build ppc32_allmodconfig ?

Maybe we should just make that be ppc32_defconfig.

cheers
Randy Dunlap July 14, 2018, 1:59 a.m. | #5
On 07/09/2018 07:24 AM, Michael Ellerman wrote:
> Because the allmodconfig logic just sets every symbol to M or Y, it
> has the effect of always generating a 64-bit config, because
> CONFIG_PPC64 becomes Y.
> 
> So to make it easier for folks to test 32-bit code, provide a phony
> defconfig target that generates a 32-bit allmodconfig.
> 
> The 32-bit port has several mutually exclusive CPU types, we choose
> the Book3S variants as that's what the help text in Kconfig says is
> most com
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

Hi Michael,

Sorry for the delay.  I was traveling (out in the boonies).

I'm trying to use 'make ppc32_allmodconfig'.  Cross-building on x86_64
with crosstools from kernel.org.  (gcc 8.1.0)

I'm getting build errors.  Looks like it's missing a header file or 3.
I looked into that but it's a long and twisty maze of passages.
Any ideas?


  CC      arch/powerpc/mm/dump_linuxpagetables.o
In file included from ../arch/powerpc/include/asm/book3s/pgtable.h:8,
                 from ../arch/powerpc/include/asm/pgtable.h:18,
                 from ../include/linux/hugetlb.h:12,
                 from ../arch/powerpc/mm/dump_linuxpagetables.c:19:
../arch/powerpc/mm/dump_linuxpagetables.c: In function 'populate_markers':
../arch/powerpc/include/asm/book3s/32/pgtable.h:53:19: error: 'PKMAP_BASE' undeclared (first use in this function); did you mean 'AT_BASE'?
 #define KVIRT_TOP PKMAP_BASE
                   ^~~~~~~~~~
../arch/powerpc/include/asm/book3s/32/pgtable.h:64:23: note: in expansion of macro 'KVIRT_TOP'
 #define IOREMAP_TOP ((KVIRT_TOP - CONFIG_CONSISTENT_SIZE) & PAGE_MASK)
                       ^~~~~~~~~
../arch/powerpc/mm/dump_linuxpagetables.c:456:39: note: in expansion of macro 'IOREMAP_TOP'
  address_markers[i++].start_address = IOREMAP_TOP;
                                       ^~~~~~~~~~~
../arch/powerpc/include/asm/book3s/32/pgtable.h:53:19: note: each undeclared identifier is reported only once for each function it appears in
 #define KVIRT_TOP PKMAP_BASE
                   ^~~~~~~~~~
../arch/powerpc/include/asm/book3s/32/pgtable.h:64:23: note: in expansion of macro 'KVIRT_TOP'
 #define IOREMAP_TOP ((KVIRT_TOP - CONFIG_CONSISTENT_SIZE) & PAGE_MASK)
                       ^~~~~~~~~
../arch/powerpc/mm/dump_linuxpagetables.c:456:39: note: in expansion of macro 'IOREMAP_TOP'
  address_markers[i++].start_address = IOREMAP_TOP;
                                       ^~~~~~~~~~~
../arch/powerpc/mm/dump_linuxpagetables.c:464:39: error: implicit declaration of function 'PKMAP_ADDR'; did you mean 'PCI_IO_ADDR'? [-Werror=implicit-function-declaration]
  address_markers[i++].start_address = PKMAP_ADDR(LAST_PKMAP);
                                       ^~~~~~~~~~
                                       PCI_IO_ADDR
../arch/powerpc/mm/dump_linuxpagetables.c:464:50: error: 'LAST_PKMAP' undeclared (first use in this function); did you mean 'LIST_HEAD'?
  address_markers[i++].start_address = PKMAP_ADDR(LAST_PKMAP);
                                                  ^~~~~~~~~~
                                                  LIST_HEAD



Thanks.

> ---
>  arch/powerpc/Makefile                 | 5 +++++
>  arch/powerpc/configs/book3s_32.config | 2 ++
>  2 files changed, 7 insertions(+)
>  create mode 100644 arch/powerpc/configs/book3s_32.config
> 
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index 2ea575cb3401..2556c2182789 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -354,6 +354,11 @@ mpc86xx_smp_defconfig:
>  	$(call merge_into_defconfig,mpc86xx_basic_defconfig,\
>  		86xx-smp 86xx-hw fsl-emb-nonhw)
>  
> +PHONY += ppc32_allmodconfig
> +ppc32_allmodconfig:
> +	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \
> +		-f $(srctree)/Makefile allmodconfig
> +
>  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/book3s_32.config b/arch/powerpc/configs/book3s_32.config
> new file mode 100644
> index 000000000000..8721eb7b1294
> --- /dev/null
> +++ b/arch/powerpc/configs/book3s_32.config
> @@ -0,0 +1,2 @@
> +CONFIG_PPC64=n
> +CONFIG_PPC_BOOK3S_32=y
>
Randy Dunlap July 14, 2018, 4:35 a.m. | #6
On 07/09/2018 07:24 AM, Michael Ellerman wrote:
> Because the allmodconfig logic just sets every symbol to M or Y, it
> has the effect of always generating a 64-bit config, because
> CONFIG_PPC64 becomes Y.
> 
> So to make it easier for folks to test 32-bit code, provide a phony
> defconfig target that generates a 32-bit allmodconfig.
> 
> The 32-bit port has several mutually exclusive CPU types, we choose
> the Book3S variants as that's what the help text in Kconfig says is
> most common.
> 
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

Hi Michael,

ppc32_allmodconfig sets CONFIG_ISA=y (and other related symbols) and
CONFIG_PPC_CHRP=y.  But my builds are failing because they are missing
the functions isa_bus_to_virt() and isa_virt_to_bus().

Any ideas?

Thanks.

> ---
>  arch/powerpc/Makefile                 | 5 +++++
>  arch/powerpc/configs/book3s_32.config | 2 ++
>  2 files changed, 7 insertions(+)
>  create mode 100644 arch/powerpc/configs/book3s_32.config
> 
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index 2ea575cb3401..2556c2182789 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -354,6 +354,11 @@ mpc86xx_smp_defconfig:
>  	$(call merge_into_defconfig,mpc86xx_basic_defconfig,\
>  		86xx-smp 86xx-hw fsl-emb-nonhw)
>  
> +PHONY += ppc32_allmodconfig
> +ppc32_allmodconfig:
> +	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \
> +		-f $(srctree)/Makefile allmodconfig
> +
>  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/book3s_32.config b/arch/powerpc/configs/book3s_32.config
> new file mode 100644
> index 000000000000..8721eb7b1294
> --- /dev/null
> +++ b/arch/powerpc/configs/book3s_32.config
> @@ -0,0 +1,2 @@
> +CONFIG_PPC64=n
> +CONFIG_PPC_BOOK3S_32=y
>
Michael Ellerman July 20, 2018, 11:58 a.m. | #7
Randy Dunlap <rdunlap@infradead.org> writes:

> On 07/09/2018 07:24 AM, Michael Ellerman wrote:
>> Because the allmodconfig logic just sets every symbol to M or Y, it
>> has the effect of always generating a 64-bit config, because
>> CONFIG_PPC64 becomes Y.
>> 
>> So to make it easier for folks to test 32-bit code, provide a phony
>> defconfig target that generates a 32-bit allmodconfig.
>> 
>> The 32-bit port has several mutually exclusive CPU types, we choose
>> the Book3S variants as that's what the help text in Kconfig says is
>> most com
>> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
>
> Hi Michael,
>
> Sorry for the delay.  I was traveling (out in the boonies).
>
> I'm trying to use 'make ppc32_allmodconfig'.  Cross-building on x86_64
> with crosstools from kernel.org.  (gcc 8.1.0)
>
> I'm getting build errors.  Looks like it's missing a header file or 3.
> I looked into that but it's a long and twisty maze of passages.
> Any ideas?

Urk.

That code was really written for 64-bit and we haven't ever quite made
it fully generic, as you can see.

Christophe got it working for 8xx (a different 32-bit variant), but
clearly it doesn't work for this config.

This might be the solution for now:

diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug
index c45424c64e19..cb406d00702c 100644
--- a/arch/powerpc/Kconfig.debug
+++ b/arch/powerpc/Kconfig.debug
@@ -362,6 +362,7 @@ config FAIL_IOMMU
 config PPC_PTDUMP
         bool "Export kernel pagetable layout to userspace via debugfs"
         depends on DEBUG_KERNEL && DEBUG_FS
+        depends on PPC64 || PPC_8xx
         help
 	  This option exports the state of the kernel pagetables to a
 	  debugfs file. This is only useful for kernel developers who are


cheers

>   CC      arch/powerpc/mm/dump_linuxpagetables.o
> In file included from ../arch/powerpc/include/asm/book3s/pgtable.h:8,
>                  from ../arch/powerpc/include/asm/pgtable.h:18,
>                  from ../include/linux/hugetlb.h:12,
>                  from ../arch/powerpc/mm/dump_linuxpagetables.c:19:
> ../arch/powerpc/mm/dump_linuxpagetables.c: In function 'populate_markers':
> ../arch/powerpc/include/asm/book3s/32/pgtable.h:53:19: error: 'PKMAP_BASE' undeclared (first use in this function); did you mean 'AT_BASE'?
>  #define KVIRT_TOP PKMAP_BASE
>                    ^~~~~~~~~~
> ../arch/powerpc/include/asm/book3s/32/pgtable.h:64:23: note: in expansion of macro 'KVIRT_TOP'
>  #define IOREMAP_TOP ((KVIRT_TOP - CONFIG_CONSISTENT_SIZE) & PAGE_MASK)
>                        ^~~~~~~~~
> ../arch/powerpc/mm/dump_linuxpagetables.c:456:39: note: in expansion of macro 'IOREMAP_TOP'
>   address_markers[i++].start_address = IOREMAP_TOP;
>                                        ^~~~~~~~~~~
> ../arch/powerpc/include/asm/book3s/32/pgtable.h:53:19: note: each undeclared identifier is reported only once for each function it appears in
>  #define KVIRT_TOP PKMAP_BASE
>                    ^~~~~~~~~~
> ../arch/powerpc/include/asm/book3s/32/pgtable.h:64:23: note: in expansion of macro 'KVIRT_TOP'
>  #define IOREMAP_TOP ((KVIRT_TOP - CONFIG_CONSISTENT_SIZE) & PAGE_MASK)
>                        ^~~~~~~~~
> ../arch/powerpc/mm/dump_linuxpagetables.c:456:39: note: in expansion of macro 'IOREMAP_TOP'
>   address_markers[i++].start_address = IOREMAP_TOP;
>                                        ^~~~~~~~~~~
> ../arch/powerpc/mm/dump_linuxpagetables.c:464:39: error: implicit declaration of function 'PKMAP_ADDR'; did you mean 'PCI_IO_ADDR'? [-Werror=implicit-function-declaration]
>   address_markers[i++].start_address = PKMAP_ADDR(LAST_PKMAP);
>                                        ^~~~~~~~~~
>                                        PCI_IO_ADDR
> ../arch/powerpc/mm/dump_linuxpagetables.c:464:50: error: 'LAST_PKMAP' undeclared (first use in this function); did you mean 'LIST_HEAD'?
>   address_markers[i++].start_address = PKMAP_ADDR(LAST_PKMAP);
>                                                   ^~~~~~~~~~
>                                                   LIST_HEAD
>
>
>
> Thanks.
>
>> ---
>>  arch/powerpc/Makefile                 | 5 +++++
>>  arch/powerpc/configs/book3s_32.config | 2 ++
>>  2 files changed, 7 insertions(+)
>>  create mode 100644 arch/powerpc/configs/book3s_32.config
>> 
>> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
>> index 2ea575cb3401..2556c2182789 100644
>> --- a/arch/powerpc/Makefile
>> +++ b/arch/powerpc/Makefile
>> @@ -354,6 +354,11 @@ mpc86xx_smp_defconfig:
>>  	$(call merge_into_defconfig,mpc86xx_basic_defconfig,\
>>  		86xx-smp 86xx-hw fsl-emb-nonhw)
>>  
>> +PHONY += ppc32_allmodconfig
>> +ppc32_allmodconfig:
>> +	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \
>> +		-f $(srctree)/Makefile allmodconfig
>> +
>>  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/book3s_32.config b/arch/powerpc/configs/book3s_32.config
>> new file mode 100644
>> index 000000000000..8721eb7b1294
>> --- /dev/null
>> +++ b/arch/powerpc/configs/book3s_32.config
>> @@ -0,0 +1,2 @@
>> +CONFIG_PPC64=n
>> +CONFIG_PPC_BOOK3S_32=y
>> 
>
>
> -- 
> ~Randy
Michael Ellerman July 20, 2018, 12:18 p.m. | #8
Randy Dunlap <rdunlap@infradead.org> writes:

> On 07/09/2018 07:24 AM, Michael Ellerman wrote:
>> Because the allmodconfig logic just sets every symbol to M or Y, it
>> has the effect of always generating a 64-bit config, because
>> CONFIG_PPC64 becomes Y.
>> 
>> So to make it easier for folks to test 32-bit code, provide a phony
>> defconfig target that generates a 32-bit allmodconfig.
>> 
>> The 32-bit port has several mutually exclusive CPU types, we choose
>> the Book3S variants as that's what the help text in Kconfig says is
>> most common.
>> 
>> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
>
> Hi Michael,
>
> ppc32_allmodconfig sets CONFIG_ISA=y (and other related symbols) and
> CONFIG_PPC_CHRP=y.  But my builds are failing because they are missing
> the functions isa_bus_to_virt() and isa_virt_to_bus().
>
> Any ideas?

It's old legacy cruft that we've never implemented :)

I don't know if it's possible to implement it for CHRP, Ben implied it
might be, back in 2009:

  https://lists.ozlabs.org/pipermail/linuxppc-dev/2009-June/073232.html

But of course nothing came of it.


It looks like there's only a handful of drivers left using them, we
should probably just mark them as not buildable on PPC.

Arnd did something similar for ARM in:
  e9b106b8fbdb ("net: lance,ni64: don't build for ARM")


cheers
Michael Ellerman July 24, 2018, 1:59 p.m. | #9
On Mon, 2018-07-09 at 14:24:25 UTC, Michael Ellerman wrote:
> Because the allmodconfig logic just sets every symbol to M or Y, it
> has the effect of always generating a 64-bit config, because
> CONFIG_PPC64 becomes Y.
> 
> So to make it easier for folks to test 32-bit code, provide a phony
> defconfig target that generates a 32-bit allmodconfig.
> 
> The 32-bit port has several mutually exclusive CPU types, we choose
> the Book3S variants as that's what the help text in Kconfig says is
> most common.
> 
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

Series applied to powerpc next.

https://git.kernel.org/powerpc/c/8db0c9d416f26018cb7cabfb0b144f

cheers

Patch

diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 2ea575cb3401..2556c2182789 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -354,6 +354,11 @@  mpc86xx_smp_defconfig:
 	$(call merge_into_defconfig,mpc86xx_basic_defconfig,\
 		86xx-smp 86xx-hw fsl-emb-nonhw)
 
+PHONY += ppc32_allmodconfig
+ppc32_allmodconfig:
+	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/powerpc/configs/book3s_32.config \
+		-f $(srctree)/Makefile allmodconfig
+
 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/book3s_32.config b/arch/powerpc/configs/book3s_32.config
new file mode 100644
index 000000000000..8721eb7b1294
--- /dev/null
+++ b/arch/powerpc/configs/book3s_32.config
@@ -0,0 +1,2 @@ 
+CONFIG_PPC64=n
+CONFIG_PPC_BOOK3S_32=y