Skip to content

Commit

Permalink
net: mvpp2: dynamic reconfiguration of the comphy/GoP/MAC
Browse files Browse the repository at this point in the history
This patch adds logic to reconfigure the comphy/GoP/MAC when the link
state is updated at runtime. This is very useful on boards where many
link speed are supported: depending on what is negotiated the PPv2
driver will automatically reconfigures the link between the PHY and the
MAC.

Signed-off-by: Antoine Tenart <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
atenart authored and davem330 committed Aug 30, 2017
1 parent 65a2c09 commit 89273bc
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 additions & 1 deletion drivers/net/ethernet/marvell/mvpp2.c
Original file line number Diff line number Diff line change
Expand Up @@ -5771,9 +5771,28 @@ static void mvpp2_link_event(struct net_device *dev)
{
struct mvpp2_port *port = netdev_priv(dev);
struct phy_device *phydev = dev->phydev;
bool link_reconfigured = false;
u32 val;

if (phydev->link) {
if (port->phy_interface != phydev->interface && port->comphy) {
/* disable current port for reconfiguration */
mvpp2_interrupts_disable(port);
netif_carrier_off(port->dev);
mvpp2_port_disable(port);
phy_power_off(port->comphy);

/* comphy reconfiguration */
port->phy_interface = phydev->interface;
mvpp22_comphy_init(port);

/* gop/mac reconfiguration */
mvpp22_gop_init(port);
mvpp2_port_mii_set(port);

link_reconfigured = true;
}

if ((port->speed != phydev->speed) ||
(port->duplex != phydev->duplex)) {
mvpp2_gmac_set_autoneg(port, phydev);
Expand All @@ -5783,7 +5802,7 @@ static void mvpp2_link_event(struct net_device *dev)
}
}

if (phydev->link != port->link) {
if (phydev->link != port->link || link_reconfigured) {
port->link = phydev->link;

if (phydev->link) {
Expand Down

0 comments on commit 89273bc

Please sign in to comment.