All of lore.kernel.org
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/3] txgbe fixes
@ 2021-10-13  2:45 Jiawen Wu
  2021-10-13  2:45 ` [dpdk-dev] [PATCH 1/3] net/txgbe: fix to get interrupt status Jiawen Wu
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Jiawen Wu @ 2021-10-13  2:45 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu

Fix legacy interrupt abnormal, VXLAN-GPE packet inner checksum error,
and support to set fixed link speed.

Jiawen Wu (3):
  net/txgbe: fix to get interrupt status
  net/txgbe: set fixed flag for exact link speed
  net/txgbe: fix VXLAN-GPE packet checksum

 drivers/net/txgbe/base/txgbe_regs.h |  1 +
 drivers/net/txgbe/txgbe_ethdev.c    | 28 ++++++++++-------------
 drivers/net/txgbe/txgbe_ptypes.c    | 24 ++++++++++----------
 drivers/net/txgbe/txgbe_rxtx.c      | 35 +++++++++++++++++++++++------
 4 files changed, 53 insertions(+), 35 deletions(-)

-- 
2.21.0.windows.1




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [dpdk-dev] [PATCH 1/3] net/txgbe: fix to get interrupt status
  2021-10-13  2:45 [dpdk-dev] [PATCH 0/3] txgbe fixes Jiawen Wu
@ 2021-10-13  2:45 ` Jiawen Wu
  2021-10-13  2:45 ` [dpdk-dev] [PATCH 2/3] net/txgbe: set fixed flag for exact link speed Jiawen Wu
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Jiawen Wu @ 2021-10-13  2:45 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

It's necessary to set 1 on TXGBE_PX_INTA register to get interrupts
normally, when legacy interrupt mode is used.

Fixes: 2fc745e6b606 ("net/txgbe: add interrupt operation")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/base/txgbe_regs.h |  1 +
 drivers/net/txgbe/txgbe_ethdev.c    | 12 +++++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/net/txgbe/base/txgbe_regs.h b/drivers/net/txgbe/base/txgbe_regs.h
index 990589b013..48d9300a2e 100644
--- a/drivers/net/txgbe/base/txgbe_regs.h
+++ b/drivers/net/txgbe/base/txgbe_regs.h
@@ -1219,6 +1219,7 @@ enum txgbe_5tuple_protocol {
 #define TXGBE_IVARMISC                  0x0004FC
 #define   TXGBE_IVARMISC_VEC(v)         LS(v, 0, 0x7)
 #define   TXGBE_IVARMISC_VLD            MS(7, 0x1)
+#define TXGBE_PX_INTA			0x000110
 #define TXGBE_ICR(i)                    (0x000120 + (i) * 4) /* 0-1 */
 #define   TXGBE_ICR_MASK                MS(0, 0xFFFFFFFF)
 #define TXGBE_ICS(i)                    (0x000130 + (i) * 4) /* 0-1 */
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index b267da462b..ab972a3a35 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -109,7 +109,8 @@ static int txgbe_dev_lsc_interrupt_setup(struct rte_eth_dev *dev, uint8_t on);
 static int txgbe_dev_macsec_interrupt_setup(struct rte_eth_dev *dev);
 static int txgbe_dev_misc_interrupt_setup(struct rte_eth_dev *dev);
 static int txgbe_dev_rxq_interrupt_setup(struct rte_eth_dev *dev);
-static int txgbe_dev_interrupt_get_status(struct rte_eth_dev *dev);
+static int txgbe_dev_interrupt_get_status(struct rte_eth_dev *dev,
+				      struct rte_intr_handle *handle);
 static int txgbe_dev_interrupt_action(struct rte_eth_dev *dev,
 				      struct rte_intr_handle *handle);
 static void txgbe_dev_interrupt_handler(void *param);
@@ -2938,12 +2939,17 @@ txgbe_dev_macsec_interrupt_setup(struct rte_eth_dev *dev)
  *  - On failure, a negative value.
  */
 static int
-txgbe_dev_interrupt_get_status(struct rte_eth_dev *dev)
+txgbe_dev_interrupt_get_status(struct rte_eth_dev *dev,
+				struct rte_intr_handle *intr_handle)
 {
 	uint32_t eicr;
 	struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
 	struct txgbe_interrupt *intr = TXGBE_DEV_INTR(dev);
 
+	if (intr_handle->type != RTE_INTR_HANDLE_UIO &&
+			intr_handle->type != RTE_INTR_HANDLE_VFIO_MSIX)
+		wr32(hw, TXGBE_PX_INTA, 1);
+
 	/* clear all cause mask */
 	txgbe_disable_intr(hw);
 
@@ -3165,7 +3171,7 @@ txgbe_dev_interrupt_handler(void *param)
 {
 	struct rte_eth_dev *dev = (struct rte_eth_dev *)param;
 
-	txgbe_dev_interrupt_get_status(dev);
+	txgbe_dev_interrupt_get_status(dev, dev->intr_handle);
 	txgbe_dev_interrupt_action(dev, dev->intr_handle);
 }
 
-- 
2.21.0.windows.1




^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [dpdk-dev] [PATCH 2/3] net/txgbe: set fixed flag for exact link speed
  2021-10-13  2:45 [dpdk-dev] [PATCH 0/3] txgbe fixes Jiawen Wu
  2021-10-13  2:45 ` [dpdk-dev] [PATCH 1/3] net/txgbe: fix to get interrupt status Jiawen Wu
