mirror of https://github.com/hak5/openwrt.git
ar8216: Create helpers mii_read32 / mii_write32 for 32 bit MII ops
Create helpers mii_read32 / mii_write32 for 32 bit MII ops. Rename r3 variable to page in ar8xxx_mii_write to make it consistent with the other ar8xxx_mii_xxxx functions. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> SVN-Revision: 43741lede-17.01
parent
0e7f844c66
commit
45a494b808
|
@ -398,12 +398,43 @@ ar8xxx_phy_init(struct ar8xxx_priv *priv)
|
||||||
ar8xxx_phy_poll_reset(bus);
|
ar8xxx_phy_poll_reset(bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32
|
||||||
|
mii_read32(struct ar8xxx_priv *priv, int phy_id, int regnum)
|
||||||
|
{
|
||||||
|
struct mii_bus *bus = priv->mii_bus;
|
||||||
|
u16 lo, hi;
|
||||||
|
|
||||||
|
lo = bus->read(bus, phy_id, regnum);
|
||||||
|
hi = bus->read(bus, phy_id, regnum + 1);
|
||||||
|
|
||||||
|
return (hi << 16) | lo;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
mii_write32(struct ar8xxx_priv *priv, int phy_id, int regnum, u32 val)
|
||||||
|
{
|
||||||
|
struct mii_bus *bus = priv->mii_bus;
|
||||||
|
u16 lo, hi;
|
||||||
|
|
||||||
|
lo = val & 0xffff;
|
||||||
|
hi = (u16) (val >> 16);
|
||||||
|
|
||||||
|
if (priv->chip->mii_lo_first)
|
||||||
|
{
|
||||||
|
bus->write(bus, phy_id, regnum, lo);
|
||||||
|
bus->write(bus, phy_id, regnum + 1, hi);
|
||||||
|
} else {
|
||||||
|
bus->write(bus, phy_id, regnum + 1, hi);
|
||||||
|
bus->write(bus, phy_id, regnum, lo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static u32
|
static u32
|
||||||
ar8xxx_mii_read(struct ar8xxx_priv *priv, int reg)
|
ar8xxx_mii_read(struct ar8xxx_priv *priv, int reg)
|
||||||
{
|
{
|
||||||
struct mii_bus *bus = priv->mii_bus;
|
struct mii_bus *bus = priv->mii_bus;
|
||||||
u16 r1, r2, page;
|
u16 r1, r2, page;
|
||||||
u16 lo, hi;
|
u32 val;
|
||||||
|
|
||||||
split_addr((u32) reg, &r1, &r2, &page);
|
split_addr((u32) reg, &r1, &r2, &page);
|
||||||
|
|
||||||
|
@ -411,36 +442,26 @@ ar8xxx_mii_read(struct ar8xxx_priv *priv, int reg)
|
||||||
|
|
||||||
bus->write(bus, 0x18, 0, page);
|
bus->write(bus, 0x18, 0, page);
|
||||||
usleep_range(1000, 2000); /* wait for the page switch to propagate */
|
usleep_range(1000, 2000); /* wait for the page switch to propagate */
|
||||||
lo = bus->read(bus, 0x10 | r2, r1);
|
val = mii_read32(priv, 0x10 | r2, r1);
|
||||||
hi = bus->read(bus, 0x10 | r2, r1 + 1);
|
|
||||||
|
|
||||||
mutex_unlock(&bus->mdio_lock);
|
mutex_unlock(&bus->mdio_lock);
|
||||||
|
|
||||||
return (hi << 16) | lo;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ar8xxx_mii_write(struct ar8xxx_priv *priv, int reg, u32 val)
|
ar8xxx_mii_write(struct ar8xxx_priv *priv, int reg, u32 val)
|
||||||
{
|
{
|
||||||
struct mii_bus *bus = priv->mii_bus;
|
struct mii_bus *bus = priv->mii_bus;
|
||||||
u16 r1, r2, r3;
|
u16 r1, r2, page;
|
||||||
u16 lo, hi;
|
|
||||||
|
|
||||||
split_addr((u32) reg, &r1, &r2, &r3);
|
split_addr((u32) reg, &r1, &r2, &page);
|
||||||
lo = val & 0xffff;
|
|
||||||
hi = (u16) (val >> 16);
|
|
||||||
|
|
||||||
mutex_lock(&bus->mdio_lock);
|
mutex_lock(&bus->mdio_lock);
|
||||||
|
|
||||||
bus->write(bus, 0x18, 0, r3);
|
bus->write(bus, 0x18, 0, page);
|
||||||
usleep_range(1000, 2000); /* wait for the page switch to propagate */
|
usleep_range(1000, 2000); /* wait for the page switch to propagate */
|
||||||
if (priv->chip->mii_lo_first) {
|
mii_write32(priv, 0x10 | r2, r1, val);
|
||||||
bus->write(bus, 0x10 | r2, r1, lo);
|
|
||||||
bus->write(bus, 0x10 | r2, r1 + 1, hi);
|
|
||||||
} else {
|
|
||||||
bus->write(bus, 0x10 | r2, r1 + 1, hi);
|
|
||||||
bus->write(bus, 0x10 | r2, r1, lo);
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock(&bus->mdio_lock);
|
mutex_unlock(&bus->mdio_lock);
|
||||||
}
|
}
|
||||||
|
@ -450,7 +471,6 @@ ar8xxx_mii_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
|
||||||
{
|
{
|
||||||
struct mii_bus *bus = priv->mii_bus;
|
struct mii_bus *bus = priv->mii_bus;
|
||||||
u16 r1, r2, page;
|
u16 r1, r2, page;
|
||||||
u16 lo, hi;
|
|
||||||
u32 ret;
|
u32 ret;
|
||||||
|
|
||||||
split_addr((u32) reg, &r1, &r2, &page);
|
split_addr((u32) reg, &r1, &r2, &page);
|
||||||
|
@ -460,30 +480,16 @@ ar8xxx_mii_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
|
||||||
bus->write(bus, 0x18, 0, page);
|
bus->write(bus, 0x18, 0, page);
|
||||||
usleep_range(1000, 2000); /* wait for the page switch to propagate */
|
usleep_range(1000, 2000); /* wait for the page switch to propagate */
|
||||||
|
|
||||||
lo = bus->read(bus, 0x10 | r2, r1);
|
ret = mii_read32(priv, 0x10 | r2, r1);
|
||||||
hi = bus->read(bus, 0x10 | r2, r1 + 1);
|
|
||||||
|
|
||||||
ret = hi << 16 | lo;
|
|
||||||
ret &= ~mask;
|
ret &= ~mask;
|
||||||
ret |= val;
|
ret |= val;
|
||||||
|
mii_write32(priv, 0x10 | r2, r1, ret);
|
||||||
lo = ret & 0xffff;
|
|
||||||
hi = (u16) (ret >> 16);
|
|
||||||
|
|
||||||
if (priv->chip->mii_lo_first) {
|
|
||||||
bus->write(bus, 0x10 | r2, r1, lo);
|
|
||||||
bus->write(bus, 0x10 | r2, r1 + 1, hi);
|
|
||||||
} else {
|
|
||||||
bus->write(bus, 0x10 | r2, r1 + 1, hi);
|
|
||||||
bus->write(bus, 0x10 | r2, r1, lo);
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock(&bus->mdio_lock);
|
mutex_unlock(&bus->mdio_lock);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
|
ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
|
||||||
u16 dbg_addr, u16 dbg_data)
|
u16 dbg_addr, u16 dbg_data)
|
||||||
|
|
Loading…
Reference in New Issue