Skip to content

Commit 840c9d1

Browse files
chintanv133kuba-moo
authored andcommitted
net: ethernet: ti: am65-cpsw-nuss: Fix rx_filter value for PTP support
The "rx_filter" member of "hwtstamp_config" structure is an enum field and does not support bitwise OR combination of multiple filter values. It causes error while linuxptp application tries to match rx filter version. Fix this by storing the requested filter type in a new port field. Fixes: 97248ad ("net: ti: am65-cpsw: Update hw timestamping filter for PTPv1 RX packets") Signed-off-by: Chintan Vankar <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 87c2302 commit 840c9d1

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

drivers/net/ethernet/ti/am65-cpsw-nuss.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,7 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow,
13511351
ndev_priv = netdev_priv(ndev);
13521352
am65_cpsw_nuss_set_offload_fwd_mark(skb, ndev_priv->offload_fwd_mark);
13531353
skb_put(skb, pkt_len);
1354-
if (port->rx_ts_enabled)
1354+
if (port->rx_ts_filter)
13551355
am65_cpts_rx_timestamp(common->cpts, skb);
13561356
skb_mark_for_recycle(skb);
13571357
skb->protocol = eth_type_trans(skb, ndev);
@@ -1811,11 +1811,14 @@ static int am65_cpsw_nuss_hwtstamp_set(struct net_device *ndev,
18111811

18121812
switch (cfg->rx_filter) {
18131813
case HWTSTAMP_FILTER_NONE:
1814-
port->rx_ts_enabled = false;
1814+
port->rx_ts_filter = HWTSTAMP_FILTER_NONE;
18151815
break;
18161816
case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
18171817
case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
18181818
case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
1819+
port->rx_ts_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
1820+
cfg->rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
1821+
break;
18191822
case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
18201823
case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
18211824
case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
@@ -1825,8 +1828,8 @@ static int am65_cpsw_nuss_hwtstamp_set(struct net_device *ndev,
18251828
case HWTSTAMP_FILTER_PTP_V2_EVENT:
18261829
case HWTSTAMP_FILTER_PTP_V2_SYNC:
18271830
case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
1828-
port->rx_ts_enabled = true;
1829-
cfg->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT | HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
1831+
port->rx_ts_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
1832+
cfg->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
18301833
break;
18311834
case HWTSTAMP_FILTER_ALL:
18321835
case HWTSTAMP_FILTER_SOME:
@@ -1863,7 +1866,7 @@ static int am65_cpsw_nuss_hwtstamp_set(struct net_device *ndev,
18631866
ts_ctrl |= AM65_CPSW_TS_TX_ANX_ALL_EN |
18641867
AM65_CPSW_PN_TS_CTL_TX_VLAN_LT1_EN;
18651868

1866-
if (port->rx_ts_enabled)
1869+
if (port->rx_ts_filter)
18671870
ts_ctrl |= AM65_CPSW_TS_RX_ANX_ALL_EN |
18681871
AM65_CPSW_PN_TS_CTL_RX_VLAN_LT1_EN;
18691872

@@ -1888,8 +1891,7 @@ static int am65_cpsw_nuss_hwtstamp_get(struct net_device *ndev,
18881891
cfg->flags = 0;
18891892
cfg->tx_type = port->tx_ts_enabled ?
18901893
HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
1891-
cfg->rx_filter = port->rx_ts_enabled ? HWTSTAMP_FILTER_PTP_V2_EVENT |
1892-
HWTSTAMP_FILTER_PTP_V1_L4_EVENT : HWTSTAMP_FILTER_NONE;
1894+
cfg->rx_filter = port->rx_ts_filter;
18931895

18941896
return 0;
18951897
}

drivers/net/ethernet/ti/am65-cpsw-nuss.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ struct am65_cpsw_port {
5252
bool disabled;
5353
struct am65_cpsw_slave_data slave;
5454
bool tx_ts_enabled;
55-
bool rx_ts_enabled;
55+
enum hwtstamp_rx_filters rx_ts_filter;
5656
struct am65_cpsw_qos qos;
5757
struct devlink_port devlink_port;
5858
struct bpf_prog *xdp_prog;

0 commit comments

Comments
 (0)