The MIPS low level register access functions seem to be missing
__iomem annotation. This cases lots of sparse warnings, when code
casts off the __iomem. Make the Cavium MDIO drivers cleaner by pushing
the casts lower down into the helpers, allow the drivers to work as
normal, with __iomem.

bus->register_base is now an void *, rather than a u64. So forming the
mii_bus->id string cannot use %llx any more. Use %px, so this kernel
address is still exposed to user space, as it was before.

Cc: Sunil Goutham <sgout...@marvell.com>
Cc: Robert Richter <rrich...@marvell.com>
Signed-off-by: Andrew Lunn <and...@lunn.ch>
---
 drivers/net/phy/mdio-cavium.h  | 14 +++++++-------
 drivers/net/phy/mdio-octeon.c  |  5 ++---
 drivers/net/phy/mdio-thunder.c |  2 +-
 3 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/net/phy/mdio-cavium.h b/drivers/net/phy/mdio-cavium.h
index e33d3ea9a907..a2245d436f5d 100644
--- a/drivers/net/phy/mdio-cavium.h
+++ b/drivers/net/phy/mdio-cavium.h
@@ -90,7 +90,7 @@ union cvmx_smix_wr_dat {
 
 struct cavium_mdiobus {
        struct mii_bus *mii_bus;
-       u64 register_base;
+       void __iomem *register_base;
        enum cavium_mdiobus_mode mode;
 };
 
@@ -98,20 +98,20 @@ struct cavium_mdiobus {
 
 #include <asm/octeon/octeon.h>
 
-static inline void oct_mdio_writeq(u64 val, u64 addr)
+static inline void oct_mdio_writeq(u64 val, void __iomem *addr)
 {
-       cvmx_write_csr(addr, val);
+       cvmx_write_csr((u64 __force)addr, val);
 }
 
-static inline u64 oct_mdio_readq(u64 addr)
+static inline u64 oct_mdio_readq(void __iomem *addr)
 {
-       return cvmx_read_csr(addr);
+       return cvmx_read_csr((u64 __force)addr);
 }
 #else
 #include <linux/io-64-nonatomic-lo-hi.h>
 
-#define oct_mdio_writeq(val, addr)     writeq(val, (void *)addr)
-#define oct_mdio_readq(addr)           readq((void *)addr)
+#define oct_mdio_writeq(val, addr)     writeq(val, addr)
+#define oct_mdio_readq(addr)           readq(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..a2f93948db97 100644
--- a/drivers/net/phy/mdio-octeon.c
+++ b/drivers/net/phy/mdio-octeon.c
@@ -44,8 +44,7 @@ static int octeon_mdiobus_probe(struct platform_device *pdev)
                return -ENXIO;
        }
 
-       bus->register_base =
-               (u64)devm_ioremap(&pdev->dev, mdio_phys, regsize);
+       bus->register_base = devm_ioremap(&pdev->dev, mdio_phys, regsize);
        if (!bus->register_base) {
                dev_err(&pdev->dev, "dev_ioremap failed\n");
                return -ENOMEM;
@@ -56,7 +55,7 @@ static int octeon_mdiobus_probe(struct platform_device *pdev)
        oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN);
 
        bus->mii_bus->name = KBUILD_MODNAME;
-       snprintf(bus->mii_bus->id, MII_BUS_ID_SIZE, "%llx", bus->register_base);
+       snprintf(bus->mii_bus->id, MII_BUS_ID_SIZE, "%px", bus->register_base);
        bus->mii_bus->parent = &pdev->dev;
 
        bus->mii_bus->read = cavium_mdiobus_read;
diff --git a/drivers/net/phy/mdio-thunder.c b/drivers/net/phy/mdio-thunder.c
index 2a97938d1972..3d7eda99d34e 100644
--- a/drivers/net/phy/mdio-thunder.c
+++ b/drivers/net/phy/mdio-thunder.c
@@ -84,7 +84,7 @@ static int thunder_mdiobus_pci_probe(struct pci_dev *pdev,
                nexus->buses[i] = bus;
                i++;
 
-               bus->register_base = (u64)nexus->bar0 +
+               bus->register_base = nexus->bar0 +
                        r.start - pci_resource_start(pdev, 0);
 
                smi_en.u64 = 0;
-- 
2.27.0.rc2

Reply via email to