aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/marvell/mvmdio.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index 971a4c1bbbaa..e3898b3c91ad 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -110,43 +110,35 @@ static int orion_mdio_read(struct mii_bus *bus, int mii_id,
110 int regnum) 110 int regnum)
111{ 111{
112 struct orion_mdio_dev *dev = bus->priv; 112 struct orion_mdio_dev *dev = bus->priv;
113 int count;
114 u32 val; 113 u32 val;
115 int ret; 114 int ret;
116 115
117 mutex_lock(&dev->lock); 116 mutex_lock(&dev->lock);
118 117
119 ret = orion_mdio_wait_ready(bus); 118 ret = orion_mdio_wait_ready(bus);
120 if (ret < 0) { 119 if (ret < 0)
121 mutex_unlock(&dev->lock); 120 goto out;
122 return ret;
123 }
124 121
125 writel(((mii_id << MVMDIO_SMI_PHY_ADDR_SHIFT) | 122 writel(((mii_id << MVMDIO_SMI_PHY_ADDR_SHIFT) |
126 (regnum << MVMDIO_SMI_PHY_REG_SHIFT) | 123 (regnum << MVMDIO_SMI_PHY_REG_SHIFT) |
127 MVMDIO_SMI_READ_OPERATION), 124 MVMDIO_SMI_READ_OPERATION),
128 dev->regs); 125 dev->regs);
129 126
130 /* Wait for the value to become available */ 127 ret = orion_mdio_wait_ready(bus);
131 count = 0; 128 if (ret < 0)
132 while (1) { 129 goto out;
133 val = readl(dev->regs);
134 if (val & MVMDIO_SMI_READ_VALID)
135 break;
136
137 if (count > 100) {
138 dev_err(bus->parent, "Timeout when reading PHY\n");
139 mutex_unlock(&dev->lock);
140 return -ETIMEDOUT;
141 }
142 130
143 udelay(10); 131 val = readl(dev->regs);
144 count++; 132 if (!(val & MVMDIO_SMI_READ_VALID)) {
133 dev_err(bus->parent, "SMI bus read not valid\n");
134 ret = -ENODEV;
135 goto out;
145 } 136 }
146 137
138 ret = val & 0xFFFF;
139out:
147 mutex_unlock(&dev->lock); 140 mutex_unlock(&dev->lock);
148 141 return ret;
149 return val & 0xFFFF;
150} 142}
151 143
152static int orion_mdio_write(struct mii_bus *bus, int mii_id, 144static int orion_mdio_write(struct mii_bus *bus, int mii_id,