generic: ar8216: add revision specific PHY fixups for AR8327

SVN-Revision: 32000
This commit is contained in:
Gabor Juhos 2012-05-29 16:39:27 +00:00
parent 0d241e6670
commit 9e02593b70
2 changed files with 41 additions and 8 deletions

View file

@ -191,6 +191,17 @@ ar8216_phy_dbg_write(struct ar8216_priv *priv, int phy_addr,
mutex_unlock(&bus->mdio_lock); mutex_unlock(&bus->mdio_lock);
} }
static void
ar8216_phy_mmd_write(struct ar8216_priv *priv, int phy_addr, u16 addr, u16 data)
{
struct mii_bus *bus = priv->phy->bus;
mutex_lock(&bus->mdio_lock);
bus->write(bus, phy_addr, MII_ATH_MMD_ADDR, addr);
bus->write(bus, phy_addr, MII_ATH_MMD_DATA, data);
mutex_unlock(&bus->mdio_lock);
}
static u32 static u32
ar8216_rmw(struct ar8216_priv *priv, int reg, u32 mask, u32 val) ar8216_rmw(struct ar8216_priv *priv, int reg, u32 mask, u32 val)
{ {
@ -692,6 +703,32 @@ ar8327_get_pad_cfg(struct ar8327_pad_cfg *cfg)
return t; return t;
} }
static void
ar8327_phy_fixup(struct ar8216_priv *priv, int phy)
{
switch (priv->chip_rev) {
case 1:
/* For 100M waveform */
ar8216_phy_dbg_write(priv, phy, 0, 0x02ea);
/* Turn on Gigabit clock */
ar8216_phy_dbg_write(priv, phy, 0x3d, 0x68a0);
break;
case 2:
ar8216_phy_mmd_write(priv, phy, 0x7, 0x3c);
ar8216_phy_mmd_write(priv, phy, 0x4007, 0x0);
/* fallthrough */
case 4:
ar8216_phy_mmd_write(priv, phy, 0x3, 0x800d);
ar8216_phy_mmd_write(priv, phy, 0x4003, 0x803f);
ar8216_phy_dbg_write(priv, phy, 0x3d, 0x6860);
ar8216_phy_dbg_write(priv, phy, 0x5, 0x2c46);
ar8216_phy_dbg_write(priv, phy, 0x3c, 0x6000);
break;
}
}
static int static int
ar8327_hw_init(struct ar8216_priv *priv) ar8327_hw_init(struct ar8216_priv *priv)
{ {
@ -712,14 +749,8 @@ ar8327_hw_init(struct ar8216_priv *priv)
priv->write(priv, AR8327_REG_POWER_ON_STRIP, 0x40000000); priv->write(priv, AR8327_REG_POWER_ON_STRIP, 0x40000000);
/* fixup PHYs */ for (i = 0; i < AR8327_NUM_PHYS; i++)
for (i = 0; i < AR8327_NUM_PHYS; i++) { ar8327_phy_fixup(priv, i);
/* For 100M waveform */
ar8216_phy_dbg_write(priv, i, 0, 0x02ea);
/* Turn on Gigabit clock */
ar8216_phy_dbg_write(priv, i, 0x3d, 0x68a0);
}
return 0; return 0;
} }

View file

@ -25,6 +25,8 @@
#define AR8316_NUM_VLANS 4096 #define AR8316_NUM_VLANS 4096
/* Atheros specific MII registers */ /* Atheros specific MII registers */
#define MII_ATH_MMD_ADDR 0x0d
#define MII_ATH_MMD_DATA 0x0e
#define MII_ATH_DBG_ADDR 0x1d #define MII_ATH_DBG_ADDR 0x1d
#define MII_ATH_DBG_DATA 0x1e #define MII_ATH_DBG_DATA 0x1e