@ 2021-10-13  2:45 ` Jiawen Wu
  2021-10-13  2:45 ` [dpdk-dev] [PATCH 3/3] net/txgbe: fix VXLAN-GPE packet checksum Jiawen Wu
  2021-10-14 14:56 ` [dpdk-dev] [PATCH 0/3] txgbe fixes Ferruh Yigit
  3 siblings, 0 replies; 5+ messages in thread
From: Jiawen Wu @ 2021-10-13  2:45 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu

Setting exact link speed makes sense if auto-negotiation is
disabled. Fixed flag is required to disable auto-negotiation.

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/txgbe_ethdev.c | 16 +++-------------
 1 file changed, 3 insertions(+), 13 deletions(-)

diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index ab972a3a35..dc822d69f7 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -1634,17 +1634,6 @@ txgbe_dev_start(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	/* TXGBE devices don't support:
-	 *    - half duplex (checked afterwards for valid speeds)
-	 *    - fixed speed: TODO implement
-	 */
-	if (dev->data->dev_conf.link_speeds & ETH_LINK_SPEED_FIXED) {
-		PMD_INIT_LOG(ERR,
-		"Invalid link_speeds for port %u, fix speed not supported",
-				dev->data->port_id);
-		return -EINVAL;
-	}
-
 	/* Stop the link setup handler before resetting the HW. */
 	rte_eal_alarm_cancel(txgbe_dev_setup_link_alarm_handler, dev);
 
@@ -1778,7 +1767,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
 			ETH_LINK_SPEED_10G;
 
 	link_speeds = &dev->data->dev_conf.link_speeds;
-	if (*link_speeds & ~allowed_speeds) {
+	if (((*link_speeds) >> 1) & ~(allowed_speeds >> 1)) {
 		PMD_INIT_LOG(ERR, "Invalid link setting");
 		goto error;
 	}
@@ -2709,7 +2698,8 @@ txgbe_dev_link_update_share(struct rte_eth_dev *dev,
 	link.link_status = ETH_LINK_DOWN;
 	link.link_speed = ETH_SPEED_NUM_NONE;
 	link.link_duplex = ETH_LINK_HALF_DUPLEX;
-	link.link_autoneg = ETH_LINK_AUTONEG;
+	link.link_autoneg = !(dev->data->dev_conf.link_speeds &
+			ETH_LINK_SPEED_FIXED);
 
 	hw->mac.get_link_status = true;
 
-- 
2.21.0.windows.1




^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [dpdk-dev] [PATCH 3/3] net/txgbe: fix VXLAN-GPE packet checksum
  2021-10-13  2:45 [dpdk-dev] [PATCH 0/3] txgbe fixes Jiawen Wu
  2021-10-13  2:45 ` [dpdk-dev] [PATCH 1/3] net/txgbe: fix to get interrupt status Jiawen Wu
  2021-10-13  2:45 ` [dpdk-dev] [PATCH 2/3] net/txgbe: set fixed flag for exact link speed Jiawen Wu
@ 2021-10-13  2:45 ` Jiawen Wu
  2021-10-14 14:56 ` [dpdk-dev] [PATCH 0/3] txgbe fixes Ferruh Yigit
  3 siblings, 0 replies; 5+ messages in thread
From: Jiawen Wu @ 2021-10-13  2:45 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Parse inner L2 length to set correct packet type, and ensure that
hardware can compute the checksum successfully.

Fixes: b950203be7f1 ("net/txgbe: support VXLAN-GPE")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/txgbe_ptypes.c | 24 +++++++++++-----------
 drivers/net/txgbe/txgbe_rxtx.c   | 35 +++++++++++++++++++++++++-------
 2 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/drivers/net/txgbe/txgbe_ptypes.c b/drivers/net/txgbe/txgbe_ptypes.c
index c8a8a3839d..0ed757d820 100644
--- a/drivers/net/txgbe/txgbe_ptypes.c
+++ b/drivers/net/txgbe/txgbe_ptypes.c
@@ -102,17 +102,17 @@ static u32 txgbe_ptype_lookup[TXGBE_PTID_MAX] __rte_cache_aligned = {
 	TPTE(0x8C, ETHER, IPV4, NONE, IP, NONE, IPV6, TCP),
 	TPTE(0x8D, ETHER, IPV4, NONE, IP, NONE, IPV6, SCTP),
 	/* IPv4 -> GRE/Teredo/VXLAN -> NONE/IPv4/IPv6 */
-	TPTE(0x90, ETHER, IPV4, NONE, VXLAN_GPE, NONE, NONE, NONE),
-	TPTE(0x91, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV4, FRAG),
-	TPTE(0x92, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV4, NONFRAG),
-	TPTE(0x93, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV4, UDP),
-	TPTE(0x94, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV4, TCP),
-	TPTE(0x95, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV4, SCTP),
-	TPTE(0x99, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV6, FRAG),
-	TPTE(0x9A, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV6, NONFRAG),
-	TPTE(0x9B, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV6, UDP),
-	TPTE(0x9C, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV6, TCP),
-	TPTE(0x9D, ETHER, IPV4, NONE, VXLAN_GPE, NONE, IPV6, SCTP),
+	TPTE(0x90, ETHER, IPV4, NONE, GRENAT, NONE, NONE, NONE),
+	TPTE(0x91, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, FRAG),
+	TPTE(0x92, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, NONFRAG),
+	TPTE(0x93, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, UDP),
+	TPTE(0x94, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, TCP),
+	TPTE(0x95, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, SCTP),
+	TPTE(0x99, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, FRAG),
+	TPTE(0x9A, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, NONFRAG),
+	TPTE(0x9B, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, UDP),
+	TPTE(0x9C, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, TCP),
+	TPTE(0x9D, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, SCTP),
 	/* IPv4 -> GRE/Teredo/VXLAN -> MAC -> NONE/IPv4/IPv6 */
 	TPTE(0xA0, ETHER, IPV4, NONE, GRENAT, ETHER, NONE,  NONE),
 	TPTE(0xA1, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, FRAG),
@@ -320,10 +320,10 @@ txgbe_encode_ptype_tunnel(u32 ptype)
 		ptid |= TXGBE_PTID_TUN_EI;
 		break;
 	case RTE_PTYPE_TUNNEL_GRE:
-	case RTE_PTYPE_TUNNEL_VXLAN_GPE:
 		ptid |= TXGBE_PTID_TUN_EIG;
 		break;
 	case RTE_PTYPE_TUNNEL_VXLAN:
+	case RTE_PTYPE_TUNNEL_VXLAN_GPE:
 	case RTE_PTYPE_TUNNEL_NVGRE:
 	case RTE_PTYPE_TUNNEL_GENEVE:
 	case RTE_PTYPE_TUNNEL_GRENAT:
diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c
index b6339fe50b..b8efe57248 100644
--- a/drivers/net/txgbe/txgbe_rxtx.c
+++ b/drivers/net/txgbe/txgbe_rxtx.c
@@ -562,10 +562,10 @@ tx_desc_ol_flags_to_ptid(uint64_t oflags, uint32_t ptype)
 	/* Tunnel */
 	switch (oflags & PKT_TX_TUNNEL_MASK) {
 	case PKT_TX_TUNNEL_VXLAN:
+	case PKT_TX_TUNNEL_VXLAN_GPE:
 		ptype |= RTE_PTYPE_L2_ETHER |
 			 RTE_PTYPE_L3_IPV4 |
-			 RTE_PTYPE_TUNNEL_VXLAN;
-		ptype |= RTE_PTYPE_INNER_L2_ETHER;
+			 RTE_PTYPE_TUNNEL_GRENAT;
 		break;
 	case PKT_TX_TUNNEL_GRE:
 		ptype |= RTE_PTYPE_L2_ETHER |
@@ -579,11 +579,6 @@ tx_desc_ol_flags_to_ptid(uint64_t oflags, uint32_t ptype)
 			 RTE_PTYPE_TUNNEL_GENEVE;
 		ptype |= RTE_PTYPE_INNER_L2_ETHER;
 		break;
-	case PKT_TX_TUNNEL_VXLAN_GPE:
-		ptype |= RTE_PTYPE_L2_ETHER |
-			 RTE_PTYPE_L3_IPV4 |
-			 RTE_PTYPE_TUNNEL_VXLAN_GPE;
-		break;
 	case PKT_TX_TUNNEL_IPIP:
 	case PKT_TX_TUNNEL_IP:
 		ptype |= RTE_PTYPE_L2_ETHER |
@@ -696,6 +691,30 @@ txgbe_get_tun_len(struct rte_mbuf *mbuf)
 	return tun_len;
 }
 
+static inline uint8_t
+txgbe_parse_tun_ptid(struct rte_mbuf *tx_pkt)
+{
+	uint64_t l2_none, l2_mac, l2_mac_vlan;
+	uint8_t ptid = 0;
+
+	if ((tx_pkt->ol_flags & (PKT_TX_TUNNEL_VXLAN |
+				PKT_TX_TUNNEL_VXLAN_GPE)) == 0)
+		return ptid;
+
+	l2_none = sizeof(struct txgbe_udphdr) + sizeof(struct txgbe_vxlanhdr);
+	l2_mac = l2_none + sizeof(struct rte_ether_hdr);
+	l2_mac_vlan = l2_mac + sizeof(struct rte_vlan_hdr);
+
+	if (tx_pkt->l2_len == l2_none)
+		ptid = TXGBE_PTID_TUN_EIG;
+	else if (tx_pkt->l2_len == l2_mac)
+		ptid = TXGBE_PTID_TUN_EIGM;
+	else if (tx_pkt->l2_len == l2_mac_vlan)
+		ptid = TXGBE_PTID_TUN_EIGMV;
+
+	return ptid;
+}
+
 uint16_t
 txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 		uint16_t nb_pkts)
@@ -759,6 +778,8 @@ txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 		if (tx_ol_req) {
 			tx_offload.ptid = tx_desc_ol_flags_to_ptid(tx_ol_req,
 					tx_pkt->packet_type);
+			if (tx_offload.ptid & TXGBE_PTID_PKT_TUN)
+				tx_offload.ptid |= txgbe_parse_tun_ptid(tx_pkt);
 			tx_offload.l2_len = tx_pkt->l2_len;
 			tx_offload.l3_len = tx_pkt->l3_len;
 			tx_offload.l4_len = tx_pkt->l4_len;
-- 
2.21.0.windows.1




^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [dpdk-dev] [PATCH 0/3] txgbe fixes
  2021-10-13  2:45 [dpdk-dev] [PATCH 0/3] txgbe fixes Jiawen Wu
                   ` (2 preceding siblings ...)
  2021-10-13  2:45 ` [dpdk-dev] [PATCH 3/3] net/txgbe: fix VXLAN-GPE packet checksum Jiawen Wu
@ 2021-10-14 14:56 ` Ferruh Yigit
  3 siblings, 0 replies; 5+ messages in thread
