-Wincompatible-pointer-types in arch/powerpc/platforms/embedded6xx/mvme5100.c

Nathan Chancellor natechancellor at gmail.com
Tue Apr 14 17:52:47 AEST 2020


Hi Michael,

On Tue, Apr 14, 2020 at 05:33:45PM +1000, Michael Ellerman wrote:
> Hi Nathan,
> 
> Thanks for the report.
> 
> Nathan Chancellor <natechancellor at 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%25lkp@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 <natechancellor at gmail.com>
Tested-by: Nathan Chancellor <natechancellor at 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


More information about the Linuxppc-dev mailing list