When determining NIC's WOL and NCSI capability via sub-system ID,
flag matching must be exact, not inclusive. Misidentifying WOL/NCSI
capability will skip PHY configuration, causing link-up failure.

Fixes: 5f1ab0d529fc ("net/ngbe: add WOL and NCSI capability")
Cc: sta...@dpdk.org

Signed-off-by: Zaiyu Wang <zaiyuw...@trustnetic.com>
---
 drivers/net/ngbe/base/ngbe_hw.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ngbe/base/ngbe_hw.c b/drivers/net/ngbe/base/ngbe_hw.c
index e29a1946e5..6688ae6a31 100644
--- a/drivers/net/ngbe/base/ngbe_hw.c
+++ b/drivers/net/ngbe/base/ngbe_hw.c
@@ -1922,6 +1922,8 @@ void ngbe_read_efuse(struct ngbe_hw *hw)
 void ngbe_map_device_id(struct ngbe_hw *hw)
 {
        u16 oem = hw->sub_system_id & NGBE_OEM_MASK;
+       u16 ncsi = hw->sub_system_id & NGBE_NCSI_SUP_MASK;
+       u16 wol = hw->sub_system_id & NGBE_WOL_SUP_MASK;
 
        hw->is_pf = true;
 
@@ -1982,9 +1984,9 @@ void ngbe_map_device_id(struct ngbe_hw *hw)
                        oem == NGBE_LY_YT8521S_SFP)
                hw->gpio_ctl = true;
 
-       hw->wol_enabled = (hw->sub_system_id & NGBE_WOL_SUP_MASK) ? true : 
false;
-       hw->ncsi_enabled = (hw->sub_system_id & NGBE_NCSI_SUP_MASK ||
-                           hw->sub_system_id & NGBE_OCP_CARD) ? true : false;
+       hw->wol_enabled = (wol == NGBE_WOL_SUP_MASK) ? true : false;
+       hw->ncsi_enabled = (ncsi == NGBE_NCSI_SUP_MASK ||
+                          oem == NGBE_OCP_CARD) ? true : false;
 }
 
 /**
-- 
2.21.0.windows.1

Reply via email to