mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-07-05 22:07:06 +08:00

Import patch "net: phy: realtek: mark existing MMDs as present" When using Clause-45 mode to access RealTek RTL8221B 2.5G PHYs some versions of the PHY fail to report the MMDs present on the PHY. Mark MMDs PMAPMD, PCS and AN which are always existing according to the datasheet as present to fix that. Signed-off-by: Daniel Golle <daniel@makrotopia.org> Tested-by: Aleksander Jan Bajkowski <olek2@wp.pl> Tested-by: Juan Pedro Paredes Caballero <juanpedro.paredes@gmail.com>
43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
From 9155098547fb1172d4fa536f3f6bc9d42f59d08c Mon Sep 17 00:00:00 2001
|
|
From: Daniel Golle <daniel@makrotopia.org>
|
|
Date: Sat, 22 Apr 2023 03:26:01 +0100
|
|
Subject: [PATCH] net: phy: realtek: setup ALDPS on RTL822x
|
|
|
|
Setup Link Down Power Saving Mode according the DTS property
|
|
just like for RTL821x 1GE PHYs.
|
|
|
|
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|
---
|
|
drivers/net/phy/realtek/realtek_main.c | 11 +++++++++++
|
|
1 file changed, 11 insertions(+)
|
|
|
|
--- a/drivers/net/phy/realtek/realtek_main.c
|
|
+++ b/drivers/net/phy/realtek/realtek_main.c
|
|
@@ -82,6 +82,10 @@
|
|
|
|
#define RTL822X_VND2_GANLPAR 0xa414
|
|
|
|
+#define RTL8221B_PHYCR1 0xa430
|
|
+#define RTL8221B_PHYCR1_ALDPS_EN BIT(2)
|
|
+#define RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN BIT(12)
|
|
+
|
|
#define RTL8366RB_POWER_SAVE 0x15
|
|
#define RTL8366RB_POWER_SAVE_ON BIT(12)
|
|
|
|
@@ -889,6 +893,15 @@ static int rtl822xb_config_init(struct p
|
|
if (ret < 0)
|
|
return ret;
|
|
|
|
+ if (of_property_read_bool(phydev->mdio.dev.of_node, "realtek,aldps-enable"))
|
|
+ ret = phy_set_bits_mmd(phydev, MDIO_MMD_VEND1, RTL8221B_PHYCR1,
|
|
+ RTL8221B_PHYCR1_ALDPS_EN | RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN);
|
|
+ else
|
|
+ ret = phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1, RTL8221B_PHYCR1,
|
|
+ RTL8221B_PHYCR1_ALDPS_EN | RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN);
|
|
+ if (ret < 0)
|
|
+ return ret;
|
|
+
|
|
/* Disable SGMII AN */
|
|
ret = phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x7588, 0x2);
|
|
if (ret < 0)
|