net/mvpp2: update Tx checksum
authorLiron Himi <lironh@marvell.com>
Wed, 27 Jan 2021 16:09:26 +0000 (18:09 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 29 Jan 2021 17:16:11 +0000 (18:16 +0100)
According to the dpdk spec, only 'ol_flags'
should be used for tx checksum generation

Signed-off-by: Liron Himi <lironh@marvell.com>
drivers/net/mvpp2/mrvl_ethdev.c

index 4d2b718..43dd4c4 100644 (file)
                          DEV_RX_OFFLOAD_CHECKSUM)
 
 /** Port Tx offloads capabilities */
-#define MRVL_TX_OFFLOADS (DEV_TX_OFFLOAD_IPV4_CKSUM | \
-                         DEV_TX_OFFLOAD_UDP_CKSUM | \
-                         DEV_TX_OFFLOAD_TCP_CKSUM | \
+#define MRVL_TX_OFFLOAD_CHECKSUM (DEV_TX_OFFLOAD_IPV4_CKSUM | \
+                                 DEV_TX_OFFLOAD_UDP_CKSUM  | \
+                                 DEV_TX_OFFLOAD_TCP_CKSUM)
+#define MRVL_TX_OFFLOADS (MRVL_TX_OFFLOAD_CHECKSUM | \
                          DEV_TX_OFFLOAD_MULTI_SEGS)
 
+#define MRVL_TX_PKT_OFFLOADS (PKT_TX_IP_CKSUM | \
+                             PKT_TX_TCP_CKSUM | \
+                             PKT_TX_UDP_CKSUM)
+
 static const char * const valid_args[] = {
        MRVL_IFACE_NAME_ARG,
        MRVL_CFG_ARG,
@@ -2481,8 +2486,6 @@ mrvl_rx_pkt_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
  *
  * @param ol_flags
  *   Offload flags.
- * @param packet_type
- *   Packet type bitfield.
  * @param l3_type
  *   Pointer to the pp2_ouq_l3_type structure.
  * @param l4_type
@@ -2491,12 +2494,9 @@ mrvl_rx_pkt_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
  *   Will be set to 1 in case l3 checksum is computed.
  * @param l4_cksum
  *   Will be set to 1 in case l4 checksum is computed.
- *
- * @return
- *   0 on success, negative error value otherwise.
  */
-static inline int
-mrvl_prepare_proto_info(uint64_t ol_flags, uint32_t packet_type,
+static inline void
+mrvl_prepare_proto_info(uint64_t ol_flags,
                        enum pp2_outq_l3_type *l3_type,
                        enum pp2_outq_l4_type *l4_type,
                        int *gen_l3_cksum,
@@ -2506,26 +2506,22 @@ mrvl_prepare_proto_info(uint64_t ol_flags, uint32_t packet_type,
         * Based on ol_flags prepare information
         * for pp2_ppio_outq_desc_set_proto_info() which setups descriptor
         * for offloading.
+        * in most of the checksum cases ipv4 must be set, so this is the
+        * default value
         */
-       if (ol_flags & PKT_TX_IPV4) {
-               *l3_type = PP2_OUTQ_L3_TYPE_IPV4;
-               *gen_l3_cksum = ol_flags & PKT_TX_IP_CKSUM ? 1 : 0;
-       } else if (ol_flags & PKT_TX_IPV6) {
+       *l3_type = PP2_OUTQ_L3_TYPE_IPV4;
+       *gen_l3_cksum = ol_flags & PKT_TX_IP_CKSUM ? 1 : 0;
+
+       if (ol_flags & PKT_TX_IPV6) {
                *l3_type = PP2_OUTQ_L3_TYPE_IPV6;
                /* no checksum for ipv6 header */
                *gen_l3_cksum = 0;
-       } else {
-               /* if something different then stop processing */
-               return -1;
        }
 
-       ol_flags &= PKT_TX_L4_MASK;
-       if ((packet_type & RTE_PTYPE_L4_TCP) &&
-           ol_flags == PKT_TX_TCP_CKSUM) {
+       if ((ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM) {
                *l4_type = PP2_OUTQ_L4_TYPE_TCP;
                *gen_l4_cksum = 1;
-       } else if ((packet_type & RTE_PTYPE_L4_UDP) &&
-                  ol_flags == PKT_TX_UDP_CKSUM) {
+       } else if ((ol_flags & PKT_TX_L4_MASK) ==  PKT_TX_UDP_CKSUM) {
                *l4_type = PP2_OUTQ_L4_TYPE_UDP;
                *gen_l4_cksum = 1;
        } else {
@@ -2533,8 +2529,6 @@ mrvl_prepare_proto_info(uint64_t ol_flags, uint32_t packet_type,
                /* no checksum for other type */
                *gen_l4_cksum = 0;
        }
-
-       return 0;
 }
 
 /**
@@ -2635,7 +2629,7 @@ mrvl_tx_pkt_burst(void *txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
        struct pp2_hif *hif;
        struct pp2_ppio_desc descs[nb_pkts];
        unsigned int core_id = rte_lcore_id();
-       int i, ret, bytes_sent = 0;
+       int i, bytes_sent = 0;
        uint16_t num, sq_free_size;
        uint64_t addr;
 
@@ -2675,11 +2669,10 @@ mrvl_tx_pkt_burst(void *txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
                 * in case unsupported ol_flags were passed
                 * do not update descriptor offload information
                 */
-               ret = mrvl_prepare_proto_info(mbuf->ol_flags, mbuf->packet_type,
-                                             &l3_type, &l4_type, &gen_l3_cksum,
-                                             &gen_l4_cksum);
-               if (unlikely(ret))
+               if (!(mbuf->ol_flags & MRVL_TX_PKT_OFFLOADS))
                        continue;
+               mrvl_prepare_proto_info(mbuf->ol_flags, &l3_type, &l4_type,
+                                       &gen_l3_cksum, &gen_l4_cksum);
 
                pp2_ppio_outq_desc_set_proto_info(&descs[i], l3_type, l4_type,
                                                  mbuf->l2_len,
@@ -2729,7 +2722,7 @@ mrvl_tx_sg_pkt_burst(void *txq, struct rte_mbuf **tx_pkts,
        struct pp2_ppio_sg_pkts pkts;
        uint8_t frags[nb_pkts];
        unsigned int core_id = rte_lcore_id();
-       int i, j, ret, bytes_sent = 0;
+       int i, j, bytes_sent = 0;
        int tail, tail_first;
        uint16_t num, sq_free_size;
        uint16_t nb_segs, total_descs = 0;
@@ -2812,11 +2805,10 @@ mrvl_tx_sg_pkt_burst(void *txq, struct rte_mbuf **tx_pkts,
                /* In case unsupported ol_flags were passed
                 * do not update descriptor offload information
                 */
-               ret = mrvl_prepare_proto_info(mbuf->ol_flags, mbuf->packet_type,
-                                             &l3_type, &l4_type, &gen_l3_cksum,
-                                             &gen_l4_cksum);
-               if (unlikely(ret))
+               if (!(mbuf->ol_flags & MRVL_TX_PKT_OFFLOADS))
                        continue;
+               mrvl_prepare_proto_info(mbuf->ol_flags, &l3_type, &l4_type,
+                                       &gen_l3_cksum, &gen_l4_cksum);
 
                pp2_ppio_outq_desc_set_proto_info(&descs[tail_first], l3_type,
                                                  l4_type, mbuf->l2_len,