diff options
Diffstat (limited to 'drivers/net/ethernet/marvell/mvgmac.c')
-rw-r--r-- | drivers/net/ethernet/marvell/mvgmac.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/drivers/net/ethernet/marvell/mvgmac.c b/drivers/net/ethernet/marvell/mvgmac.c index b5bf4f783396..cb06d5c2ede4 100644 --- a/drivers/net/ethernet/marvell/mvgmac.c +++ b/drivers/net/ethernet/marvell/mvgmac.c @@ -93,7 +93,9 @@ enum { GMAC_LPI_CTRL0_REG = 0xc0, GMAC_LPI_CTRL0_TS = 0xff << 8, GMAC_LPI_CTRL1_REG = 0xc4, - GMAC_LPI_CTRL1_REQ_EN = BIT(0), + GMAC_LPI_CTRL1_REQUEST_ENABLE = BIT(0), + GMAC_LPI_CTRL1_REQUEST_FORCE = BIT(0), + GMAC_LPI_CTRL1_MANUAL_MODE = BIT(0), GMAC_LPI_CTRL1_TW = 0xfff << 4, GMAC_LPI_CTRL2_REG = 0xc8, GMAC_LPI_STATUS_REG = 0xcc, @@ -258,7 +260,7 @@ void mvgmac_link_change(struct mvgmac *gmac) } EXPORT_SYMBOL_GPL(mvgmac_link_change); -void mvgmac_pcs_get_state(struct phylink_pcs *pcs, +void mvgmac_pcs_get_state(struct phylink_pcs *pcs, unsigned int neg_mode, struct phylink_link_state *state) { struct mvgmac *gmac = pcs_to_mvgmac(pcs); @@ -417,13 +419,22 @@ void mvgmac_config_mac(struct mvgmac *gmac, unsigned int mode, } EXPORT_SYMBOL_GPL(mvgmac_config_mac); -void mvgmac_set_lpi_timers(struct mvgmac *gmac, unsigned int timer) +void mvgmac_disable_lpi(struct mvgmac *gmac) +{ + mvgmac_clear(gmac->base + GMAC_LPI_CTRL1_REG, + GMAC_LPI_CTRL1_REQUEST_ENABLE | + GMAC_LPI_CTRL1_REQUEST_FORCE | + GMAC_LPI_CTRL1_MANUAL_MODE); +} +EXPORT_SYMBOL_GPL(mvgmac_disable_lpi); + +void mvgmac_enable_lpi(struct mvgmac *gmac, unsigned int timer) { u32 ts, tw, status; status = readl_relaxed(gmac->base + GMAC_STATUS_REG); if (status & MVGMAC_SPEED_1000) { - /* At 1G speeds, the timer resolution are 1us, and + /* At 1G speeds, the timer resolutions are 1us, and * 802.3 says tw is 16.5us. Round up to 17us. */ tw = 17; @@ -444,18 +455,11 @@ void mvgmac_set_lpi_timers(struct mvgmac *gmac, unsigned int timer) FIELD_PREP(GMAC_LPI_CTRL0_TS, ts)); mvgmac_modify(gmac->base + GMAC_LPI_CTRL1_REG, - GMAC_LPI_CTRL1_TW, - FIELD_PREP(GMAC_LPI_CTRL1_TW, tw)); -} -EXPORT_SYMBOL_GPL(mvgmac_set_lpi_timers); - -void mvgmac_set_eee(struct mvgmac *gmac, bool enable) -{ - mvgmac_modify(gmac->base + GMAC_LPI_CTRL1_REG, - GMAC_LPI_CTRL1_REQ_EN, - FIELD_PREP(GMAC_LPI_CTRL1_REQ_EN, enable)); + GMAC_LPI_CTRL1_TW | GMAC_LPI_CTRL1_REQUEST_ENABLE, + FIELD_PREP(GMAC_LPI_CTRL1_TW, tw) | + GMAC_LPI_CTRL1_REQUEST_ENABLE); } -EXPORT_SYMBOL_GPL(mvgmac_set_eee); +EXPORT_SYMBOL_GPL(mvgmac_enable_lpi); MODULE_DESCRIPTION("Marvell GMAC driver"); MODULE_LICENSE("GPL"); |