| From 3b550d9fb24820dcc0d5520eba015efb98a4a32a Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 10 Jan 2024 12:37:30 +0100 |
| Subject: net: micrel: Fix PTP frame parsing for lan8841 |
| |
| From: Horatiu Vultur <horatiu.vultur@microchip.com> |
| |
| [ Upstream commit acd66c2126eb9b5da2d89ae07dbcd73b909c2111 ] |
| |
| The HW has the capability to check each frame if it is a PTP frame, |
| which domain it is, which ptp frame type it is, different ip address in |
| the frame. And if one of these checks fail then the frame is not |
| timestamp. Most of these checks were disabled except checking the field |
| minorVersionPTP inside the PTP header. Meaning that once a partner sends |
| a frame compliant to 8021AS which has minorVersionPTP set to 1, then the |
| frame was not timestamp because the HW expected by default a value of 0 |
| in minorVersionPTP. |
| Fix this issue by removing this check so the userspace can decide on this. |
| |
| Fixes: cafc3662ee3f ("net: micrel: Add PHC support for lan8841") |
| Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com> |
| Reviewed-by: Divya Koppera <divya.koppera@microchip.com> |
| Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/phy/micrel.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c |
| index 927d3d54658e..a345d02a9edf 100644 |
| --- a/drivers/net/phy/micrel.c |
| +++ b/drivers/net/phy/micrel.c |
| @@ -3313,8 +3313,10 @@ static int lan8814_probe(struct phy_device *phydev) |
| #define LAN8841_ADC_CHANNEL_MASK 198 |
| #define LAN8841_PTP_RX_PARSE_L2_ADDR_EN 370 |
| #define LAN8841_PTP_RX_PARSE_IP_ADDR_EN 371 |
| +#define LAN8841_PTP_RX_VERSION 374 |
| #define LAN8841_PTP_TX_PARSE_L2_ADDR_EN 434 |
| #define LAN8841_PTP_TX_PARSE_IP_ADDR_EN 435 |
| +#define LAN8841_PTP_TX_VERSION 438 |
| #define LAN8841_PTP_CMD_CTL 256 |
| #define LAN8841_PTP_CMD_CTL_PTP_ENABLE BIT(2) |
| #define LAN8841_PTP_CMD_CTL_PTP_DISABLE BIT(1) |
| @@ -3358,6 +3360,12 @@ static int lan8841_config_init(struct phy_device *phydev) |
| phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG, |
| LAN8841_PTP_RX_PARSE_IP_ADDR_EN, 0); |
| |
| + /* Disable checking for minorVersionPTP field */ |
| + phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG, |
| + LAN8841_PTP_RX_VERSION, 0xff00); |
| + phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG, |
| + LAN8841_PTP_TX_VERSION, 0xff00); |
| + |
| /* 100BT Clause 40 improvenent errata */ |
| phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG, |
| LAN8841_ANALOG_CONTROL_1, |
| -- |
| 2.43.0 |
| |