summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/marvell/mvgmac.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/marvell/mvgmac.c')
-rw-r--r--drivers/net/ethernet/marvell/mvgmac.c34
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");