net/ngbe: support OEM subsystem vendor ID
authorJiawen Wu <jiawenwu@trustnetic.com>
Wed, 22 Jun 2022 06:56:08 +0000 (14:56 +0800)
committerFerruh Yigit <ferruh.yigit@xilinx.com>
Wed, 22 Jun 2022 10:32:41 +0000 (12:32 +0200)
Add support for OEM subsystem vendor ID.

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
doc/guides/rel_notes/release_22_07.rst
drivers/net/ngbe/base/ngbe_hw.c
drivers/net/ngbe/base/ngbe_type.h
drivers/net/ngbe/ngbe_ethdev.c

index 5c0743a..ddf6c35 100644 (file)
@@ -176,6 +176,7 @@ New Features
 * **Updated Wangxun ngbe driver.**
 
   * Added support for yt8531s PHY.
+  * Added support for OEM subsystem vendor ID.
 
 * **Updated Wangxun txgbe driver.**
 
index c1114ba..283cdca 100644 (file)
@@ -1822,22 +1822,23 @@ s32 ngbe_enable_rx_dma(struct ngbe_hw *hw, u32 regval)
 /* 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
+ *
+ * Return 0 on success, return 1 on failure.
  */
 u32 ngbe_fmgr_cmd_op(struct ngbe_hw *hw, u32 cmd, u32 cmd_addr)
 {
-       u32 cmd_val = 0;
-       u32 i = 0;
+       u32 cmd_val, i;
 
        cmd_val = NGBE_SPICMD_CMD(cmd) | NGBE_SPICMD_CLK(3) | cmd_addr;
        wr32(hw, NGBE_SPICMD, cmd_val);
 
-       for (i = 0; i < 10000; i++) {
+       for (i = 0; i < NGBE_SPI_TIMEOUT; i++) {
                if (rd32(hw, NGBE_SPISTAT) & NGBE_SPISTAT_OPDONE)
                        break;
 
                usec_delay(10);
        }
-       if (i == 10000)
+       if (i == NGBE_SPI_TIMEOUT)
                return 1;
 
        return 0;
@@ -1845,10 +1846,10 @@ u32 ngbe_fmgr_cmd_op(struct ngbe_hw *hw, u32 cmd, u32 cmd_addr)
 
 u32 ngbe_flash_read_dword(struct ngbe_hw *hw, u32 addr)
 {
-       u32 status = 0;
+       u32 status;
 
        status = ngbe_fmgr_cmd_op(hw, 1, addr);
-       if (status) {
+       if (status == 0x1) {
                DEBUGOUT("Read flash timeout.");
                return status;
        }
index 0ad4766..4a6c273 100644 (file)
@@ -18,7 +18,7 @@
 #define NGBE_MAX_UTA              128
 
 #define NGBE_PCI_MASTER_DISABLE_TIMEOUT        800
-
+#define NGBE_SPI_TIMEOUT       10000
 
 #define NGBE_ALIGN             128 /* as intel did */
 #define NGBE_ISB_SIZE          16
index 5ac1c27..ee09d54 100644 (file)
@@ -359,7 +359,19 @@ 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 {
+               u32 ssid;
+
+               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;