diff options
-rw-r--r-- | drivers/net/ethernet/marvell/mvneta.c | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index d04b1c3c9b85..b248bcbdae63 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c | |||
@@ -89,9 +89,8 @@ | |||
89 | #define MVNETA_TX_IN_PRGRS BIT(1) | 89 | #define MVNETA_TX_IN_PRGRS BIT(1) |
90 | #define MVNETA_TX_FIFO_EMPTY BIT(8) | 90 | #define MVNETA_TX_FIFO_EMPTY BIT(8) |
91 | #define MVNETA_RX_MIN_FRAME_SIZE 0x247c | 91 | #define MVNETA_RX_MIN_FRAME_SIZE 0x247c |
92 | #define MVNETA_SERDES_CFG 0x24A0 | 92 | #define MVNETA_SGMII_SERDES_CFG 0x24A0 |
93 | #define MVNETA_SGMII_SERDES_PROTO 0x0cc7 | 93 | #define MVNETA_SGMII_SERDES_PROTO 0x0cc7 |
94 | #define MVNETA_RGMII_SERDES_PROTO 0x0667 | ||
95 | #define MVNETA_TYPE_PRIO 0x24bc | 94 | #define MVNETA_TYPE_PRIO 0x24bc |
96 | #define MVNETA_FORCE_UNI BIT(21) | 95 | #define MVNETA_FORCE_UNI BIT(21) |
97 | #define MVNETA_TXQ_CMD_1 0x24e4 | 96 | #define MVNETA_TXQ_CMD_1 0x24e4 |
@@ -712,6 +711,35 @@ static void mvneta_rxq_bm_disable(struct mvneta_port *pp, | |||
712 | mvreg_write(pp, MVNETA_RXQ_CONFIG_REG(rxq->id), val); | 711 | mvreg_write(pp, MVNETA_RXQ_CONFIG_REG(rxq->id), val); |
713 | } | 712 | } |
714 | 713 | ||
714 | |||
715 | |||
716 | /* Sets the RGMII Enable bit (RGMIIEn) in port MAC control register */ | ||
717 | static void mvneta_gmac_rgmii_set(struct mvneta_port *pp, int enable) | ||
718 | { | ||
719 | u32 val; | ||
720 | |||
721 | val = mvreg_read(pp, MVNETA_GMAC_CTRL_2); | ||
722 | |||
723 | if (enable) | ||
724 | val |= MVNETA_GMAC2_PORT_RGMII; | ||
725 | else | ||
726 | val &= ~MVNETA_GMAC2_PORT_RGMII; | ||
727 | |||
728 | mvreg_write(pp, MVNETA_GMAC_CTRL_2, val); | ||
729 | } | ||
730 | |||
731 | /* Config SGMII port */ | ||
732 | static void mvneta_port_sgmii_config(struct mvneta_port *pp) | ||
733 | { | ||
734 | u32 val; | ||
735 | |||
736 | val = mvreg_read(pp, MVNETA_GMAC_CTRL_2); | ||
737 | val |= MVNETA_GMAC2_PCS_ENABLE; | ||
738 | mvreg_write(pp, MVNETA_GMAC_CTRL_2, val); | ||
739 | |||
740 | mvreg_write(pp, MVNETA_SGMII_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO); | ||
741 | } | ||
742 | |||
715 | /* Start the Ethernet port RX and TX activity */ | 743 | /* Start the Ethernet port RX and TX activity */ |
716 | static void mvneta_port_up(struct mvneta_port *pp) | 744 | static void mvneta_port_up(struct mvneta_port *pp) |
717 | { | 745 | { |
@@ -2729,15 +2757,12 @@ static void mvneta_port_power_up(struct mvneta_port *pp, int phy_mode) | |||
2729 | mvreg_write(pp, MVNETA_UNIT_INTR_CAUSE, 0); | 2757 | mvreg_write(pp, MVNETA_UNIT_INTR_CAUSE, 0); |
2730 | 2758 | ||
2731 | if (phy_mode == PHY_INTERFACE_MODE_SGMII) | 2759 | if (phy_mode == PHY_INTERFACE_MODE_SGMII) |
2732 | mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO); | 2760 | mvneta_port_sgmii_config(pp); |
2733 | else | ||
2734 | mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_RGMII_SERDES_PROTO); | ||
2735 | 2761 | ||
2736 | val = mvreg_read(pp, MVNETA_GMAC_CTRL_2); | 2762 | mvneta_gmac_rgmii_set(pp, 1); |
2737 | |||
2738 | val |= MVNETA_GMAC2_PCS_ENABLE | MVNETA_GMAC2_PORT_RGMII; | ||
2739 | 2763 | ||
2740 | /* Cancel Port Reset */ | 2764 | /* Cancel Port Reset */ |
2765 | val = mvreg_read(pp, MVNETA_GMAC_CTRL_2); | ||
2741 | val &= ~MVNETA_GMAC2_PORT_RESET; | 2766 | val &= ~MVNETA_GMAC2_PORT_RESET; |
2742 | mvreg_write(pp, MVNETA_GMAC_CTRL_2, val); | 2767 | mvreg_write(pp, MVNETA_GMAC_CTRL_2, val); |
2743 | 2768 | ||