forked from armbian/build
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sunxi: revert net: phy: realtek: fix rtl8211e rx/tx delay config
to fix onboard Ethernet on NanoPi M1 Plus: MichaIng/DietPi#6974 Signed-off-by: MichaIng <micha@dietpi.com>
- Loading branch information
Showing
1 changed file
with
75 additions
and
0 deletions.
There are no files selected for viewing
75 changes: 75 additions & 0 deletions
75
patch/kernel/archive/sunxi-6.6/drv-phy-realtek-revert-faulty-patch.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c | ||
index 95dbe5e8e1d8ff..0f09609718007e 100644 | ||
--- a/drivers/net/phy/realtek.c | ||
+++ b/drivers/net/phy/realtek.c | ||
@@ -1,5 +1,6 @@ | ||
// SPDX-License-Identifier: GPL-2.0+ | ||
+/* | ||
+ * drivers/net/phy/realtek.c | ||
-/* drivers/net/phy/realtek.c | ||
* | ||
* Driver for Realtek PHYs | ||
* | ||
@@ -31,9 +32,9 @@ | ||
#define RTL8211F_TX_DELAY BIT(8) | ||
#define RTL8211F_RX_DELAY BIT(3) | ||
|
||
+#define RTL8211E_TX_DELAY BIT(1) | ||
+#define RTL8211E_RX_DELAY BIT(2) | ||
+#define RTL8211E_MODE_MII_GMII BIT(3) | ||
-#define RTL8211E_CTRL_DELAY BIT(13) | ||
-#define RTL8211E_TX_DELAY BIT(12) | ||
-#define RTL8211E_RX_DELAY BIT(11) | ||
|
||
#define RTL8201F_ISR 0x1e | ||
#define RTL8201F_IER 0x13 | ||
@@ -245,16 +246,16 @@ static int rtl8211e_config_init(struct phy_device *phydev) | ||
/* enable TX/RX delay for rgmii-* modes, and disable them for rgmii. */ | ||
switch (phydev->interface) { | ||
case PHY_INTERFACE_MODE_RGMII: | ||
+ val = 0; | ||
- val = RTL8211E_CTRL_DELAY | 0; | ||
break; | ||
case PHY_INTERFACE_MODE_RGMII_ID: | ||
+ val = RTL8211E_TX_DELAY | RTL8211E_RX_DELAY; | ||
- val = RTL8211E_CTRL_DELAY | RTL8211E_TX_DELAY | RTL8211E_RX_DELAY; | ||
break; | ||
case PHY_INTERFACE_MODE_RGMII_RXID: | ||
+ val = RTL8211E_RX_DELAY; | ||
- val = RTL8211E_CTRL_DELAY | RTL8211E_RX_DELAY; | ||
break; | ||
case PHY_INTERFACE_MODE_RGMII_TXID: | ||
+ val = RTL8211E_TX_DELAY; | ||
- val = RTL8211E_CTRL_DELAY | RTL8211E_TX_DELAY; | ||
break; | ||
default: /* the rest of the modes imply leaving delays as is. */ | ||
return 0; | ||
@@ -262,12 +263,11 @@ static int rtl8211e_config_init(struct phy_device *phydev) | ||
|
||
/* According to a sample driver there is a 0x1c config register on the | ||
* 0xa4 extension page (0x7) layout. It can be used to disable/enable | ||
+ * the RX/TX delays otherwise controlled by RXDLY/TXDLY pins. It can | ||
+ * also be used to customize the whole configuration register: | ||
+ * 8:6 = PHY Address, 5:4 = Auto-Negotiation, 3 = Interface Mode Select, | ||
+ * 2 = RX Delay, 1 = TX Delay, 0 = SELRGV (see original PHY datasheet | ||
+ * for details). | ||
- * the RX/TX delays otherwise controlled by RXDLY/TXDLY pins. | ||
- * The configuration register definition: | ||
- * 14 = reserved | ||
- * 13 = Force Tx RX Delay controlled by bit12 bit11, | ||
- * 12 = RX Delay, 11 = TX Delay | ||
- * 10:0 = Test && debug settings reserved by realtek | ||
*/ | ||
oldpage = phy_select_page(phydev, 0x7); | ||
if (oldpage < 0) | ||
@@ -277,8 +277,7 @@ static int rtl8211e_config_init(struct phy_device *phydev) | ||
if (ret) | ||
goto err_restore_page; | ||
|
||
+ ret = __phy_modify(phydev, 0x1c, RTL8211E_TX_DELAY | RTL8211E_RX_DELAY, | ||
- ret = __phy_modify(phydev, 0x1c, RTL8211E_CTRL_DELAY | ||
- | RTL8211E_TX_DELAY | RTL8211E_RX_DELAY, | ||
val); | ||
|
||
err_restore_page: | ||
|