From: Ferruh Yigit @ 2021-10-14 14:56 UTC (permalink / raw)
  To: Jiawen Wu, dev

On 10/13/2021 3:45 AM, Jiawen Wu wrote:
> Fix legacy interrupt abnormal, VXLAN-GPE packet inner checksum error,
> and support to set fixed link speed.
> 
> Jiawen Wu (3):
>    net/txgbe: fix to get interrupt status
>    net/txgbe: set fixed flag for exact link speed
>    net/txgbe: fix VXLAN-GPE packet checksum
> 

Series applied to dpdk-next-net/main, thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-10-14 15:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-13  2:45 [dpdk-dev] [PATCH 0/3] txgbe fixes Jiawen Wu
2021-10-13  2:45 ` [dpdk-dev] [PATCH 1/3] net/txgbe: fix to get interrupt status Jiawen Wu
2021-10-13  2:45 ` [dpdk-dev] [PATCH 2/3] net/txgbe: set fixed flag for exact link speed Jiawen Wu
2021-10-13  2:45 ` [dpdk-dev] [PATCH 3/3] net/txgbe: fix VXLAN-GPE packet checksum Jiawen Wu
2021-10-14 14:56 ` [dpdk-dev] [PATCH 0/3] txgbe fixes Ferruh Yigit

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.