From 6f2e1b7485f0460b09168aef57931fe0ddedb884 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 24 Oct 2019 15:13:24 +0200 Subject: [PATCH] ath79: disable delays on AT803X config init 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. Signed-off-by: David Bauer --- .../0038-at803x-disable-delays.patch | 27 +++++++++++++++++++ .../0038-at803x-disable-delays.patch | 27 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 target/linux/ath79/patches-4.14/0038-at803x-disable-delays.patch create mode 100644 target/linux/ath79/patches-4.19/0038-at803x-disable-delays.patch 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);