Skip to content

Commit

Permalink
qlcnic: fix chip reset logic
Browse files Browse the repository at this point in the history
Chip reset logic (IDC logic) has changed with fw dump support.
This broked compatibility with driver using older IDC logic.
Changes to make it compatible with drivers using older IDC logic.

Signed-off-by: Sritej Velaga <sritej.velaga@qlogic.com>
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Sritej Velaga authored and David S. Miller committed Jul 14, 2011
1 parent 41c2178 commit 7b749ff
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions drivers/net/qlcnic/qlcnic_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2811,6 +2811,7 @@ qlcnic_fwinit_work(struct work_struct *work)
struct qlcnic_adapter *adapter = container_of(work,
struct qlcnic_adapter, fw_work.work);
u32 dev_state = 0xf;
u32 val;

if (qlcnic_api_lock(adapter))
goto err_ret;
Expand All @@ -2837,11 +2838,6 @@ qlcnic_fwinit_work(struct work_struct *work)

if (!qlcnic_check_drv_state(adapter)) {
skip_ack_check:
if (!(adapter->flags & QLCNIC_FW_RESET_OWNER)) {
qlcnic_api_unlock(adapter);
goto wait_npar;
}

dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);

if (dev_state == QLCNIC_DEV_NEED_RESET) {
Expand All @@ -2850,17 +2846,22 @@ qlcnic_fwinit_work(struct work_struct *work)
set_bit(__QLCNIC_START_FW, &adapter->state);
QLCDB(adapter, DRV, "Restarting fw\n");
qlcnic_idc_debug_info(adapter, 0);
val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
QLC_DEV_SET_RST_RDY(val, adapter->portnum);
QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
}

qlcnic_api_unlock(adapter);

rtnl_lock();
if (adapter->ahw->fw_dump.enable) {
if (adapter->ahw->fw_dump.enable &&
(adapter->flags & QLCNIC_FW_RESET_OWNER)) {
QLCDB(adapter, DRV, "Take FW dump\n");
qlcnic_dump_fw(adapter);
adapter->flags &= ~QLCNIC_FW_RESET_OWNER;
}
rtnl_unlock();

adapter->flags &= ~QLCNIC_FW_RESET_OWNER;
if (!adapter->nic_ops->start_firmware(adapter)) {
qlcnic_schedule_work(adapter, qlcnic_attach_work, 0);
adapter->fw_wait_cnt = 0;
Expand Down

0 comments on commit 7b749ff

Please sign in to comment.