|
@@ -387,24 +387,25 @@ Signed-off-by: Daniel Golle <[email protected]>
|
|
|
return;
|
|
|
|
|
|
err_phy:
|
|
|
-@@ -634,10 +698,13 @@ static void mtk_mac_link_down(struct phy
|
|
|
+@@ -633,10 +697,14 @@ static void mtk_mac_link_down(struct phy
|
|
|
{
|
|
|
struct mtk_mac *mac = container_of(config, struct mtk_mac,
|
|
|
phylink_config);
|
|
|
- u32 mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
|
|
|
|
|
|
-- mcr &= ~(MAC_MCR_TX_EN | MAC_MCR_RX_EN);
|
|
|
+- mcr &= ~(MAC_MCR_TX_EN | MAC_MCR_RX_EN | MAC_MCR_FORCE_LINK);
|
|
|
- mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
|
|
|
+ if (!mtk_interface_mode_is_xgmii(interface)) {
|
|
|
-+ mtk_m32(mac->hw, MAC_MCR_TX_EN | MAC_MCR_RX_EN, 0, MTK_MAC_MCR(mac->id));
|
|
|
-+ mtk_m32(mac->hw, MTK_XGMAC_FORCE_LINK(mac->id), 0, MTK_XGMAC_STS(mac->id));
|
|
|
++ mtk_m32(mac->hw, MAC_MCR_TX_EN | MAC_MCR_RX_EN | MAC_MCR_FORCE_LINK, 0, MTK_MAC_MCR(mac->id));
|
|
|
++ if (mtk_is_netsys_v3_or_greater(eth))
|
|
|
++ mtk_m32(mac->hw, MTK_XGMAC_FORCE_LINK(mac->id), 0, MTK_XGMAC_STS(mac->id));
|
|
|
+ } else if (mac->id != MTK_GMAC1_ID) {
|
|
|
+ mtk_m32(mac->hw, XMAC_MCR_TRX_DISABLE, XMAC_MCR_TRX_DISABLE, MTK_XMAC_MCR(mac->id));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void mtk_set_queue_speed(struct mtk_eth *eth, unsigned int idx,
|
|
|
-@@ -709,13 +776,11 @@ static void mtk_set_queue_speed(struct m
|
|
|
+@@ -708,13 +776,11 @@ static void mtk_set_queue_speed(struct m
|
|
|
mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
|
|
|
}
|
|
|
|
|
@@ -422,7 +423,7 @@ Signed-off-by: Daniel Golle <[email protected]>
|
|
|
u32 mcr;
|
|
|
|
|
|
mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
|
|
|
-@@ -749,6 +814,55 @@ static void mtk_mac_link_up(struct phyli
|
|
|
+@@ -748,6 +814,55 @@ static void mtk_mac_link_up(struct phyli
|
|
|
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
|
|
|
}
|
|
|
|
|
@@ -478,7 +479,7 @@ Signed-off-by: Daniel Golle <[email protected]>
|
|
|
static const struct phylink_mac_ops mtk_phylink_ops = {
|
|
|
.validate = phylink_generic_validate,
|
|
|
.mac_select_pcs = mtk_mac_select_pcs,
|
|
|
-@@ -4563,8 +4677,21 @@ static int mtk_add_mac(struct mtk_eth *e
|
|
|
+@@ -4562,8 +4677,21 @@ static int mtk_add_mac(struct mtk_eth *e
|
|
|
phy_interface_zero(mac->phylink_config.supported_interfaces);
|
|
|
__set_bit(PHY_INTERFACE_MODE_INTERNAL,
|
|
|
mac->phylink_config.supported_interfaces);
|
|
@@ -500,7 +501,7 @@ Signed-off-by: Daniel Golle <[email protected]>
|
|
|
phylink = phylink_create(&mac->phylink_config,
|
|
|
of_fwnode_handle(mac->of_node),
|
|
|
phy_mode, &mtk_phylink_ops);
|
|
|
-@@ -4757,6 +4884,13 @@ static int mtk_probe(struct platform_dev
|
|
|
+@@ -4756,6 +4884,13 @@ static int mtk_probe(struct platform_dev
|
|
|
|
|
|
if (err)
|
|
|
return err;
|