DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 0/7] Fixes and supports for Wangxun NICs
@ 2022-06-20  7:55 Jiawen Wu
  2022-06-20  7:55 ` [PATCH 1/7] net/txgbe: support OEM subsystem vendor ID Jiawen Wu
                   ` (7 more replies)
  0 siblings, 8 replies; 13+ messages in thread
From: Jiawen Wu @ 2022-06-20  7:55 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu

Fix the remaining bugs, support more OEM devices.

Jiawen Wu (7):
  net/txgbe: support OEM subsystem vendor ID
  net/ngbe: support OEM subsystem vendor ID
  net/txgbe: fix register polling
  net/ngbe: add more packet statistics
  net/ngbe: fix YT PHY UTP mode to link up
  net/ngbe: support autoneg on/off for external PHY SFI mode
  net/ngbe: support YT PHY SGMII to RGMII mode

 doc/guides/rel_notes/release_22_07.rst |   7 ++
 drivers/net/ngbe/base/ngbe_phy_mvl.c   |  16 +++-
 drivers/net/ngbe/base/ngbe_phy_yt.c    | 111 ++++++++++++++++++++-----
 drivers/net/ngbe/base/ngbe_phy_yt.h    |   5 ++
 drivers/net/ngbe/ngbe_ethdev.c         |  21 ++++-
 drivers/net/txgbe/base/txgbe_hw.c      |  37 +++++++++
 drivers/net/txgbe/base/txgbe_hw.h      |   2 +
 drivers/net/txgbe/base/txgbe_regs.h    |  11 ++-
 drivers/net/txgbe/txgbe_ethdev.c       |  12 +++
 9 files changed, 193 insertions(+), 29 deletions(-)

-- 
2.27.0




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

* [PATCH 1/7] net/txgbe: support OEM subsystem vendor ID
  2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
@ 2022-06-20  7:55 ` Jiawen Wu
  2022-06-21 12:19   ` Ferruh Yigit
  2022-06-20  7:55 ` [PATCH 2/7] net/ngbe: " Jiawen Wu
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 13+ messages in thread
From: Jiawen Wu @ 2022-06-20  7:55 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu

Add support for OEM subsystem vendor ID.

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 doc/guides/rel_notes/release_22_07.rst |  4 +++
 drivers/net/txgbe/base/txgbe_hw.c      | 37 ++++++++++++++++++++++++++
 drivers/net/txgbe/base/txgbe_hw.h      |  2 ++
 drivers/net/txgbe/txgbe_ethdev.c       | 12 +++++++++
 4 files changed, 55 insertions(+)

diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
index 6fc044edaa..96db85a707 100644
--- a/doc/guides/rel_notes/release_22_07.rst
+++ b/doc/guides/rel_notes/release_22_07.rst
@@ -167,6 +167,10 @@ New Features
 
   * Added support for yt8531s PHY.
 
+* **Updated Wangxun txgbe driver.**
+
+  * Added support for OEM subsystem vendor ID.
+
 * **Added Elliptic Curve Diffie-Hellman (ECDH) algorithm in cryptodev.**
 
   Added support for Elliptic Curve Diffie Hellman (ECDH) asymmetric
diff --git a/drivers/net/txgbe/base/txgbe_hw.c b/drivers/net/txgbe/base/txgbe_hw.c
index 6a045cba79..8acebf8b60 100644
--- a/drivers/net/txgbe/base/txgbe_hw.c
+++ b/drivers/net/txgbe/base/txgbe_hw.c
@@ -2608,6 +2608,43 @@ s32 txgbe_prot_autoc_write_raptor(struct txgbe_hw *hw, bool locked, u64 autoc)
 	return err;
 }
 
+/* cmd_addr is used for some special command:
+ * 1. to be sector address, when implemented erase sector command
+ * 2. to be flash address when implemented read, write flash address
+ */
+u32 txgbe_fmgr_cmd_op(struct txgbe_hw *hw, u32 cmd, u32 cmd_addr)
+{
+	u32 cmd_val = 0;
+	u32 i = 0;
+
+	cmd_val = TXGBE_SPICMD_CMD(cmd) | TXGBE_SPICMD_CLK(3) | cmd_addr;
+	wr32(hw, TXGBE_SPICMD, cmd_val);
+
+	for (i = 0; i < 10000; i++) {
+		if (rd32(hw, TXGBE_SPISTAT) & TXGBE_SPISTAT_OPDONE)
+			break;
+
+		usec_delay(10);
+	}
+	if (i == 10000)
+		return 1;
+
+	return 0;
+}
+
+u32 txgbe_flash_read_dword(struct txgbe_hw *hw, u32 addr)
+{
+	u32 status = 0;
+
+	status = txgbe_fmgr_cmd_op(hw, 1, addr);
+	if (status) {
+		DEBUGOUT("Read flash timeout.");
+		return status;
+	}
+
+	return rd32(hw, TXGBE_SPIDAT);
+}
+
 /**
  *  txgbe_init_ops_pf - Inits func ptrs and MAC type
  *  @hw: pointer to hardware structure
diff --git a/drivers/net/txgbe/base/txgbe_hw.h b/drivers/net/txgbe/base/txgbe_hw.h
index fd2f7d784c..7031589f7c 100644
--- a/drivers/net/txgbe/base/txgbe_hw.h
+++ b/drivers/net/txgbe/base/txgbe_hw.h
@@ -111,4 +111,6 @@ s32 txgbe_prot_autoc_read_raptor(struct txgbe_hw *hw, bool *locked, u64 *value);
 s32 txgbe_prot_autoc_write_raptor(struct txgbe_hw *hw, bool locked, u64 value);
 s32 txgbe_reinit_fdir_tables(struct txgbe_hw *hw);
 bool txgbe_verify_lesm_fw_enabled_raptor(struct txgbe_hw *hw);
+u32 txgbe_fmgr_cmd_op(struct txgbe_hw *hw, u32 cmd, u32 cmd_addr);
+u32 txgbe_flash_read_dword(struct txgbe_hw *hw, u32 addr);
 #endif /* _TXGBE_HW_H_ */
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index f0994f028d..6fb91cdf07 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -552,6 +552,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 	const struct rte_memzone *mz;
 	uint32_t ctrl_ext;
 	uint16_t csum;
+	u32 ssid = 0;
 	int err, i, ret;
 
 	PMD_INIT_FUNC_TRACE();
@@ -594,6 +595,17 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 	/* Vendor and Device ID need to be set before init of shared code */
 	hw->device_id = pci_dev->id.device_id;
 	hw->vendor_id = pci_dev->id.vendor_id;
+	if (pci_dev->id.subsystem_vendor_id == PCI_VENDOR_ID_WANGXUN) {
+		hw->subsystem_device_id = pci_dev->id.subsystem_device_id;
+	} else {
+		ssid = txgbe_flash_read_dword(hw, 0xFFFDC);
+		if (ssid == 0x1) {
+			PMD_INIT_LOG(ERR,
+				"Read of internal subsystem device id failed\n");
+			return -ENODEV;
+		}
+		hw->subsystem_device_id = (u16)ssid >> 8 | (u16)ssid << 8;
+	}
 	hw->hw_addr = (void *)pci_dev->mem_resource[0].addr;
 	hw->allow_unsupported_sfp = 1;
 
-- 
2.27.0




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

* [PATCH 2/7] net/ngbe: support OEM subsystem vendor ID
  2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
  2022-06-20  7:55 ` [PATCH 1/7] net/txgbe: support OEM subsystem vendor ID Jiawen Wu
