|
|
|
@ -468,14 +468,22 @@ static int |
|
|
|
|
ar8216_wait_bit(struct ar8216_priv *priv, int reg, u32 mask, u32 val) |
|
|
|
|
{ |
|
|
|
|
int timeout = 20; |
|
|
|
|
u32 t = 0; |
|
|
|
|
|
|
|
|
|
while ((priv->read(priv, reg) & mask) != val) { |
|
|
|
|
if (timeout-- <= 0) { |
|
|
|
|
printk(KERN_ERR "ar8216: timeout waiting for operation to complete\n"); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
while (1) { |
|
|
|
|
t = priv->read(priv, reg); |
|
|
|
|
if ((t & mask) == val) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
if (timeout-- <= 0) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
udelay(10); |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n", |
|
|
|
|
(unsigned int) reg, t, mask, val); |
|
|
|
|
return -ETIMEDOUT; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
@ -958,11 +966,8 @@ ar8216_read_status(struct phy_device *phydev) |
|
|
|
|
/* flush the address translation unit */ |
|
|
|
|
mutex_lock(&priv->reg_mutex); |
|
|
|
|
ret = ar8216_wait_bit(priv, AR8216_REG_ATU, AR8216_ATU_ACTIVE, 0); |
|
|
|
|
|
|
|
|
|
if (!ret) |
|
|
|
|
priv->write(priv, AR8216_REG_ATU, AR8216_ATU_OP_FLUSH); |
|
|
|
|
else |
|
|
|
|
ret = -ETIMEDOUT; |
|
|
|
|
mutex_unlock(&priv->reg_mutex); |
|
|
|
|
|
|
|
|
|
phydev->state = PHY_RUNNING; |
|
|
|
|