2017-06-27 13:59:10

by Ivan Khoronzhuk

[permalink] [raw]
Subject: [PATCH net-next 0/3] fix sw timestamping for non PTP packets

This series contains several corrections connected with timestamping
for cpsw and netcp drivers based on same cpts module.

Based on net/next

Ivan Khoronzhuk (3):
net: ethernet: ti: cpsw: move skb timestamp to packet_submit
net: ethernet: ti: cpsw: fix sw timestamping for non PTP packets
net: ethernet: ti: netcp_ethss: use cpts to check if packet needs
timestamping

drivers/net/ethernet/ti/cpsw.c | 6 +++---
drivers/net/ethernet/ti/cpts.h | 16 ++++++++++++++++
drivers/net/ethernet/ti/netcp_ethss.c | 18 +-----------------
3 files changed, 20 insertions(+), 20 deletions(-)

--
2.7.4


2017-06-27 13:59:32

by Ivan Khoronzhuk

[permalink] [raw]
Subject: [PATCH net-next 2/3] net: ethernet: ti: cpsw: fix sw timestamping for non PTP packets

The cpts can timestmap only ptp packets at this moment, so driver
cannot mark every packet as though it's going to be timestamped,
only because h/w timestamping for given skb is enabled with
SKBTX_HW_TSTAMP. It doesn't allow to use sw timestamping, as result
outgoing packet is not timestamped at all if it's not PTP and h/w
timestamping is enabled. So, fix it by setting SKBTX_IN_PROGRESS
only for PTP packets.

Signed-off-by: Ivan Khoronzhuk <[email protected]>
---
drivers/net/ethernet/ti/cpsw.c | 3 ++-
drivers/net/ethernet/ti/cpts.h | 16 ++++++++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 422994e..1850e34 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -1598,6 +1598,7 @@ static netdev_tx_t cpsw_ndo_start_xmit(struct sk_buff *skb,
{
struct cpsw_priv *priv = netdev_priv(ndev);
struct cpsw_common *cpsw = priv->cpsw;
+ struct cpts *cpts = cpsw->cpts;
struct netdev_queue *txq;
struct cpdma_chan *txch;
int ret, q_idx;
@@ -1609,7 +1610,7 @@ static netdev_tx_t cpsw_ndo_start_xmit(struct sk_buff *skb,
}

if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP &&
- cpts_is_tx_enabled(cpsw->cpts))
+ cpts_is_tx_enabled(cpts) && cpts_can_timestamp(cpts, skb))
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;

q_idx = skb_get_queue_mapping(skb);
diff --git a/drivers/net/ethernet/ti/cpts.h b/drivers/net/ethernet/ti/cpts.h
index c96eca2..01ea82b 100644
--- a/drivers/net/ethernet/ti/cpts.h
+++ b/drivers/net/ethernet/ti/cpts.h
@@ -30,6 +30,7 @@
#include <linux/of.h>
#include <linux/ptp_clock_kernel.h>
#include <linux/skbuff.h>
+#include <linux/ptp_classify.h>
#include <linux/timecounter.h>

struct cpsw_cpts {
@@ -155,6 +156,16 @@ static inline bool cpts_is_tx_enabled(struct cpts *cpts)
return !!cpts->tx_enable;
}

+static inline bool cpts_can_timestamp(struct cpts *cpts, struct sk_buff *skb)
+{
+ unsigned int class = ptp_classify_raw(skb);
+
+ if (class == PTP_CLASS_NONE)
+ return false;
+
+ return true;
+}
+
#else
struct cpts;

@@ -203,6 +214,11 @@ static inline bool cpts_is_tx_enabled(struct cpts *cpts)
{
return false;
}
+
+static inline bool cpts_can_timestamp(struct cpts *cpts, struct sk_buff *skb)
+{
+ return false;
+}
#endif


--
2.7.4

2017-06-27 13:59:20

by Ivan Khoronzhuk

[permalink] [raw]
Subject: [PATCH net-next 3/3] net: ethernet: ti: netcp_ethss: use cpts to check if packet needs timestamping

There is cpts function to check if packet can be timstamped with cpts.
Seems that ptp_classify_raw cover all cases listed with "case".

