Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

qlcnic: fix fw recovery for PF

Privilege function should wait for npar state to be operational
before creating context.

Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Amit Kumar Salecha and committed by
David S. Miller
b18971d1 8cf61f89

+17 -5
+17 -5
drivers/net/qlcnic/qlcnic_main.c
··· 997 997 set_dev_ready: 998 998 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_READY); 999 999 qlcnic_idc_debug_info(adapter, 1); 1000 - err = qlcnic_check_npar_opertional(adapter); 1001 - if (err) { 1002 - qlcnic_release_firmware(adapter); 1003 - return err; 1004 - } 1000 + 1005 1001 if (qlcnic_set_default_offload_settings(adapter)) 1006 1002 goto err_out; 1007 1003 if (qlcnic_reset_npar_config(adapter)) ··· 2598 2602 2599 2603 if (!adapter->nic_ops->start_firmware(adapter)) { 2600 2604 qlcnic_schedule_work(adapter, qlcnic_attach_work, 0); 2605 + adapter->fw_wait_cnt = 0; 2601 2606 return; 2602 2607 } 2603 2608 goto err_ret; ··· 2614 2617 case QLCNIC_DEV_READY: 2615 2618 if (!adapter->nic_ops->start_firmware(adapter)) { 2616 2619 qlcnic_schedule_work(adapter, qlcnic_attach_work, 0); 2620 + adapter->fw_wait_cnt = 0; 2617 2621 return; 2618 2622 } 2619 2623 case QLCNIC_DEV_FAILED: ··· 2748 2750 struct qlcnic_adapter *adapter = container_of(work, 2749 2751 struct qlcnic_adapter, fw_work.work); 2750 2752 struct net_device *netdev = adapter->netdev; 2753 + u32 npar_state; 2751 2754 2755 + if (adapter->op_mode != QLCNIC_MGMT_FUNC) { 2756 + npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); 2757 + if (adapter->fw_wait_cnt++ > QLCNIC_DEV_NPAR_OPER_TIMEO) 2758 + qlcnic_clr_all_drv_state(adapter, 0); 2759 + else if (npar_state != QLCNIC_DEV_NPAR_OPER) 2760 + qlcnic_schedule_work(adapter, qlcnic_attach_work, 2761 + FW_POLL_DELAY); 2762 + else 2763 + goto attach; 2764 + QLCDB(adapter, DRV, "Waiting for NPAR state to operational\n"); 2765 + return; 2766 + } 2767 + attach: 2752 2768 if (netif_running(netdev)) { 2753 2769 if (qlcnic_up(adapter, netdev)) 2754 2770 goto done;