On Thu, 29 Oct 2020 21:09:10 +0200 Grygorii Strashko wrote:
> The TI CPTS does not natively support PTPv1, only PTPv2. But, as it
> happens, the CPTS can provide HW timestamp for PTPv1 Sync messages, because
> CPTS HW parser looks for PTP messageType id in PTP message octet 0 which
> value is 0 for PTPv1. As result, CPTS HW can detect Sync messages for PTPv1
> and PTPv2 (Sync messageType = 0 for both), but it fails for any other PTPv1
> messages (Delay_req/resp) and will return PTP messageType id 0 for them.
> 
> The commit e9523a5a32a1 ("net: ethernet: ti: cpsw: enable
> HWTSTAMP_FILTER_PTP_V1_L4_EVENT filter") added PTPv1 hw timestamping
> advertisement by mistake, only to make Linux Kernel "timestamping" utility
> work, and this causes issues with only PTPv1 compatible HW/SW - Sync HW
> timestamped, but Delay_req/resp are not.
> 
> Hence, fix it disabling PTPv1 hw timestamping advertisement, so only PTPv1
> compatible HW/SW can properly roll back to SW timestamping.
> 
> Fixes: e9523a5a32a1 ("net: ethernet: ti: cpsw: enable 
> HWTSTAMP_FILTER_PTP_V1_L4_EVENT filter")
> Signed-off-by: Grygorii Strashko <grygorii.stras...@ti.com>

CC: Richard

> diff --git a/drivers/net/ethernet/ti/cpsw_ethtool.c 
> b/drivers/net/ethernet/ti/cpsw_ethtool.c
> index 4d02c5135611..4619c3a950b0 100644
> --- a/drivers/net/ethernet/ti/cpsw_ethtool.c
> +++ b/drivers/net/ethernet/ti/cpsw_ethtool.c
> @@ -728,7 +728,6 @@ int cpsw_get_ts_info(struct net_device *ndev, struct 
> ethtool_ts_info *info)
>               (1 << HWTSTAMP_TX_ON);
>       info->rx_filters =
>               (1 << HWTSTAMP_FILTER_NONE) |
> -             (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
>               (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
>       return 0;
>  }
> diff --git a/drivers/net/ethernet/ti/cpsw_priv.c 
> b/drivers/net/ethernet/ti/cpsw_priv.c
> index 51cc29f39038..31c5e36ff706 100644
> --- a/drivers/net/ethernet/ti/cpsw_priv.c
> +++ b/drivers/net/ethernet/ti/cpsw_priv.c
> @@ -639,13 +639,10 @@ static int cpsw_hwtstamp_set(struct net_device *dev, 
> struct ifreq *ifr)
>               break;
>       case HWTSTAMP_FILTER_ALL:
>       case HWTSTAMP_FILTER_NTP_ALL:
> -             return -ERANGE;
>       case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
>       case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
>       case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
> -             priv->rx_ts_enabled = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
> -             cfg.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
> -             break;
> +             return -ERANGE;
>       case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
>       case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
>       case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:

Reply via email to