Merge tag 'mac80211-next-for-john-2014-11-04' of git://git.kernel.org/pub/scm/linux...
[cascardo/linux.git] / drivers / net / ethernet / freescale / fsl_pq_mdio.c
index 583e71a..964c6bf 100644 (file)
@@ -28,7 +28,9 @@
 #include <linux/of_device.h>
 
 #include <asm/io.h>
+#if IS_ENABLED(CONFIG_UCC_GETH)
 #include <asm/ucc.h>   /* for ucc_set_qe_mux_mii_mng() */
+#endif
 
 #include "gianfar.h"
 
@@ -102,19 +104,22 @@ static int fsl_pq_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
 {
        struct fsl_pq_mdio_priv *priv = bus->priv;
        struct fsl_pq_mii __iomem *regs = priv->regs;
-       u32 status;
+       unsigned int timeout;
 
        /* Set the PHY address and the register address we want to write */
-       out_be32(&regs->miimadd, (mii_id << 8) | regnum);
+       iowrite32be((mii_id << 8) | regnum, &regs->miimadd);
 
        /* Write out the value we want */
-       out_be32(&regs->miimcon, value);
+       iowrite32be(value, &regs->miimcon);
 
        /* Wait for the transaction to finish */
-       status = spin_event_timeout(!(in_be32(&regs->miimind) & MIIMIND_BUSY),
-                                   MII_TIMEOUT, 0);
+       timeout = MII_TIMEOUT;
+       while ((ioread32be(&regs->miimind) & MIIMIND_BUSY) && timeout) {
+               cpu_relax();
+               timeout--;
+       }
 
-       return status ? 0 : -ETIMEDOUT;
+       return timeout ? 0 : -ETIMEDOUT;
 }
 
 /*
@@ -131,25 +136,29 @@ static int fsl_pq_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
 {
        struct fsl_pq_mdio_priv *priv = bus->priv;
        struct fsl_pq_mii __iomem *regs = priv->regs;
-       u32 status;
+       unsigned int timeout;
        u16 value;
 
        /* Set the PHY address and the register address we want to read */
-       out_be32(&regs->miimadd, (mii_id << 8) | regnum);
+       iowrite32be((mii_id << 8) | regnum, &regs->miimadd);
 
        /* Clear miimcom, and then initiate a read */
-       out_be32(&regs->miimcom, 0);
-       out_be32(&regs->miimcom, MII_READ_COMMAND);
+       iowrite32be(0, &regs->miimcom);
+       iowrite32be(MII_READ_COMMAND, &regs->miimcom);
 
        /* Wait for the transaction to finish, normally less than 100us */
-       status = spin_event_timeout(!(in_be32(&regs->miimind) &
-                                   (MIIMIND_NOTVALID | MIIMIND_BUSY)),
-                                   MII_TIMEOUT, 0);
-       if (!status)
+       timeout = MII_TIMEOUT;
+       while ((ioread32be(&regs->miimind) &
+              (MIIMIND_NOTVALID | MIIMIND_BUSY)) && timeout) {
+               cpu_relax();
+               timeout--;
+       }
+
+       if (!timeout)
                return -ETIMEDOUT;
 
        /* Grab the value of the register from miimstat */
-       value = in_be32(&regs->miimstat);
+       value = ioread32be(&regs->miimstat);
 
        dev_dbg(&bus->dev, "read %04x from address %x/%x\n", value, mii_id, regnum);
        return value;
@@ -160,23 +169,26 @@ static int fsl_pq_mdio_reset(struct mii_bus *bus)
 {
        struct fsl_pq_mdio_priv *priv = bus->priv;
        struct fsl_pq_mii __iomem *regs = priv->regs;
-       u32 status;
+       unsigned int timeout;
 
        mutex_lock(&bus->mdio_lock);
 
        /* Reset the management interface */
-       out_be32(&regs->miimcfg, MIIMCFG_RESET);
+       iowrite32be(MIIMCFG_RESET, &regs->miimcfg);
 
        /* Setup the MII Mgmt clock speed */
-       out_be32(&regs->miimcfg, MIIMCFG_INIT_VALUE);
+       iowrite32be(MIIMCFG_INIT_VALUE, &regs->miimcfg);
 
        /* Wait until the bus is free */
-       status = spin_event_timeout(!(in_be32(&regs->miimind) & MIIMIND_BUSY),
-                                   MII_TIMEOUT, 0);
+       timeout = MII_TIMEOUT;
+       while ((ioread32be(&regs->miimind) & MIIMIND_BUSY) && timeout) {
+               cpu_relax();
+               timeout--;
+       }
 
        mutex_unlock(&bus->mdio_lock);
 
-       if (!status) {
+       if (!timeout) {
                dev_err(&bus->dev, "timeout waiting for MII bus\n");
                return -EBUSY;
        }
@@ -433,7 +445,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
 
                        tbipa = data->get_tbipa(priv->map);
 
-                       out_be32(tbipa, be32_to_cpup(prop));
+                       iowrite32be(be32_to_cpup(prop), tbipa);
                }
        }