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);