aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--target/linux/ath79/patches-4.14/0038-at803x-disable-delays.patch27
-rw-r--r--target/linux/ath79/patches-4.19/0038-at803x-disable-delays.patch27
2 files changed, 54 insertions, 0 deletions
diff --git a/target/linux/ath79/patches-4.14/0038-at803x-disable-delays.patch b/target/linux/ath79/patches-4.14/0038-at803x-disable-delays.patch
new file mode 100644
index 0000000000..cf05d0fc4a
--- /dev/null
+++ b/target/linux/ath79/patches-4.14/0038-at803x-disable-delays.patch
@@ -0,0 +1,27 @@
+Until upstream commit 6d4cd041f0af("net: phy: at803x: disable delay
+only for RGMII mode"), delays were not disabled on driver probe
+for the Atheros AR803x PHYs, although the RX delay is enabled on
+soft and hard reset.
+
+In addition, the TX delay setting is retained on soft-reset.
+
+This patch disables both delays on config init to align the behavior
+with kernel 5.1 and higher. It can be safely dropped with kernel 5.1.
+
+--- a/drivers/net/phy/at803x.c
++++ b/drivers/net/phy/at803x.c
+@@ -320,6 +320,14 @@ static int at803x_config_init(struct phy
+ if (ret < 0)
+ return ret;
+
++ /* Disable RX delay */
++ at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_0,
++ AT803X_DEBUG_RX_CLK_DLY_EN, 0);
++
++ /* Disable TX delay */
++ at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_5,
++ AT803X_DEBUG_TX_CLK_DLY_EN, 0);
++
+ if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID ||
+ phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) {
+ ret = at803x_enable_rx_delay(phydev);
diff --git a/target/linux/ath79/patches-4.19/0038-at803x-disable-delays.patch b/target/linux/ath79/patches-4.19/0038-at803x-disable-delays.patch
new file mode 100644
index 0000000000..56325a831e
--- /dev/null
+++ b/target/linux/ath79/patches-4.19/0038-at803x-disable-delays.patch
@@ -0,0 +1,27 @@
+Until upstream commit 6d4cd041f0af("net: phy: at803x: disable delay
+only for RGMII mode"), delays were not disabled on driver probe
+for the Atheros AR803x PHYs, although the RX delay is enabled on
+soft and hard reset.
+
+In addition, the TX delay setting is retained on soft-reset.
+
+This patch disables both delays on config init to align the behavior
+with kernel 5.1 and higher. It can be safely dropped with kernel 5.1.
+
+--- a/drivers/net/phy/at803x.c
++++ b/drivers/net/phy/at803x.c
+@@ -295,6 +295,14 @@ static int at803x_config_init(struct phy
+ if (ret < 0)
+ return ret;
+
++ /* Disable RX delay */
++ at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_0,
++ AT803X_DEBUG_RX_CLK_DLY_EN, 0);
++
++ /* Disable TX delay */
++ at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_5,
++ AT803X_DEBUG_TX_CLK_DLY_EN, 0);
++
+ if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID ||
+ phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) {
+ ret = at803x_enable_rx_delay(phydev);