Hi Michael,

On Tue, Apr 14, 2020 at 05:33:45PM +1000, Michael Ellerman wrote:
> Hi Nathan,
> 
> Thanks for the report.
> 
> Nathan Chancellor <natechancel...@gmail.com> writes:
> > Hi all,
> >
> > 0day reported a build error in arch/powerpc/platforms/embedded6xx/mvme5100.c
> > when building with clang [1]. This is not a clang specific issue since
> > it also happens with gcc:
> >
> > $ curl -LSs 
> > https://lore.kernel.org/lkml/202004131704.6mh1jcq3%25...@intel.com/2-a.bin 
> > | gzip -d > .config
> > $ make -j$(nproc) -s ARCH=powerpc CROSS_COMPILE=powerpc-linux- olddefconfig 
> > arch/powerpc/platforms/embedded6xx/mvme5100.o
> > arch/powerpc/platforms/embedded6xx/mvme5100.c: In function 
> > 'mvme5100_add_bridge':
> > arch/powerpc/platforms/embedded6xx/mvme5100.c:135:58: error: passing 
> > argument 5 of 'early_read_config_dword' from incompatible pointer type 
> > [-Werror=incompatible-pointer-types]
> >   135 |  early_read_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_1, 
> > &pci_membase);
> >       |                                                          
> > ^~~~~~~~~~~~
> >       |                                                          |
> >       |                                                          
> > phys_addr_t * {aka long long unsigned int *}
> 
> 
> Yuck.
> 
> > ...
> > I am not sure how exactly this should be fixed. Should this driver just
> > not be selectable when CONFIG_PHYS_ADDR_T_64BIT is selected or is there
> > something else that I am missing?
> 
> I'm not sure TBH. This is all ancient history as far as I can tell, none
> of it's been touched for ~7 years.
> 
> Your config has:
> 
> CONFIG_EMBEDDED6xx=y
> CONFIG_PPC_BOOK3S_32=y
> CONFIG_PPC_BOOK3S_6xx=y
> CONFIG_PPC_MPC52xx=y
> CONFIG_PPC_86xx=y
> 
> 
> Which I'm not sure really makes sense at all, ie. it's trying to build a
> kernel for multiple platforms at once (EMBEDDED6xx, MPC52xx, 86xx), but
> the Kconfig doesn't exclude that so I guess we have to live with it for
> now.

c'est la randconfig :)

> Then Kconfig has:
> 
> config PHYS_64BIT
>       bool 'Large physical address support' if E500 || PPC_86xx
>       depends on (44x || E500 || PPC_86xx) && !PPC_83xx && !PPC_82xx
>       select PHYS_ADDR_T_64BIT
> 
> 
> So it's PPC_86xx that allows 64-bit phys_addr_t.
> 
> That was added in:
> 
>   4ee7084eb11e ("POWERPC: Allow 32-bit hashed pgtable code to support 36-bit 
> physical")
> 
> Which did:
> 
> config PHYS_64BIT
> -     bool 'Large physical address support' if E500
> -     depends on 44x || E500
> +     bool 'Large physical address support' if E500 || PPC_86xx
> +     depends on (44x || E500 || PPC_86xx) && !PPC_83xx && !PPC_82xx
> 
> 
> ie. it wanted to add support for PPC_86xx but had to deliberately
> exclude some of the other BOOK3S_32 based platforms.
> 
> So I'm going to guess it should have also excluded embedded6xx, and this
> seems to fix it:

This is what I was thinking as well; I agree with your analysis. Feel
free to slap the following tags on:

Reviewed-by: Nathan Chancellor <natechancel...@gmail.com>
Tested-by: Nathan Chancellor <natechancel...@gmail.com> # build

> diff --git a/arch/powerpc/platforms/Kconfig.cputype 
> b/arch/powerpc/platforms/Kconfig.cputype
> index 0c3c1902135c..134fc383daf7 100644
> --- a/arch/powerpc/platforms/Kconfig.cputype
> +++ b/arch/powerpc/platforms/Kconfig.cputype
> @@ -278,7 +278,7 @@ config PTE_64BIT
>  
>  config PHYS_64BIT
>       bool 'Large physical address support' if E500 || PPC_86xx
> -     depends on (44x || E500 || PPC_86xx) && !PPC_83xx && !PPC_82xx
> +     depends on (44x || E500 || PPC_86xx) && !PPC_83xx && !PPC_82xx && 
> !EMBEDDED6xx
>       select PHYS_ADDR_T_64BIT
>       ---help---
>         This option enables kernel support for larger than 32-bit physical
> 
> 
> So unless anyone can tell me otherwise I'm inclined to commit that ^
> 
> cheers

Cheers,
Nathan

Reply via email to