aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r--drivers/scsi/qla2xxx/qla_attr.c3
-rw-r--r--drivers/scsi/qla2xxx/qla_bsg.c72
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c8
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h4
-rw-r--r--drivers/scsi/qla2xxx/qla_fw.h21
-rw-r--r--drivers/scsi/qla2xxx/qla_gbl.h3
-rw-r--r--drivers/scsi/qla2xxx/qla_gs.c6
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c153
-rw-r--r--drivers/scsi/qla2xxx/qla_iocb.c15
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c38
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c6
-rw-r--r--drivers/scsi/qla2xxx/qla_nx.c79
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c57
-rw-r--r--drivers/scsi/qla2xxx/qla_target.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_version.h2
15 files changed, 243 insertions, 226 deletions
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 1c28215f8bed..83d798428c10 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -1615,8 +1615,7 @@ qla2x00_terminate_rport_io(struct fc_rport *rport)
1615 * At this point all fcport's software-states are cleared. Perform any 1615 * At this point all fcport's software-states are cleared. Perform any
1616 * final cleanup of firmware resources (PCBs and XCBs). 1616 * final cleanup of firmware resources (PCBs and XCBs).
1617 */ 1617 */
1618 if (fcport->loop_id != FC_NO_LOOP_ID && 1618 if (fcport->loop_id != FC_NO_LOOP_ID) {
1619 !test_bit(UNLOADING, &fcport->vha->dpc_flags)) {
1620 if (IS_FWI2_CAPABLE(fcport->vha->hw)) 1619 if (IS_FWI2_CAPABLE(fcport->vha->hw))
1621 fcport->vha->hw->isp_ops->fabric_logout(fcport->vha, 1620 fcport->vha->hw->isp_ops->fabric_logout(fcport->vha,
1622 fcport->loop_id, fcport->d_id.b.domain, 1621 fcport->loop_id, fcport->d_id.b.domain,
diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
index 2f9bddd3c616..9f34dedcdad7 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.c
+++ b/drivers/scsi/qla2xxx/qla_bsg.c
@@ -219,7 +219,8 @@ qla24xx_proc_fcp_prio_cfg_cmd(struct fc_bsg_job *bsg_job)
219 break; 219 break;
220 } 220 }
221exit_fcp_prio_cfg: 221exit_fcp_prio_cfg:
222 bsg_job->job_done(bsg_job); 222 if (!ret)
223 bsg_job->job_done(bsg_job);
223 return ret; 224 return ret;
224} 225}
225 226
@@ -741,9 +742,8 @@ qla2x00_process_loopback(struct fc_bsg_job *bsg_job)
741 if (qla81xx_get_port_config(vha, config)) { 742 if (qla81xx_get_port_config(vha, config)) {
742 ql_log(ql_log_warn, vha, 0x701f, 743 ql_log(ql_log_warn, vha, 0x701f,
743 "Get port config failed.\n"); 744 "Get port config failed.\n");
744 bsg_job->reply->result = (DID_ERROR << 16);
745 rval = -EPERM; 745 rval = -EPERM;
746 goto done_free_dma_req; 746 goto done_free_dma_rsp;
747 } 747 }
748 748
749 ql_dbg(ql_dbg_user, vha, 0x70c0, 749 ql_dbg(ql_dbg_user, vha, 0x70c0,
@@ -761,9 +761,8 @@ qla2x00_process_loopback(struct fc_bsg_job *bsg_job)
761 new_config, elreq.options); 761 new_config, elreq.options);
762 762
763 if (rval) { 763 if (rval) {
764 bsg_job->reply->result = (DID_ERROR << 16);
765 rval = -EPERM; 764 rval = -EPERM;
766 goto done_free_dma_req; 765 goto done_free_dma_rsp;
767 } 766 }
768 767
769 type = "FC_BSG_HST_VENDOR_LOOPBACK"; 768 type = "FC_BSG_HST_VENDOR_LOOPBACK";
@@ -795,9 +794,8 @@ qla2x00_process_loopback(struct fc_bsg_job *bsg_job)
795 "MPI reset failed.\n"); 794 "MPI reset failed.\n");
796 } 795 }
797 796
798 bsg_job->reply->result = (DID_ERROR << 16);
799 rval = -EIO; 797 rval = -EIO;
800 goto done_free_dma_req; 798 goto done_free_dma_rsp;
801 } 799 }
802 } else { 800 } else {
803 type = "FC_BSG_HST_VENDOR_LOOPBACK"; 801 type = "FC_BSG_HST_VENDOR_LOOPBACK";
@@ -812,34 +810,27 @@ qla2x00_process_loopback(struct fc_bsg_job *bsg_job)
812 ql_log(ql_log_warn, vha, 0x702c, 810 ql_log(ql_log_warn, vha, 0x702c,
813 "Vendor request %s failed.\n", type); 811 "Vendor request %s failed.\n", type);
814 812
815 fw_sts_ptr = ((uint8_t *)bsg_job->req->sense) +
816 sizeof(struct fc_bsg_reply);
817
818 memcpy(fw_sts_ptr, response, sizeof(response));
819 fw_sts_ptr += sizeof(response);
820 *fw_sts_ptr = command_sent;
821 rval = 0; 813 rval = 0;
822 bsg_job->reply->result = (DID_ERROR << 16); 814 bsg_job->reply->result = (DID_ERROR << 16);
815 bsg_job->reply->reply_payload_rcv_len = 0;
823 } else { 816 } else {
824 ql_dbg(ql_dbg_user, vha, 0x702d, 817 ql_dbg(ql_dbg_user, vha, 0x702d,
825 "Vendor request %s completed.\n", type); 818 "Vendor request %s completed.\n", type);
826 819 bsg_job->reply->result = (DID_OK << 16);
827 bsg_job->reply_len = sizeof(struct fc_bsg_reply) +
828 sizeof(response) + sizeof(uint8_t);
829 bsg_job->reply->reply_payload_rcv_len =
830 bsg_job->reply_payload.payload_len;
831 fw_sts_ptr = ((uint8_t *)bsg_job->req->sense) +
832 sizeof(struct fc_bsg_reply);
833 memcpy(fw_sts_ptr, response, sizeof(response));
834 fw_sts_ptr += sizeof(response);
835 *fw_sts_ptr = command_sent;
836 bsg_job->reply->result = DID_OK;
837 sg_copy_from_buffer(bsg_job->reply_payload.sg_list, 820 sg_copy_from_buffer(bsg_job->reply_payload.sg_list,
838 bsg_job->reply_payload.sg_cnt, rsp_data, 821 bsg_job->reply_payload.sg_cnt, rsp_data,
839 rsp_data_len); 822 rsp_data_len);
840 } 823 }
841 bsg_job->job_done(bsg_job);
842 824
825 bsg_job->reply_len = sizeof(struct fc_bsg_reply) +
826 sizeof(response) + sizeof(uint8_t);
827 fw_sts_ptr = ((uint8_t *)bsg_job->req->sense) +
828 sizeof(struct fc_bsg_reply);
829 memcpy(fw_sts_ptr, response, sizeof(response));
830 fw_sts_ptr += sizeof(response);
831 *fw_sts_ptr = command_sent;
832
833done_free_dma_rsp:
843 dma_free_coherent(&ha->pdev->dev, rsp_data_len, 834 dma_free_coherent(&ha->pdev->dev, rsp_data_len,
844 rsp_data, rsp_data_dma); 835 rsp_data, rsp_data_dma);
845done_free_dma_req: 836done_free_dma_req:
@@ -853,6 +844,8 @@ done_unmap_req_sg:
853 dma_unmap_sg(&ha->pdev->dev, 844 dma_unmap_sg(&ha->pdev->dev,
854 bsg_job->request_payload.sg_list, 845 bsg_job->request_payload.sg_list,
855 bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE); 846 bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);
847 if (!rval)
848 bsg_job->job_done(bsg_job);
856 return rval; 849 return rval;
857} 850}
858 851
@@ -877,16 +870,15 @@ qla84xx_reset(struct fc_bsg_job *bsg_job)
877 if (rval) { 870 if (rval) {
878 ql_log(ql_log_warn, vha, 0x7030, 871 ql_log(ql_log_warn, vha, 0x7030,
879 "Vendor request 84xx reset failed.\n"); 872 "Vendor request 84xx reset failed.\n");
880 rval = 0; 873 rval = (DID_ERROR << 16);
881 bsg_job->reply->result = (DID_ERROR << 16);
882 874
883 } else { 875 } else {
884 ql_dbg(ql_dbg_user, vha, 0x7031, 876 ql_dbg(ql_dbg_user, vha, 0x7031,
885 "Vendor request 84xx reset completed.\n"); 877 "Vendor request 84xx reset completed.\n");
886 bsg_job->reply->result = DID_OK; 878 bsg_job->reply->result = DID_OK;
879 bsg_job->job_done(bsg_job);
887 } 880 }
888 881
889 bsg_job->job_done(bsg_job);
890 return rval; 882 return rval;
891} 883}
892 884
@@ -976,8 +968,7 @@ qla84xx_updatefw(struct fc_bsg_job *bsg_job)
976 ql_log(ql_log_warn, vha, 0x7037, 968 ql_log(ql_log_warn, vha, 0x7037,
977 "Vendor request 84xx updatefw failed.\n"); 969 "Vendor request 84xx updatefw failed.\n");
978 970
979 rval = 0; 971 rval = (DID_ERROR << 16);
980 bsg_job->reply->result = (DID_ERROR << 16);
981 } else { 972 } else {
982 ql_dbg(ql_dbg_user, vha, 0x7038, 973 ql_dbg(ql_dbg_user, vha, 0x7038,
983 "Vendor request 84xx updatefw completed.\n"); 974 "Vendor request 84xx updatefw completed.\n");
@@ -986,7 +977,6 @@ qla84xx_updatefw(struct fc_bsg_job *bsg_job)
986 bsg_job->reply->result = DID_OK; 977 bsg_job->reply->result = DID_OK;
987 } 978 }
988 979
989 bsg_job->job_done(bsg_job);
990 dma_pool_free(ha->s_dma_pool, mn, mn_dma); 980 dma_pool_free(ha->s_dma_pool, mn, mn_dma);
991 981
992done_free_fw_buf: 982done_free_fw_buf:
@@ -996,6 +986,8 @@ done_unmap_sg:
996 dma_unmap_sg(&ha->pdev->dev, bsg_job->request_payload.sg_list, 986 dma_unmap_sg(&ha->pdev->dev, bsg_job->request_payload.sg_list,
997 bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE); 987 bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);
998 988
989 if (!rval)
990 bsg_job->job_done(bsg_job);
999 return rval; 991 return rval;
1000} 992}
1001 993
@@ -1163,8 +1155,7 @@ qla84xx_mgmt_cmd(struct fc_bsg_job *bsg_job)
1163 ql_log(ql_log_warn, vha, 0x7043, 1155 ql_log(ql_log_warn, vha, 0x7043,
1164 "Vendor request 84xx mgmt failed.\n"); 1156 "Vendor request 84xx mgmt failed.\n");
1165 1157
1166 rval = 0; 1158 rval = (DID_ERROR << 16);
1167 bsg_job->reply->result = (DID_ERROR << 16);
1168 1159
1169 } else { 1160 } else {
1170 ql_dbg(ql_dbg_user, vha, 0x7044, 1161 ql_dbg(ql_dbg_user, vha, 0x7044,
@@ -1184,8 +1175,6 @@ qla84xx_mgmt_cmd(struct fc_bsg_job *bsg_job)
1184 } 1175 }
1185 } 1176 }
1186 1177
1187 bsg_job->job_done(bsg_job);
1188
1189done_unmap_sg: 1178done_unmap_sg:
1190 if (mgmt_b) 1179 if (mgmt_b)
1191 dma_free_coherent(&ha->pdev->dev, data_len, mgmt_b, mgmt_dma); 1180 dma_free_coherent(&ha->pdev->dev, data_len, mgmt_b, mgmt_dma);
@@ -1200,6 +1189,8 @@ done_unmap_sg:
1200exit_mgmt: 1189exit_mgmt:
1201 dma_pool_free(ha->s_dma_pool, mn, mn_dma); 1190 dma_pool_free(ha->s_dma_pool, mn, mn_dma);
1202 1191
1192 if (!rval)
1193 bsg_job->job_done(bsg_job);
1203 return rval; 1194 return rval;
1204} 1195}
1205 1196
@@ -1276,9 +1267,7 @@ qla24xx_iidma(struct fc_bsg_job *bsg_job)
1276 fcport->port_name[3], fcport->port_name[4], 1267 fcport->port_name[3], fcport->port_name[4],
1277 fcport->port_name[5], fcport->port_name[6], 1268 fcport->port_name[5], fcport->port_name[6],
1278 fcport->port_name[7], rval, fcport->fp_speed, mb[0], mb[1]); 1269 fcport->port_name[7], rval, fcport->fp_speed, mb[0], mb[1]);
1279 rval = 0; 1270 rval = (DID_ERROR << 16);
1280 bsg_job->reply->result = (DID_ERROR << 16);
1281
1282 } else { 1271 } else {
1283 if (!port_param->mode) { 1272 if (!port_param->mode) {
1284 bsg_job->reply_len = sizeof(struct fc_bsg_reply) + 1273 bsg_job->reply_len = sizeof(struct fc_bsg_reply) +
@@ -1292,9 +1281,9 @@ qla24xx_iidma(struct fc_bsg_job *bsg_job)
1292 } 1281 }
1293 1282
1294 bsg_job->reply->result = DID_OK; 1283 bsg_job->reply->result = DID_OK;
1284 bsg_job->job_done(bsg_job);
1295 } 1285 }
1296 1286
1297 bsg_job->job_done(bsg_job);
1298 return rval; 1287 return rval;
1299} 1288}
1300 1289
@@ -1887,8 +1876,6 @@ qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
1887 return qla24xx_process_bidir_cmd(bsg_job); 1876 return qla24xx_process_bidir_cmd(bsg_job);
1888 1877
1889 default: 1878 default:
1890 bsg_job->reply->result = (DID_ERROR << 16);
1891 bsg_job->job_done(bsg_job);
1892 return -ENOSYS; 1879 return -ENOSYS;
1893 } 1880 }
1894} 1881}
@@ -1919,8 +1906,6 @@ qla24xx_bsg_request(struct fc_bsg_job *bsg_job)
1919 ql_dbg(ql_dbg_user, vha, 0x709f, 1906 ql_dbg(ql_dbg_user, vha, 0x709f,
1920 "BSG: ISP abort active/needed -- cmd=%d.\n", 1907 "BSG: ISP abort active/needed -- cmd=%d.\n",
1921 bsg_job->request->msgcode); 1908 bsg_job->request->msgcode);
1922 bsg_job->reply->result = (DID_ERROR << 16);
1923 bsg_job->job_done(bsg_job);
1924 return -EBUSY; 1909 return -EBUSY;
1925 } 1910 }
1926 1911
@@ -1943,7 +1928,6 @@ qla24xx_bsg_request(struct fc_bsg_job *bsg_job)
1943 case FC_BSG_RPT_CT: 1928 case FC_BSG_RPT_CT:
1944 default: 1929 default:
1945 ql_log(ql_log_warn, vha, 0x705a, "Unsupported BSG request.\n"); 1930 ql_log(ql_log_warn, vha, 0x705a, "Unsupported BSG request.\n");
1946 bsg_job->reply->result = ret;
1947 break; 1931 break;
1948 } 1932 }
1949 return ret; 1933 return ret;
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 44efe3cc79e6..53f9e492f9dc 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -11,7 +11,7 @@
11 * ---------------------------------------------------------------------- 11 * ----------------------------------------------------------------------
12 * | Level | Last Value Used | Holes | 12 * | Level | Last Value Used | Holes |
13 * ---------------------------------------------------------------------- 13 * ----------------------------------------------------------------------
14 * | Module Init and Probe | 0x0124 | 0x4b,0xba,0xfa | 14 * | Module Init and Probe | 0x0125 | 0x4b,0xba,0xfa |
15 * | Mailbox commands | 0x114f | 0x111a-0x111b | 15 * | Mailbox commands | 0x114f | 0x111a-0x111b |
16 * | | | 0x112c-0x112e | 16 * | | | 0x112c-0x112e |
17 * | | | 0x113a | 17 * | | | 0x113a |
@@ -526,8 +526,8 @@ qla25xx_copy_mq(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
526 ha->max_req_queues : ha->max_rsp_queues; 526 ha->max_req_queues : ha->max_rsp_queues;
527 mq->count = htonl(que_cnt); 527 mq->count = htonl(que_cnt);
528 for (cnt = 0; cnt < que_cnt; cnt++) { 528 for (cnt = 0; cnt < que_cnt; cnt++) {
529 reg = (struct device_reg_25xxmq *) ((void *) 529 reg = (struct device_reg_25xxmq __iomem *)
530 ha->mqiobase + cnt * QLA_QUE_PAGE); 530 (ha->mqiobase + cnt * QLA_QUE_PAGE);
531 que_idx = cnt * 4; 531 que_idx = cnt * 4;
532 mq->qregs[que_idx] = htonl(RD_REG_DWORD(&reg->req_q_in)); 532 mq->qregs[que_idx] = htonl(RD_REG_DWORD(&reg->req_q_in));
533 mq->qregs[que_idx+1] = htonl(RD_REG_DWORD(&reg->req_q_out)); 533 mq->qregs[que_idx+1] = htonl(RD_REG_DWORD(&reg->req_q_out));
@@ -2268,7 +2268,7 @@ qla83xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
2268 2268
2269 if (!cnt) { 2269 if (!cnt) {
2270 nxt = fw->code_ram; 2270 nxt = fw->code_ram;
2271 nxt += sizeof(fw->code_ram), 2271 nxt += sizeof(fw->code_ram);
2272 nxt += (ha->fw_memory_size - 0x100000 + 1); 2272 nxt += (ha->fw_memory_size - 0x100000 + 1);
2273 goto copy_queue; 2273 goto copy_queue;
2274 } else 2274 } else
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index a9725bf5527b..6e7727f46d43 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2486,9 +2486,9 @@ struct bidi_statistics {
2486#define QLA_MAX_QUEUES 256 2486#define QLA_MAX_QUEUES 256
2487#define ISP_QUE_REG(ha, id) \ 2487#define ISP_QUE_REG(ha, id) \
2488 ((ha->mqenable || IS_QLA83XX(ha)) ? \ 2488 ((ha->mqenable || IS_QLA83XX(ha)) ? \
2489 ((void *)(ha->mqiobase) +\ 2489 ((device_reg_t __iomem *)(ha->mqiobase) +\
2490 (QLA_QUE_PAGE * id)) :\ 2490 (QLA_QUE_PAGE * id)) :\
2491 ((void *)(ha->iobase))) 2491 ((device_reg_t __iomem *)(ha->iobase)))
2492#define QLA_REQ_QUE_ID(tag) \ 2492#define QLA_REQ_QUE_ID(tag) \
2493 ((tag < QLA_MAX_QUEUES && tag > 0) ? tag : 0) 2493 ((tag < QLA_MAX_QUEUES && tag > 0) ? tag : 0)
2494#define QLA_DEFAULT_QUE_QOS 5 2494#define QLA_DEFAULT_QUE_QOS 5
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h
index 59524aa0ab32..be6d61a89edc 100644
--- a/drivers/scsi/qla2xxx/qla_fw.h
+++ b/drivers/scsi/qla2xxx/qla_fw.h
@@ -1092,6 +1092,27 @@ struct device_reg_24xx {
1092 uint32_t unused_6[2]; /* Gap. */ 1092 uint32_t unused_6[2]; /* Gap. */
1093 uint32_t iobase_sdata; 1093 uint32_t iobase_sdata;
1094}; 1094};
1095/* RISC-RISC semaphore register PCI offet */
1096#define RISC_REGISTER_BASE_OFFSET 0x7010
1097#define RISC_REGISTER_WINDOW_OFFET 0x6
1098
1099/* RISC-RISC semaphore/flag register (risc address 0x7016) */
1100
1101#define RISC_SEMAPHORE 0x1UL
1102#define RISC_SEMAPHORE_WE (RISC_SEMAPHORE << 16)
1103#define RISC_SEMAPHORE_CLR (RISC_SEMAPHORE_WE | 0x0UL)
1104#define RISC_SEMAPHORE_SET (RISC_SEMAPHORE_WE | RISC_SEMAPHORE)
1105
1106#define RISC_SEMAPHORE_FORCE 0x8000UL
1107#define RISC_SEMAPHORE_FORCE_WE (RISC_SEMAPHORE_FORCE << 16)
1108#define RISC_SEMAPHORE_FORCE_CLR (RISC_SEMAPHORE_FORCE_WE | 0x0UL)
1109#define RISC_SEMAPHORE_FORCE_SET \
1110 (RISC_SEMAPHORE_FORCE_WE | RISC_SEMAPHORE_FORCE)
1111
1112/* RISC semaphore timeouts (ms) */
1113#define TIMEOUT_SEMAPHORE 2500
1114#define TIMEOUT_SEMAPHORE_FORCE 2000
1115#define TIMEOUT_TOTAL_ELAPSED 4500
1095 1116
1096/* Trace Control *************************************************************/ 1117/* Trace Control *************************************************************/
1097 1118
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 6acb39785a46..2411d1a12b26 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -416,7 +416,7 @@ extern int qla2x00_request_irqs(struct qla_hw_data *, struct rsp_que *);
416extern void qla2x00_free_irqs(scsi_qla_host_t *); 416extern void qla2x00_free_irqs(scsi_qla_host_t *);
417 417
418extern int qla2x00_get_data_rate(scsi_qla_host_t *); 418extern int qla2x00_get_data_rate(scsi_qla_host_t *);
419extern char *qla2x00_get_link_speed_str(struct qla_hw_data *); 419extern const char *qla2x00_get_link_speed_str(struct qla_hw_data *, uint16_t);
420 420
421/* 421/*
422 * Global Function Prototypes in qla_sup.c source file. 422 * Global Function Prototypes in qla_sup.c source file.
@@ -598,7 +598,6 @@ extern void qla82xx_init_flags(struct qla_hw_data *);
598 598
599/* ISP 8021 hardware related */ 599/* ISP 8021 hardware related */
600extern void qla82xx_set_drv_active(scsi_qla_host_t *); 600extern void qla82xx_set_drv_active(scsi_qla_host_t *);
601extern void qla82xx_crb_win_unlock(struct qla_hw_data *);
602extern int qla82xx_wr_32(struct qla_hw_data *, ulong, u32); 601extern int qla82xx_wr_32(struct qla_hw_data *, ulong, u32);
603extern int qla82xx_rd_32(struct qla_hw_data *, ulong); 602extern int qla82xx_rd_32(struct qla_hw_data *, ulong);
604extern int qla82xx_rdmem(struct qla_hw_data *, u64, void *, int); 603extern int qla82xx_rdmem(struct qla_hw_data *, u64, void *, int);
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index f4e4bd7c3f4d..01efc0e9cc36 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -218,6 +218,9 @@ qla2x00_ga_nxt(scsi_qla_host_t *vha, fc_port_t *fcport)
218 memcpy(fcport->port_name, ct_rsp->rsp.ga_nxt.port_name, 218 memcpy(fcport->port_name, ct_rsp->rsp.ga_nxt.port_name,
219 WWN_SIZE); 219 WWN_SIZE);
220 220
221 fcport->fc4_type = (ct_rsp->rsp.ga_nxt.fc4_types[2] & BIT_0) ?
222 FC4_TYPE_FCP_SCSI : FC4_TYPE_OTHER;
223
221 if (ct_rsp->rsp.ga_nxt.port_type != NS_N_PORT_TYPE && 224 if (ct_rsp->rsp.ga_nxt.port_type != NS_N_PORT_TYPE &&
222 ct_rsp->rsp.ga_nxt.port_type != NS_NL_PORT_TYPE) 225 ct_rsp->rsp.ga_nxt.port_type != NS_NL_PORT_TYPE)
223 fcport->d_id.b.domain = 0xf0; 226 fcport->d_id.b.domain = 0xf0;
@@ -1930,6 +1933,9 @@ qla2x00_gpsc(scsi_qla_host_t *vha, sw_info_t *list)
1930 case BIT_11: 1933 case BIT_11:
1931 list[i].fp_speed = PORT_SPEED_8GB; 1934 list[i].fp_speed = PORT_SPEED_8GB;
1932 break; 1935 break;
1936 case BIT_10:
1937 list[i].fp_speed = PORT_SPEED_16GB;
1938 break;
1933 } 1939 }
1934 1940
1935 ql_dbg(ql_dbg_disc, vha, 0x205b, 1941 ql_dbg(ql_dbg_disc, vha, 0x205b,
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 48fca47384b7..563eee3fa924 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -429,7 +429,7 @@ qla2x00_async_adisc_done(struct scsi_qla_host *vha, fc_port_t *fcport,
429/* QLogic ISP2x00 Hardware Support Functions. */ 429/* QLogic ISP2x00 Hardware Support Functions. */
430/****************************************************************************/ 430/****************************************************************************/
431 431
432int 432static int
433qla83xx_nic_core_fw_load(scsi_qla_host_t *vha) 433qla83xx_nic_core_fw_load(scsi_qla_host_t *vha)
434{ 434{
435 int rval = QLA_SUCCESS; 435 int rval = QLA_SUCCESS;
@@ -997,7 +997,7 @@ qla2x00_reset_chip(scsi_qla_host_t *vha)
997 * 997 *
998 * Returns 0 on success. 998 * Returns 0 on success.
999 */ 999 */
1000int 1000static int
1001qla81xx_reset_mpi(scsi_qla_host_t *vha) 1001qla81xx_reset_mpi(scsi_qla_host_t *vha)
1002{ 1002{
1003 uint16_t mb[4] = {0x1010, 0, 1, 0}; 1003 uint16_t mb[4] = {0x1010, 0, 1, 0};
@@ -1095,6 +1095,83 @@ qla24xx_reset_risc(scsi_qla_host_t *vha)
1095 ha->isp_ops->enable_intrs(ha); 1095 ha->isp_ops->enable_intrs(ha);
1096} 1096}
1097 1097
1098static void
1099qla25xx_read_risc_sema_reg(scsi_qla_host_t *vha, uint32_t *data)
1100{
1101 struct device_reg_24xx __iomem *reg = &vha->hw->iobase->isp24;
1102
1103 WRT_REG_DWORD(&reg->iobase_addr, RISC_REGISTER_BASE_OFFSET);
1104 *data = RD_REG_DWORD(&reg->iobase_window + RISC_REGISTER_WINDOW_OFFET);
1105
1106}
1107
1108static void
1109qla25xx_write_risc_sema_reg(scsi_qla_host_t *vha, uint32_t data)
1110{
1111 struct device_reg_24xx __iomem *reg = &vha->hw->iobase->isp24;
1112
1113 WRT_REG_DWORD(&reg->iobase_addr, RISC_REGISTER_BASE_OFFSET);
1114 WRT_REG_DWORD(&reg->iobase_window + RISC_REGISTER_WINDOW_OFFET, data);
1115}
1116
1117static void
1118qla25xx_manipulate_risc_semaphore(scsi_qla_host_t *vha)
1119{
1120 struct qla_hw_data *ha = vha->hw;
1121 uint32_t wd32 = 0;
1122 uint delta_msec = 100;
1123 uint elapsed_msec = 0;
1124 uint timeout_msec;
1125 ulong n;
1126
1127 if (!IS_QLA25XX(ha) && !IS_QLA2031(ha))
1128 return;
1129
1130attempt:
1131 timeout_msec = TIMEOUT_SEMAPHORE;
1132 n = timeout_msec / delta_msec;
1133 while (n--) {
1134 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_SET);
1135 qla25xx_read_risc_sema_reg(vha, &wd32);
1136 if (wd32 & RISC_SEMAPHORE)
1137 break;
1138 msleep(delta_msec);
1139 elapsed_msec += delta_msec;
1140 if (elapsed_msec > TIMEOUT_TOTAL_ELAPSED)
1141 goto force;
1142 }
1143
1144 if (!(wd32 & RISC_SEMAPHORE))
1145 goto force;
1146
1147 if (!(wd32 & RISC_SEMAPHORE_FORCE))
1148 goto acquired;
1149
1150 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_CLR);
1151 timeout_msec = TIMEOUT_SEMAPHORE_FORCE;
1152 n = timeout_msec / delta_msec;
1153 while (n--) {
1154 qla25xx_read_risc_sema_reg(vha, &wd32);
1155 if (!(wd32 & RISC_SEMAPHORE_FORCE))
1156 break;
1157 msleep(delta_msec);
1158 elapsed_msec += delta_msec;
1159 if (elapsed_msec > TIMEOUT_TOTAL_ELAPSED)
1160 goto force;
1161 }
1162
1163 if (wd32 & RISC_SEMAPHORE_FORCE)
1164 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_FORCE_CLR);
1165
1166 goto attempt;
1167
1168force:
1169 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_FORCE_SET);
1170
1171acquired:
1172 return;
1173}
1174
1098/** 1175/**
1099 * qla24xx_reset_chip() - Reset ISP24xx chip. 1176 * qla24xx_reset_chip() - Reset ISP24xx chip.
1100 * @ha: HA context 1177 * @ha: HA context
@@ -1113,6 +1190,8 @@ qla24xx_reset_chip(scsi_qla_host_t *vha)
1113 1190
1114 ha->isp_ops->disable_intrs(ha); 1191 ha->isp_ops->disable_intrs(ha);
1115 1192
1193 qla25xx_manipulate_risc_semaphore(vha);
1194
1116 /* Perform RISC reset. */ 1195 /* Perform RISC reset. */
1117 qla24xx_reset_risc(vha); 1196 qla24xx_reset_risc(vha);
1118} 1197}
@@ -1888,10 +1967,6 @@ qla2x00_init_rings(scsi_qla_host_t *vha)
1888 qla2x00_init_response_q_entries(rsp); 1967 qla2x00_init_response_q_entries(rsp);
1889 } 1968 }
1890 1969
1891 spin_lock(&ha->vport_slock);
1892
1893 spin_unlock(&ha->vport_slock);
1894
1895 ha->tgt.atio_ring_ptr = ha->tgt.atio_ring; 1970 ha->tgt.atio_ring_ptr = ha->tgt.atio_ring;
1896 ha->tgt.atio_ring_index = 0; 1971 ha->tgt.atio_ring_index = 0;
1897 /* Initialize ATIO queue entries */ 1972 /* Initialize ATIO queue entries */
@@ -1971,6 +2046,7 @@ qla2x00_fw_ready(scsi_qla_host_t *vha)
1971 "Waiting for LIP to complete.\n"); 2046 "Waiting for LIP to complete.\n");
1972 2047
1973 do { 2048 do {
2049 memset(state, -1, sizeof(state));
1974 rval = qla2x00_get_firmware_state(vha, state); 2050 rval = qla2x00_get_firmware_state(vha, state);
1975 if (rval == QLA_SUCCESS) { 2051 if (rval == QLA_SUCCESS) {
1976 if (state[0] < FSTATE_LOSS_OF_SYNC) { 2052 if (state[0] < FSTATE_LOSS_OF_SYNC) {
@@ -2907,7 +2983,6 @@ cleanup_allocation:
2907static void 2983static void
2908qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) 2984qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
2909{ 2985{
2910 char *link_speed;
2911 int rval; 2986 int rval;
2912 uint16_t mb[4]; 2987 uint16_t mb[4];
2913 struct qla_hw_data *ha = vha->hw; 2988 struct qla_hw_data *ha = vha->hw;
@@ -2934,10 +3009,10 @@ qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
2934 fcport->port_name[6], fcport->port_name[7], rval, 3009 fcport->port_name[6], fcport->port_name[7], rval,
2935 fcport->fp_speed, mb[0], mb[1]); 3010 fcport->fp_speed, mb[0], mb[1]);
2936 } else { 3011 } else {
2937 link_speed = qla2x00_get_link_speed_str(ha);
2938 ql_dbg(ql_dbg_disc, vha, 0x2005, 3012 ql_dbg(ql_dbg_disc, vha, 0x2005,
2939 "iIDMA adjusted to %s GB/s " 3013 "iIDMA adjusted to %s GB/s "
2940 "on %02x%02x%02x%02x%02x%02x%02x%02x.\n", link_speed, 3014 "on %02x%02x%02x%02x%02x%02x%02x%02x.\n",
3015 qla2x00_get_link_speed_str(ha, fcport->fp_speed),
2941 fcport->port_name[0], fcport->port_name[1], 3016 fcport->port_name[0], fcport->port_name[1],
2942 fcport->port_name[2], fcport->port_name[3], 3017 fcport->port_name[2], fcport->port_name[3],
2943 fcport->port_name[4], fcport->port_name[5], 3018 fcport->port_name[4], fcport->port_name[5],
@@ -3007,10 +3082,10 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
3007 fcport->login_retry = 0; 3082 fcport->login_retry = 0;
3008 fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT); 3083 fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT);
3009 3084
3085 qla2x00_set_fcport_state(fcport, FCS_ONLINE);
3010 qla2x00_iidma_fcport(vha, fcport); 3086 qla2x00_iidma_fcport(vha, fcport);
3011 qla24xx_update_fcport_fcp_prio(vha, fcport); 3087 qla24xx_update_fcport_fcp_prio(vha, fcport);
3012 qla2x00_reg_remote_port(vha, fcport); 3088 qla2x00_reg_remote_port(vha, fcport);
3013 qla2x00_set_fcport_state(fcport, FCS_ONLINE);
3014} 3089}
3015 3090
3016/* 3091/*
@@ -3868,7 +3943,7 @@ qla83xx_reset_ownership(scsi_qla_host_t *vha)
3868 } 3943 }
3869} 3944}
3870 3945
3871int 3946static int
3872__qla83xx_set_drv_ack(scsi_qla_host_t *vha) 3947__qla83xx_set_drv_ack(scsi_qla_host_t *vha)
3873{ 3948{
3874 int rval = QLA_SUCCESS; 3949 int rval = QLA_SUCCESS;
@@ -3884,19 +3959,7 @@ __qla83xx_set_drv_ack(scsi_qla_host_t *vha)
3884 return rval; 3959 return rval;
3885} 3960}
3886 3961
3887int 3962static int
3888qla83xx_set_drv_ack(scsi_qla_host_t *vha)
3889{
3890 int rval = QLA_SUCCESS;
3891
3892 qla83xx_idc_lock(vha, 0);
3893 rval = __qla83xx_set_drv_ack(vha);
3894 qla83xx_idc_unlock(vha, 0);
3895
3896 return rval;
3897}
3898
3899int
3900__qla83xx_clear_drv_ack(scsi_qla_host_t *vha) 3963__qla83xx_clear_drv_ack(scsi_qla_host_t *vha)
3901{ 3964{
3902 int rval = QLA_SUCCESS; 3965 int rval = QLA_SUCCESS;
@@ -3912,19 +3975,7 @@ __qla83xx_clear_drv_ack(scsi_qla_host_t *vha)
3912 return rval; 3975 return rval;
3913} 3976}
3914 3977
3915int 3978static const char *
3916qla83xx_clear_drv_ack(scsi_qla_host_t *vha)
3917{
3918 int rval = QLA_SUCCESS;
3919
3920 qla83xx_idc_lock(vha, 0);
3921 rval = __qla83xx_clear_drv_ack(vha);
3922 qla83xx_idc_unlock(vha, 0);
3923
3924 return rval;
3925}
3926
3927const char *
3928qla83xx_dev_state_to_string(uint32_t dev_state) 3979qla83xx_dev_state_to_string(uint32_t dev_state)
3929{ 3980{
3930 switch (dev_state) { 3981 switch (dev_state) {
@@ -3978,7 +4029,7 @@ qla83xx_idc_audit(scsi_qla_host_t *vha, int audit_type)
3978} 4029}
3979 4030
3980/* Assumes idc_lock always held on entry */ 4031/* Assumes idc_lock always held on entry */
3981int 4032static int
3982qla83xx_initiating_reset(scsi_qla_host_t *vha) 4033qla83xx_initiating_reset(scsi_qla_host_t *vha)
3983{ 4034{
3984 struct qla_hw_data *ha = vha->hw; 4035 struct qla_hw_data *ha = vha->hw;
@@ -4026,36 +4077,12 @@ __qla83xx_set_idc_control(scsi_qla_host_t *vha, uint32_t idc_control)
4026} 4077}
4027 4078
4028int 4079int
4029qla83xx_set_idc_control(scsi_qla_host_t *vha, uint32_t idc_control)
4030{
4031 int rval = QLA_SUCCESS;
4032
4033 qla83xx_idc_lock(vha, 0);
4034 rval = __qla83xx_set_idc_control(vha, idc_control);
4035 qla83xx_idc_unlock(vha, 0);
4036
4037 return rval;
4038}
4039
4040int
4041__qla83xx_get_idc_control(scsi_qla_host_t *vha, uint32_t *idc_control) 4080__qla83xx_get_idc_control(scsi_qla_host_t *vha, uint32_t *idc_control)
4042{ 4081{
4043 return qla83xx_rd_reg(vha, QLA83XX_IDC_CONTROL, idc_control); 4082 return qla83xx_rd_reg(vha, QLA83XX_IDC_CONTROL, idc_control);
4044} 4083}
4045 4084
4046int 4085static int
4047qla83xx_get_idc_control(scsi_qla_host_t *vha, uint32_t *idc_control)
4048{
4049 int rval = QLA_SUCCESS;
4050
4051 qla83xx_idc_lock(vha, 0);
4052 rval = __qla83xx_get_idc_control(vha, idc_control);
4053 qla83xx_idc_unlock(vha, 0);
4054
4055 return rval;
4056}
4057
4058int
4059qla83xx_check_driver_presence(scsi_qla_host_t *vha) 4086qla83xx_check_driver_presence(scsi_qla_host_t *vha)
4060{ 4087{
4061 uint32_t drv_presence = 0; 4088 uint32_t drv_presence = 0;
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index 03b752632839..a481684479c1 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -520,7 +520,7 @@ __qla2x00_marker(struct scsi_qla_host *vha, struct req_que *req,
520 520
521 mrk24 = NULL; 521 mrk24 = NULL;
522 req = ha->req_q_map[0]; 522 req = ha->req_q_map[0];
523 mrk = (mrk_entry_t *)qla2x00_alloc_iocbs(vha, 0); 523 mrk = (mrk_entry_t *)qla2x00_alloc_iocbs(vha, NULL);
524 if (mrk == NULL) { 524 if (mrk == NULL) {
525 ql_log(ql_log_warn, base_vha, 0x3026, 525 ql_log(ql_log_warn, base_vha, 0x3026,
526 "Failed to allocate Marker IOCB.\n"); 526 "Failed to allocate Marker IOCB.\n");
@@ -2551,7 +2551,7 @@ sufficient_dsds:
2551 (unsigned long __iomem *)ha->nxdb_wr_ptr, 2551 (unsigned long __iomem *)ha->nxdb_wr_ptr,
2552 dbval); 2552 dbval);
2553 wmb(); 2553 wmb();
2554 while (RD_REG_DWORD(ha->nxdb_rd_ptr) != dbval) { 2554 while (RD_REG_DWORD((void __iomem *)ha->nxdb_rd_ptr) != dbval) {
2555 WRT_REG_DWORD( 2555 WRT_REG_DWORD(
2556 (unsigned long __iomem *)ha->nxdb_wr_ptr, 2556 (unsigned long __iomem *)ha->nxdb_wr_ptr,
2557 dbval); 2557 dbval);
@@ -2748,7 +2748,6 @@ qla2x00_start_bidir(srb_t *sp, struct scsi_qla_host *vha, uint32_t tot_dsds)
2748 struct rsp_que *rsp; 2748 struct rsp_que *rsp;
2749 struct req_que *req; 2749 struct req_que *req;
2750 int rval = EXT_STATUS_OK; 2750 int rval = EXT_STATUS_OK;
2751 device_reg_t __iomem *reg = ISP_QUE_REG(ha, vha->req->id);
2752 2751
2753 rval = QLA_SUCCESS; 2752 rval = QLA_SUCCESS;
2754 2753
@@ -2786,15 +2785,7 @@ qla2x00_start_bidir(srb_t *sp, struct scsi_qla_host *vha, uint32_t tot_dsds)
2786 2785
2787 /* Check for room on request queue. */ 2786 /* Check for room on request queue. */
2788 if (req->cnt < req_cnt + 2) { 2787 if (req->cnt < req_cnt + 2) {
2789 if (ha->mqenable) 2788 cnt = RD_REG_DWORD_RELAXED(req->req_q_out);
2790 cnt = RD_REG_DWORD(&reg->isp25mq.req_q_out);
2791 else if (IS_QLA82XX(ha))
2792 cnt = RD_REG_DWORD(&reg->isp82.req_q_out);
2793 else if (IS_FWI2_CAPABLE(ha))
2794 cnt = RD_REG_DWORD(&reg->isp24.req_q_out);
2795 else
2796 cnt = qla2x00_debounce_register(
2797 ISP_REQ_Q_OUT(ha, &reg->isp));
2798 2789
2799 if (req->ring_index < cnt) 2790 if (req->ring_index < cnt)
2800 req->cnt = cnt - req->ring_index; 2791 req->cnt = cnt - req->ring_index;
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 9d1c7b56090a..873c82014b16 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -316,28 +316,24 @@ qla81xx_idc_event(scsi_qla_host_t *vha, uint16_t aen, uint16_t descr)
316} 316}
317 317
318#define LS_UNKNOWN 2 318#define LS_UNKNOWN 2
319char * 319const char *
320qla2x00_get_link_speed_str(struct qla_hw_data *ha) 320qla2x00_get_link_speed_str(struct qla_hw_data *ha, uint16_t speed)
321{ 321{
322 static char *link_speeds[] = {"1", "2", "?", "4", "8", "16", "10"}; 322 static const char * const link_speeds[] = {
323 char *link_speed; 323 "1", "2", "?", "4", "8", "16", "10"
324 int fw_speed = ha->link_data_rate; 324 };
325 325
326 if (IS_QLA2100(ha) || IS_QLA2200(ha)) 326 if (IS_QLA2100(ha) || IS_QLA2200(ha))
327 link_speed = link_speeds[0]; 327 return link_speeds[0];
328 else if (fw_speed == 0x13) 328 else if (speed == 0x13)
329 link_speed = link_speeds[6]; 329 return link_speeds[6];
330 else { 330 else if (speed < 6)
331 link_speed = link_speeds[LS_UNKNOWN]; 331 return link_speeds[speed];
332 if (fw_speed < 6) 332 else
333 link_speed = 333 return link_speeds[LS_UNKNOWN];
334 link_speeds[fw_speed];
335 }
336
337 return link_speed;
338} 334}
339 335
340void 336static void
341qla83xx_handle_8200_aen(scsi_qla_host_t *vha, uint16_t *mb) 337qla83xx_handle_8200_aen(scsi_qla_host_t *vha, uint16_t *mb)
342{ 338{
343 struct qla_hw_data *ha = vha->hw; 339 struct qla_hw_data *ha = vha->hw;
@@ -671,7 +667,7 @@ skip_rio:
671 667
672 ql_dbg(ql_dbg_async, vha, 0x500a, 668 ql_dbg(ql_dbg_async, vha, 0x500a,
673 "LOOP UP detected (%s Gbps).\n", 669 "LOOP UP detected (%s Gbps).\n",
674 qla2x00_get_link_speed_str(ha)); 670 qla2x00_get_link_speed_str(ha, ha->link_data_rate));
675 671
676 vha->flags.management_server_logged_in = 0; 672 vha->flags.management_server_logged_in = 0;
677 qla2x00_post_aen_work(vha, FCH_EVT_LINKUP, ha->link_data_rate); 673 qla2x00_post_aen_work(vha, FCH_EVT_LINKUP, ha->link_data_rate);
@@ -860,7 +856,7 @@ skip_rio:
860 mb[1], mb[2], mb[3]); 856 mb[1], mb[2], mb[3]);
861 ql_log(ql_log_warn, vha, 0x505f, 857 ql_log(ql_log_warn, vha, 0x505f,
862 "Link is operational (%s Gbps).\n", 858 "Link is operational (%s Gbps).\n",
863 qla2x00_get_link_speed_str(ha)); 859 qla2x00_get_link_speed_str(ha, ha->link_data_rate));
864 860
865 /* 861 /*
866 * Mark all devices as missing so we will login again. 862 * Mark all devices as missing so we will login again.
@@ -2944,7 +2940,9 @@ skip_msi:
2944 "Failed to reserve interrupt %d already in use.\n", 2940 "Failed to reserve interrupt %d already in use.\n",
2945 ha->pdev->irq); 2941 ha->pdev->irq);
2946 goto fail; 2942 goto fail;
2947 } 2943 } else if (!ha->flags.msi_enabled)
2944 ql_dbg(ql_dbg_init, vha, 0x0125,
2945 "INTa mode: Enabled.\n");
2948 2946
2949clear_risc_ints: 2947clear_risc_ints:
2950 2948
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 18c509fae555..68c55eaa318c 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -3122,7 +3122,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
3122 if (vp_idx == 0 && (MSB(stat) != 1)) 3122 if (vp_idx == 0 && (MSB(stat) != 1))
3123 goto reg_needed; 3123 goto reg_needed;
3124 3124
3125 if (MSB(stat) != 0) { 3125 if (MSB(stat) != 0 && MSB(stat) != 2) {
3126 ql_dbg(ql_dbg_mbx, vha, 0x10ba, 3126 ql_dbg(ql_dbg_mbx, vha, 0x10ba,
3127 "Could not acquire ID for VP[%d].\n", vp_idx); 3127 "Could not acquire ID for VP[%d].\n", vp_idx);
3128 return; 3128 return;
@@ -3536,7 +3536,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req)
3536 if (IS_QLA83XX(ha)) 3536 if (IS_QLA83XX(ha))
3537 mcp->mb[15] = 0; 3537 mcp->mb[15] = 0;
3538 3538
3539 reg = (struct device_reg_25xxmq *)((void *)(ha->mqiobase) + 3539 reg = (struct device_reg_25xxmq __iomem *)((ha->mqiobase) +
3540 QLA_QUE_PAGE * req->id); 3540 QLA_QUE_PAGE * req->id);
3541 3541
3542 mcp->mb[4] = req->id; 3542 mcp->mb[4] = req->id;
@@ -3605,7 +3605,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
3605 if (IS_QLA83XX(ha)) 3605 if (IS_QLA83XX(ha))
3606 mcp->mb[15] = 0; 3606 mcp->mb[15] = 0;
3607 3607
3608 reg = (struct device_reg_25xxmq *)((void *)(ha->mqiobase) + 3608 reg = (struct device_reg_25xxmq __iomem *)((ha->mqiobase) +
3609 QLA_QUE_PAGE * rsp->id); 3609 QLA_QUE_PAGE * rsp->id);
3610 3610
3611 mcp->mb[4] = rsp->id; 3611 mcp->mb[4] = rsp->id;
diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
index f5e297c6b684..3e3f593bada3 100644
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
@@ -36,7 +36,7 @@
36 36
37#define MAX_CRB_XFORM 60 37#define MAX_CRB_XFORM 60
38static unsigned long crb_addr_xform[MAX_CRB_XFORM]; 38static unsigned long crb_addr_xform[MAX_CRB_XFORM];
39int qla82xx_crb_table_initialized; 39static int qla82xx_crb_table_initialized;
40 40
41#define qla82xx_crb_addr_transform(name) \ 41#define qla82xx_crb_addr_transform(name) \
42 (crb_addr_xform[QLA82XX_HW_PX_MAP_CRB_##name] = \ 42 (crb_addr_xform[QLA82XX_HW_PX_MAP_CRB_##name] = \
@@ -102,7 +102,7 @@ static void qla82xx_crb_addr_transform_setup(void)
102 qla82xx_crb_table_initialized = 1; 102 qla82xx_crb_table_initialized = 1;
103} 103}
104 104
105struct crb_128M_2M_block_map crb_128M_2M_map[64] = { 105static struct crb_128M_2M_block_map crb_128M_2M_map[64] = {
106 {{{0, 0, 0, 0} } }, 106 {{{0, 0, 0, 0} } },
107 {{{1, 0x0100000, 0x0102000, 0x120000}, 107 {{{1, 0x0100000, 0x0102000, 0x120000},
108 {1, 0x0110000, 0x0120000, 0x130000}, 108 {1, 0x0110000, 0x0120000, 0x130000},
@@ -262,7 +262,7 @@ struct crb_128M_2M_block_map crb_128M_2M_map[64] = {
262/* 262/*
263 * top 12 bits of crb internal address (hub, agent) 263 * top 12 bits of crb internal address (hub, agent)
264 */ 264 */
265unsigned qla82xx_crb_hub_agt[64] = { 265static unsigned qla82xx_crb_hub_agt[64] = {
266 0, 266 0,
267 QLA82XX_HW_CRB_HUB_AGT_ADR_PS, 267 QLA82XX_HW_CRB_HUB_AGT_ADR_PS,
268 QLA82XX_HW_CRB_HUB_AGT_ADR_MN, 268 QLA82XX_HW_CRB_HUB_AGT_ADR_MN,
@@ -330,7 +330,7 @@ unsigned qla82xx_crb_hub_agt[64] = {
330}; 330};
331 331
332/* Device states */ 332/* Device states */
333char *q_dev_state[] = { 333static char *q_dev_state[] = {
334 "Unknown", 334 "Unknown",
335 "Cold", 335 "Cold",
336 "Initializing", 336 "Initializing",
@@ -359,12 +359,13 @@ qla82xx_pci_set_crbwindow_2M(struct qla_hw_data *ha, ulong *off)
359 359
360 ha->crb_win = CRB_HI(*off); 360 ha->crb_win = CRB_HI(*off);
361 writel(ha->crb_win, 361 writel(ha->crb_win,
362 (void *)(CRB_WINDOW_2M + ha->nx_pcibase)); 362 (void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase));
363 363
364 /* Read back value to make sure write has gone through before trying 364 /* Read back value to make sure write has gone through before trying
365 * to use it. 365 * to use it.
366 */ 366 */
367 win_read = RD_REG_DWORD((void *)(CRB_WINDOW_2M + ha->nx_pcibase)); 367 win_read = RD_REG_DWORD((void __iomem *)
368 (CRB_WINDOW_2M + ha->nx_pcibase));
368 if (win_read != ha->crb_win) { 369 if (win_read != ha->crb_win) {
369 ql_dbg(ql_dbg_p3p, vha, 0xb000, 370 ql_dbg(ql_dbg_p3p, vha, 0xb000,
370 "%s: Written crbwin (0x%x) " 371 "%s: Written crbwin (0x%x) "
@@ -567,7 +568,7 @@ qla82xx_pci_mem_bound_check(struct qla_hw_data *ha,
567 return 1; 568 return 1;
568} 569}
569 570
570int qla82xx_pci_set_window_warning_count; 571static int qla82xx_pci_set_window_warning_count;
571 572
572static unsigned long 573static unsigned long
573qla82xx_pci_set_window(struct qla_hw_data *ha, unsigned long long addr) 574qla82xx_pci_set_window(struct qla_hw_data *ha, unsigned long long addr)
@@ -677,10 +678,10 @@ static int qla82xx_pci_mem_read_direct(struct qla_hw_data *ha,
677 u64 off, void *data, int size) 678 u64 off, void *data, int size)
678{ 679{
679 unsigned long flags; 680 unsigned long flags;
680 void *addr = NULL; 681 void __iomem *addr = NULL;
681 int ret = 0; 682 int ret = 0;
682 u64 start; 683 u64 start;
683 uint8_t *mem_ptr = NULL; 684 uint8_t __iomem *mem_ptr = NULL;
684 unsigned long mem_base; 685 unsigned long mem_base;
685 unsigned long mem_page; 686 unsigned long mem_page;
686 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); 687 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
@@ -712,7 +713,7 @@ static int qla82xx_pci_mem_read_direct(struct qla_hw_data *ha,
712 mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE * 2); 713 mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE * 2);
713 else 714 else
714 mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE); 715 mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE);
715 if (mem_ptr == 0UL) { 716 if (mem_ptr == NULL) {
716 *(u8 *)data = 0; 717 *(u8 *)data = 0;
717 return -1; 718 return -1;
718 } 719 }
@@ -749,10 +750,10 @@ qla82xx_pci_mem_write_direct(struct qla_hw_data *ha,
749 u64 off, void *data, int size) 750 u64 off, void *data, int size)
750{ 751{
751 unsigned long flags; 752 unsigned long flags;
752 void *addr = NULL; 753 void __iomem *addr = NULL;
753 int ret = 0; 754 int ret = 0;
754 u64 start; 755 u64 start;
755 uint8_t *mem_ptr = NULL; 756 uint8_t __iomem *mem_ptr = NULL;
756 unsigned long mem_base; 757 unsigned long mem_base;
757 unsigned long mem_page; 758 unsigned long mem_page;
758 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); 759 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
@@ -784,7 +785,7 @@ qla82xx_pci_mem_write_direct(struct qla_hw_data *ha,
784 mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE*2); 785 mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE*2);
785 else 786 else
786 mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE); 787 mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE);
787 if (mem_ptr == 0UL) 788 if (mem_ptr == NULL)
788 return -1; 789 return -1;
789 790
790 addr = mem_ptr; 791 addr = mem_ptr;
@@ -908,24 +909,24 @@ qla82xx_wait_rom_done(struct qla_hw_data *ha)
908 return 0; 909 return 0;
909} 910}
910 911
911int 912static int
912qla82xx_md_rw_32(struct qla_hw_data *ha, uint32_t off, u32 data, uint8_t flag) 913qla82xx_md_rw_32(struct qla_hw_data *ha, uint32_t off, u32 data, uint8_t flag)
913{ 914{
914 uint32_t off_value, rval = 0; 915 uint32_t off_value, rval = 0;
915 916
916 WRT_REG_DWORD((void *)(CRB_WINDOW_2M + ha->nx_pcibase), 917 WRT_REG_DWORD((void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase),
917 (off & 0xFFFF0000)); 918 (off & 0xFFFF0000));
918 919
919 /* Read back value to make sure write has gone through */ 920 /* Read back value to make sure write has gone through */
920 RD_REG_DWORD((void *)(CRB_WINDOW_2M + ha->nx_pcibase)); 921 RD_REG_DWORD((void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase));
921 off_value = (off & 0x0000FFFF); 922 off_value = (off & 0x0000FFFF);
922 923
923 if (flag) 924 if (flag)
924 WRT_REG_DWORD((void *) 925 WRT_REG_DWORD((void __iomem *)
925 (off_value + CRB_INDIRECT_2M + ha->nx_pcibase), 926 (off_value + CRB_INDIRECT_2M + ha->nx_pcibase),
926 data); 927 data);
927 else 928 else
928 rval = RD_REG_DWORD((void *) 929 rval = RD_REG_DWORD((void __iomem *)
929 (off_value + CRB_INDIRECT_2M + ha->nx_pcibase)); 930 (off_value + CRB_INDIRECT_2M + ha->nx_pcibase));
930 931
931 return rval; 932 return rval;
@@ -1654,7 +1655,6 @@ qla82xx_iospace_config(struct qla_hw_data *ha)
1654 if (!ha->nx_pcibase) { 1655 if (!ha->nx_pcibase) {
1655 ql_log_pci(ql_log_fatal, ha->pdev, 0x000e, 1656 ql_log_pci(ql_log_fatal, ha->pdev, 0x000e,
1656 "Cannot remap pcibase MMIO, aborting.\n"); 1657 "Cannot remap pcibase MMIO, aborting.\n");
1657 pci_release_regions(ha->pdev);
1658 goto iospace_error_exit; 1658 goto iospace_error_exit;
1659 } 1659 }
1660 1660
@@ -1669,7 +1669,6 @@ qla82xx_iospace_config(struct qla_hw_data *ha)
1669 if (!ha->nxdb_wr_ptr) { 1669 if (!ha->nxdb_wr_ptr) {
1670 ql_log_pci(ql_log_fatal, ha->pdev, 0x000f, 1670 ql_log_pci(ql_log_fatal, ha->pdev, 0x000f,
1671 "Cannot remap MMIO, aborting.\n"); 1671 "Cannot remap MMIO, aborting.\n");
1672 pci_release_regions(ha->pdev);
1673 goto iospace_error_exit; 1672 goto iospace_error_exit;
1674 } 1673 }
1675 1674
@@ -1764,14 +1763,6 @@ void qla82xx_config_rings(struct scsi_qla_host *vha)
1764 WRT_REG_DWORD((unsigned long __iomem *)&reg->rsp_q_out[0], 0); 1763 WRT_REG_DWORD((unsigned long __iomem *)&reg->rsp_q_out[0], 0);
1765} 1764}
1766 1765
1767void qla82xx_reset_adapter(struct scsi_qla_host *vha)
1768{
1769 struct qla_hw_data *ha = vha->hw;
1770 vha->flags.online = 0;
1771 qla2x00_try_to_stop_firmware(vha);
1772 ha->isp_ops->disable_intrs(ha);
1773}
1774
1775static int 1766static int
1776qla82xx_fw_load_from_blob(struct qla_hw_data *ha) 1767qla82xx_fw_load_from_blob(struct qla_hw_data *ha)
1777{ 1768{
@@ -1856,7 +1847,7 @@ qla82xx_set_product_offset(struct qla_hw_data *ha)
1856 return -1; 1847 return -1;
1857} 1848}
1858 1849
1859int 1850static int
1860qla82xx_validate_firmware_blob(scsi_qla_host_t *vha, uint8_t fw_type) 1851qla82xx_validate_firmware_blob(scsi_qla_host_t *vha, uint8_t fw_type)
1861{ 1852{
1862 __le32 val; 1853 __le32 val;
@@ -1961,20 +1952,6 @@ qla82xx_check_rcvpeg_state(struct qla_hw_data *ha)
1961} 1952}
1962 1953
1963/* ISR related functions */ 1954/* ISR related functions */
1964uint32_t qla82xx_isr_int_target_mask_enable[8] = {
1965 ISR_INT_TARGET_MASK, ISR_INT_TARGET_MASK_F1,
1966 ISR_INT_TARGET_MASK_F2, ISR_INT_TARGET_MASK_F3,
1967 ISR_INT_TARGET_MASK_F4, ISR_INT_TARGET_MASK_F5,
1968 ISR_INT_TARGET_MASK_F7, ISR_INT_TARGET_MASK_F7
1969};
1970
1971uint32_t qla82xx_isr_int_target_status[8] = {
1972 ISR_INT_TARGET_STATUS, ISR_INT_TARGET_STATUS_F1,
1973 ISR_INT_TARGET_STATUS_F2, ISR_INT_TARGET_STATUS_F3,
1974 ISR_INT_TARGET_STATUS_F4, ISR_INT_TARGET_STATUS_F5,
1975 ISR_INT_TARGET_STATUS_F7, ISR_INT_TARGET_STATUS_F7
1976};
1977
1978static struct qla82xx_legacy_intr_set legacy_intr[] = \ 1955static struct qla82xx_legacy_intr_set legacy_intr[] = \
1979 QLA82XX_LEGACY_INTR_CONFIG; 1956 QLA82XX_LEGACY_INTR_CONFIG;
1980 1957
@@ -2813,7 +2790,7 @@ qla82xx_start_iocbs(scsi_qla_host_t *vha)
2813 else { 2790 else {
2814 WRT_REG_DWORD((unsigned long __iomem *)ha->nxdb_wr_ptr, dbval); 2791 WRT_REG_DWORD((unsigned long __iomem *)ha->nxdb_wr_ptr, dbval);
2815 wmb(); 2792 wmb();
2816 while (RD_REG_DWORD(ha->nxdb_rd_ptr) != dbval) { 2793 while (RD_REG_DWORD((void __iomem *)ha->nxdb_rd_ptr) != dbval) {
2817 WRT_REG_DWORD((unsigned long __iomem *)ha->nxdb_wr_ptr, 2794 WRT_REG_DWORD((unsigned long __iomem *)ha->nxdb_wr_ptr,
2818 dbval); 2795 dbval);
2819 wmb(); 2796 wmb();
@@ -2821,7 +2798,8 @@ qla82xx_start_iocbs(scsi_qla_host_t *vha)
2821 } 2798 }
2822} 2799}
2823 2800
2824void qla82xx_rom_lock_recovery(struct qla_hw_data *ha) 2801static void
2802qla82xx_rom_lock_recovery(struct qla_hw_data *ha)
2825{ 2803{
2826 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); 2804 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
2827 2805
@@ -3177,7 +3155,7 @@ qla82xx_check_md_needed(scsi_qla_host_t *vha)
3177} 3155}
3178 3156
3179 3157
3180int 3158static int
3181qla82xx_check_fw_alive(scsi_qla_host_t *vha) 3159qla82xx_check_fw_alive(scsi_qla_host_t *vha)
3182{ 3160{
3183 uint32_t fw_heartbeat_counter; 3161 uint32_t fw_heartbeat_counter;
@@ -3817,7 +3795,8 @@ qla82xx_minidump_process_rdocm(scsi_qla_host_t *vha,
3817 loop_cnt = ocm_hdr->op_count; 3795 loop_cnt = ocm_hdr->op_count;
3818 3796
3819 for (i = 0; i < loop_cnt; i++) { 3797 for (i = 0; i < loop_cnt; i++) {
3820 r_value = RD_REG_DWORD((void *)(r_addr + ha->nx_pcibase)); 3798 r_value = RD_REG_DWORD((void __iomem *)
3799 (r_addr + ha->nx_pcibase));
3821 *data_ptr++ = cpu_to_le32(r_value); 3800 *data_ptr++ = cpu_to_le32(r_value);
3822 r_addr += r_stride; 3801 r_addr += r_stride;
3823 } 3802 }
@@ -4376,7 +4355,7 @@ qla82xx_md_free(scsi_qla_host_t *vha)
4376 ha->md_tmplt_hdr, ha->md_template_size / 1024); 4355 ha->md_tmplt_hdr, ha->md_template_size / 1024);
4377 dma_free_coherent(&ha->pdev->dev, ha->md_template_size, 4356 dma_free_coherent(&ha->pdev->dev, ha->md_template_size,
4378 ha->md_tmplt_hdr, ha->md_tmplt_hdr_dma); 4357 ha->md_tmplt_hdr, ha->md_tmplt_hdr_dma);
4379 ha->md_tmplt_hdr = 0; 4358 ha->md_tmplt_hdr = NULL;
4380 } 4359 }
4381 4360
4382 /* Release the template data buffer allocated */ 4361 /* Release the template data buffer allocated */
@@ -4386,7 +4365,7 @@ qla82xx_md_free(scsi_qla_host_t *vha)
4386 ha->md_dump, ha->md_dump_size / 1024); 4365 ha->md_dump, ha->md_dump_size / 1024);
4387 vfree(ha->md_dump); 4366 vfree(ha->md_dump);
4388 ha->md_dump_size = 0; 4367 ha->md_dump_size = 0;
4389 ha->md_dump = 0; 4368 ha->md_dump = NULL;
4390 } 4369 }
4391} 4370}
4392 4371
@@ -4423,7 +4402,7 @@ qla82xx_md_prep(scsi_qla_host_t *vha)
4423 dma_free_coherent(&ha->pdev->dev, 4402 dma_free_coherent(&ha->pdev->dev,
4424 ha->md_template_size, 4403 ha->md_template_size,
4425 ha->md_tmplt_hdr, ha->md_tmplt_hdr_dma); 4404 ha->md_tmplt_hdr, ha->md_tmplt_hdr_dma);
4426 ha->md_tmplt_hdr = 0; 4405 ha->md_tmplt_hdr = NULL;
4427 } 4406 }
4428 4407
4429 } 4408 }
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index d501bf5f806b..3a1661cf8c1e 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -41,7 +41,7 @@ static struct kmem_cache *ctx_cachep;
41 */ 41 */
42int ql_errlev = ql_log_all; 42int ql_errlev = ql_log_all;
43 43
44int ql2xenableclass2; 44static int ql2xenableclass2;
45module_param(ql2xenableclass2, int, S_IRUGO|S_IRUSR); 45module_param(ql2xenableclass2, int, S_IRUGO|S_IRUSR);
46MODULE_PARM_DESC(ql2xenableclass2, 46MODULE_PARM_DESC(ql2xenableclass2,
47 "Specify if Class 2 operations are supported from the very " 47 "Specify if Class 2 operations are supported from the very "
@@ -89,6 +89,8 @@ MODULE_PARM_DESC(ql2xextended_error_logging,
89 "\t\t0x00200000 - AER/EEH. 0x00100000 - Multi Q.\n" 89 "\t\t0x00200000 - AER/EEH. 0x00100000 - Multi Q.\n"
90 "\t\t0x00080000 - P3P Specific. 0x00040000 - Virtual Port.\n" 90 "\t\t0x00080000 - P3P Specific. 0x00040000 - Virtual Port.\n"
91 "\t\t0x00020000 - Buffer Dump. 0x00010000 - Misc.\n" 91 "\t\t0x00020000 - Buffer Dump. 0x00010000 - Misc.\n"
92 "\t\t0x00008000 - Verbose. 0x00004000 - Target.\n"
93 "\t\t0x00002000 - Target Mgmt. 0x00001000 - Target TMF.\n"
92 "\t\t0x7fffffff - For enabling all logs, can be too many logs.\n" 94 "\t\t0x7fffffff - For enabling all logs, can be too many logs.\n"
93 "\t\t0x1e400000 - Preferred value for capturing essential " 95 "\t\t0x1e400000 - Preferred value for capturing essential "
94 "debug information (equivalent to old " 96 "debug information (equivalent to old "
@@ -494,12 +496,20 @@ qla24xx_pci_info_str(struct scsi_qla_host *vha, char *str)
494 (BIT_4 | BIT_5 | BIT_6 | BIT_7 | BIT_8 | BIT_9)) >> 4; 496 (BIT_4 | BIT_5 | BIT_6 | BIT_7 | BIT_8 | BIT_9)) >> 4;
495 497
496 strcpy(str, "PCIe ("); 498 strcpy(str, "PCIe (");
497 if (lspeed == 1) 499 switch (lspeed) {
500 case 1:
498 strcat(str, "2.5GT/s "); 501 strcat(str, "2.5GT/s ");
499 else if (lspeed == 2) 502 break;
503 case 2:
500 strcat(str, "5.0GT/s "); 504 strcat(str, "5.0GT/s ");
501 else 505 break;
506 case 3:
507 strcat(str, "8.0GT/s ");
508 break;
509 default:
502 strcat(str, "<unknown> "); 510 strcat(str, "<unknown> ");
511 break;
512 }
503 snprintf(lwstr, sizeof(lwstr), "x%d)", lwidth); 513 snprintf(lwstr, sizeof(lwstr), "x%d)", lwidth);
504 strcat(str, lwstr); 514 strcat(str, lwstr);
505 515
@@ -719,7 +729,7 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
719 729
720 rval = ha->isp_ops->start_scsi(sp); 730 rval = ha->isp_ops->start_scsi(sp);
721 if (rval != QLA_SUCCESS) { 731 if (rval != QLA_SUCCESS) {
722 ql_dbg(ql_dbg_io, vha, 0x3013, 732 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x3013,
723 "Start scsi failed rval=%d for cmd=%p.\n", rval, cmd); 733 "Start scsi failed rval=%d for cmd=%p.\n", rval, cmd);
724 goto qc24_host_busy_free_sp; 734 goto qc24_host_busy_free_sp;
725 } 735 }
@@ -2357,7 +2367,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
2357 /* Configure PCI I/O space */ 2367 /* Configure PCI I/O space */
2358 ret = ha->isp_ops->iospace_config(ha); 2368 ret = ha->isp_ops->iospace_config(ha);
2359 if (ret) 2369 if (ret)
2360 goto probe_hw_failed; 2370 goto iospace_config_failed;
2361 2371
2362 ql_log_pci(ql_log_info, pdev, 0x001d, 2372 ql_log_pci(ql_log_info, pdev, 0x001d,
2363 "Found an ISP%04X irq %d iobase 0x%p.\n", 2373 "Found an ISP%04X irq %d iobase 0x%p.\n",
@@ -2668,7 +2678,11 @@ probe_hw_failed:
2668 qla82xx_idc_lock(ha); 2678 qla82xx_idc_lock(ha);
2669 qla82xx_clear_drv_active(ha); 2679 qla82xx_clear_drv_active(ha);
2670 qla82xx_idc_unlock(ha); 2680 qla82xx_idc_unlock(ha);
2671 iounmap((device_reg_t __iomem *)ha->nx_pcibase); 2681 }
2682iospace_config_failed:
2683 if (IS_QLA82XX(ha)) {
2684 if (!ha->nx_pcibase)
2685 iounmap((device_reg_t __iomem *)ha->nx_pcibase);
2672 if (!ql2xdbwr) 2686 if (!ql2xdbwr)
2673 iounmap((device_reg_t __iomem *)ha->nxdb_wr_ptr); 2687 iounmap((device_reg_t __iomem *)ha->nxdb_wr_ptr);
2674 } else { 2688 } else {
@@ -2755,6 +2769,7 @@ qla2x00_remove_one(struct pci_dev *pdev)
2755 2769
2756 ha->flags.host_shutting_down = 1; 2770 ha->flags.host_shutting_down = 1;
2757 2771
2772 set_bit(UNLOADING, &base_vha->dpc_flags);
2758 mutex_lock(&ha->vport_lock); 2773 mutex_lock(&ha->vport_lock);
2759 while (ha->cur_vport_count) { 2774 while (ha->cur_vport_count) {
2760 struct Scsi_Host *scsi_host; 2775 struct Scsi_Host *scsi_host;
@@ -2784,8 +2799,6 @@ qla2x00_remove_one(struct pci_dev *pdev)
2784 "Error while clearing DRV-Presence.\n"); 2799 "Error while clearing DRV-Presence.\n");
2785 } 2800 }
2786 2801
2787 set_bit(UNLOADING, &base_vha->dpc_flags);
2788
2789 qla2x00_abort_all_cmds(base_vha, DID_NO_CONNECT << 16); 2802 qla2x00_abort_all_cmds(base_vha, DID_NO_CONNECT << 16);
2790 2803
2791 qla2x00_dfs_remove(base_vha); 2804 qla2x00_dfs_remove(base_vha);
@@ -3721,10 +3734,9 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
3721 if (fcport->flags & 3734 if (fcport->flags &
3722 FCF_FCP2_DEVICE) 3735 FCF_FCP2_DEVICE)
3723 opts |= BIT_1; 3736 opts |= BIT_1;
3724 status2 = 3737 status2 =
3725 qla2x00_get_port_database( 3738 qla2x00_get_port_database(
3726 vha, fcport, 3739 vha, fcport, opts);
3727 opts);
3728 if (status2 != QLA_SUCCESS) 3740 if (status2 != QLA_SUCCESS)
3729 status = 1; 3741 status = 1;
3730 } 3742 }
@@ -3836,7 +3848,7 @@ qla83xx_idc_state_handler_work(struct work_struct *work)
3836 qla83xx_idc_unlock(base_vha, 0); 3848 qla83xx_idc_unlock(base_vha, 0);
3837} 3849}
3838 3850
3839int 3851static int
3840qla83xx_check_nic_core_fw_alive(scsi_qla_host_t *base_vha) 3852qla83xx_check_nic_core_fw_alive(scsi_qla_host_t *base_vha)
3841{ 3853{
3842 int rval = QLA_SUCCESS; 3854 int rval = QLA_SUCCESS;
@@ -3954,7 +3966,7 @@ qla83xx_wait_logic(void)
3954 } 3966 }
3955} 3967}
3956 3968
3957int 3969static int
3958qla83xx_force_lock_recovery(scsi_qla_host_t *base_vha) 3970qla83xx_force_lock_recovery(scsi_qla_host_t *base_vha)
3959{ 3971{
3960 int rval; 3972 int rval;
@@ -4013,7 +4025,7 @@ qla83xx_force_lock_recovery(scsi_qla_host_t *base_vha)
4013 return rval; 4025 return rval;
4014} 4026}
4015 4027
4016int 4028static int
4017qla83xx_idc_lock_recovery(scsi_qla_host_t *base_vha) 4029qla83xx_idc_lock_recovery(scsi_qla_host_t *base_vha)
4018{ 4030{
4019 int rval = QLA_SUCCESS; 4031 int rval = QLA_SUCCESS;
@@ -4212,7 +4224,7 @@ qla83xx_clear_drv_presence(scsi_qla_host_t *vha)
4212 return rval; 4224 return rval;
4213} 4225}
4214 4226
4215void 4227static void
4216qla83xx_need_reset_handler(scsi_qla_host_t *vha) 4228qla83xx_need_reset_handler(scsi_qla_host_t *vha)
4217{ 4229{
4218 struct qla_hw_data *ha = vha->hw; 4230 struct qla_hw_data *ha = vha->hw;
@@ -4224,7 +4236,7 @@ qla83xx_need_reset_handler(scsi_qla_host_t *vha)
4224 while (1) { 4236 while (1) {
4225 qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack); 4237 qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack);
4226 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); 4238 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence);
4227 if (drv_ack == drv_presence) 4239 if ((drv_ack & drv_presence) == drv_presence)
4228 break; 4240 break;
4229 4241
4230 if (time_after_eq(jiffies, ack_timeout)) { 4242 if (time_after_eq(jiffies, ack_timeout)) {
@@ -4251,7 +4263,7 @@ qla83xx_need_reset_handler(scsi_qla_host_t *vha)
4251 ql_log(ql_log_info, vha, 0xb068, "HW State: COLD/RE-INIT.\n"); 4263 ql_log(ql_log_info, vha, 0xb068, "HW State: COLD/RE-INIT.\n");
4252} 4264}
4253 4265
4254int 4266static int
4255qla83xx_device_bootstrap(scsi_qla_host_t *vha) 4267qla83xx_device_bootstrap(scsi_qla_host_t *vha)
4256{ 4268{
4257 int rval = QLA_SUCCESS; 4269 int rval = QLA_SUCCESS;
@@ -4505,9 +4517,9 @@ qla2x00_do_dpc(void *data)
4505 "ISP abort end.\n"); 4517 "ISP abort end.\n");
4506 } 4518 }
4507 4519
4508 if (test_bit(FCPORT_UPDATE_NEEDED, &base_vha->dpc_flags)) { 4520 if (test_and_clear_bit(FCPORT_UPDATE_NEEDED,
4521 &base_vha->dpc_flags)) {
4509 qla2x00_update_fcports(base_vha); 4522 qla2x00_update_fcports(base_vha);
4510 clear_bit(FCPORT_UPDATE_NEEDED, &base_vha->dpc_flags);
4511 } 4523 }
4512 4524
4513 if (test_bit(SCR_PENDING, &base_vha->dpc_flags)) { 4525 if (test_bit(SCR_PENDING, &base_vha->dpc_flags)) {
@@ -4987,7 +4999,8 @@ qla2xxx_pci_mmio_enabled(struct pci_dev *pdev)
4987 return PCI_ERS_RESULT_RECOVERED; 4999 return PCI_ERS_RESULT_RECOVERED;
4988} 5000}
4989 5001
4990uint32_t qla82xx_error_recovery(scsi_qla_host_t *base_vha) 5002static uint32_t
5003qla82xx_error_recovery(scsi_qla_host_t *base_vha)
4991{ 5004{
4992 uint32_t rval = QLA_FUNCTION_FAILED; 5005 uint32_t rval = QLA_FUNCTION_FAILED;
4993 uint32_t drv_active = 0; 5006 uint32_t drv_active = 0;
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index b49d21779a24..ad1dc14bacce 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -1029,7 +1029,7 @@ void qlt_stop_phase2(struct qla_tgt *tgt)
1029EXPORT_SYMBOL(qlt_stop_phase2); 1029EXPORT_SYMBOL(qlt_stop_phase2);
1030 1030
1031/* Called from qlt_remove_target() -> qla2x00_remove_one() */ 1031/* Called from qlt_remove_target() -> qla2x00_remove_one() */
1032void qlt_release(struct qla_tgt *tgt) 1032static void qlt_release(struct qla_tgt *tgt)
1033{ 1033{
1034 struct qla_hw_data *ha = tgt->ha; 1034 struct qla_hw_data *ha = tgt->ha;
1035 1035
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
index cfe934e1af42..49697ca41e78 100644
--- a/drivers/scsi/qla2xxx/qla_version.h
+++ b/drivers/scsi/qla2xxx/qla_version.h
@@ -7,7 +7,7 @@
7/* 7/*
8 * Driver version 8 * Driver version
9 */ 9 */
10#define QLA2XXX_VERSION "8.04.00.07-k" 10#define QLA2XXX_VERSION "8.04.00.08-k"
11 11
12#define QLA_DRIVER_MAJOR_VER 8 12#define QLA_DRIVER_MAJOR_VER 8
13#define QLA_DRIVER_MINOR_VER 4 13#define QLA_DRIVER_MINOR_VER 4