net/bnxt: fix speed autonegotiation
[dpdk.git] / drivers / net / ngbe / ngbe_ethdev.c
index cc530fd..4a2a9dd 100644 (file)
@@ -314,6 +314,7 @@ eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
        struct rte_intr_handle *intr_handle = pci_dev->intr_handle;
        const struct rte_memzone *mz;
        uint32_t ctrl_ext;
+       u32 led_conf = 0;
        int err, ret;
 
        PMD_INIT_FUNC_TRACE();
@@ -401,6 +402,12 @@ eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
                return -EIO;
        }
 
+       err = hw->phy.led_oem_chk(hw, &led_conf);
+       if (err == 0)
+               hw->led_conf = led_conf;
+       else
+               hw->led_conf = 0xFFFF;
+
        err = hw->mac.init_hw(hw);
        if (err != 0) {
                PMD_INIT_LOG(ERR, "Hardware Initialization Failure: %d", err);
@@ -1097,8 +1104,7 @@ skip_link_setup:
        /* resume enabled intr since HW reset */
        ngbe_enable_intr(dev);
 
-       if ((hw->sub_system_id & NGBE_OEM_MASK) == NGBE_LY_M88E1512_SFP ||
-               (hw->sub_system_id & NGBE_OEM_MASK) == NGBE_LY_YT8521S_SFP) {
+       if (hw->gpio_ctl) {
                /* gpio0 is used to power on/off control*/
                wr32(hw, NGBE_GPIODATA, 0);
        }
@@ -1141,8 +1147,7 @@ ngbe_dev_stop(struct rte_eth_dev *dev)
 
        rte_eal_alarm_cancel(ngbe_dev_setup_link_alarm_handler, dev);
 
-       if ((hw->sub_system_id & NGBE_OEM_MASK) == NGBE_LY_M88E1512_SFP ||
-               (hw->sub_system_id & NGBE_OEM_MASK) == NGBE_LY_YT8521S_SFP) {
+       if (hw->gpio_ctl) {
                /* gpio0 is used to power on/off control*/
                wr32(hw, NGBE_GPIODATA, NGBE_GPIOBIT_0);
        }