@ 2022-06-20  7:55 ` Jiawen Wu
  2022-06-21 12:19   ` Ferruh Yigit
  2022-06-20  7:55 ` [PATCH 3/7] net/txgbe: fix register polling Jiawen Wu
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 13+ messages in thread
From: Jiawen Wu @ 2022-06-20  7:55 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu

Add support for OEM subsystem vendor ID.

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 doc/guides/rel_notes/release_22_07.rst |  1 +
 drivers/net/ngbe/ngbe_ethdev.c         | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
index 96db85a707..b26efb8719 100644
--- a/doc/guides/rel_notes/release_22_07.rst
+++ b/doc/guides/rel_notes/release_22_07.rst
@@ -166,6 +166,7 @@ New Features
 * **Updated Wangxun ngbe driver.**
 
   * Added support for yt8531s PHY.
+  * Added support for OEM subsystem vendor ID.
 
 * **Updated Wangxun txgbe driver.**
 
diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
index 5ac1c27a58..c4216f7e34 100644
--- a/drivers/net/ngbe/ngbe_ethdev.c
+++ b/drivers/net/ngbe/ngbe_ethdev.c
@@ -315,6 +315,7 @@ eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 	const struct rte_memzone *mz;
 	uint32_t ctrl_ext;
 	u32 led_conf = 0;
+	u32 ssid = 0;
 	int err, ret;
 
 	PMD_INIT_FUNC_TRACE();
@@ -359,7 +360,17 @@ eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 	hw->back = pci_dev;
 	hw->device_id = pci_dev->id.device_id;
 	hw->vendor_id = pci_dev->id.vendor_id;
-	hw->sub_system_id = pci_dev->id.subsystem_device_id;
+	if (pci_dev->id.subsystem_vendor_id == PCI_VENDOR_ID_WANGXUN) {
+		hw->sub_system_id = pci_dev->id.subsystem_device_id;
+	} else {
+		ssid = ngbe_flash_read_dword(hw, 0xFFFDC);
+		if (ssid == 0x1) {
+			PMD_INIT_LOG(ERR,
+				"Read of internal subsystem device id failed\n");
+			return -ENODEV;
+		}
+		hw->sub_system_id = (u16)ssid >> 8 | (u16)ssid << 8;
+	}
 	ngbe_map_device_id(hw);
 	hw->hw_addr = (void *)pci_dev->mem_resource[0].addr;
 
-- 
2.27.0




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

* [PATCH 3/7] net/txgbe: fix register polling
  2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
  2022-06-20  7:55 ` [PATCH 1/7] net/txgbe: support OEM subsystem vendor ID Jiawen Wu
  2022-06-20  7:55 ` [PATCH 2/7] net/ngbe: " Jiawen Wu
@ 2022-06-20  7:55 ` Jiawen Wu
  2022-06-21 12:19   ` Ferruh Yigit
  2022-06-20  7:55 ` [PATCH 4/7] net/ngbe: add more packet statistics Jiawen Wu
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 13+ messages in thread
From: Jiawen Wu @ 2022-06-20  7:55 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Fix to poll some specific registers, which expect bit 0.

