On Wed, Jul 31, 2019 at 06:00:43PM +0200, Greg KH wrote:
On Wed, Jul 31, 2019 at 08:48:24AM -0700, David Miller wrote:
From: Greg Kroah-Hartman gregkh@linuxfoundation.org Date: Wed, 31 Jul 2019 13:35:22 +0200
On Wed, Jul 31, 2019 at 12:24:41PM +0100, Mark Brown wrote:
On Wed, Jul 31, 2019 at 04:07:41AM -0700, kernelci.org bot wrote:
Today's -next fails to build an ARM allmodconfig due to:
allmodconfig (arm, gcc-8) ― FAIL, 1 error, 40 warnings, 0 section mismatches
Errors: drivers/net/phy/mdio-cavium.h:111:36: error: implicit declaration of function 'writeq'; did you mean 'writel'? [-Werror=implicit-function-declaration]
as a result of the changes that introduced:
WARNING: unmet direct dependencies detected for MDIO_OCTEON Depends on [n]: NETDEVICES [=y] && MDIO_DEVICE [=m] && MDIO_BUS [=m] && 64BIT && HAS_IOMEM [=y] && OF_MDIO [=m] Selected by [m]:
- OCTEON_ETHERNET [=m] && STAGING [=y] && (CAVIUM_OCTEON_SOC && NETDEVICES [=y] || COMPILE_TEST [=y])
which is triggered by the staging OCTEON_ETHERNET driver which misses a 64BIT dependency but added COMPILE_TEST in 171a9bae68c72f2 (staging/octeon: Allow test build on !MIPS).
A patch was posted for this, but it needs to go through the netdev tree as that's where the offending patches are coming from.
I didn't catch that, was netdev CC:'d?
Nope, just you :(
I'll resend it now and cc: netdev.
thanks,
greg k-h
If it is this patch:
https://lore.kernel.org/netdev/20190731160219.GA2114@kroah.com/
It doesn't resolve that issue. I applied it and tested on next-20190731.
$ make -j$(nproc) -s ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- O=out distclean allyesconfig drivers/net/phy/
WARNING: unmet direct dependencies detected for MDIO_OCTEON Depends on [n]: NETDEVICES [=y] && MDIO_DEVICE [=y] && MDIO_BUS [=y] && 64BIT && HAS_IOMEM [=y] && OF_MDIO [=y] Selected by [y]: - OCTEON_ETHERNET [=y] && STAGING [=y] && (CAVIUM_OCTEON_SOC || COMPILE_TEST [=y]) && NETDEVICES [=y] ../drivers/net/phy/mdio-octeon.c: In function 'octeon_mdiobus_probe': ../drivers/net/phy/mdio-octeon.c:48:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 48 | (u64)devm_ioremap(&pdev->dev, mdio_phys, regsize); | ^ In file included from ../drivers/net/phy/mdio-octeon.c:14: ../drivers/net/phy/mdio-cavium.h:111:36: error: implicit declaration of function 'writeq'; did you mean 'writeb'? [-Werror=implicit-function-declaration] 111 | #define oct_mdio_writeq(val, addr) writeq(val, (void *)addr) | ^~~~~~ ../drivers/net/phy/mdio-octeon.c:56:2: note: in expansion of macro 'oct_mdio_writeq' 56 | oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN); | ^~~~~~~~~~~~~~~ ../drivers/net/phy/mdio-cavium.h:111:48: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 111 | #define oct_mdio_writeq(val, addr) writeq(val, (void *)addr) | ^ ../drivers/net/phy/mdio-octeon.c:56:2: note: in expansion of macro 'oct_mdio_writeq' 56 | oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN); | ^~~~~~~~~~~~~~~ ../drivers/net/phy/mdio-cavium.h:111:48: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 111 | #define oct_mdio_writeq(val, addr) writeq(val, (void *)addr) | ^ ../drivers/net/phy/mdio-octeon.c:77:2: note: in expansion of macro 'oct_mdio_writeq' 77 | oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN); | ^~~~~~~~~~~~~~~ ../drivers/net/phy/mdio-octeon.c: In function 'octeon_mdiobus_remove': ../drivers/net/phy/mdio-cavium.h:111:48: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 111 | #define oct_mdio_writeq(val, addr) writeq(val, (void *)addr) | ^ ../drivers/net/phy/mdio-octeon.c:91:2: note: in expansion of macro 'oct_mdio_writeq' 91 | oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN); | ^~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[3]: *** [../scripts/Makefile.build:274: drivers/net/phy/mdio-octeon.o] Error 1 make[3]: *** Waiting for unfinished jobs.... make[2]: *** [../Makefile:1780: drivers/net/phy/] Error 2 make[1]: *** [/home/nathan/cbl/linux-next/Makefile:330: __build_one_by_one] Error 2 make: *** [Makefile:179: sub-make] Error 2
This is the diff that I came up with to solve the errors plus the casting warnings but it doesn't feel proper to me. If you all feel otherwise, I can draft up a formal commit message.
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 20f14c5fbb7e..ed2edf4b5b0e 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig @@ -159,7 +159,7 @@ config MDIO_MSCC_MIIM
config MDIO_OCTEON tristate "Octeon and some ThunderX SOCs MDIO buses" - depends on 64BIT + depends on 64BIT || COMPILE_TEST depends on HAS_IOMEM && OF_MDIO select MDIO_CAVIUM help diff --git a/drivers/net/phy/mdio-cavium.h b/drivers/net/phy/mdio-cavium.h index ed5f9bb5448d..4b71b733edb4 100644 --- a/drivers/net/phy/mdio-cavium.h +++ b/drivers/net/phy/mdio-cavium.h @@ -108,8 +108,10 @@ static inline u64 oct_mdio_readq(u64 addr) return cvmx_read_csr(addr); } #else -#define oct_mdio_writeq(val, addr) writeq(val, (void *)addr) -#define oct_mdio_readq(addr) readq((void *)addr) +#include <linux/io-64-nonatomic-lo-hi.h> + +#define oct_mdio_writeq(val, addr) writeq(val, (void *)(uintptr_t)addr) +#define oct_mdio_readq(addr) readq((void *)(uintptr_t)addr) #endif
int cavium_mdiobus_read(struct mii_bus *bus, int phy_id, int regnum); diff --git a/drivers/net/phy/mdio-octeon.c b/drivers/net/phy/mdio-octeon.c index 8327382aa568..ab0d8ab588e4 100644 --- a/drivers/net/phy/mdio-octeon.c +++ b/drivers/net/phy/mdio-octeon.c @@ -45,7 +45,7 @@ static int octeon_mdiobus_probe(struct platform_device *pdev) }
bus->register_base = - (u64)devm_ioremap(&pdev->dev, mdio_phys, regsize); + (u64)(uintptr_t)devm_ioremap(&pdev->dev, mdio_phys, regsize); if (!bus->register_base) { dev_err(&pdev->dev, "dev_ioremap failed\n"); return -ENOMEM;