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.

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:

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

Reply via email to