Signed-off-by: Ivan Khoronzhuk <[email protected]>
---
drivers/net/ethernet/ti/netcp_ethss.c | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)

diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c
index 0847a8f..28cb38a 100644
--- a/drivers/net/ethernet/ti/netcp_ethss.c
+++ b/drivers/net/ethernet/ti/netcp_ethss.c
@@ -2503,24 +2503,8 @@ static bool gbe_need_txtstamp(struct gbe_intf *gbe_intf,
const struct netcp_packet *p_info)
{
struct sk_buff *skb = p_info->skb;
- unsigned int class = ptp_classify_raw(skb);

- if (class == PTP_CLASS_NONE)
- return false;
-
- switch (class) {
- case PTP_CLASS_V1_IPV4:
- case PTP_CLASS_V1_IPV6:
- case PTP_CLASS_V2_IPV4:
- case PTP_CLASS_V2_IPV6:
- case PTP_CLASS_V2_L2:
- case (PTP_CLASS_V2_VLAN | PTP_CLASS_L2):
- case (PTP_CLASS_V2_VLAN | PTP_CLASS_IPV4):
- case (PTP_CLASS_V2_VLAN | PTP_CLASS_IPV6):
- return true;
- }
-
- return false;
+ return cpts_can_timestamp(gbe_intf->gbe_dev->cpts, skb);
}

static int gbe_txtstamp_mark_pkt(struct gbe_intf *gbe_intf,
--
2.7.4

2017-06-27 14:00:10

by Ivan Khoronzhuk

[permalink] [raw]
Subject: [PATCH net-next 1/3] net: ethernet: ti: cpsw: move skb timestamp to packet_submit

Move sw timestamp function close to channel submit function.

Signed-off-by: Ivan Khoronzhuk <[email protected]>
---
drivers/net/ethernet/ti/cpsw.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index b7a0f5e..422994e 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -1236,6 +1236,7 @@ static inline int cpsw_tx_packet_submit(struct cpsw_priv *priv,
{
struct cpsw_common *cpsw = priv->cpsw;

+ skb_tx_timestamp(skb);
return cpdma_chan_submit(txch, skb, skb->data, skb->len,
priv->emac_port + cpsw->data.dual_emac);
}
@@ -1611,8 +1612,6 @@ static netdev_tx_t cpsw_ndo_start_xmit(struct sk_buff *skb,
cpts_is_tx_enabled(cpsw->cpts))
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;

- skb_tx_timestamp(skb);
-
q_idx = skb_get_queue_mapping(skb);
if (q_idx >= cpsw->tx_ch_num)
q_idx = q_idx % cpsw->tx_ch_num;
--
2.7.4

2017-06-28 21:26:11

by Grygorii Strashko

[permalink] [raw]
Subject: Re: [PATCH net-next 0/3] fix sw timestamping for non PTP packets



On 06/27/2017 08:58 AM, Ivan Khoronzhuk wrote:
> This series contains several corrections connected with timestamping
> for cpsw and netcp drivers based on same cpts module.
>
> Based on net/next

Reviewed-by: Grygorii Strashko <[email protected]>

>
> Ivan Khoronzhuk (3):
> net: ethernet: ti: cpsw: move skb timestamp to packet_submit
> net: ethernet: ti: cpsw: fix sw timestamping for non PTP packets
> net: ethernet: ti: netcp_ethss: use cpts to check if packet needs
> timestamping
>
> drivers/net/ethernet/ti/cpsw.c | 6 +++---
> drivers/net/ethernet/ti/cpts.h | 16 ++++++++++++++++
> drivers/net/ethernet/ti/netcp_ethss.c | 18 +-----------------
> 3 files changed, 20 insertions(+), 20 deletions(-)
>

--
regards,
-grygorii

2017-06-29 16:29:33

by David Miller

[permalink] [raw]
Subject: Re: [PATCH net-next 0/3] fix sw timestamping for non PTP packets

From: Ivan Khoronzhuk <[email protected]>
Date: Tue, 27 Jun 2017 16:58:50 +0300

> This series contains several corrections connected with timestamping
> for cpsw and netcp drivers based on same cpts module.
>
> Based on net/next

Series applied.