gianfar: Restore link state settings after MAC reset
There are some MAC registers that need to be kept in sync with the link state parameters, see adjust_link(). However, after a MAC soft reset default values for these registers are assumed. In some cases (excepting if down/ if up for example) adjust_link() does not see that these values were reset to default because the priv->old* link parameters were left unchanged. So, reset the priv->old* link params as well during a MAC reset to let adjust_link() restore the MAC link settings to the actual link state values. Fixes following case, for example: Setting link to 100M, changing MTU (implies MAC reset), link state remains unchanged to 100M but MAC registers were reset to default (1G) breaking the connectivity w/ the PHY. Closing and re-opening the interface would restore the MAC link parameters to the correct values. Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
25b97c016b
Коммит
2a4eebf0c4
|
@ -2102,6 +2102,11 @@ int startup_gfar(struct net_device *ndev)
|
||||||
/* Start Rx/Tx DMA and enable the interrupts */
|
/* Start Rx/Tx DMA and enable the interrupts */
|
||||||
gfar_start(priv);
|
gfar_start(priv);
|
||||||
|
|
||||||
|
/* force link state update after mac reset */
|
||||||
|
priv->oldlink = 0;
|
||||||
|
priv->oldspeed = 0;
|
||||||
|
priv->oldduplex = -1;
|
||||||
|
|
||||||
phy_start(priv->phydev);
|
phy_start(priv->phydev);
|
||||||
|
|
||||||
enable_napi(priv);
|
enable_napi(priv);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче