pr_err("phy(%d) write timeout : %d\n", phy, reg);
}
+static int
+jme_phyext_read(struct jme_adapter *jme, int reg)
+{
+ jme_mdio_write(jme->dev, jme->mii_if.phy_id,
+ JME_PHY_SPEC_ADDR_REG,
+ JME_PHY_SPEC_REG_READ | (reg & 0x3FFF));
+ return jme_mdio_read(jme->dev, jme->mii_if.phy_id,
+ JME_PHY_SPEC_DATA_REG);
+}
+
+static void
+jme_phyext_write(struct jme_adapter *jme, int reg, int val)
+{
+ jme_mdio_write(jme->dev, jme->mii_if.phy_id,
+ JME_PHY_SPEC_DATA_REG, val);
+ jme_mdio_write(jme->dev, jme->mii_if.phy_id,
+ JME_PHY_SPEC_ADDR_REG,
+ JME_PHY_SPEC_REG_WRITE | (reg & 0x3FFF));
+}
+
+static void
+jme_phyext_memcpy(struct jme_adapter *jme, u32 *p, int reg_nr)
+{
+ int i;
+ u16 *p16 = (u16 *)p;
+
+ for (i = 0 ; i < reg_nr ; ++i)
+ p16[i] = jme_phyext_read(jme, i);
+}
+
static inline void
jme_reset_phy_processor(struct jme_adapter *jme)
{
{
u32 bmcr;
+ if (new_phy_power_ctrl(jme->chip_main_rev))
+ jme_new_phy_on(jme);
+
bmcr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMCR);
bmcr &= ~BMCR_PDOWN;
jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, bmcr);
-
- if (new_phy_power_ctrl(jme->chip_main_rev))
- jme_new_phy_on(jme);
}
static inline void
p32 += 0x100 >> 2;
mdio_memcpy(jme, p32, JME_PHY_REG_NR);
+
+ p32 += 0x100 >> 2;
+ jme_phyext_memcpy(jme, p32, JME_PHY_SPEC_REG_NR);
}
static int