Message ID | 20240118085916.1204354-2-horatiu.vultur@microchip.com (mailing list archive) |
---|---|
State | Deferred |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: micrel: Fixes for PHC for lan8814 | expand |
On Thu, Jan 18, 2024 at 09:59:15AM +0100, Horatiu Vultur wrote: > 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. This is exactly the same issue as on lan8841. > Fix this issue by removing this check so the userspace can decide on this. > > Fixes: ece19502834d ("net: phy: micrel: 1588 support for LAN8814 phy") > Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com> > Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> > Reviewed-by: Divya Koppera <divya.koppera@microchip.com> > --- > drivers/net/phy/micrel.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c > index bf4053431dcb3..43520ac0f4e00 100644 > --- a/drivers/net/phy/micrel.c > +++ b/drivers/net/phy/micrel.c > @@ -120,6 +120,11 @@ > */ > #define LAN8814_1PPM_FORMAT 17179 > > +#define PTP_RX_VERSION 0x0248 > +#define PTP_TX_VERSION 0x0288 > +#define PTP_MAX_VERSION(x) (((x) & GENMASK(7, 0)) << 8) > +#define PTP_MIN_VERSION(x) ((x) & GENMASK(7, 0)) FWIIW, these macros feel like open-coded versions of FIELD_PREP to me. > + > #define PTP_RX_MOD 0x024F > #define PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_ BIT(3) > #define PTP_RX_TIMESTAMP_EN 0x024D > @@ -3150,6 +3155,12 @@ static void lan8814_ptp_init(struct phy_device *phydev) > lanphy_write_page_reg(phydev, 5, PTP_TX_PARSE_IP_ADDR_EN, 0); > lanphy_write_page_reg(phydev, 5, PTP_RX_PARSE_IP_ADDR_EN, 0); > > + /* Disable checking for minorVersionPTP field */ > + lanphy_write_page_reg(phydev, 5, PTP_RX_VERSION, > + PTP_MAX_VERSION(0xff) | PTP_MIN_VERSION(0x0)); > + lanphy_write_page_reg(phydev, 5, PTP_TX_VERSION, > + PTP_MAX_VERSION(0xff) | PTP_MIN_VERSION(0x0)); > + > skb_queue_head_init(&ptp_priv->tx_queue); > skb_queue_head_init(&ptp_priv->rx_queue); > INIT_LIST_HEAD(&ptp_priv->rx_ts_list); > -- > 2.34.1 >
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index bf4053431dcb3..43520ac0f4e00 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -120,6 +120,11 @@ */ #define LAN8814_1PPM_FORMAT 17179 +#define PTP_RX_VERSION 0x0248 +#define PTP_TX_VERSION 0x0288 +#define PTP_MAX_VERSION(x) (((x) & GENMASK(7, 0)) << 8) +#define PTP_MIN_VERSION(x) ((x) & GENMASK(7, 0)) + #define PTP_RX_MOD 0x024F #define PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_ BIT(3) #define PTP_RX_TIMESTAMP_EN 0x024D @@ -3150,6 +3155,12 @@ static void lan8814_ptp_init(struct phy_device *phydev) lanphy_write_page_reg(phydev, 5, PTP_TX_PARSE_IP_ADDR_EN, 0); lanphy_write_page_reg(phydev, 5, PTP_RX_PARSE_IP_ADDR_EN, 0); + /* Disable checking for minorVersionPTP field */ + lanphy_write_page_reg(phydev, 5, PTP_RX_VERSION, + PTP_MAX_VERSION(0xff) | PTP_MIN_VERSION(0x0)); + lanphy_write_page_reg(phydev, 5, PTP_TX_VERSION, + PTP_MAX_VERSION(0xff) | PTP_MIN_VERSION(0x0)); + skb_queue_head_init(&ptp_priv->tx_queue); skb_queue_head_init(&ptp_priv->rx_queue); INIT_LIST_HEAD(&ptp_priv->rx_ts_list);