diff options
author | Himanshu Madhani <himanshu.madhani@qlogic.com> | 2012-12-31 22:20:18 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-02 05:43:26 -0500 |
commit | a15ebd371992dbadb8a30367fd80cb5cd73b8fb1 (patch) | |
tree | 26323d75ebb7488410d52c52e7a6f9514625e2c6 | |
parent | 7e2cf4feba058476324dc545e3d1b316998c91e6 (diff) |
qlcnic: macros for common register access
Refactor 82xx driver to support new adapter - Qlogic 83XX CNA
Use QLC_SHARED_REG_RD32 and QLC__SHARED_REG_WR32 macros
for 82xx and 83xx common register access.
Signed-off-by: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: Sony Chacko <sony.chacko@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | 35 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 144 |
3 files changed, 107 insertions, 80 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h index 2b9537d8c167..937d75f939aa 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h | |||
@@ -28,6 +28,14 @@ enum qlcnic_regs { | |||
28 | QLCNIC_FLASH_UNLOCK, | 28 | QLCNIC_FLASH_UNLOCK, |
29 | }; | 29 | }; |
30 | 30 | ||
31 | /* Read from an address offset from BAR0, existing registers */ | ||
32 | #define QLC_SHARED_REG_RD32(a, addr) \ | ||
33 | readl(((a)->ahw->pci_base0) + ((a)->ahw->reg_tbl[addr])) | ||
34 | |||
35 | /* Write to an address offset from BAR0, existing registers */ | ||
36 | #define QLC_SHARED_REG_WR32(a, addr, value) \ | ||
37 | writel(value, ((a)->ahw->pci_base0) + ((a)->ahw->reg_tbl[addr])) | ||
38 | |||
31 | #define QLCNIC_CMD_CONFIGURE_IP_ADDR 0x1 | 39 | #define QLCNIC_CMD_CONFIGURE_IP_ADDR 0x1 |
32 | #define QLCNIC_CMD_CONFIG_INTRPT 0x2 | 40 | #define QLCNIC_CMD_CONFIG_INTRPT 0x2 |
33 | #define QLCNIC_CMD_CREATE_RX_CTX 0x7 | 41 | #define QLCNIC_CMD_CREATE_RX_CTX 0x7 |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c index de79cde233de..4b41f9b43124 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | |||
@@ -5,11 +5,8 @@ | |||
5 | * See LICENSE.qlcnic for copyright and licensing details. | 5 | * See LICENSE.qlcnic for copyright and licensing details. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <linux/netdevice.h> | ||
9 | #include <linux/delay.h> | ||
10 | #include <linux/slab.h> | ||
11 | #include <linux/if_vlan.h> | ||
12 | #include "qlcnic.h" | 8 | #include "qlcnic.h" |
9 | #include "qlcnic_hw.h" | ||
13 | 10 | ||
14 | struct crb_addr_pair { | 11 | struct crb_addr_pair { |
15 | u32 addr; | 12 | u32 addr; |
@@ -327,7 +324,6 @@ static int qlcnic_wait_rom_done(struct qlcnic_adapter *adapter) | |||
327 | long done = 0; | 324 | long done = 0; |
328 | 325 | ||
329 | cond_resched(); | 326 | cond_resched(); |
330 | |||
331 | while (done == 0) { | 327 | while (done == 0) { |
332 | done = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_STATUS); | 328 | done = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_STATUS); |
333 | done &= 2; | 329 | done &= 2; |
@@ -416,8 +412,8 @@ int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter) | |||
416 | u32 off; | 412 | u32 off; |
417 | struct pci_dev *pdev = adapter->pdev; | 413 | struct pci_dev *pdev = adapter->pdev; |
418 | 414 | ||
419 | QLCWR32(adapter, CRB_CMDPEG_STATE, 0); | 415 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CMDPEG_STATE, 0); |
420 | QLCWR32(adapter, CRB_RCVPEG_STATE, 0); | 416 | QLC_SHARED_REG_WR32(adapter, QLCNIC_RCVPEG_STATE, 0); |
421 | 417 | ||
422 | /* Halt all the indiviual PEGs and other blocks */ | 418 | /* Halt all the indiviual PEGs and other blocks */ |
423 | /* disable all I2Q */ | 419 | /* disable all I2Q */ |
@@ -564,8 +560,8 @@ int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter) | |||
564 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0xc, 0); | 560 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0xc, 0); |
565 | msleep(1); | 561 | msleep(1); |
566 | 562 | ||
567 | QLCWR32(adapter, QLCNIC_PEG_HALT_STATUS1, 0); | 563 | QLC_SHARED_REG_WR32(adapter, QLCNIC_PEG_HALT_STATUS1, 0); |
568 | QLCWR32(adapter, QLCNIC_PEG_HALT_STATUS2, 0); | 564 | QLC_SHARED_REG_WR32(adapter, QLCNIC_PEG_HALT_STATUS2, 0); |
569 | 565 | ||
570 | return 0; | 566 | return 0; |
571 | } | 567 | } |
@@ -576,7 +572,7 @@ static int qlcnic_cmd_peg_ready(struct qlcnic_adapter *adapter) | |||
576 | int retries = QLCNIC_CMDPEG_CHECK_RETRY_COUNT; | 572 | int retries = QLCNIC_CMDPEG_CHECK_RETRY_COUNT; |
577 | 573 | ||
578 | do { | 574 | do { |
579 | val = QLCRD32(adapter, CRB_CMDPEG_STATE); | 575 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CMDPEG_STATE); |
580 | 576 | ||
581 | switch (val) { | 577 | switch (val) { |
582 | case PHAN_INITIALIZE_COMPLETE: | 578 | case PHAN_INITIALIZE_COMPLETE: |
@@ -592,7 +588,8 @@ static int qlcnic_cmd_peg_ready(struct qlcnic_adapter *adapter) | |||
592 | 588 | ||
593 | } while (--retries); | 589 | } while (--retries); |
594 | 590 | ||
595 | QLCWR32(adapter, CRB_CMDPEG_STATE, PHAN_INITIALIZE_FAILED); | 591 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CMDPEG_STATE, |
592 | PHAN_INITIALIZE_FAILED); | ||
596 | 593 | ||
597 | out_err: | 594 | out_err: |
598 | dev_err(&adapter->pdev->dev, "Command Peg initialization not " | 595 | dev_err(&adapter->pdev->dev, "Command Peg initialization not " |
@@ -607,7 +604,7 @@ qlcnic_receive_peg_ready(struct qlcnic_adapter *adapter) | |||
607 | int retries = QLCNIC_RCVPEG_CHECK_RETRY_COUNT; | 604 | int retries = QLCNIC_RCVPEG_CHECK_RETRY_COUNT; |
608 | 605 | ||
609 | do { | 606 | do { |
610 | val = QLCRD32(adapter, CRB_RCVPEG_STATE); | 607 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_RCVPEG_STATE); |
611 | 608 | ||
612 | if (val == PHAN_PEG_RCV_INITIALIZED) | 609 | if (val == PHAN_PEG_RCV_INITIALIZED) |
613 | return 0; | 610 | return 0; |
@@ -638,7 +635,7 @@ qlcnic_check_fw_status(struct qlcnic_adapter *adapter) | |||
638 | if (err) | 635 | if (err) |
639 | return err; | 636 | return err; |
640 | 637 | ||
641 | QLCWR32(adapter, CRB_CMDPEG_STATE, PHAN_INITIALIZE_ACK); | 638 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CMDPEG_STATE, PHAN_INITIALIZE_ACK); |
642 | 639 | ||
643 | return err; | 640 | return err; |
644 | } | 641 | } |
@@ -649,7 +646,7 @@ qlcnic_setup_idc_param(struct qlcnic_adapter *adapter) { | |||
649 | int timeo; | 646 | int timeo; |
650 | u32 val; | 647 | u32 val; |
651 | 648 | ||
652 | val = QLCRD32(adapter, QLCNIC_CRB_DEV_PARTITION_INFO); | 649 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_PARTITION_INFO); |
653 | val = QLC_DEV_GET_DRV(val, adapter->portnum); | 650 | val = QLC_DEV_GET_DRV(val, adapter->portnum); |
654 | if ((val & 0x3) != QLCNIC_TYPE_NIC) { | 651 | if ((val & 0x3) != QLCNIC_TYPE_NIC) { |
655 | dev_err(&adapter->pdev->dev, | 652 | dev_err(&adapter->pdev->dev, |
@@ -689,7 +686,7 @@ static int qlcnic_get_flt_entry(struct qlcnic_adapter *adapter, u8 region, | |||
689 | } | 686 | } |
690 | 687 | ||
691 | entry_size = flt_hdr.len - sizeof(struct qlcnic_flt_header); | 688 | entry_size = flt_hdr.len - sizeof(struct qlcnic_flt_header); |
692 | flt_entry = (struct qlcnic_flt_entry *)vzalloc(entry_size); | 689 | flt_entry = vzalloc(entry_size); |
693 | if (flt_entry == NULL) { | 690 | if (flt_entry == NULL) { |
694 | dev_warn(&adapter->pdev->dev, "error allocating memory\n"); | 691 | dev_warn(&adapter->pdev->dev, "error allocating memory\n"); |
695 | return -EIO; | 692 | return -EIO; |
@@ -1096,11 +1093,13 @@ qlcnic_check_fw_hearbeat(struct qlcnic_adapter *adapter) | |||
1096 | u32 heartbeat, ret = -EIO; | 1093 | u32 heartbeat, ret = -EIO; |
1097 | int retries = QLCNIC_HEARTBEAT_CHECK_RETRY_COUNT; | 1094 | int retries = QLCNIC_HEARTBEAT_CHECK_RETRY_COUNT; |
1098 | 1095 | ||
1099 | adapter->heartbeat = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER); | 1096 | adapter->heartbeat = QLC_SHARED_REG_RD32(adapter, |
1097 | QLCNIC_PEG_ALIVE_COUNTER); | ||
1100 | 1098 | ||
1101 | do { | 1099 | do { |
1102 | msleep(QLCNIC_HEARTBEAT_PERIOD_MSECS); | 1100 | msleep(QLCNIC_HEARTBEAT_PERIOD_MSECS); |
1103 | heartbeat = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER); | 1101 | heartbeat = QLC_SHARED_REG_RD32(adapter, |
1102 | QLCNIC_PEG_ALIVE_COUNTER); | ||
1104 | if (heartbeat != adapter->heartbeat) { | 1103 | if (heartbeat != adapter->heartbeat) { |
1105 | ret = QLCNIC_RCODE_SUCCESS; | 1104 | ret = QLCNIC_RCODE_SUCCESS; |
1106 | break; | 1105 | break; |
@@ -1270,7 +1269,7 @@ qlcnic_validate_firmware(struct qlcnic_adapter *adapter) | |||
1270 | return -EINVAL; | 1269 | return -EINVAL; |
1271 | } | 1270 | } |
1272 | 1271 | ||
1273 | QLCWR32(adapter, QLCNIC_CAM_RAM(0x1fc), QLCNIC_BDINFO_MAGIC); | 1272 | QLC_SHARED_REG_WR32(adapter, QLCNIC_FW_IMG_VALID, QLCNIC_BDINFO_MAGIC); |
1274 | return 0; | 1273 | return 0; |
1275 | } | 1274 | } |
1276 | 1275 | ||
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index 70d325c19dcf..73b4f670e1c2 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/interrupt.h> | 10 | #include <linux/interrupt.h> |
11 | 11 | ||
12 | #include "qlcnic.h" | 12 | #include "qlcnic.h" |
13 | #include "qlcnic_hw.h" | ||
13 | 14 | ||
14 | #include <linux/swab.h> | 15 | #include <linux/swab.h> |
15 | #include <linux/dma-mapping.h> | 16 | #include <linux/dma-mapping.h> |
@@ -426,7 +427,6 @@ int qlcnic_82xx_setup_intr(struct qlcnic_adapter *adapter, u8 num_intr) | |||
426 | qlcnic_enable_msi_legacy(adapter); | 427 | qlcnic_enable_msi_legacy(adapter); |
427 | return 0; | 428 | return 0; |
428 | } | 429 | } |
429 | |||
430 | static void | 430 | static void |
431 | qlcnic_teardown_intr(struct qlcnic_adapter *adapter) | 431 | qlcnic_teardown_intr(struct qlcnic_adapter *adapter) |
432 | { | 432 | { |
@@ -562,12 +562,12 @@ qlcnic_set_function_modes(struct qlcnic_adapter *adapter) | |||
562 | QLC_DEV_SET_DRV(0xf, id)); | 562 | QLC_DEV_SET_DRV(0xf, id)); |
563 | } | 563 | } |
564 | } else { | 564 | } else { |
565 | data = QLCRD32(adapter, QLCNIC_DRV_OP_MODE); | 565 | data = QLC_SHARED_REG_RD32(adapter, QLCNIC_DRV_OP_MODE); |
566 | data = (data & ~QLC_DEV_SET_DRV(0xf, ahw->pci_func)) | | 566 | data = (data & ~QLC_DEV_SET_DRV(0xf, ahw->pci_func)) | |
567 | (QLC_DEV_SET_DRV(QLCNIC_MGMT_FUNC, | 567 | (QLC_DEV_SET_DRV(QLCNIC_MGMT_FUNC, |
568 | ahw->pci_func)); | 568 | ahw->pci_func)); |
569 | } | 569 | } |
570 | QLCWR32(adapter, QLCNIC_DRV_OP_MODE, data); | 570 | QLC_SHARED_REG_WR32(adapter, QLCNIC_DRV_OP_MODE, data); |
571 | qlcnic_api_unlock(adapter); | 571 | qlcnic_api_unlock(adapter); |
572 | err_lock: | 572 | err_lock: |
573 | return ret; | 573 | return ret; |
@@ -682,19 +682,26 @@ static void qlcnic_get_board_name(struct qlcnic_adapter *adapter, char *name) | |||
682 | static void | 682 | static void |
683 | qlcnic_check_options(struct qlcnic_adapter *adapter) | 683 | qlcnic_check_options(struct qlcnic_adapter *adapter) |
684 | { | 684 | { |
685 | int err; | ||
685 | u32 fw_major, fw_minor, fw_build, prev_fw_version; | 686 | u32 fw_major, fw_minor, fw_build, prev_fw_version; |
686 | struct pci_dev *pdev = adapter->pdev; | 687 | struct pci_dev *pdev = adapter->pdev; |
687 | struct qlcnic_fw_dump *fw_dump = &adapter->ahw->fw_dump; | 688 | struct qlcnic_hardware_context *ahw = adapter->ahw; |
689 | struct qlcnic_fw_dump *fw_dump = &ahw->fw_dump; | ||
688 | 690 | ||
689 | prev_fw_version = adapter->fw_version; | 691 | prev_fw_version = adapter->fw_version; |
690 | 692 | ||
691 | fw_major = QLCRD32(adapter, QLCNIC_FW_VERSION_MAJOR); | 693 | fw_major = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_MAJOR); |
692 | fw_minor = QLCRD32(adapter, QLCNIC_FW_VERSION_MINOR); | 694 | fw_minor = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_MINOR); |
693 | fw_build = QLCRD32(adapter, QLCNIC_FW_VERSION_SUB); | 695 | fw_build = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_SUB); |
694 | 696 | ||
695 | adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build); | 697 | adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build); |
696 | 698 | ||
697 | if (adapter->ahw->op_mode != QLCNIC_NON_PRIV_FUNC) { | 699 | err = qlcnic_get_board_info(adapter); |
700 | if (err) { | ||
701 | dev_err(&pdev->dev, "Error getting board config info.\n"); | ||
702 | return; | ||
703 | } | ||
704 | if (ahw->op_mode != QLCNIC_NON_PRIV_FUNC) { | ||
698 | if (fw_dump->tmpl_hdr == NULL || | 705 | if (fw_dump->tmpl_hdr == NULL || |
699 | adapter->fw_version > prev_fw_version) { | 706 | adapter->fw_version > prev_fw_version) { |
700 | if (fw_dump->tmpl_hdr) | 707 | if (fw_dump->tmpl_hdr) |
@@ -1010,10 +1017,12 @@ static int qlcnic_check_npar_opertional(struct qlcnic_adapter *adapter) | |||
1010 | if (adapter->ahw->op_mode == QLCNIC_MGMT_FUNC) | 1017 | if (adapter->ahw->op_mode == QLCNIC_MGMT_FUNC) |
1011 | return 0; | 1018 | return 0; |
1012 | 1019 | ||
1013 | npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); | 1020 | npar_state = QLC_SHARED_REG_RD32(adapter, |
1021 | QLCNIC_CRB_DEV_NPAR_STATE); | ||
1014 | while (npar_state != QLCNIC_DEV_NPAR_OPER && --npar_opt_timeo) { | 1022 | while (npar_state != QLCNIC_DEV_NPAR_OPER && --npar_opt_timeo) { |
1015 | msleep(1000); | 1023 | msleep(1000); |
1016 | npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); | 1024 | npar_state = QLC_SHARED_REG_RD32(adapter, |
1025 | QLCNIC_CRB_DEV_NPAR_STATE); | ||
1017 | } | 1026 | } |
1018 | if (!npar_opt_timeo) { | 1027 | if (!npar_opt_timeo) { |
1019 | dev_err(&adapter->pdev->dev, | 1028 | dev_err(&adapter->pdev->dev, |
@@ -1085,9 +1094,8 @@ check_fw_status: | |||
1085 | if (err) | 1094 | if (err) |
1086 | goto err_out; | 1095 | goto err_out; |
1087 | 1096 | ||
1088 | QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_READY); | 1097 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_READY); |
1089 | qlcnic_idc_debug_info(adapter, 1); | 1098 | qlcnic_idc_debug_info(adapter, 1); |
1090 | |||
1091 | err = qlcnic_check_eswitch_mode(adapter); | 1099 | err = qlcnic_check_eswitch_mode(adapter); |
1092 | if (err) { | 1100 | if (err) { |
1093 | dev_err(&adapter->pdev->dev, | 1101 | dev_err(&adapter->pdev->dev, |
@@ -1105,7 +1113,7 @@ check_fw_status: | |||
1105 | return 0; | 1113 | return 0; |
1106 | 1114 | ||
1107 | err_out: | 1115 | err_out: |
1108 | QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_FAILED); | 1116 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_FAILED); |
1109 | dev_err(&adapter->pdev->dev, "Device state set to failed\n"); | 1117 | dev_err(&adapter->pdev->dev, "Device state set to failed\n"); |
1110 | 1118 | ||
1111 | qlcnic_release_firmware(adapter); | 1119 | qlcnic_release_firmware(adapter); |
@@ -1969,7 +1977,7 @@ static int qlcnic_check_temp(struct qlcnic_adapter *adapter) | |||
1969 | int rv = 0; | 1977 | int rv = 0; |
1970 | 1978 | ||
1971 | if (qlcnic_82xx_check(adapter)) | 1979 | if (qlcnic_82xx_check(adapter)) |
1972 | temp = QLCRD32(adapter, CRB_TEMP_STATE); | 1980 | temp = QLC_SHARED_REG_RD32(adapter, QLCNIC_ASIC_TEMP); |
1973 | 1981 | ||
1974 | temp_state = qlcnic_get_temp_state(temp); | 1982 | temp_state = qlcnic_get_temp_state(temp); |
1975 | temp_val = qlcnic_get_temp_val(temp); | 1983 | temp_val = qlcnic_get_temp_val(temp); |
@@ -2131,7 +2139,7 @@ qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding) | |||
2131 | val |= encoding << 7; | 2139 | val |= encoding << 7; |
2132 | val |= (jiffies - adapter->dev_rst_time) << 8; | 2140 | val |= (jiffies - adapter->dev_rst_time) << 8; |
2133 | 2141 | ||
2134 | QLCWR32(adapter, QLCNIC_CRB_DRV_SCRATCH, val); | 2142 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_SCRATCH, val); |
2135 | adapter->dev_rst_time = jiffies; | 2143 | adapter->dev_rst_time = jiffies; |
2136 | } | 2144 | } |
2137 | 2145 | ||
@@ -2146,14 +2154,14 @@ qlcnic_set_drv_state(struct qlcnic_adapter *adapter, u8 state) | |||
2146 | if (qlcnic_api_lock(adapter)) | 2154 | if (qlcnic_api_lock(adapter)) |
2147 | return -EIO; | 2155 | return -EIO; |
2148 | 2156 | ||
2149 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); | 2157 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_STATE); |
2150 | 2158 | ||
2151 | if (state == QLCNIC_DEV_NEED_RESET) | 2159 | if (state == QLCNIC_DEV_NEED_RESET) |
2152 | QLC_DEV_SET_RST_RDY(val, adapter->portnum); | 2160 | QLC_DEV_SET_RST_RDY(val, adapter->portnum); |
2153 | else if (state == QLCNIC_DEV_NEED_QUISCENT) | 2161 | else if (state == QLCNIC_DEV_NEED_QUISCENT) |
2154 | QLC_DEV_SET_QSCNT_RDY(val, adapter->portnum); | 2162 | QLC_DEV_SET_QSCNT_RDY(val, adapter->portnum); |
2155 | 2163 | ||
2156 | QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); | 2164 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_STATE, val); |
2157 | 2165 | ||
2158 | qlcnic_api_unlock(adapter); | 2166 | qlcnic_api_unlock(adapter); |
2159 | 2167 | ||
@@ -2168,9 +2176,9 @@ qlcnic_clr_drv_state(struct qlcnic_adapter *adapter) | |||
2168 | if (qlcnic_api_lock(adapter)) | 2176 | if (qlcnic_api_lock(adapter)) |
2169 | return -EBUSY; | 2177 | return -EBUSY; |
2170 | 2178 | ||
2171 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); | 2179 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_STATE); |
2172 | QLC_DEV_CLR_RST_QSCNT(val, adapter->portnum); | 2180 | QLC_DEV_CLR_RST_QSCNT(val, adapter->portnum); |
2173 | QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); | 2181 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_STATE, val); |
2174 | 2182 | ||
2175 | qlcnic_api_unlock(adapter); | 2183 | qlcnic_api_unlock(adapter); |
2176 | 2184 | ||
@@ -2185,20 +2193,22 @@ qlcnic_clr_all_drv_state(struct qlcnic_adapter *adapter, u8 failed) | |||
2185 | if (qlcnic_api_lock(adapter)) | 2193 | if (qlcnic_api_lock(adapter)) |
2186 | goto err; | 2194 | goto err; |
2187 | 2195 | ||
2188 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); | 2196 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_ACTIVE); |
2189 | QLC_DEV_CLR_REF_CNT(val, adapter->portnum); | 2197 | QLC_DEV_CLR_REF_CNT(val, adapter->portnum); |
2190 | QLCWR32(adapter, QLCNIC_CRB_DRV_ACTIVE, val); | 2198 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_ACTIVE, val); |
2191 | 2199 | ||
2192 | if (failed) { | 2200 | if (failed) { |
2193 | QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_FAILED); | 2201 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_STATE, |
2202 | QLCNIC_DEV_FAILED); | ||
2194 | dev_info(&adapter->pdev->dev, | 2203 | dev_info(&adapter->pdev->dev, |
2195 | "Device state set to Failed. Please Reboot\n"); | 2204 | "Device state set to Failed. Please Reboot\n"); |
2196 | } else if (!(val & 0x11111111)) | 2205 | } else if (!(val & 0x11111111)) |
2197 | QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_COLD); | 2206 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_STATE, |
2207 | QLCNIC_DEV_COLD); | ||
2198 | 2208 | ||
2199 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); | 2209 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_STATE); |
2200 | QLC_DEV_CLR_RST_QSCNT(val, adapter->portnum); | 2210 | QLC_DEV_CLR_RST_QSCNT(val, adapter->portnum); |
2201 | QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); | 2211 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_STATE, val); |
2202 | 2212 | ||
2203 | qlcnic_api_unlock(adapter); | 2213 | qlcnic_api_unlock(adapter); |
2204 | err: | 2214 | err: |
@@ -2213,12 +2223,13 @@ static int | |||
2213 | qlcnic_check_drv_state(struct qlcnic_adapter *adapter) | 2223 | qlcnic_check_drv_state(struct qlcnic_adapter *adapter) |
2214 | { | 2224 | { |
2215 | int act, state, active_mask; | 2225 | int act, state, active_mask; |
2226 | struct qlcnic_hardware_context *ahw = adapter->ahw; | ||
2216 | 2227 | ||
2217 | state = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); | 2228 | state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_STATE); |
2218 | act = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); | 2229 | act = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_ACTIVE); |
2219 | 2230 | ||
2220 | if (adapter->flags & QLCNIC_FW_RESET_OWNER) { | 2231 | if (adapter->flags & QLCNIC_FW_RESET_OWNER) { |
2221 | active_mask = (~(1 << (adapter->ahw->pci_func * 4))); | 2232 | active_mask = (~(1 << (ahw->pci_func * 4))); |
2222 | act = act & active_mask; | 2233 | act = act & active_mask; |
2223 | } | 2234 | } |
2224 | 2235 | ||
@@ -2231,7 +2242,7 @@ qlcnic_check_drv_state(struct qlcnic_adapter *adapter) | |||
2231 | 2242 | ||
2232 | static int qlcnic_check_idc_ver(struct qlcnic_adapter *adapter) | 2243 | static int qlcnic_check_idc_ver(struct qlcnic_adapter *adapter) |
2233 | { | 2244 | { |
2234 | u32 val = QLCRD32(adapter, QLCNIC_CRB_DRV_IDC_VER); | 2245 | u32 val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_IDC_VER); |
2235 | 2246 | ||
2236 | if (val != QLCNIC_DRV_IDC_VER) { | 2247 | if (val != QLCNIC_DRV_IDC_VER) { |
2237 | dev_warn(&adapter->pdev->dev, "IDC Version mismatch, driver's" | 2248 | dev_warn(&adapter->pdev->dev, "IDC Version mismatch, driver's" |
@@ -2255,19 +2266,21 @@ qlcnic_can_start_firmware(struct qlcnic_adapter *adapter) | |||
2255 | if (qlcnic_api_lock(adapter)) | 2266 | if (qlcnic_api_lock(adapter)) |
2256 | return -1; | 2267 | return -1; |
2257 | 2268 | ||
2258 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); | 2269 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_ACTIVE); |
2259 | if (!(val & (1 << (portnum * 4)))) { | 2270 | if (!(val & (1 << (portnum * 4)))) { |
2260 | QLC_DEV_SET_REF_CNT(val, portnum); | 2271 | QLC_DEV_SET_REF_CNT(val, portnum); |
2261 | QLCWR32(adapter, QLCNIC_CRB_DRV_ACTIVE, val); | 2272 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_ACTIVE, val); |
2262 | } | 2273 | } |
2263 | 2274 | ||
2264 | prev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); | 2275 | prev_state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_STATE); |
2265 | QLCDB(adapter, HW, "Device state = %u\n", prev_state); | 2276 | QLCDB(adapter, HW, "Device state = %u\n", prev_state); |
2266 | 2277 | ||
2267 | switch (prev_state) { | 2278 | switch (prev_state) { |
2268 | case QLCNIC_DEV_COLD: | 2279 | case QLCNIC_DEV_COLD: |
2269 | QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_INITIALIZING); | 2280 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_STATE, |
2270 | QLCWR32(adapter, QLCNIC_CRB_DRV_IDC_VER, QLCNIC_DRV_IDC_VER); | 2281 | QLCNIC_DEV_INITIALIZING); |
2282 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_IDC_VER, | ||
2283 | QLCNIC_DRV_IDC_VER); | ||
2271 | qlcnic_idc_debug_info(adapter, 0); | 2284 | qlcnic_idc_debug_info(adapter, 0); |
2272 | qlcnic_api_unlock(adapter); | 2285 | qlcnic_api_unlock(adapter); |
2273 | return 1; | 2286 | return 1; |
@@ -2278,15 +2291,15 @@ qlcnic_can_start_firmware(struct qlcnic_adapter *adapter) | |||
2278 | return ret; | 2291 | return ret; |
2279 | 2292 | ||
2280 | case QLCNIC_DEV_NEED_RESET: | 2293 | case QLCNIC_DEV_NEED_RESET: |
2281 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); | 2294 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_STATE); |
2282 | QLC_DEV_SET_RST_RDY(val, portnum); | 2295 | QLC_DEV_SET_RST_RDY(val, portnum); |
2283 | QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); | 2296 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_STATE, val); |
2284 | break; | 2297 | break; |
2285 | 2298 | ||
2286 | case QLCNIC_DEV_NEED_QUISCENT: | 2299 | case QLCNIC_DEV_NEED_QUISCENT: |
2287 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); | 2300 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_STATE); |
2288 | QLC_DEV_SET_QSCNT_RDY(val, portnum); | 2301 | QLC_DEV_SET_QSCNT_RDY(val, portnum); |
2289 | QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); | 2302 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_STATE, val); |
2290 | break; | 2303 | break; |
2291 | 2304 | ||
2292 | case QLCNIC_DEV_FAILED: | 2305 | case QLCNIC_DEV_FAILED: |
@@ -2303,7 +2316,7 @@ qlcnic_can_start_firmware(struct qlcnic_adapter *adapter) | |||
2303 | 2316 | ||
2304 | do { | 2317 | do { |
2305 | msleep(1000); | 2318 | msleep(1000); |
2306 | prev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); | 2319 | prev_state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_STATE); |
2307 | 2320 | ||
2308 | if (prev_state == QLCNIC_DEV_QUISCENT) | 2321 | if (prev_state == QLCNIC_DEV_QUISCENT) |
2309 | continue; | 2322 | continue; |
@@ -2318,9 +2331,9 @@ qlcnic_can_start_firmware(struct qlcnic_adapter *adapter) | |||
2318 | if (qlcnic_api_lock(adapter)) | 2331 | if (qlcnic_api_lock(adapter)) |
2319 | return -1; | 2332 | return -1; |
2320 | 2333 | ||
2321 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); | 2334 | val = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DRV_STATE); |
2322 | QLC_DEV_CLR_RST_QSCNT(val, portnum); | 2335 | QLC_DEV_CLR_RST_QSCNT(val, portnum); |
2323 | QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); | 2336 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DRV_STATE, val); |
2324 | 2337 | ||
2325 | ret = qlcnic_check_idc_ver(adapter); | 2338 | ret = qlcnic_check_idc_ver(adapter); |
2326 | qlcnic_api_unlock(adapter); | 2339 | qlcnic_api_unlock(adapter); |
@@ -2339,7 +2352,7 @@ qlcnic_fwinit_work(struct work_struct *work) | |||
2339 | if (qlcnic_api_lock(adapter)) | 2352 | if (qlcnic_api_lock(adapter)) |
2340 | goto err_ret; | 2353 | goto err_ret; |
2341 | 2354 | ||
2342 | dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); | 2355 | dev_state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_STATE); |
2343 | if (dev_state == QLCNIC_DEV_QUISCENT || | 2356 | if (dev_state == QLCNIC_DEV_QUISCENT || |
2344 | dev_state == QLCNIC_DEV_NEED_QUISCENT) { | 2357 | dev_state == QLCNIC_DEV_NEED_QUISCENT) { |
2345 | qlcnic_api_unlock(adapter); | 2358 | qlcnic_api_unlock(adapter); |
@@ -2368,17 +2381,19 @@ qlcnic_fwinit_work(struct work_struct *work) | |||
2368 | 2381 | ||
2369 | if (!qlcnic_check_drv_state(adapter)) { | 2382 | if (!qlcnic_check_drv_state(adapter)) { |
2370 | skip_ack_check: | 2383 | skip_ack_check: |
2371 | dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); | 2384 | dev_state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_STATE); |
2372 | 2385 | ||
2373 | if (dev_state == QLCNIC_DEV_NEED_RESET) { | 2386 | if (dev_state == QLCNIC_DEV_NEED_RESET) { |
2374 | QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, | 2387 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_STATE, |
2375 | QLCNIC_DEV_INITIALIZING); | 2388 | QLCNIC_DEV_INITIALIZING); |
2376 | set_bit(__QLCNIC_START_FW, &adapter->state); | 2389 | set_bit(__QLCNIC_START_FW, &adapter->state); |
2377 | QLCDB(adapter, DRV, "Restarting fw\n"); | 2390 | QLCDB(adapter, DRV, "Restarting fw\n"); |
2378 | qlcnic_idc_debug_info(adapter, 0); | 2391 | qlcnic_idc_debug_info(adapter, 0); |
2379 | val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); | 2392 | val = QLC_SHARED_REG_RD32(adapter, |
2393 | QLCNIC_CRB_DRV_STATE); | ||
2380 | QLC_DEV_SET_RST_RDY(val, adapter->portnum); | 2394 | QLC_DEV_SET_RST_RDY(val, adapter->portnum); |
2381 | QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); | 2395 | QLC_SHARED_REG_WR32(adapter, |
2396 | QLCNIC_CRB_DRV_STATE, val); | ||
2382 | } | 2397 | } |
2383 | 2398 | ||
2384 | qlcnic_api_unlock(adapter); | 2399 | qlcnic_api_unlock(adapter); |
@@ -2404,7 +2419,7 @@ skip_ack_check: | |||
2404 | qlcnic_api_unlock(adapter); | 2419 | qlcnic_api_unlock(adapter); |
2405 | 2420 | ||
2406 | wait_npar: | 2421 | wait_npar: |
2407 | dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); | 2422 | dev_state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_STATE); |
2408 | QLCDB(adapter, HW, "Func waiting: Device state=%u\n", dev_state); | 2423 | QLCDB(adapter, HW, "Func waiting: Device state=%u\n", dev_state); |
2409 | 2424 | ||
2410 | switch (dev_state) { | 2425 | switch (dev_state) { |
@@ -2446,7 +2461,7 @@ qlcnic_detach_work(struct work_struct *work) | |||
2446 | } else | 2461 | } else |
2447 | qlcnic_down(adapter, netdev); | 2462 | qlcnic_down(adapter, netdev); |
2448 | 2463 | ||
2449 | status = QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1); | 2464 | status = QLC_SHARED_REG_RD32(adapter, QLCNIC_PEG_HALT_STATUS1); |
2450 | 2465 | ||
2451 | if (status & QLCNIC_RCODE_FATAL_ERROR) { | 2466 | if (status & QLCNIC_RCODE_FATAL_ERROR) { |
2452 | dev_err(&adapter->pdev->dev, | 2467 | dev_err(&adapter->pdev->dev, |
@@ -2497,13 +2512,14 @@ qlcnic_set_npar_non_operational(struct qlcnic_adapter *adapter) | |||
2497 | { | 2512 | { |
2498 | u32 state; | 2513 | u32 state; |
2499 | 2514 | ||
2500 | state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); | 2515 | state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); |
2501 | if (state == QLCNIC_DEV_NPAR_NON_OPER) | 2516 | if (state == QLCNIC_DEV_NPAR_NON_OPER) |
2502 | return; | 2517 | return; |
2503 | 2518 | ||
2504 | if (qlcnic_api_lock(adapter)) | 2519 | if (qlcnic_api_lock(adapter)) |
2505 | return; | 2520 | return; |
2506 | QLCWR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, QLCNIC_DEV_NPAR_NON_OPER); | 2521 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, |
2522 | QLCNIC_DEV_NPAR_NON_OPER); | ||
2507 | qlcnic_api_unlock(adapter); | 2523 | qlcnic_api_unlock(adapter); |
2508 | } | 2524 | } |
2509 | 2525 | ||
@@ -2551,7 +2567,8 @@ qlcnic_dev_set_npar_ready(struct qlcnic_adapter *adapter) | |||
2551 | if (qlcnic_api_lock(adapter)) | 2567 | if (qlcnic_api_lock(adapter)) |
2552 | return; | 2568 | return; |
2553 | 2569 | ||
2554 | QLCWR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, QLCNIC_DEV_NPAR_OPER); | 2570 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, |
2571 | QLCNIC_DEV_NPAR_OPER); | ||
2555 | QLCDB(adapter, DRV, "NPAR operational state set\n"); | 2572 | QLCDB(adapter, DRV, "NPAR operational state set\n"); |
2556 | 2573 | ||
2557 | qlcnic_api_unlock(adapter); | 2574 | qlcnic_api_unlock(adapter); |
@@ -2590,7 +2607,8 @@ qlcnic_attach_work(struct work_struct *work) | |||
2590 | u32 npar_state; | 2607 | u32 npar_state; |
2591 | 2608 | ||
2592 | if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) { | 2609 | if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) { |
2593 | npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); | 2610 | npar_state = QLC_SHARED_REG_RD32(adapter, |
2611 | QLCNIC_CRB_DEV_NPAR_STATE); | ||
2594 | if (adapter->fw_wait_cnt++ > QLCNIC_DEV_NPAR_OPER_TIMEO) | 2612 | if (adapter->fw_wait_cnt++ > QLCNIC_DEV_NPAR_OPER_TIMEO) |
2595 | qlcnic_clr_all_drv_state(adapter, 0); | 2613 | qlcnic_clr_all_drv_state(adapter, 0); |
2596 | else if (npar_state != QLCNIC_DEV_NPAR_OPER) | 2614 | else if (npar_state != QLCNIC_DEV_NPAR_OPER) |
@@ -2632,14 +2650,14 @@ qlcnic_check_health(struct qlcnic_adapter *adapter) | |||
2632 | if (adapter->need_fw_reset) | 2650 | if (adapter->need_fw_reset) |
2633 | qlcnic_dev_request_reset(adapter, 0); | 2651 | qlcnic_dev_request_reset(adapter, 0); |
2634 | 2652 | ||
2635 | state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); | 2653 | state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_STATE); |
2636 | if (state == QLCNIC_DEV_NEED_RESET) { | 2654 | if (state == QLCNIC_DEV_NEED_RESET) { |
2637 | qlcnic_set_npar_non_operational(adapter); | 2655 | qlcnic_set_npar_non_operational(adapter); |
2638 | adapter->need_fw_reset = 1; | 2656 | adapter->need_fw_reset = 1; |
2639 | } else if (state == QLCNIC_DEV_NEED_QUISCENT) | 2657 | } else if (state == QLCNIC_DEV_NEED_QUISCENT) |
2640 | goto detach; | 2658 | goto detach; |
2641 | 2659 | ||
2642 | heartbeat = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER); | 2660 | heartbeat = QLC_SHARED_REG_RD32(adapter, QLCNIC_PEG_ALIVE_COUNTER); |
2643 | if (heartbeat != adapter->heartbeat) { | 2661 | if (heartbeat != adapter->heartbeat) { |
2644 | adapter->heartbeat = heartbeat; | 2662 | adapter->heartbeat = heartbeat; |
2645 | adapter->fw_fail_cnt = 0; | 2663 | adapter->fw_fail_cnt = 0; |
@@ -2665,19 +2683,19 @@ qlcnic_check_health(struct qlcnic_adapter *adapter) | |||
2665 | clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state); | 2683 | clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state); |
2666 | 2684 | ||
2667 | dev_err(&adapter->pdev->dev, "firmware hang detected\n"); | 2685 | dev_err(&adapter->pdev->dev, "firmware hang detected\n"); |
2686 | peg_status = QLC_SHARED_REG_RD32(adapter, QLCNIC_PEG_HALT_STATUS1); | ||
2668 | dev_err(&adapter->pdev->dev, "Dumping hw/fw registers\n" | 2687 | dev_err(&adapter->pdev->dev, "Dumping hw/fw registers\n" |
2669 | "PEG_HALT_STATUS1: 0x%x, PEG_HALT_STATUS2: 0x%x,\n" | 2688 | "PEG_HALT_STATUS1: 0x%x, PEG_HALT_STATUS2: 0x%x,\n" |
2670 | "PEG_NET_0_PC: 0x%x, PEG_NET_1_PC: 0x%x,\n" | 2689 | "PEG_NET_0_PC: 0x%x, PEG_NET_1_PC: 0x%x,\n" |
2671 | "PEG_NET_2_PC: 0x%x, PEG_NET_3_PC: 0x%x,\n" | 2690 | "PEG_NET_2_PC: 0x%x, PEG_NET_3_PC: 0x%x,\n" |
2672 | "PEG_NET_4_PC: 0x%x\n", | 2691 | "PEG_NET_4_PC: 0x%x\n", |
2673 | QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1), | 2692 | peg_status, |
2674 | QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS2), | 2693 | QLC_SHARED_REG_RD32(adapter, QLCNIC_PEG_HALT_STATUS2), |
2675 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x3c), | 2694 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x3c), |
2676 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_1 + 0x3c), | 2695 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_1 + 0x3c), |
2677 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x3c), | 2696 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x3c), |
2678 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x3c), | 2697 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x3c), |
2679 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x3c)); | 2698 | QLCRD32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x3c)); |
2680 | peg_status = QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1); | ||
2681 | if (QLCNIC_FWERROR_CODE(peg_status) == 0x67) | 2699 | if (QLCNIC_FWERROR_CODE(peg_status) == 0x67) |
2682 | dev_err(&adapter->pdev->dev, | 2700 | dev_err(&adapter->pdev->dev, |
2683 | "Firmware aborted with error code 0x00006700. " | 2701 | "Firmware aborted with error code 0x00006700. " |
@@ -2761,7 +2779,8 @@ static int qlcnic_attach_func(struct pci_dev *pdev) | |||
2761 | if (adapter->ahw->op_mode != QLCNIC_NON_PRIV_FUNC && first_func) { | 2779 | if (adapter->ahw->op_mode != QLCNIC_NON_PRIV_FUNC && first_func) { |
2762 | adapter->need_fw_reset = 1; | 2780 | adapter->need_fw_reset = 1; |
2763 | set_bit(__QLCNIC_START_FW, &adapter->state); | 2781 | set_bit(__QLCNIC_START_FW, &adapter->state); |
2764 | QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_INITIALIZING); | 2782 | QLC_SHARED_REG_WR32(adapter, QLCNIC_CRB_DEV_STATE, |
2783 | QLCNIC_DEV_INITIALIZING); | ||
2765 | QLCDB(adapter, DRV, "Restarting fw\n"); | 2784 | QLCDB(adapter, DRV, "Restarting fw\n"); |
2766 | } | 2785 | } |
2767 | qlcnic_api_unlock(adapter); | 2786 | qlcnic_api_unlock(adapter); |
@@ -2832,12 +2851,13 @@ static pci_ers_result_t qlcnic_io_slot_reset(struct pci_dev *pdev) | |||
2832 | 2851 | ||
2833 | static void qlcnic_io_resume(struct pci_dev *pdev) | 2852 | static void qlcnic_io_resume(struct pci_dev *pdev) |
2834 | { | 2853 | { |
2854 | u32 state; | ||
2835 | struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); | 2855 | struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); |
2836 | 2856 | ||
2837 | pci_cleanup_aer_uncorrect_error_status(pdev); | 2857 | pci_cleanup_aer_uncorrect_error_status(pdev); |
2838 | 2858 | state = QLC_SHARED_REG_RD32(adapter, QLCNIC_CRB_DEV_STATE); | |
2839 | if (QLCRD32(adapter, QLCNIC_CRB_DEV_STATE) == QLCNIC_DEV_READY && | 2859 | if (state == QLCNIC_DEV_READY && test_and_clear_bit(__QLCNIC_AER, |
2840 | test_and_clear_bit(__QLCNIC_AER, &adapter->state)) | 2860 | &adapter->state)) |
2841 | qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, | 2861 | qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, |
2842 | FW_POLL_DELAY); | 2862 | FW_POLL_DELAY); |
2843 | } | 2863 | } |