aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHimanshu Madhani <himanshu.madhani@qlogic.com>2012-12-31 22:20:18 -0500
committerDavid S. Miller <davem@davemloft.net>2013-01-02 05:43:26 -0500
commita15ebd371992dbadb8a30367fd80cb5cd73b8fb1 (patch)
tree26323d75ebb7488410d52c52e7a6f9514625e2c6
parent7e2cf4feba058476324dc545e3d1b316998c91e6 (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.h8
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c35
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c144
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
14struct crb_addr_pair { 11struct 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
597out_err: 594out_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
430static void 430static void
431qlcnic_teardown_intr(struct qlcnic_adapter *adapter) 431qlcnic_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);
572err_lock: 572err_lock:
573 return ret; 573 return ret;
@@ -682,19 +682,26 @@ static void qlcnic_get_board_name(struct qlcnic_adapter *adapter, char *name)
682static void 682static void
683qlcnic_check_options(struct qlcnic_adapter *adapter) 683qlcnic_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
1107err_out: 1115err_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);
2204err: 2214err:
@@ -2213,12 +2223,13 @@ static int
2213qlcnic_check_drv_state(struct qlcnic_adapter *adapter) 2223qlcnic_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
2232static int qlcnic_check_idc_ver(struct qlcnic_adapter *adapter) 2243static 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)) {
2370skip_ack_check: 2383skip_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
2406wait_npar: 2421wait_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
2833static void qlcnic_io_resume(struct pci_dev *pdev) 2852static 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}