stmmac: fix PTP type ethtool stats
authorGiuseppe CAVALLARO <peppe.cavallaro@st.com>
Mon, 14 Nov 2016 08:27:30 +0000 (09:27 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Nov 2016 00:56:17 +0000 (19:56 -0500)
This patch fixes the ethtool stats for PTP frames; previous
version does not take care about some message types: i.e.
announce, management and signaling. It also provided a
broken statistic in case of "No PTP message received".

Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Acked-by: Rayagond Kokatanur <rayagond@vayavyalabs.com>
Acked-by: Alexandre TORGUE <alexandre.torgue@st.com>
Acked-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/common.h
drivers/net/ethernet/stmicro/stmmac/descs.h
drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
drivers/net/ethernet/stmicro/stmmac/enh_desc.c
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c

index 6fc214ce2958d0ee7d1f38b7e3225000af092454..6d2de4e01f6d00404bde51f3816ba2271adff865 100644 (file)
@@ -120,14 +120,17 @@ struct stmmac_extra_stats {
        unsigned long ip_csum_bypassed;
        unsigned long ipv4_pkt_rcvd;
        unsigned long ipv6_pkt_rcvd;
-       unsigned long rx_msg_type_ext_no_ptp;
-       unsigned long rx_msg_type_sync;
-       unsigned long rx_msg_type_follow_up;
-       unsigned long rx_msg_type_delay_req;
-       unsigned long rx_msg_type_delay_resp;
-       unsigned long rx_msg_type_pdelay_req;
-       unsigned long rx_msg_type_pdelay_resp;
-       unsigned long rx_msg_type_pdelay_follow_up;
+       unsigned long no_ptp_rx_msg_type_ext;
+       unsigned long ptp_rx_msg_type_sync;
+       unsigned long ptp_rx_msg_type_follow_up;
+       unsigned long ptp_rx_msg_type_delay_req;
+       unsigned long ptp_rx_msg_type_delay_resp;
+       unsigned long ptp_rx_msg_type_pdelay_req;
+       unsigned long ptp_rx_msg_type_pdelay_resp;
+       unsigned long ptp_rx_msg_type_pdelay_follow_up;
+       unsigned long ptp_rx_msg_type_announce;
+       unsigned long ptp_rx_msg_type_management;
+       unsigned long ptp_rx_msg_pkt_reserved_type;
        unsigned long ptp_frame_type;
        unsigned long ptp_ver;
        unsigned long timestamp_dropped;
index 2e4c171a2b4146f6276855ab14a3ba83e85680ad..e3c86d42210953c5f4f985144a3c6eddfe6f4c73 100644 (file)
 #define        ERDES4_L3_L4_FILT_NO_MATCH_MASK GENMASK(27, 26)
 
 /* Extended RDES4 message type definitions */
-#define RDES_EXT_NO_PTP                        0
-#define RDES_EXT_SYNC                  1
-#define RDES_EXT_FOLLOW_UP             2
-#define RDES_EXT_DELAY_REQ             3
-#define RDES_EXT_DELAY_RESP            4
-#define RDES_EXT_PDELAY_REQ            5
-#define RDES_EXT_PDELAY_RESP           6
-#define RDES_EXT_PDELAY_FOLLOW_UP      7
+#define RDES_EXT_NO_PTP                        0x0
+#define RDES_EXT_SYNC                  0x1
+#define RDES_EXT_FOLLOW_UP             0x2
+#define RDES_EXT_DELAY_REQ             0x3
+#define RDES_EXT_DELAY_RESP            0x4
+#define RDES_EXT_PDELAY_REQ            0x5
+#define RDES_EXT_PDELAY_RESP           0x6
+#define RDES_EXT_PDELAY_FOLLOW_UP      0x7
+#define RDES_PTP_ANNOUNCE              0x8
+#define RDES_PTP_MANAGEMENT            0x9
+#define RDES_PTP_SIGNALING             0xa
+#define RDES_PTP_PKT_RESERVED_TYPE     0xf
 
 /* Basic descriptor structure for normal and alternate descriptors */
 struct dma_desc {
index 2ef2f0c03e767532b631f620dfd78d35f0206985..a601f8d43b75d8a97cc007ebaad4eed9ebd66ae3 100644 (file)
@@ -123,22 +123,29 @@ static int dwmac4_wrback_get_rx_status(void *data, struct stmmac_extra_stats *x,
                x->ipv4_pkt_rcvd++;
        if (rdes1 & RDES1_IPV6_HEADER)
                x->ipv6_pkt_rcvd++;
-       if (message_type == RDES_EXT_SYNC)
-               x->rx_msg_type_sync++;
+
+       if (message_type == RDES_EXT_NO_PTP)
+               x->no_ptp_rx_msg_type_ext++;
+       else if (message_type == RDES_EXT_SYNC)
+               x->ptp_rx_msg_type_sync++;
        else if (message_type == RDES_EXT_FOLLOW_UP)
-               x->rx_msg_type_follow_up++;
+               x->ptp_rx_msg_type_follow_up++;
        else if (message_type == RDES_EXT_DELAY_REQ)
-               x->rx_msg_type_delay_req++;
+               x->ptp_rx_msg_type_delay_req++;
        else if (message_type == RDES_EXT_DELAY_RESP)
-               x->rx_msg_type_delay_resp++;
+               x->ptp_rx_msg_type_delay_resp++;
        else if (message_type == RDES_EXT_PDELAY_REQ)
-               x->rx_msg_type_pdelay_req++;
+               x->ptp_rx_msg_type_pdelay_req++;
        else if (message_type == RDES_EXT_PDELAY_RESP)
-               x->rx_msg_type_pdelay_resp++;
+               x->ptp_rx_msg_type_pdelay_resp++;
        else if (message_type == RDES_EXT_PDELAY_FOLLOW_UP)
-               x->rx_msg_type_pdelay_follow_up++;
-       else
-               x->rx_msg_type_ext_no_ptp++;
+               x->ptp_rx_msg_type_pdelay_follow_up++;
+       else if (message_type == RDES_PTP_ANNOUNCE)
+               x->ptp_rx_msg_type_announce++;
+       else if (message_type == RDES_PTP_MANAGEMENT)
+               x->ptp_rx_msg_type_management++;
+       else if (message_type == RDES_PTP_PKT_RESERVED_TYPE)
+               x->ptp_rx_msg_pkt_reserved_type++;
 
        if (rdes1 & RDES1_PTP_PACKET_TYPE)
                x->ptp_frame_type++;
index 38f19c99cf59e7382cc6a72d15deb2a50f1c4b96..e75549327c3451ad5aba452d20769fd31e403c2b 100644 (file)
@@ -150,22 +150,30 @@ static void enh_desc_get_ext_status(void *data, struct stmmac_extra_stats *x,
                        x->ipv4_pkt_rcvd++;
                if (rdes4 & ERDES4_IPV6_PKT_RCVD)
                        x->ipv6_pkt_rcvd++;
-               if (message_type == RDES_EXT_SYNC)
-                       x->rx_msg_type_sync++;
+
+               if (message_type == RDES_EXT_NO_PTP)
+                       x->no_ptp_rx_msg_type_ext++;
+               else if (message_type == RDES_EXT_SYNC)
+                       x->ptp_rx_msg_type_sync++;
                else if (message_type == RDES_EXT_FOLLOW_UP)
-                       x->rx_msg_type_follow_up++;
+                       x->ptp_rx_msg_type_follow_up++;
                else if (message_type == RDES_EXT_DELAY_REQ)
-                       x->rx_msg_type_delay_req++;
+                       x->ptp_rx_msg_type_delay_req++;
                else if (message_type == RDES_EXT_DELAY_RESP)
-                       x->rx_msg_type_delay_resp++;
+                       x->ptp_rx_msg_type_delay_resp++;
                else if (message_type == RDES_EXT_PDELAY_REQ)
-                       x->rx_msg_type_pdelay_req++;
+                       x->ptp_rx_msg_type_pdelay_req++;
                else if (message_type == RDES_EXT_PDELAY_RESP)
-                       x->rx_msg_type_pdelay_resp++;
+                       x->ptp_rx_msg_type_pdelay_resp++;
                else if (message_type == RDES_EXT_PDELAY_FOLLOW_UP)
-                       x->rx_msg_type_pdelay_follow_up++;
-               else
-                       x->rx_msg_type_ext_no_ptp++;
+                       x->ptp_rx_msg_type_pdelay_follow_up++;
+               else if (message_type == RDES_PTP_ANNOUNCE)
+                       x->ptp_rx_msg_type_announce++;
+               else if (message_type == RDES_PTP_MANAGEMENT)
+                       x->ptp_rx_msg_type_management++;
+               else if (message_type == RDES_PTP_PKT_RESERVED_TYPE)
+                       x->ptp_rx_msg_pkt_reserved_type++;
+
                if (rdes4 & ERDES4_PTP_FRAME_TYPE)
                        x->ptp_frame_type++;
                if (rdes4 & ERDES4_PTP_VER)
index 1e06173fc9d733d63c1e5ccbbc12c03506d0a44c..c5d0142adda2e00e958b0a851acc506769f8cdb5 100644 (file)
@@ -115,14 +115,17 @@ static const struct stmmac_stats stmmac_gstrings_stats[] = {
        STMMAC_STAT(ip_csum_bypassed),
        STMMAC_STAT(ipv4_pkt_rcvd),
        STMMAC_STAT(ipv6_pkt_rcvd),
-       STMMAC_STAT(rx_msg_type_ext_no_ptp),
-       STMMAC_STAT(rx_msg_type_sync),
-       STMMAC_STAT(rx_msg_type_follow_up),
-       STMMAC_STAT(rx_msg_type_delay_req),
-       STMMAC_STAT(rx_msg_type_delay_resp),
-       STMMAC_STAT(rx_msg_type_pdelay_req),
-       STMMAC_STAT(rx_msg_type_pdelay_resp),
-       STMMAC_STAT(rx_msg_type_pdelay_follow_up),
+       STMMAC_STAT(no_ptp_rx_msg_type_ext),
+       STMMAC_STAT(ptp_rx_msg_type_sync),
+       STMMAC_STAT(ptp_rx_msg_type_follow_up),
+       STMMAC_STAT(ptp_rx_msg_type_delay_req),
+       STMMAC_STAT(ptp_rx_msg_type_delay_resp),
+       STMMAC_STAT(ptp_rx_msg_type_pdelay_req),
+       STMMAC_STAT(ptp_rx_msg_type_pdelay_resp),
+       STMMAC_STAT(ptp_rx_msg_type_pdelay_follow_up),
+       STMMAC_STAT(ptp_rx_msg_type_announce),
+       STMMAC_STAT(ptp_rx_msg_type_management),
+       STMMAC_STAT(ptp_rx_msg_pkt_reserved_type),
        STMMAC_STAT(ptp_frame_type),
        STMMAC_STAT(ptp_ver),
        STMMAC_STAT(timestamp_dropped),