summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Huynh2025-10-19 10:52:59 +0000
committerChristian Marangi2025-10-29 18:37:18 +0000
commit2b773bddeb7695076691e3247efcf0b604a2154a (patch)
tree7ff8079e02d03bdde1a1698342df79076731851a
parentbd180e8905fbcc70c7c2a1ae9d50ed22c63fe596 (diff)
downloadopenwrt-2b773bddeb7695076691e3247efcf0b604a2154a.tar.gz
kernel: rtl8261n: Add support for Serdes RX swap
Datasheet claims this register bit is supposed to be set by default, however it was found in practice to not be, and OEM drivers would set this bit at the same time. Signed-off-by: Richard Huynh <voxlympha@gmail.com> Link: https://github.com/openwrt/openwrt/pull/20465 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phy.c6
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phylib.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phy.c b/target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phy.c
index faa057f029..a1eb2c1614 100644
--- a/target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phy.c
+++ b/target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phy.c
@@ -61,6 +61,7 @@ static int rtl826xb_probe(struct phy_device *phydev)
priv->phytype = (phydev->drv->phy_id == REALTEK_PHY_ID_RTL8261N) ? (RTK_PHYLIB_RTL8261N) : (RTK_PHYLIB_RTL8264B);
priv->isBasePort = (phydev->drv->phy_id == REALTEK_PHY_ID_RTL8261N) ? (1) : (((phydev->mdio.addr % 4) == 0) ? (1) : (0));
+ priv->pnswap_rx = device_property_read_bool(dev, "realtek,pnswap-rx");
priv->pnswap_tx = device_property_read_bool(dev, "realtek,pnswap-tx");
phydev->priv = priv;
@@ -125,6 +126,11 @@ static int rtkphy_config_init(struct phy_device *phydev)
}
#endif
+ if (priv->pnswap_rx)
+ phy_set_bits_mmd(phydev, MDIO_MMD_VEND1,
+ REALTEK_SERDES_GLOBAL_CFG,
+ REALTEK_HSI_INV);
+
if (priv->pnswap_tx)
phy_set_bits_mmd(phydev, MDIO_MMD_VEND1,
REALTEK_SERDES_GLOBAL_CFG,
diff --git a/target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phylib.h b/target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phylib.h
index c94e9cb966..c1253b1ec9 100644
--- a/target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phylib.h
+++ b/target/linux/generic/files/drivers/net/phy/rtl8261n/rtk_phylib.h
@@ -51,6 +51,7 @@ struct rtk_phy_priv {
uint8 isBasePort;
rt_phy_patch_db_t *patch;
+ bool pnswap_rx;
bool pnswap_tx;
};