Fixes: 24a4c76aff4d ("net/txgbe: add error types and registers")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/base/txgbe_regs.h | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/txgbe/base/txgbe_regs.h b/drivers/net/txgbe/base/txgbe_regs.h
index 3139796911..911bb6e04e 100644
--- a/drivers/net/txgbe/base/txgbe_regs.h
+++ b/drivers/net/txgbe/base/txgbe_regs.h
@@ -1864,8 +1864,13 @@ po32m(struct txgbe_hw *hw, u32 reg, u32 mask, u32 expect, u32 *actual,
 	}
 
 	do {
-		all |= rd32(hw, reg);
-		value |= mask & all;
+		if (expect != 0) {
+			all |= rd32(hw, reg);
+			value |= mask & all;
+		} else {
+			all = rd32(hw, reg);
+			value = mask & all;
+		}
 		if (value == expect)
 			break;
 
@@ -1898,7 +1903,7 @@ po32m(struct txgbe_hw *hw, u32 reg, u32 mask, u32 expect, u32 *actual,
 
 #define wr32w(hw, reg, val, mask, slice) do { \
 	wr32((hw), reg, val); \
-	po32m((hw), reg, mask, mask, NULL, 5, slice); \
+	po32m((hw), reg, mask, 0, NULL, 5, slice); \
 } while (0)
 
 #define TXGBE_XPCS_IDAADDR    0x13000
-- 
2.27.0




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

* [PATCH 4/7] net/ngbe: add more packet statistics
  2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
                   ` (2 preceding siblings ...)
  2022-06-20  7:55 ` [PATCH 3/7] net/txgbe: fix register polling Jiawen Wu
@ 2022-06-20  7:55 ` Jiawen Wu
  2022-06-20  7:55 ` [PATCH 5/7] net/ngbe: fix YT PHY UTP mode to link up Jiawen Wu
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Jiawen Wu @ 2022-06-20  7:55 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Add more hardware extended statistics.

Fixes: 8b433d04adc9 ("net/ngbe: support device xstats")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/ngbe/ngbe_ethdev.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
index c4216f7e34..33a2f335e1 100644
--- a/drivers/net/ngbe/ngbe_ethdev.c
+++ b/drivers/net/ngbe/ngbe_ethdev.c
@@ -164,6 +164,8 @@ static const struct rte_ngbe_xstats_name_off rte_ngbe_stats_strings[] = {
 	HW_XSTAT(rx_management_packets),
 	HW_XSTAT(tx_management_packets),
 	HW_XSTAT(rx_management_dropped),
+	HW_XSTAT(rx_dma_drop),
+	HW_XSTAT(tx_secdrp_packets),
 
 	/* Basic Error */
 	HW_XSTAT(rx_crc_errors),
@@ -179,6 +181,12 @@ static const struct rte_ngbe_xstats_name_off rte_ngbe_stats_strings[] = {
 	HW_XSTAT(mac_local_errors),
 	HW_XSTAT(mac_remote_errors),
 
+	/* PB Stats */
+	HW_XSTAT(rx_up_dropped),
+	HW_XSTAT(rdb_pkt_cnt),
+	HW_XSTAT(rdb_repli_cnt),
+	HW_XSTAT(rdb_drp_cnt),
+
 	/* MACSEC */
 	HW_XSTAT(tx_macsec_pkts_untagged),
 	HW_XSTAT(tx_macsec_pkts_encrypted),
-- 
2.27.0




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

* [PATCH 5/7] net/ngbe: fix YT PHY UTP mode to link up
  2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
                   ` (3 preceding siblings ...)
  2022-06-20  7:55 ` [PATCH 4/7] net/ngbe: add more packet statistics Jiawen Wu
@ 2022-06-20  7:55 ` Jiawen Wu
  2022-06-20  7:55 ` [PATCH 6/7] net/ngbe: support autoneg on/off for external PHY SFI mode Jiawen Wu
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Jiawen Wu @ 2022-06-20  7:55 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Fix to read and write the correct register fields for yt8521s and
yt8531s PHY, since mode check was added.

Fixes: 1c44384fce76 ("net/ngbe: support custom PHY interfaces")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/ngbe/base/ngbe_phy_yt.c | 42 ++++++++++++++---------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ngbe/base/ngbe_phy_yt.c b/drivers/net/ngbe/base/ngbe_phy_yt.c
index f46121b8d1..9dd2b2264f 100644
--- a/drivers/net/ngbe/base/ngbe_phy_yt.c
+++ b/drivers/net/ngbe/base/ngbe_phy_yt.c
@@ -146,21 +146,21 @@ s32 ngbe_setup_phy_link_yt(struct ngbe_hw *hw, u32 speed,
 			}
 			/* duplex full */
 			value |= YT_BCR_DUPLEX | YT_BCR_RESET;
-			hw->phy.write_reg(hw, YT_BCR, 0, value);
+			ngbe_write_phy_reg_mdi(hw, YT_BCR, 0, value);
 
 			goto skip_an;
 		}
 
 		/*disable 100/10base-T Self-negotiation ability*/
-		hw->phy.read_reg(hw, YT_ANA, 0, &value);
+		ngbe_read_phy_reg_mdi(hw, YT_ANA, 0, &value);
 		value &= ~(YT_ANA_100BASET_FULL | YT_ANA_100BASET_HALF |
 			YT_ANA_10BASET_FULL | YT_ANA_10BASET_HALF);
-		hw->phy.write_reg(hw, YT_ANA, 0, value);
+		ngbe_write_phy_reg_mdi(hw, YT_ANA, 0, value);
 
 		/*disable 1000base-T Self-negotiation ability*/
-		hw->phy.read_reg(hw, YT_MS_CTRL, 0, &value);
+		ngbe_read_phy_reg_mdi(hw, YT_MS_CTRL, 0, &value);
 		value &= ~(YT_MS_1000BASET_FULL | YT_MS_1000BASET_HALF);
-		hw->phy.write_reg(hw, YT_MS_CTRL, 0, value);
+		ngbe_write_phy_reg_mdi(hw, YT_MS_CTRL, 0, value);
 
 		if (speed & NGBE_LINK_SPEED_1GB_FULL) {
 			hw->phy.autoneg_advertised |= NGBE_LINK_SPEED_1GB_FULL;
@@ -176,19 +176,19 @@ s32 ngbe_setup_phy_link_yt(struct ngbe_hw *hw, u32 speed,
 		}
 
 		/* enable 1000base-T Self-negotiation ability */
-		hw->phy.read_reg(hw, YT_MS_CTRL, 0, &value);
+		ngbe_read_phy_reg_mdi(hw, YT_MS_CTRL, 0, &value);
 		value |= value_r9;
-		hw->phy.write_reg(hw, YT_MS_CTRL, 0, value);
+		ngbe_write_phy_reg_mdi(hw, YT_MS_CTRL, 0, value);
 
 		/* enable 100/10base-T Self-negotiation ability */
-		hw->phy.read_reg(hw, YT_ANA, 0, &value);
+		ngbe_read_phy_reg_mdi(hw, YT_ANA, 0, &value);
 		value |= value_r4;
-		hw->phy.write_reg(hw, YT_ANA, 0, value);
+		ngbe_write_phy_reg_mdi(hw, YT_ANA, 0, value);
 
 		/* software reset to make the above configuration take effect*/
-		hw->phy.read_reg(hw, YT_BCR, 0, &value);
+		ngbe_read_phy_reg_mdi(hw, YT_BCR, 0, &value);
 		value |= YT_BCR_RESET | YT_BCR_ANE | YT_BCR_RESTART_AN;
-		hw->phy.write_reg(hw, YT_BCR, 0, value);
+		ngbe_write_phy_reg_mdi(hw, YT_BCR, 0, value);
 skip_an:
 		hw->phy.set_phy_power(hw, true);
 	} else if ((value & YT_CHIP_MODE_MASK) == YT_CHIP_MODE_SEL(1)) {
@@ -219,15 +219,15 @@ s32 ngbe_setup_phy_link_yt(struct ngbe_hw *hw, u32 speed,
 		} else {
 			/* utp up */
 			/*disable 100/10base-T Self-negotiation ability*/
-			hw->phy.read_reg(hw, YT_ANA, 0, &value);
+			ngbe_read_phy_reg_mdi(hw, YT_ANA, 0, &value);
 			value &= ~(YT_ANA_100BASET_FULL | YT_ANA_100BASET_HALF |
 				YT_ANA_10BASET_FULL | YT_ANA_10BASET_HALF);
-			hw->phy.write_reg(hw, YT_ANA, 0, value);
+			ngbe_write_phy_reg_mdi(hw, YT_ANA, 0, value);
 
 			/*disable 1000base-T Self-negotiation ability*/
-			hw->phy.read_reg(hw, YT_MS_CTRL, 0, &value);
+			ngbe_read_phy_reg_mdi(hw, YT_MS_CTRL, 0, &value);
 			value &= ~(YT_MS_1000BASET_FULL | YT_MS_1000BASET_HALF);
-			hw->phy.write_reg(hw, YT_MS_CTRL, 0, value);
+			ngbe_write_phy_reg_mdi(hw, YT_MS_CTRL, 0, value);
 
 			if (speed & NGBE_LINK_SPEED_1GB_FULL) {
 				hw->phy.autoneg_advertised |=
@@ -246,21 +246,21 @@ s32 ngbe_setup_phy_link_yt(struct ngbe_hw *hw, u32 speed,
 			}
 
 			/* enable 1000base-T Self-negotiation ability */
-			hw->phy.read_reg(hw, YT_MS_CTRL, 0, &value);
+			ngbe_read_phy_reg_mdi(hw, YT_MS_CTRL, 0, &value);
 			value |= value_r9;
-			hw->phy.write_reg(hw, YT_MS_CTRL, 0, value);
+			ngbe_write_phy_reg_mdi(hw, YT_MS_CTRL, 0, value);
 
 			/* enable 100/10base-T Self-negotiation ability */
-			hw->phy.read_reg(hw, YT_ANA, 0, &value);
+			ngbe_read_phy_reg_mdi(hw, YT_ANA, 0, &value);
 			value |= value_r4;
-			hw->phy.write_reg(hw, YT_ANA, 0, value);
+			ngbe_write_phy_reg_mdi(hw, YT_ANA, 0, value);
 
 			/* software reset to make the above configuration
 			 * take effect
 			 */
-			hw->phy.read_reg(hw, YT_BCR, 0, &value);
+			ngbe_read_phy_reg_mdi(hw, YT_BCR, 0, &value);
 			value |= YT_BCR_RESET;
-			hw->phy.write_reg(hw, YT_BCR, 0, value);
+			ngbe_write_phy_reg_mdi(hw, YT_BCR, 0, value);
 		}
 	} else if ((value & YT_CHIP_MODE_MASK) == YT_CHIP_MODE_SEL(4)) {
 		hw->phy.autoneg_advertised |= NGBE_LINK_SPEED_1GB_FULL;
-- 
2.27.0




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

* [PATCH 6/7] net/ngbe: support autoneg on/off for external PHY SFI mode
  2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
                   ` (4 preceding siblings ...)
  2022-06-20  7:55 ` [PATCH 5/7] net/ngbe: fix YT PHY UTP mode to link up Jiawen Wu
@ 2022-06-20  7:55 ` Jiawen Wu
  2022-06-20  7:55 ` [PATCH 7/7] net/ngbe: support YT PHY SGMII to RGMII mode Jiawen Wu
  2022-06-21 12:20 ` [PATCH 0/7] Fixes and supports for Wangxun NICs Ferruh Yigit
  7 siblings, 0 replies; 13+ messages in thread
From: Jiawen Wu @ 2022-06-20  7:55 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu

Add support for external PHY to switch autoneg on/off on their SFI mode.

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 doc/guides/rel_notes/release_22_07.rst |  1 +
 drivers/net/ngbe/base/ngbe_phy_mvl.c   | 16 +++++++++++++---
 drivers/net/ngbe/base/ngbe_phy_yt.c    | 20 +++++++++++++++++++-
 drivers/net/ngbe/base/ngbe_phy_yt.h    |  5 +++++
 4 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
index b26efb8719..a84c5b486b 100644
--- a/doc/guides/rel_notes/release_22_07.rst
+++ b/doc/guides/rel_notes/release_22_07.rst
@@ -167,6 +167,7 @@ New Features
 
   * Added support for yt8531s PHY.
   * Added support for OEM subsystem vendor ID.
+  * Added autoneg on/off for external PHY SFI mode.
 
 * **Updated Wangxun txgbe driver.**
 
diff --git a/drivers/net/ngbe/base/ngbe_phy_mvl.c b/drivers/net/ngbe/base/ngbe_phy_mvl.c
index c5256359ed..8746a72eb3 100644
--- a/drivers/net/ngbe/base/ngbe_phy_mvl.c
+++ b/drivers/net/ngbe/base/ngbe_phy_mvl.c
@@ -203,6 +203,10 @@ s32 ngbe_setup_phy_link_mvl(struct ngbe_hw *hw, u32 speed,
 			   MVL_PHY_1000BASET_HALF);
 		value_r9 |= value;
 		hw->phy.write_reg(hw, MVL_PHY_1000BASET, 0, value_r9);
+
+		value = MVL_CTRL_RESTART_AN | MVL_CTRL_ANE |
+			MVL_CTRL_RESET | MVL_CTRL_DUPLEX;
+		ngbe_write_phy_reg_mdi(hw, MVL_CTRL, 0, value);
 	} else {
 		hw->phy.autoneg_advertised |= NGBE_LINK_SPEED_1GB_FULL;
 
@@ -210,10 +214,16 @@ s32 ngbe_setup_phy_link_mvl(struct ngbe_hw *hw, u32 speed,
 		value &= ~(MVL_PHY_1000BASEX_HALF | MVL_PHY_1000BASEX_FULL);
 		value |= MVL_PHY_1000BASEX_FULL;
 		hw->phy.write_reg(hw, MVL_ANA, 0, value);
-	}
 
-	value = MVL_CTRL_RESTART_AN | MVL_CTRL_ANE | MVL_CTRL_RESET;
-	ngbe_write_phy_reg_mdi(hw, MVL_CTRL, 0, value);
+		if (hw->mac.autoneg)
+			value = MVL_CTRL_RESTART_AN | MVL_CTRL_ANE |
+				MVL_CTRL_RESET | MVL_CTRL_DUPLEX |
+				MVL_CTRL_SPEED_SELECT1;
+		else
+			value = MVL_CTRL_RESET | MVL_CTRL_DUPLEX |
+				MVL_CTRL_SPEED_SELECT1;
+		ngbe_write_phy_reg_mdi(hw, MVL_CTRL, 0, value);
+	}
 
 skip_an:
 	hw->phy.set_phy_power(hw, true);
diff --git a/drivers/net/ngbe/base/ngbe_phy_yt.c b/drivers/net/ngbe/base/ngbe_phy_yt.c
index 9dd2b2264f..bc1921e68a 100644
--- a/drivers/net/ngbe/base/ngbe_phy_yt.c
+++ b/drivers/net/ngbe/base/ngbe_phy_yt.c
@@ -205,8 +205,26 @@ s32 ngbe_setup_phy_link_yt(struct ngbe_hw *hw, u32 speed,
 			YT_CHIP_SW_RST;
 		ngbe_write_phy_reg_ext_yt(hw, YT_CHIP, 0, value);
 
+		ngbe_read_phy_reg_sds_ext_yt(hw, YT_AUTO, 0, &value);
+		value &= ~YT_AUTO_SENSING;
+		ngbe_write_phy_reg_sds_ext_yt(hw, YT_AUTO, 0, value);
+
+		ngbe_read_phy_reg_ext_yt(hw, YT_MISC, 0, &value);
+		value |= YT_MISC_RESV;
+		ngbe_write_phy_reg_ext_yt(hw, YT_MISC, 0, value);
+
+		ngbe_read_phy_reg_ext_yt(hw, YT_CHIP, 0, &value);
+		value &= ~YT_CHIP_SW_RST;
+		ngbe_write_phy_reg_ext_yt(hw, YT_CHIP, 0, value);
+
 		/* software reset */
-		ngbe_write_phy_reg_sds_ext_yt(hw, 0x0, 0, 0x9140);
+		if (hw->mac.autoneg)
+			value = YT_BCR_RESET | YT_BCR_ANE | YT_BCR_RESTART_AN |
+				YT_BCR_DUPLEX | YT_BCR_SPEED_SELECT1;
+		else
+			value = YT_BCR_RESET | YT_BCR_DUPLEX |
+				YT_BCR_SPEED_SELECT1;
+		hw->phy.write_reg(hw, YT_BCR, 0, value);
 
 		hw->phy.set_phy_power(hw, true);
 	} else if ((value & YT_CHIP_MODE_MASK) == YT_CHIP_MODE_SEL(2)) {
diff --git a/drivers/net/ngbe/base/ngbe_phy_yt.h b/drivers/net/ngbe/base/ngbe_phy_yt.h
index 06e8f77261..ddf992e79a 100644
--- a/drivers/net/ngbe/base/ngbe_phy_yt.h
+++ b/drivers/net/ngbe/base/ngbe_phy_yt.h
@@ -31,6 +31,11 @@
 #define   YT_RGMII_CONF2_LINKUP		MS16(4, 0x1)
 #define YT_MISC				0xA006
 #define   YT_MISC_FIBER_PRIO		MS16(8, 0x1) /* 0 for UTP */
+#define   YT_MISC_RESV			MS16(0, 0x1)
+
+/* SDS EXT */
+#define YT_AUTO				0xA5
+#define   YT_AUTO_SENSING		MS16(15, 0x1)
 
 /* MII common registers in UTP and SDS */
 #define YT_BCR				0x0
-- 
2.27.0




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

* [PATCH 7/7] net/ngbe: support YT PHY SGMII to RGMII mode
  2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
                   ` (5 preceding siblings ...)
  2022-06-20  7:55 ` [PATCH 6/7] net/ngbe: support autoneg on/off for external PHY SFI mode Jiawen Wu
@ 2022-06-20  7:55 ` Jiawen Wu
  2022-06-21 12:20 ` [PATCH 0/7] Fixes and supports for Wangxun NICs Ferruh Yigit
  7 siblings, 0 replies; 13+ messages in thread
From: Jiawen Wu @ 2022-06-20  7:55 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu

Add SGMII to RGMII mode for yt8521s and yt8531s PHY.

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 doc/guides/rel_notes/release_22_07.rst |  1 +
 drivers/net/ngbe/base/ngbe_phy_yt.c    | 49 ++++++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
index a84c5b486b..6baa63e3bf 100644
--- a/doc/guides/rel_notes/release_22_07.rst
+++ b/doc/guides/rel_notes/release_22_07.rst
@@ -168,6 +168,7 @@ New Features
   * Added support for yt8531s PHY.
   * Added support for OEM subsystem vendor ID.
   * Added autoneg on/off for external PHY SFI mode.
+  * Added support for yt8521s/yt8531s PHY SGMII to RGMII mode.
 
 * **Updated Wangxun txgbe driver.**
 
diff --git a/drivers/net/ngbe/base/ngbe_phy_yt.c b/drivers/net/ngbe/base/ngbe_phy_yt.c
index bc1921e68a..562a0dede5 100644
--- a/drivers/net/ngbe/base/ngbe_phy_yt.c
+++ b/drivers/net/ngbe/base/ngbe_phy_yt.c
@@ -298,6 +298,55 @@ s32 ngbe_setup_phy_link_yt(struct ngbe_hw *hw, u32 speed,
 		value &= ~YT_SMI_PHY_SW_RST;
 		ngbe_write_phy_reg_ext_yt(hw, YT_CHIP, 0, value);
 
+		hw->phy.set_phy_power(hw, true);
+	} else if ((value & YT_CHIP_MODE_MASK) == YT_CHIP_MODE_SEL(5)) {
+		/* sgmii_to_rgmii */
+		if (!hw->mac.autoneg) {
+			switch (speed) {
+			case NGBE_LINK_SPEED_1GB_FULL:
+				value = YT_BCR_SPEED_SELECT1;
+				break;
+			case NGBE_LINK_SPEED_100M_FULL:
+				value = YT_BCR_SPEED_SELECT0;
+				break;
+			case NGBE_LINK_SPEED_10M_FULL:
+				value = 0;
+				break;
+			default:
+				value = YT_BCR_SPEED_SELECT0 |
+					YT_BCR_SPEED_SELECT1;
+				DEBUGOUT("unknown speed = 0x%x", speed);
+				break;
+			}
+			/* duplex full */
+			value |= YT_BCR_DUPLEX | YT_BCR_RESET;
+			hw->phy.write_reg(hw, YT_BCR, 0, value);
+
+			goto skip_an_sr;
+		}
+
+		value = 0;
+		if (speed & NGBE_LINK_SPEED_1GB_FULL) {
+			hw->phy.autoneg_advertised |= NGBE_LINK_SPEED_1GB_FULL;
+			value |= YT_BCR_SPEED_SELECT1;
+		}
+		if (speed & NGBE_LINK_SPEED_100M_FULL) {
+			hw->phy.autoneg_advertised |= NGBE_LINK_SPEED_100M_FULL;
+			value |= YT_BCR_SPEED_SELECT0;
+		}
+		if (speed & NGBE_LINK_SPEED_10M_FULL)
+			hw->phy.autoneg_advertised |= NGBE_LINK_SPEED_10M_FULL;
+
+		/* duplex full */
+		value |= YT_BCR_DUPLEX | YT_BCR_RESET;
+		hw->phy.write_reg(hw, YT_BCR, 0, value);
+
+		/* software reset to make the above configuration take effect */
+		hw->phy.read_reg(hw, YT_BCR, 0, &value);
+		value |= YT_BCR_RESET | YT_BCR_ANE | YT_BCR_RESTART_AN;
+		hw->phy.write_reg(hw, 0x0, 0, value);
+
+skip_an_sr:
 		hw->phy.set_phy_power(hw, true);
 	}
 
-- 
2.27.0




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

* Re: [PATCH 1/7] net/txgbe: support OEM subsystem vendor ID
  2022-06-20  7:55 ` [PATCH 1/7] net/txgbe: support OEM subsystem vendor ID Jiawen Wu
@ 2022-06-21 12:19   ` Ferruh Yigit
  0 siblings, 0 replies; 13+ messages in thread
From: Ferruh Yigit @ 2022-06-21 12:19 UTC (permalink / raw)
  To: Jiawen Wu, dev

On 6/20/2022 8:55 AM, Jiawen Wu wrote:
> Add support for OEM subsystem vendor ID.
> 
> Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
> ---
>   doc/guides/rel_notes/release_22_07.rst |  4 +++
>   drivers/net/txgbe/base/txgbe_hw.c      | 37 ++++++++++++++++++++++++++
>   drivers/net/txgbe/base/txgbe_hw.h      |  2 ++
>   drivers/net/txgbe/txgbe_ethdev.c       | 12 +++++++++
>   4 files changed, 55 insertions(+)
> 
> diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
> index 6fc044edaa..96db85a707 100644
> --- a/doc/guides/rel_notes/release_22_07.rst
> +++ b/doc/guides/rel_notes/release_22_07.rst
> @@ -167,6 +167,10 @@ New Features
>   
>     * Added support for yt8531s PHY.
>   
> +* **Updated Wangxun txgbe driver.**
> +
> +  * Added support for OEM subsystem vendor ID.
> +
>   * **Added Elliptic Curve Diffie-Hellman (ECDH) algorithm in cryptodev.**
>   
>     Added support for Elliptic Curve Diffie Hellman (ECDH) asymmetric
> diff --git a/drivers/net/txgbe/base/txgbe_hw.c b/drivers/net/txgbe/base/txgbe_hw.c
> index 6a045cba79..8acebf8b60 100644
> --- a/drivers/net/txgbe/base/txgbe_hw.c
> +++ b/drivers/net/txgbe/base/txgbe_hw.c
> @@ -2608,6 +2608,43 @@ s32 txgbe_prot_autoc_write_raptor(struct txgbe_hw *hw, bool locked, u64 autoc)
>   	return err;
>   }
>   
> +/* cmd_addr is used for some special command:
> + * 1. to be sector address, when implemented erase sector command
> + * 2. to be flash address when implemented read, write flash address
> + */
> +u32 txgbe_fmgr_cmd_op(struct txgbe_hw *hw, u32 cmd, u32 cmd_addr)
> +{
> +	u32 cmd_val = 0;
> +	u32 i = 0;
> +

No need to initialize these variables.

> +	cmd_val = TXGBE_SPICMD_CMD(cmd) | TXGBE_SPICMD_CLK(3) | cmd_addr;
> +	wr32(hw, TXGBE_SPICMD, cmd_val);
> +
> +	for (i = 0; i < 10000; i++) {

May be good to have a macro for time, up to you
#defile TXGBE_100MS 100000
#define TXGBE_10US  10
for (delay = 0; delay < TXGBE_100MS; delay += TXGBE_10US) {
	...
	usec_delay(TXGBE_10US);
}

> +		if (rd32(hw, TXGBE_SPISTAT) & TXGBE_SPISTAT_OPDONE)
> +			break;
> +
> +		usec_delay(10);
> +	}
> +	if (i == 10000)
> +		return 1;
> +

May be good to comment function that it will return '1' on timeout 
(since some caller functions in the chain are checking explicit '0x1' 
return value.)

> +	return 0;
> +}
> +
> +u32 txgbe_flash_read_dword(struct txgbe_hw *hw, u32 addr)
> +{
> +	u32 status = 0;
> +

no initialization is required.

> +	status = txgbe_fmgr_cmd_op(hw, 1, addr);
> +	if (status) {
> +		DEBUGOUT("Read flash timeout.");
> +		return status;
> +	}
> +
> +	return rd32(hw, TXGBE_SPIDAT);
> +}
> +
>   /**
>    *  txgbe_init_ops_pf - Inits func ptrs and MAC type
>    *  @hw: pointer to hardware structure
> diff --git a/drivers/net/txgbe/base/txgbe_hw.h b/drivers/net/txgbe/base/txgbe_hw.h
> index fd2f7d784c..7031589f7c 100644
> --- a/drivers/net/txgbe/base/txgbe_hw.h
> +++ b/drivers/net/txgbe/base/txgbe_hw.h
> @@ -111,4 +111,6 @@ s32 txgbe_prot_autoc_read_raptor(struct txgbe_hw *hw, bool *locked, u64 *value);
>   s32 txgbe_prot_autoc_write_raptor(struct txgbe_hw *hw, bool locked, u64 value);
>   s32 txgbe_reinit_fdir_tables(struct txgbe_hw *hw);
>   bool txgbe_verify_lesm_fw_enabled_raptor(struct txgbe_hw *hw);
> +u32 txgbe_fmgr_cmd_op(struct txgbe_hw *hw, u32 cmd, u32 cmd_addr);
> +u32 txgbe_flash_read_dword(struct txgbe_hw *hw, u32 addr);
>   #endif /* _TXGBE_HW_H_ */
> diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
> index f0994f028d..6fb91cdf07 100644
> --- a/drivers/net/txgbe/txgbe_ethdev.c
> +++ b/drivers/net/txgbe/txgbe_ethdev.c
> @@ -552,6 +552,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
>   	const struct rte_memzone *mz;
>   	uint32_t ctrl_ext;
>   	uint16_t csum;
> +	u32 ssid = 0;

This is only used in 'else' block, you can move it to the context it is 
used, and again it seems not required to initialize.

>   	int err, i, ret;
>   
>   	PMD_INIT_FUNC_TRACE();
> @@ -594,6 +595,17 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
>   	/* Vendor and Device ID need to be set before init of shared code */
>   	hw->device_id = pci_dev->id.device_id;
>   	hw->vendor_id = pci_dev->id.vendor_id;
> +	if (pci_dev->id.subsystem_vendor_id == PCI_VENDOR_ID_WANGXUN) {
> +		hw->subsystem_device_id = pci_dev->id.subsystem_device_id;
> +	} else {
> +		ssid = txgbe_flash_read_dword(hw, 0xFFFDC);
> +		if (ssid == 0x1) {
> +			PMD_INIT_LOG(ERR,
> +				"Read of internal subsystem device id failed\n");
> +			return -ENODEV;
> +		}
> +		hw->subsystem_device_id = (u16)ssid >> 8 | (u16)ssid << 8;
> +	}
>   	hw->hw_addr = (void *)pci_dev->mem_resource[0].addr;
>   	hw->allow_unsupported_sfp = 1;
>   


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

* Re: [PATCH 2/7] net/ngbe: support OEM subsystem vendor ID
  2022-06-20  7:55 ` [PATCH 2/7] net/ngbe: " Jiawen Wu
@ 2022-06-21 12:19   ` Ferruh Yigit
  0 siblings, 0 replies; 13+ messages in thread
From: Ferruh Yigit @ 2022-06-21 12:19 UTC (permalink / raw)
  To: Jiawen Wu, dev

On 6/20/2022 8:55 AM, Jiawen Wu wrote:
> Add support for OEM subsystem vendor ID.
> 
> Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
> ---
>   doc/guides/rel_notes/release_22_07.rst |  1 +
>   drivers/net/ngbe/ngbe_ethdev.c         | 13 ++++++++++++-
>   2 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
> index 96db85a707..b26efb8719 100644
> --- a/doc/guides/rel_notes/release_22_07.rst
> +++ b/doc/guides/rel_notes/release_22_07.rst
> @@ -166,6 +166,7 @@ New Features
>   * **Updated Wangxun ngbe driver.**
>   
>     * Added support for yt8531s PHY.
> +  * Added support for OEM subsystem vendor ID.
>   
>   * **Updated Wangxun txgbe driver.**
>   
> diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
> index 5ac1c27a58..c4216f7e34 100644
> --- a/drivers/net/ngbe/ngbe_ethdev.c
> +++ b/drivers/net/ngbe/ngbe_ethdev.c
> @@ -315,6 +315,7 @@ eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
>   	const struct rte_memzone *mz;
>   	uint32_t ctrl_ext;
>   	u32 led_conf = 0;
> +	u32 ssid = 0;

Same comment with previous patch, can move the variable to the context 
it is used, and no need to initialize.

>   	int err, ret;
>   
>   	PMD_INIT_FUNC_TRACE();
> @@ -359,7 +360,17 @@ eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
>   	hw->back = pci_dev;
>   	hw->device_id = pci_dev->id.device_id;
>   	hw->vendor_id = pci_dev->id.vendor_id;
> -	hw->sub_system_id = pci_dev->id.subsystem_device_id;
> +	if (pci_dev->id.subsystem_vendor_id == PCI_VENDOR_ID_WANGXUN) {
> +		hw->sub_system_id = pci_dev->id.subsystem_device_id;
> +	} else {
> +		ssid = ngbe_flash_read_dword(hw, 0xFFFDC);
> +		if (ssid == 0x1) {
> +			PMD_INIT_LOG(ERR,
> +				"Read of internal subsystem device id failed\n");
> +			return -ENODEV;
> +		}
> +		hw->sub_system_id = (u16)ssid >> 8 | (u16)ssid << 8;
> +	}
>   	ngbe_map_device_id(hw);
>   	hw->hw_addr = (void *)pci_dev->mem_resource[0].addr;
>   


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

* Re: [PATCH 3/7] net/txgbe: fix register polling
  2022-06-20  7:55 ` [PATCH 3/7] net/txgbe: fix register polling Jiawen Wu
@ 2022-06-21 12:19   ` Ferruh Yigit
  2022-06-22  2:44     ` Jiawen Wu
  0 siblings, 1 reply; 13+ messages in thread
From: Ferruh Yigit @ 2022-06-21 12:19 UTC (permalink / raw)
  To: Jiawen Wu; +Cc: stable, dev

On 6/20/2022 8:55 AM, Jiawen Wu wrote:
> Fix to poll some specific registers, which expect bit 0.
> 
> Fixes: 24a4c76aff4d ("net/txgbe: add error types and registers")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
> ---
>   drivers/net/txgbe/base/txgbe_regs.h | 11 ++++++++---
>   1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/txgbe/base/txgbe_regs.h b/drivers/net/txgbe/base/txgbe_regs.h
> index 3139796911..911bb6e04e 100644
> --- a/drivers/net/txgbe/base/txgbe_regs.h
> +++ b/drivers/net/txgbe/base/txgbe_regs.h
> @@ -1864,8 +1864,13 @@ po32m(struct txgbe_hw *hw, u32 reg, u32 mask, u32 expect, u32 *actual,
>   	}
>   
>   	do {
> -		all |= rd32(hw, reg);
> -		value |= mask & all;
> +		if (expect != 0) {
> +			all |= rd32(hw, reg);
> +			value |= mask & all;
> +		} else {
> +			all = rd32(hw, reg);
> +			value = mask & all;
> +		}
>   		if (value == expect)
>   			break;
>   
> @@ -1898,7 +1903,7 @@ po32m(struct txgbe_hw *hw, u32 reg, u32 mask, u32 expect, u32 *actual,
>   
>   #define wr32w(hw, reg, val, mask, slice) do { \
>   	wr32((hw), reg, val); \
> -	po32m((hw), reg, mask, mask, NULL, 5, slice); \
> +	po32m((hw), reg, mask, 0, NULL, 5, slice); \

Just to double check, is this change intentional, to always expect 
reading '0' from registers after writing to them?

Perhaps you can explain a little more about this polling after 
read/write logic and what was wrong in the commit log.

>   } while (0)
>   
>   #define TXGBE_XPCS_IDAADDR    0x13000


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

* Re: [PATCH 0/7] Fixes and supports for Wangxun NICs
  2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
                   ` (6 preceding siblings ...)
  2022-06-20  7:55 ` [PATCH 7/7] net/ngbe: support YT PHY SGMII to RGMII mode Jiawen Wu
@ 2022-06-21 12:20 ` Ferruh Yigit
  7 siblings, 0 replies; 13+ messages in thread
From: Ferruh Yigit @ 2022-06-21 12:20 UTC (permalink / raw)
  To: Jiawen Wu, dev

On 6/20/2022 8:55 AM, Jiawen Wu wrote:
> Fix the remaining bugs, support more OEM devices.
> 
> Jiawen Wu (7):
>    net/txgbe: support OEM subsystem vendor ID
>    net/ngbe: support OEM subsystem vendor ID
>    net/txgbe: fix register polling
>    net/ngbe: add more packet statistics
>    net/ngbe: fix YT PHY UTP mode to link up
>    net/ngbe: support autoneg on/off for external PHY SFI mode
>    net/ngbe: support YT PHY SGMII to RGMII mode
> 

Hi Jiawen,

Patchset looks good to me, only I put a few comments for minor issues, 
can you please check?

Thanks,
ferruh

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

* RE: [PATCH 3/7] net/txgbe: fix register polling
  2022-06-21 12:19   ` Ferruh Yigit
@ 2022-06-22  2:44     ` Jiawen Wu
  0 siblings, 0 replies; 13+ messages in thread
From: Jiawen Wu @ 2022-06-22  2:44 UTC (permalink / raw)
  To: 'Ferruh Yigit'; +Cc: stable, dev

On Tuesday, June 21, 2022 8:19 PM, Ferruh Yigit wrote:
> On 6/20/2022 8:55 AM, Jiawen Wu wrote:
> > Fix to poll some specific registers, which expect bit 0.
> >
> > Fixes: 24a4c76aff4d ("net/txgbe: add error types and registers")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
> > ---
> >   drivers/net/txgbe/base/txgbe_regs.h | 11 ++++++++---
> >   1 file changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/txgbe/base/txgbe_regs.h
> > b/drivers/net/txgbe/base/txgbe_regs.h
> > index 3139796911..911bb6e04e 100644
> > --- a/drivers/net/txgbe/base/txgbe_regs.h
> > +++ b/drivers/net/txgbe/base/txgbe_regs.h
> > @@ -1864,8 +1864,13 @@ po32m(struct txgbe_hw *hw, u32 reg, u32 mask,
> u32 expect, u32 *actual,
> >   	}
> >
> >   	do {
> > -		all |= rd32(hw, reg);
> > -		value |= mask & all;
> > +		if (expect != 0) {
> > +			all |= rd32(hw, reg);
> > +			value |= mask & all;
> > +		} else {
> > +			all = rd32(hw, reg);
> > +			value = mask & all;
> > +		}
> >   		if (value == expect)
> >   			break;
> >
> > @@ -1898,7 +1903,7 @@ po32m(struct txgbe_hw *hw, u32 reg, u32 mask,
> > u32 expect, u32 *actual,
> >
> >   #define wr32w(hw, reg, val, mask, slice) do { \
> >   	wr32((hw), reg, val); \
> > -	po32m((hw), reg, mask, mask, NULL, 5, slice); \
> > +	po32m((hw), reg, mask, 0, NULL, 5, slice); \
> 
> Just to double check, is this change intentional, to always expect reading '0'
> from registers after writing to them?
> 
> Perhaps you can explain a little more about this polling after read/write logic
> and what was wrong in the commit log.
> 

This is exactly what register expects. 'wr32w' is used for IPsec Rx Index register.
For this register, when write command bit set, the content of register affected, and immediately self cleared by hardware.
So it always expect reading '0' from register mask 'TXGBE_IPSRXIDX_WRITE'.

> >   } while (0)
> >
> >   #define TXGBE_XPCS_IDAADDR    0x13000





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

end of thread, other threads:[~2022-06-22  2:44 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-20  7:55 [PATCH 0/7] Fixes and supports for Wangxun NICs Jiawen Wu
2022-06-20  7:55 ` [PATCH 1/7] net/txgbe: support OEM subsystem vendor ID Jiawen Wu
2022-06-21 12:19   ` Ferruh Yigit
2022-06-20  7:55 ` [PATCH 2/7] net/ngbe: " Jiawen Wu
2022-06-21 12:19   ` Ferruh Yigit
2022-06-20  7:55 ` [PATCH 3/7] net/txgbe: fix register polling Jiawen Wu
2022-06-21 12:19   ` Ferruh Yigit
2022-06-22  2:44     ` Jiawen Wu
2022-06-20  7:55 ` [PATCH 4/7] net/ngbe: add more packet statistics Jiawen Wu
2022-06-20  7:55 ` [PATCH 5/7] net/ngbe: fix YT PHY UTP mode to link up Jiawen Wu
2022-06-20  7:55 ` [PATCH 6/7] net/ngbe: support autoneg on/off for external PHY SFI mode Jiawen Wu
2022-06-20  7:55 ` [PATCH 7/7] net/ngbe: support YT PHY SGMII to RGMII mode Jiawen Wu
2022-06-21 12:20 ` [PATCH 0/7] Fixes and supports for Wangxun NICs Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).