Lines Matching full:phy
66 #define AQ_WRITE_REGS(phy, regs) do { \ argument
69 (void) mdio_write(phy, regs[i].mmd, regs[i].reg, regs[i].val); \
72 #define AQ_READ_REGS(phy, regs) do { \ argument
75 (void) mdio_read(phy, regs[i].mmd, regs[i].reg, &v); \
83 aq100x_temperature(struct cphy *phy) in aq100x_temperature() argument
87 if (mdio_read(phy, MDIO_DEV_VEND1, AQ_THERMAL2, &v) || in aq100x_temperature()
91 if (mdio_read(phy, MDIO_DEV_VEND1, AQ_THERMAL1, &v)) in aq100x_temperature()
98 aq100x_set_defaults(struct cphy *phy) in aq100x_set_defaults() argument
100 return mdio_write(phy, MDIO_DEV_VEND1, AQ_THERMAL_THR, 0x6c00); in aq100x_set_defaults()
104 aq100x_reset(struct cphy *phy, int wait) in aq100x_reset() argument
107 err = t3_phy_reset(phy, MDIO_DEV_PMA_PMD, wait); in aq100x_reset()
109 err = aq100x_set_defaults(phy); in aq100x_reset()
114 aq100x_intr_enable(struct cphy *phy) in aq100x_intr_enable() argument
126 AQ_WRITE_REGS(phy, imasks); in aq100x_intr_enable()
132 aq100x_intr_disable(struct cphy *phy) in aq100x_intr_disable() argument
144 AQ_WRITE_REGS(phy, imasks); in aq100x_intr_disable()
150 aq100x_intr_clear(struct cphy *phy) in aq100x_intr_clear() argument
160 AQ_READ_REGS(phy, iclr); in aq100x_intr_clear()
166 aq100x_vendor_intr(struct cphy *phy, int *rc) in aq100x_vendor_intr() argument
171 err = mdio_read(phy, MDIO_DEV_VEND1, 0xfc01, &cause); in aq100x_vendor_intr()
176 err = mdio_read(phy, MDIO_DEV_VEND1, 0xcc00, &v); in aq100x_vendor_intr()
181 CH_WARN(phy->adapter, "PHY%d: temperature is now %dC\n", in aq100x_vendor_intr()
182 phy->addr, aq100x_temperature(phy)); in aq100x_vendor_intr()
184 t3_set_reg_field(phy->adapter, A_T3DBG_GPIO_EN, in aq100x_vendor_intr()
185 phy->addr ? F_GPIO10_OUT_VAL : F_GPIO6_OUT_VAL, 0); in aq100x_vendor_intr()
194 CH_WARN(phy->adapter, "PHY%d: unhandled vendor interrupt" in aq100x_vendor_intr()
195 " (0x%x)\n", phy->addr, cause); in aq100x_vendor_intr()
202 aq100x_intr_handler(struct cphy *phy) in aq100x_intr_handler() argument
207 err = mdio_read(phy, MDIO_DEV_VEND1, AQ_IFLAG_GLOBAL, &cause); in aq100x_intr_handler()
212 err = aq100x_vendor_intr(phy, &rc); in aq100x_intr_handler()
219 CH_WARN(phy->adapter, "PHY%d: unhandled interrupt (0x%x)\n", in aq100x_intr_handler()
220 phy->addr, cause); in aq100x_intr_handler()
226 aq100x_power_down(struct cphy *phy, int off) in aq100x_power_down() argument
231 err = t3_mdio_change_bits(phy, MDIO_DEV_PMA_PMD, MII_BMCR, BMCR_PDOWN, in aq100x_power_down()
238 err = mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMCR, &v); in aq100x_power_down()
246 CH_WARN(phy->adapter, "PHY%d: power-up timed out (0x%x).\n", in aq100x_power_down()
247 phy->addr, v); in aq100x_power_down()
255 aq100x_autoneg_enable(struct cphy *phy) in aq100x_autoneg_enable() argument
259 err = aq100x_power_down(phy, 0); in aq100x_autoneg_enable()
261 err = t3_mdio_change_bits(phy, MDIO_DEV_ANEG, MII_BMCR, in aq100x_autoneg_enable()
268 aq100x_autoneg_restart(struct cphy *phy) in aq100x_autoneg_restart() argument
270 return aq100x_autoneg_enable(phy); in aq100x_autoneg_restart()
274 aq100x_advertise(struct cphy *phy, unsigned int advertise_map) in aq100x_advertise() argument
283 err = t3_mdio_change_bits(phy, MDIO_DEV_ANEG, AQ_10G_CTRL, in aq100x_advertise()
294 err = t3_mdio_change_bits(phy, MDIO_DEV_ANEG, AQ_1G_CTRL, in aq100x_advertise()
309 err = t3_mdio_change_bits(phy, MDIO_DEV_ANEG, AQ_100M_CTRL, 0xfe0, adv); in aq100x_advertise()
315 aq100x_set_loopback(struct cphy *phy, int mmd, int dir, int enable) in aq100x_set_loopback() argument
317 return t3_mdio_change_bits(phy, MDIO_DEV_PMA_PMD, MII_BMCR, in aq100x_set_loopback()
322 aq100x_set_speed_duplex(struct cphy *phy, int speed, int duplex) in aq100x_set_speed_duplex() argument
338 err = t3_mdio_change_bits(phy, MDIO_DEV_ANEG, MII_BMCR, in aq100x_set_speed_duplex()
343 err = t3_mdio_change_bits(phy, MDIO_DEV_PMA_PMD, MII_BMCR, in aq100x_set_speed_duplex()
352 aq100x_get_link_status(struct cphy *phy, int *link_state, int *speed, int *duplex, in aq100x_get_link_status() argument
358 err = mdio_read(phy, MDIO_DEV_PMA_PMD, AQ_LINK_STAT, &v); in aq100x_get_link_status()
364 err = mdio_read(phy, MDIO_DEV_ANEG, MII_BMCR, &v); in aq100x_get_link_status()
371 err = mdio_read(phy, MDIO_DEV_ANEG, 1, &v); in aq100x_get_link_status()
377 err = mdio_read(phy, MDIO_DEV_ANEG, AQ_ANEG_STAT, &v); in aq100x_get_link_status()
399 err = mdio_read(phy, MDIO_DEV_ANEG, 0x13, &lpa); in aq100x_get_link_status()
401 err = mdio_read(phy, MDIO_DEV_ANEG, in aq100x_get_link_status()
420 err = mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMCR, &v); in aq100x_get_link_status()
466 struct cphy *phy = &pinfo->phy; in t3_aq100x_phy_prep() local
471 cphy_init(&pinfo->phy, adapter, pinfo, phy_addr, &aq100x_ops, mdio_ops, in t3_aq100x_phy_prep()
477 * Hard reset the PHY. in t3_aq100x_phy_prep()
490 err = mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMCR, &v); in t3_aq100x_phy_prep()
495 CH_WARN(adapter, "PHY%d: reset failed (0x%x, 0x%x).\n", in t3_aq100x_phy_prep()
505 CH_WARN(adapter, "PHY%d: reset timed out (0x%x).\n", in t3_aq100x_phy_prep()
512 (void) mdio_read(phy, MDIO_DEV_VEND1, AQ_FW_VERSION, &v); in t3_aq100x_phy_prep()
514 CH_WARN(adapter, "PHY%d: unknown firmware %d.%d\n", phy_addr, in t3_aq100x_phy_prep()
517 /* The PHY should start in really-low-power mode. */ in t3_aq100x_phy_prep()
518 (void) mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMCR, &v); in t3_aq100x_phy_prep()
520 CH_WARN(adapter, "PHY%d does not start in low power mode.\n", in t3_aq100x_phy_prep()
527 (void) mdio_read(phy, MDIO_DEV_XGXS, AQ_XAUI_RX_CFG, &v); in t3_aq100x_phy_prep()
528 (void) mdio_read(phy, MDIO_DEV_XGXS, AQ_XAUI_TX_CFG, &v2); in t3_aq100x_phy_prep()
530 CH_WARN(adapter, "PHY%d: incorrect XAUI settings " in t3_aq100x_phy_prep()
533 (void) mdio_read(phy, MDIO_DEV_XGXS, AQ_XAUI_KX_CFG, &v); in t3_aq100x_phy_prep()
535 CH_WARN(adapter, "PHY%d: incorrect 1000-X settings " in t3_aq100x_phy_prep()
538 (void) aq100x_set_defaults(phy); in t3_aq100x_phy_prep()