![Daniel Golle](/assets/img/avatar_default.png)
Backport generic phylink validate series and make use of it for mtk_eth_soc Ethernet driver as well as mt7530 DSA driver. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
80 lines
2.6 KiB
Diff
80 lines
2.6 KiB
Diff
From 0e37ad71b2ff772009595002da2860999e98e14e Mon Sep 17 00:00:00 2001
|
|
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
|
Date: Wed, 18 May 2022 15:55:12 +0100
|
|
Subject: [PATCH 09/12] net: mtk_eth_soc: move MAC_MCR setting to mac_finish()
|
|
|
|
Move the setting of the MTK_MAC_MCR register from the end of mac_config
|
|
into the phylink mac_finish() method, to keep it as the very last write
|
|
that is done during configuration.
|
|
|
|
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 33 ++++++++++++++-------
|
|
1 file changed, 22 insertions(+), 11 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
@@ -316,8 +316,8 @@ static void mtk_mac_config(struct phylin
|
|
struct mtk_mac *mac = container_of(config, struct mtk_mac,
|
|
phylink_config);
|
|
struct mtk_eth *eth = mac->hw;
|
|
- u32 mcr_cur, mcr_new, sid, i;
|
|
int val, ge_mode, err = 0;
|
|
+ u32 sid, i;
|
|
|
|
/* MT76x8 has no hardware settings between for the MAC */
|
|
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
|
|
@@ -455,16 +455,6 @@ static void mtk_mac_config(struct phylin
|
|
return;
|
|
}
|
|
|
|
- /* Setup gmac */
|
|
- mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
|
|
- mcr_new = mcr_cur;
|
|
- mcr_new |= MAC_MCR_IPG_CFG | MAC_MCR_FORCE_MODE |
|
|
- MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_FORCE_LINK;
|
|
-
|
|
- /* Only update control register when needed! */
|
|
- if (mcr_new != mcr_cur)
|
|
- mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
|
|
-
|
|
return;
|
|
|
|
err_phy:
|
|
@@ -477,6 +467,26 @@ init_err:
|
|
mac->id, phy_modes(state->interface), err);
|
|
}
|
|
|
|
+static int mtk_mac_finish(struct phylink_config *config, unsigned int mode,
|
|
+ phy_interface_t interface)
|
|
+{
|
|
+ struct mtk_mac *mac = container_of(config, struct mtk_mac,
|
|
+ phylink_config);
|
|
+ u32 mcr_cur, mcr_new;
|
|
+
|
|
+ /* Setup gmac */
|
|
+ mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
|
|
+ mcr_new = mcr_cur;
|
|
+ mcr_new |= MAC_MCR_IPG_CFG | MAC_MCR_FORCE_MODE |
|
|
+ MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_FORCE_LINK;
|
|
+
|
|
+ /* Only update control register when needed! */
|
|
+ if (mcr_new != mcr_cur)
|
|
+ mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
static void mtk_mac_pcs_get_state(struct phylink_config *config,
|
|
struct phylink_link_state *state)
|
|
{
|
|
@@ -581,6 +591,7 @@ static const struct phylink_mac_ops mtk_
|
|
.mac_pcs_get_state = mtk_mac_pcs_get_state,
|
|
.mac_an_restart = mtk_mac_an_restart,
|
|
.mac_config = mtk_mac_config,
|
|
+ .mac_finish = mtk_mac_finish,
|
|
.mac_link_down = mtk_mac_link_down,
|
|
.mac_link_up = mtk_mac_link_up,
|
|
};
|