* [PATCH net v3 0/2] net: phy: micrel: lan8842 erratas
@ 2025-10-30 7:49 Horatiu Vultur
2025-10-30 7:49 ` [PATCH net v3 1/2] net: phy: micrel: lan8842 errata Horatiu Vultur
2025-10-30 7:49 ` [PATCH net v3 2/2] " Horatiu Vultur
0 siblings, 2 replies; 5+ messages in thread
From: Horatiu Vultur @ 2025-10-30 7:49 UTC (permalink / raw)
To: andrew, hkallweit1, linux, davem, edumazet, kuba, pabeni
Cc: netdev, linux-kernel, Horatiu Vultur
Add two erratas to the lan8842. The errata document can be found here [1]
The two erratas are:
- module 2 ("Analog front-end not optimized forPHY-side shorted center taps").
- module 7 ("1000BASE-T PMA EEE TX wake PHY-side shorted center taps")
v2->v3
- fix some register addresses
- add reviewed-by tag
v1->v2:
- split the patch in 2 patches, one patch for each errata
- rebase on net instead of net-next
Horatiu Vultur (2):
net: phy: micrel: lan8842 errata
net: phy: micrel: lan8842 errata
drivers/net/phy/micrel.c | 166 +++++++++++++++++++++++++++++++++++++++
1 file changed, 166 insertions(+)
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net v3 1/2] net: phy: micrel: lan8842 errata
2025-10-30 7:49 [PATCH net v3 0/2] net: phy: micrel: lan8842 erratas Horatiu Vultur
@ 2025-10-30 7:49 ` Horatiu Vultur
2025-10-30 10:33 ` Russell King (Oracle)
2025-10-30 7:49 ` [PATCH net v3 2/2] " Horatiu Vultur
1 sibling, 1 reply; 5+ messages in thread
From: Horatiu Vultur @ 2025-10-30 7:49 UTC (permalink / raw)
To: andrew, hkallweit1, linux, davem, edumazet, kuba, pabeni
Cc: netdev, linux-kernel, Horatiu Vultur
Add errata for lan8842. The errata document can be found here [1].
This is fixing the module 2 ("Analog front-end not optimized for
PHY-side shorted center taps").
[1] https://ww1.microchip.com/downloads/aemDocuments/documents/UNG/ProductDocuments/Errata/LAN8842-Errata-DS80001172.pdf
Fixes: 5a774b64cd6a ("net: phy: micrel: Add support for lan8842")
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
drivers/net/phy/micrel.c | 149 +++++++++++++++++++++++++++++++++++++++
1 file changed, 149 insertions(+)
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 604b5de0c1581..504c715b7db90 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -2853,6 +2853,13 @@ static int ksz886x_cable_test_get_status(struct phy_device *phydev,
*/
#define LAN8814_PAGE_PORT_REGS 5
+/**
+ * LAN8814_PAGE_POWER_REGS - Selects Extended Page 28.
+ *
+ * This page contains analog control registers and power mode registers.
+ */
+#define LAN8814_PAGE_POWER_REGS 28
+
/**
* LAN8814_PAGE_SYSTEM_CTRL - Selects Extended Page 31.
*
@@ -5884,6 +5891,143 @@ static int lan8842_probe(struct phy_device *phydev)
return 0;
}
+#define LAN8814_POWER_MGMT_MODE_3_ANEG_MDI 0x13
+#define LAN8814_POWER_MGMT_MODE_4_ANEG_MDIX 0x14
+#define LAN8814_POWER_MGMT_MODE_5_10BT_MDI 0x15
+#define LAN8814_POWER_MGMT_MODE_6_10BT_MDIX 0x16
+#define LAN8814_POWER_MGMT_MODE_7_100BT_TRAIN 0x17
+#define LAN8814_POWER_MGMT_MODE_8_100BT_MDI 0x18
+#define LAN8814_POWER_MGMT_MODE_9_100BT_EEE_MDI_TX 0x19
+#define LAN8814_POWER_MGMT_MODE_10_100BT_EEE_MDI_RX 0x1a
+#define LAN8814_POWER_MGMT_MODE_11_100BT_MDIX 0x1b
+#define LAN8814_POWER_MGMT_MODE_12_100BT_EEE_MDIX_TX 0x1c
+#define LAN8814_POWER_MGMT_MODE_13_100BT_EEE_MDIX_RX 0x1d
+#define LAN8814_POWER_MGMT_MODE_14_100BTX_EEE_TX_RX 0x1e
+
+#define LAN8814_POWER_MGMT_DLLPD_D BIT(0)
+#define LAN8814_POWER_MGMT_ADCPD_D BIT(1)
+#define LAN8814_POWER_MGMT_PGAPD_D BIT(2)
+#define LAN8814_POWER_MGMT_TXPD_D BIT(3)
+#define LAN8814_POWER_MGMT_DLLPD_C BIT(4)
+#define LAN8814_POWER_MGMT_ADCPD_C BIT(5)
+#define LAN8814_POWER_MGMT_PGAPD_C BIT(6)
+#define LAN8814_POWER_MGMT_TXPD_C BIT(7)
+#define LAN8814_POWER_MGMT_DLLPD_B BIT(8)
+#define LAN8814_POWER_MGMT_ADCPD_B BIT(9)
+#define LAN8814_POWER_MGMT_PGAPD_B BIT(10)
+#define LAN8814_POWER_MGMT_TXPD_B BIT(11)
+#define LAN8814_POWER_MGMT_DLLPD_A BIT(12)
+#define LAN8814_POWER_MGMT_ADCPD_A BIT(13)
+#define LAN8814_POWER_MGMT_PGAPD_A BIT(14)
+#define LAN8814_POWER_MGMT_TXPD_A BIT(15)
+
+#define LAN8814_POWER_MGMT_C_D (LAN8814_POWER_MGMT_DLLPD_D | \
+ LAN8814_POWER_MGMT_ADCPD_D | \
+ LAN8814_POWER_MGMT_PGAPD_D | \
+ LAN8814_POWER_MGMT_DLLPD_C | \
+ LAN8814_POWER_MGMT_ADCPD_C | \
+ LAN8814_POWER_MGMT_PGAPD_C)
+
+#define LAN8814_POWER_MGMT_B_C_D (LAN8814_POWER_MGMT_C_D | \
+ LAN8814_POWER_MGMT_DLLPD_B | \
+ LAN8814_POWER_MGMT_ADCPD_B | \
+ LAN8814_POWER_MGMT_PGAPD_B)
+
+#define LAN8814_POWER_MGMT_VAL1 (LAN8814_POWER_MGMT_C_D | \
+ LAN8814_POWER_MGMT_ADCPD_B | \
+ LAN8814_POWER_MGMT_PGAPD_B | \
+ LAN8814_POWER_MGMT_ADCPD_A | \
+ LAN8814_POWER_MGMT_PGAPD_A)
+
+#define LAN8814_POWER_MGMT_VAL2 LAN8814_POWER_MGMT_C_D
+
+#define LAN8814_POWER_MGMT_VAL3 (LAN8814_POWER_MGMT_C_D | \
+ LAN8814_POWER_MGMT_DLLPD_B | \
+ LAN8814_POWER_MGMT_ADCPD_B | \
+ LAN8814_POWER_MGMT_PGAPD_A)
+
+#define LAN8814_POWER_MGMT_VAL4 (LAN8814_POWER_MGMT_B_C_D | \
+ LAN8814_POWER_MGMT_ADCPD_A | \
+ LAN8814_POWER_MGMT_PGAPD_A)
+
+#define LAN8814_POWER_MGMT_VAL5 LAN8814_POWER_MGMT_B_C_D
+
+static int lan8842_erratas(struct phy_device *phydev)
+{
+ int ret;
+
+ /* Magjack center tapped ports */
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_3_ANEG_MDI,
+ LAN8814_POWER_MGMT_VAL1);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_4_ANEG_MDIX,
+ LAN8814_POWER_MGMT_VAL1);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_5_10BT_MDI,
+ LAN8814_POWER_MGMT_VAL1);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_6_10BT_MDIX,
+ LAN8814_POWER_MGMT_VAL1);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_7_100BT_TRAIN,
+ LAN8814_POWER_MGMT_VAL2);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_8_100BT_MDI,
+ LAN8814_POWER_MGMT_VAL3);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_9_100BT_EEE_MDI_TX,
+ LAN8814_POWER_MGMT_VAL3);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_10_100BT_EEE_MDI_RX,
+ LAN8814_POWER_MGMT_VAL4);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_11_100BT_MDIX,
+ LAN8814_POWER_MGMT_VAL5);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_12_100BT_EEE_MDIX_TX,
+ LAN8814_POWER_MGMT_VAL5);
+ if (ret < 0)
+ return ret;
+
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_13_100BT_EEE_MDIX_RX,
+ LAN8814_POWER_MGMT_VAL4);
+ if (ret < 0)
+ return ret;
+
+ return lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_14_100BTX_EEE_TX_RX,
+ LAN8814_POWER_MGMT_VAL4);
+}
+
static int lan8842_config_init(struct phy_device *phydev)
{
int ret;
@@ -5896,6 +6040,11 @@ static int lan8842_config_init(struct phy_device *phydev)
if (ret < 0)
return ret;
+ /* Apply the erratas for this device */
+ ret = lan8842_erratas(phydev);
+ if (ret < 0)
+ return ret;
+
/* Even if the GPIOs are set to control the LEDs the behaviour of the
* LEDs is wrong, they are not blinking when there is traffic.
* To fix this it is required to set extended LED mode
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net v3 2/2] net: phy: micrel: lan8842 errata
2025-10-30 7:49 [PATCH net v3 0/2] net: phy: micrel: lan8842 erratas Horatiu Vultur
2025-10-30 7:49 ` [PATCH net v3 1/2] net: phy: micrel: lan8842 errata Horatiu Vultur
@ 2025-10-30 7:49 ` Horatiu Vultur
1 sibling, 0 replies; 5+ messages in thread
From: Horatiu Vultur @ 2025-10-30 7:49 UTC (permalink / raw)
To: andrew, hkallweit1, linux, davem, edumazet, kuba, pabeni
Cc: netdev, linux-kernel, Horatiu Vultur
Add errata for lan8842. The errata document can be found here [1].
This is fixing the module 7 ("1000BASE-T PMA EEE TX wake PHY-side shorted
center taps")
[1] https://ww1.microchip.com/downloads/aemDocuments/documents/UNG/ProductDocuments/Errata/LAN8842-Errata-DS80001172.pdf
Fixes: 5a774b64cd6a ("net: phy: micrel: Add support for lan8842")
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
drivers/net/phy/micrel.c | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 504c715b7db90..b0f5941fddb0a 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -2835,6 +2835,13 @@ static int ksz886x_cable_test_get_status(struct phy_device *phydev,
*/
#define LAN8814_PAGE_PCS_DIGITAL 2
+/**
+ * LAN8814_PAGE_EEE - Selects Extended Page 3.
+ *
+ * This page contains EEE registers
+ */
+#define LAN8814_PAGE_EEE 3
+
/**
* LAN8814_PAGE_COMMON_REGS - Selects Extended Page 4.
*
@@ -5952,6 +5959,9 @@ static int lan8842_probe(struct phy_device *phydev)
#define LAN8814_POWER_MGMT_VAL5 LAN8814_POWER_MGMT_B_C_D
+#define LAN8814_EEE_WAKE_TX_TIMER 0x0e
+#define LAN8814_EEE_WAKE_TX_TIMER_MAX_VAL 0x1f
+
static int lan8842_erratas(struct phy_device *phydev)
{
int ret;
@@ -6023,9 +6033,16 @@ static int lan8842_erratas(struct phy_device *phydev)
if (ret < 0)
return ret;
- return lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
- LAN8814_POWER_MGMT_MODE_14_100BTX_EEE_TX_RX,
- LAN8814_POWER_MGMT_VAL4);
+ ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
+ LAN8814_POWER_MGMT_MODE_14_100BTX_EEE_TX_RX,
+ LAN8814_POWER_MGMT_VAL4);
+ if (ret < 0)
+ return ret;
+
+ /* Refresh time Waketx timer */
+ return lanphy_write_page_reg(phydev, LAN8814_PAGE_EEE,
+ LAN8814_EEE_WAKE_TX_TIMER,
+ LAN8814_EEE_WAKE_TX_TIMER_MAX_VAL);
}
static int lan8842_config_init(struct phy_device *phydev)
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net v3 1/2] net: phy: micrel: lan8842 errata
2025-10-30 7:49 ` [PATCH net v3 1/2] net: phy: micrel: lan8842 errata Horatiu Vultur
@ 2025-10-30 10:33 ` Russell King (Oracle)
2025-10-31 7:54 ` Horatiu Vultur
0 siblings, 1 reply; 5+ messages in thread
From: Russell King (Oracle) @ 2025-10-30 10:33 UTC (permalink / raw)
To: Horatiu Vultur
Cc: andrew, hkallweit1, davem, edumazet, kuba, pabeni, netdev,
linux-kernel
On Thu, Oct 30, 2025 at 08:49:40AM +0100, Horatiu Vultur wrote:
> +static int lan8842_erratas(struct phy_device *phydev)
> +{
> + int ret;
> +
> + /* Magjack center tapped ports */
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_3_ANEG_MDI,
> + LAN8814_POWER_MGMT_VAL1);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_4_ANEG_MDIX,
> + LAN8814_POWER_MGMT_VAL1);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_5_10BT_MDI,
> + LAN8814_POWER_MGMT_VAL1);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_6_10BT_MDIX,
> + LAN8814_POWER_MGMT_VAL1);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_7_100BT_TRAIN,
> + LAN8814_POWER_MGMT_VAL2);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_8_100BT_MDI,
> + LAN8814_POWER_MGMT_VAL3);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_9_100BT_EEE_MDI_TX,
> + LAN8814_POWER_MGMT_VAL3);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_10_100BT_EEE_MDI_RX,
> + LAN8814_POWER_MGMT_VAL4);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_11_100BT_MDIX,
> + LAN8814_POWER_MGMT_VAL5);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_12_100BT_EEE_MDIX_TX,
> + LAN8814_POWER_MGMT_VAL5);
> + if (ret < 0)
> + return ret;
> +
> + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_13_100BT_EEE_MDIX_RX,
> + LAN8814_POWER_MGMT_VAL4);
> + if (ret < 0)
> + return ret;
> +
> + return lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> + LAN8814_POWER_MGMT_MODE_14_100BTX_EEE_TX_RX,
> + LAN8814_POWER_MGMT_VAL4);
This is a lot of repetition.
Is it worth storing the errata register information in a struct, and
then using a loop to write these registers. Something like:
struct lanphy_reg_data {
int page;
u16 addr;
u16 val;
;
static const struct lanphy_reg_data short_centre_tap_errata[] = {
...
};
static int lanphy_write_reg_data(struct phy_device *phydev,
const struct lanphy_reg_data *data,
size_t num)
{
int ret = 0;
while (num--) {
ret = lanphy_write_page_reg(phydev, data->page, data->addr,
data->val);
if (ret)
break;
}
return 0;
}
static int lan8842_erratas(struct phy_device *phydev)
{
int ret;
ret = lanphy_write_reg_data(phydev, short_centre_tap_errata,
ARRAY_SIZE(short_centre_tap_errata));
if (ret)
return ret;
return lanphy_write_reg_data(phydev, blah_errata,
ARRAY_SIZE(blah_errata));
}
?
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net v3 1/2] net: phy: micrel: lan8842 errata
2025-10-30 10:33 ` Russell King (Oracle)
@ 2025-10-31 7:54 ` Horatiu Vultur
0 siblings, 0 replies; 5+ messages in thread
From: Horatiu Vultur @ 2025-10-31 7:54 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: andrew, hkallweit1, davem, edumazet, kuba, pabeni, netdev,
linux-kernel
The 10/30/2025 10:33, Russell King (Oracle) wrote:
Hi Russell,
>
> On Thu, Oct 30, 2025 at 08:49:40AM +0100, Horatiu Vultur wrote:
> > +static int lan8842_erratas(struct phy_device *phydev)
> > +{
> > + int ret;
> > +
> > + /* Magjack center tapped ports */
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_3_ANEG_MDI,
> > + LAN8814_POWER_MGMT_VAL1);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_4_ANEG_MDIX,
> > + LAN8814_POWER_MGMT_VAL1);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_5_10BT_MDI,
> > + LAN8814_POWER_MGMT_VAL1);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_6_10BT_MDIX,
> > + LAN8814_POWER_MGMT_VAL1);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_7_100BT_TRAIN,
> > + LAN8814_POWER_MGMT_VAL2);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_8_100BT_MDI,
> > + LAN8814_POWER_MGMT_VAL3);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_9_100BT_EEE_MDI_TX,
> > + LAN8814_POWER_MGMT_VAL3);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_10_100BT_EEE_MDI_RX,
> > + LAN8814_POWER_MGMT_VAL4);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_11_100BT_MDIX,
> > + LAN8814_POWER_MGMT_VAL5);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_12_100BT_EEE_MDIX_TX,
> > + LAN8814_POWER_MGMT_VAL5);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_13_100BT_EEE_MDIX_RX,
> > + LAN8814_POWER_MGMT_VAL4);
> > + if (ret < 0)
> > + return ret;
> > +
> > + return lanphy_write_page_reg(phydev, LAN8814_PAGE_POWER_REGS,
> > + LAN8814_POWER_MGMT_MODE_14_100BTX_EEE_TX_RX,
> > + LAN8814_POWER_MGMT_VAL4);
>
> This is a lot of repetition.
>
> Is it worth storing the errata register information in a struct, and
> then using a loop to write these registers. Something like:
>
> struct lanphy_reg_data {
> int page;
> u16 addr;
> u16 val;
> ;
>
> static const struct lanphy_reg_data short_centre_tap_errata[] = {
> ...
> };
>
> static int lanphy_write_reg_data(struct phy_device *phydev,
> const struct lanphy_reg_data *data,
> size_t num)
> {
> int ret = 0;
>
> while (num--) {
> ret = lanphy_write_page_reg(phydev, data->page, data->addr,
> data->val);
> if (ret)
> break;
> }
>
> return 0;
> }
>
> static int lan8842_erratas(struct phy_device *phydev)
> {
> int ret;
>
> ret = lanphy_write_reg_data(phydev, short_centre_tap_errata,
> ARRAY_SIZE(short_centre_tap_errata));
> if (ret)
> return ret;
>
> return lanphy_write_reg_data(phydev, blah_errata,
> ARRAY_SIZE(blah_errata));
> }
>
> ?
That is a really good suggestion. I will do that in the next version.
>
> --
> RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
--
/Horatiu
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-10-31 7:55 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-30 7:49 [PATCH net v3 0/2] net: phy: micrel: lan8842 erratas Horatiu Vultur
2025-10-30 7:49 ` [PATCH net v3 1/2] net: phy: micrel: lan8842 errata Horatiu Vultur
2025-10-30 10:33 ` Russell King (Oracle)
2025-10-31 7:54 ` Horatiu Vultur
2025-10-30 7:49 ` [PATCH net v3 2/2] " Horatiu Vultur
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).