aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/scsi/qla2xxx/qla_attr.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c36
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h2
-rw-r--r--drivers/scsi/qla2xxx/qla_inline.h12
-rw-r--r--drivers/scsi/qla2xxx/qla_iocb.c55
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c13
-rw-r--r--drivers/scsi/qla2xxx/qla_mid.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c4
8 files changed, 62 insertions, 64 deletions
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 810067099801..a31e05f3bfd4 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -1786,7 +1786,7 @@ qla24xx_vport_create(struct fc_vport *fc_vport, bool disable)
1786 fc_vport_set_state(fc_vport, FC_VPORT_LINKDOWN); 1786 fc_vport_set_state(fc_vport, FC_VPORT_LINKDOWN);
1787 } 1787 }
1788 1788
1789 if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && ql2xenabledif) { 1789 if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) {
1790 if (ha->fw_attributes & BIT_4) { 1790 if (ha->fw_attributes & BIT_4) {
1791 int prot = 0; 1791 int prot = 0;
1792 vha->flags.difdix_supported = 1; 1792 vha->flags.difdix_supported = 1;
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 2155071f3100..d79cd8a5f831 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -8,24 +8,24 @@
8/* 8/*
9 * Table for showing the current message id in use for particular level 9 * Table for showing the current message id in use for particular level
10 * Change this table for addition of log/debug messages. 10 * Change this table for addition of log/debug messages.
11 * ----------------------------------------------------- 11 * ----------------------------------------------------------------------
12 * | Level | Last Value Used | 12 * | Level | Last Value Used | Holes |
13 * ----------------------------------------------------- 13 * ----------------------------------------------------------------------
14 * | Module Init and Probe | 0x0116 | 14 * | Module Init and Probe | 0x0116 | |
15 * | Mailbox commands | 0x111e | 15 * | Mailbox commands | 0x1126 | |
16 * | Device Discovery | 0x2083 | 16 * | Device Discovery | 0x2083 | |
17 * | Queue Command and IO tracing | 0x302e | 17 * | Queue Command and IO tracing | 0x302e | 0x3008 |
18 * | DPC Thread | 0x401c | 18 * | DPC Thread | 0x401c | |
19 * | Async Events | 0x5059 | 19 * | Async Events | 0x5059 | |
20 * | Timer Routines | 0x600d | 20 * | Timer Routines | 0x600d | |
21 * | User Space Interactions | 0x709c | 21 * | User Space Interactions | 0x709d | |
22 * | Task Management | 0x8043 | 22 * | Task Management | 0x8041 | |
23 * | AER/EEH | 0x900f | 23 * | AER/EEH | 0x900f | |
24 * | Virtual Port | 0xa007 | 24 * | Virtual Port | 0xa007 | |
25 * | ISP82XX Specific | 0xb027 | 25 * | ISP82XX Specific | 0xb04f | |
26 * | MultiQ | 0xc00b | 26 * | MultiQ | 0xc00b | |
27 * | Misc | 0xd00b | 27 * | Misc | 0xd00b | |
28 * ----------------------------------------------------- 28 * ----------------------------------------------------------------------
29 */ 29 */
30 30
31#include "qla_def.h" 31#include "qla_def.h"
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index cc5a79259d33..a03eaf40f377 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2529,6 +2529,7 @@ struct qla_hw_data {
2529#define DT_ISP8021 BIT_14 2529#define DT_ISP8021 BIT_14
2530#define DT_ISP_LAST (DT_ISP8021 << 1) 2530#define DT_ISP_LAST (DT_ISP8021 << 1)
2531 2531
2532#define DT_T10_PI BIT_25
2532#define DT_IIDMA BIT_26 2533#define DT_IIDMA BIT_26
2533#define DT_FWI2 BIT_27 2534#define DT_FWI2 BIT_27
2534#define DT_ZIO_SUPPORTED BIT_28 2535#define DT_ZIO_SUPPORTED BIT_28
@@ -2572,6 +2573,7 @@ struct qla_hw_data {
2572#define IS_NOCACHE_VPD_TYPE(ha) (IS_QLA81XX(ha)) 2573#define IS_NOCACHE_VPD_TYPE(ha) (IS_QLA81XX(ha))
2573#define IS_ALOGIO_CAPABLE(ha) (IS_QLA23XX(ha) || IS_FWI2_CAPABLE(ha)) 2574#define IS_ALOGIO_CAPABLE(ha) (IS_QLA23XX(ha) || IS_FWI2_CAPABLE(ha))
2574 2575
2576#define IS_T10_PI_CAPABLE(ha) ((ha)->device_type & DT_T10_PI)
2575#define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA) 2577#define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA)
2576#define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2) 2578#define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2)
2577#define IS_ZIO_SUPPORTED(ha) ((ha)->device_type & DT_ZIO_SUPPORTED) 2579#define IS_ZIO_SUPPORTED(ha) ((ha)->device_type & DT_ZIO_SUPPORTED)
diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h
index c06e5f9b431e..9902834e0b74 100644
--- a/drivers/scsi/qla2xxx/qla_inline.h
+++ b/drivers/scsi/qla2xxx/qla_inline.h
@@ -104,9 +104,17 @@ qla2x00_set_fcport_state(fc_port_t *fcport, int state)
104} 104}
105 105
106static inline int 106static inline int
107qla2x00_hba_err_chk_enabled(unsigned char op) 107qla2x00_hba_err_chk_enabled(srb_t *sp)
108{ 108{
109 switch (op) { 109 /*
110 * Uncomment when corresponding SCSI changes are done.
111 *
112 if (!sp->cmd->prot_chk)
113 return 0;
114 *
115 */
116
117 switch (scsi_get_prot_op(sp->cmd)) {
110 case SCSI_PROT_READ_STRIP: 118 case SCSI_PROT_READ_STRIP:
111 case SCSI_PROT_WRITE_INSERT: 119 case SCSI_PROT_WRITE_INSERT:
112 if (ql2xenablehba_err_chk >= 1) 120 if (ql2xenablehba_err_chk >= 1)
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index 09ad3ce60064..dbec89622a0f 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -709,12 +709,11 @@ struct fw_dif_context {
709 * 709 *
710 */ 710 */
711static inline void 711static inline void
712qla24xx_set_t10dif_tags(struct scsi_cmnd *cmd, struct fw_dif_context *pkt, 712qla24xx_set_t10dif_tags(srb_t *sp, struct fw_dif_context *pkt,
713 unsigned int protcnt) 713 unsigned int protcnt)
714{ 714{
715 struct sd_dif_tuple *spt; 715 struct scsi_cmnd *cmd = sp->cmd;
716 scsi_qla_host_t *vha = shost_priv(cmd->device->host); 716 scsi_qla_host_t *vha = shost_priv(cmd->device->host);
717 unsigned char op = scsi_get_prot_op(cmd);
718 717
719 switch (scsi_get_prot_type(cmd)) { 718 switch (scsi_get_prot_type(cmd)) {
720 case SCSI_PROT_DIF_TYPE0: 719 case SCSI_PROT_DIF_TYPE0:
@@ -724,6 +723,10 @@ qla24xx_set_t10dif_tags(struct scsi_cmnd *cmd, struct fw_dif_context *pkt,
724 */ 723 */
725 pkt->ref_tag = cpu_to_le32((uint32_t) 724 pkt->ref_tag = cpu_to_le32((uint32_t)
726 (0xffffffff & scsi_get_lba(cmd))); 725 (0xffffffff & scsi_get_lba(cmd)));
726
727 if (!qla2x00_hba_err_chk_enabled(sp))
728 break;
729
727 pkt->ref_tag_mask[0] = 0xff; 730 pkt->ref_tag_mask[0] = 0xff;
728 pkt->ref_tag_mask[1] = 0xff; 731 pkt->ref_tag_mask[1] = 0xff;
729 pkt->ref_tag_mask[2] = 0xff; 732 pkt->ref_tag_mask[2] = 0xff;
@@ -735,20 +738,16 @@ qla24xx_set_t10dif_tags(struct scsi_cmnd *cmd, struct fw_dif_context *pkt,
735 * match LBA in CDB + N 738 * match LBA in CDB + N
736 */ 739 */
737 case SCSI_PROT_DIF_TYPE2: 740 case SCSI_PROT_DIF_TYPE2:
738 if (!qla2x00_hba_err_chk_enabled(op)) 741 pkt->app_tag = __constant_cpu_to_le16(0);
739 break; 742 pkt->app_tag_mask[0] = 0x0;
740 743 pkt->app_tag_mask[1] = 0x0;
741 if (scsi_prot_sg_count(cmd)) {
742 spt = page_address(sg_page(scsi_prot_sglist(cmd))) +
743 scsi_prot_sglist(cmd)[0].offset;
744 pkt->app_tag = swab32(spt->app_tag);
745 pkt->app_tag_mask[0] = 0xff;
746 pkt->app_tag_mask[1] = 0xff;
747 }
748 744
749 pkt->ref_tag = cpu_to_le32((uint32_t) 745 pkt->ref_tag = cpu_to_le32((uint32_t)
750 (0xffffffff & scsi_get_lba(cmd))); 746 (0xffffffff & scsi_get_lba(cmd)));
751 747
748 if (!qla2x00_hba_err_chk_enabled(sp))
749 break;
750
752 /* enable ALL bytes of the ref tag */ 751 /* enable ALL bytes of the ref tag */
753 pkt->ref_tag_mask[0] = 0xff; 752 pkt->ref_tag_mask[0] = 0xff;
754 pkt->ref_tag_mask[1] = 0xff; 753 pkt->ref_tag_mask[1] = 0xff;
@@ -768,26 +767,15 @@ qla24xx_set_t10dif_tags(struct scsi_cmnd *cmd, struct fw_dif_context *pkt,
768 * 16 bit app tag. 767 * 16 bit app tag.
769 */ 768 */
770 case SCSI_PROT_DIF_TYPE1: 769 case SCSI_PROT_DIF_TYPE1:
771 if (!qla2x00_hba_err_chk_enabled(op)) 770 pkt->ref_tag = cpu_to_le32((uint32_t)
771 (0xffffffff & scsi_get_lba(cmd)));
772 pkt->app_tag = __constant_cpu_to_le16(0);
773 pkt->app_tag_mask[0] = 0x0;
774 pkt->app_tag_mask[1] = 0x0;
775
776 if (!qla2x00_hba_err_chk_enabled(sp))
772 break; 777 break;
773 778
774 if (protcnt && (op == SCSI_PROT_WRITE_STRIP ||
775 op == SCSI_PROT_WRITE_PASS)) {
776 spt = page_address(sg_page(scsi_prot_sglist(cmd))) +
777 scsi_prot_sglist(cmd)[0].offset;
778 ql_dbg(ql_dbg_io, vha, 0x3008,
779 "LBA from user %p, lba = 0x%x for cmd=%p.\n",
780 spt, (int)spt->ref_tag, cmd);
781 pkt->ref_tag = swab32(spt->ref_tag);
782 pkt->app_tag_mask[0] = 0x0;
783 pkt->app_tag_mask[1] = 0x0;
784 } else {
785 pkt->ref_tag = cpu_to_le32((uint32_t)
786 (0xffffffff & scsi_get_lba(cmd)));
787 pkt->app_tag = __constant_cpu_to_le16(0);
788 pkt->app_tag_mask[0] = 0x0;
789 pkt->app_tag_mask[1] = 0x0;
790 }
791 /* enable ALL bytes of the ref tag */ 779 /* enable ALL bytes of the ref tag */
792 pkt->ref_tag_mask[0] = 0xff; 780 pkt->ref_tag_mask[0] = 0xff;
793 pkt->ref_tag_mask[1] = 0xff; 781 pkt->ref_tag_mask[1] = 0xff;
@@ -1208,7 +1196,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
1208 1196
1209 INIT_LIST_HEAD(&crc_ctx_pkt->dsd_list); 1197 INIT_LIST_HEAD(&crc_ctx_pkt->dsd_list);
1210 1198
1211 qla24xx_set_t10dif_tags(cmd, (struct fw_dif_context *) 1199 qla24xx_set_t10dif_tags(sp, (struct fw_dif_context *)
1212 &crc_ctx_pkt->ref_tag, tot_prot_dsds); 1200 &crc_ctx_pkt->ref_tag, tot_prot_dsds);
1213 1201
1214 cmd_pkt->crc_context_address[0] = cpu_to_le32(LSD(crc_ctx_dma)); 1202 cmd_pkt->crc_context_address[0] = cpu_to_le32(LSD(crc_ctx_dma));
@@ -1237,7 +1225,6 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
1237 fcp_cmnd->additional_cdb_len |= 2; 1225 fcp_cmnd->additional_cdb_len |= 2;
1238 1226
1239 int_to_scsilun(sp->cmd->device->lun, &fcp_cmnd->lun); 1227 int_to_scsilun(sp->cmd->device->lun, &fcp_cmnd->lun);
1240 host_to_fcp_swap((uint8_t *)&fcp_cmnd->lun, sizeof(fcp_cmnd->lun));
1241 memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len); 1228 memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len);
1242 cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len); 1229 cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len);
1243 cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32( 1230 cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32(
@@ -1289,7 +1276,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
1289 BUG(); 1276 BUG();
1290 } 1277 }
1291 1278
1292 if (!qla2x00_hba_err_chk_enabled(scsi_get_prot_op(cmd))) 1279 if (!qla2x00_hba_err_chk_enabled(sp))
1293 fw_prot_opts |= 0x10; /* Disable Guard tag checking */ 1280 fw_prot_opts |= 0x10; /* Disable Guard tag checking */
1294 1281
1295 if (!bundling) { 1282 if (!bundling) {
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 53339f10a598..ec53e87781a5 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1534,25 +1534,26 @@ qla2x00_handle_dif_error(srb_t *sp, struct sts_entry_24xx *sts24)
1534 return 1; 1534 return 1;
1535 } 1535 }
1536 1536
1537 /* check appl tag */ 1537 /* check ref tag */
1538 if (e_app_tag != a_app_tag) { 1538 if (e_ref_tag != a_ref_tag) {
1539 scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST, 1539 scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST,
1540 0x10, 0x2); 1540 0x10, 0x3);
1541 set_driver_byte(cmd, DRIVER_SENSE); 1541 set_driver_byte(cmd, DRIVER_SENSE);
1542 set_host_byte(cmd, DID_ABORT); 1542 set_host_byte(cmd, DID_ABORT);
1543 cmd->result |= SAM_STAT_CHECK_CONDITION << 1; 1543 cmd->result |= SAM_STAT_CHECK_CONDITION << 1;
1544 return 1; 1544 return 1;
1545 } 1545 }
1546 1546
1547 /* check ref tag */ 1547 /* check appl tag */
1548 if (e_ref_tag != a_ref_tag) { 1548 if (e_app_tag != a_app_tag) {
1549 scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST, 1549 scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST,
1550 0x10, 0x3); 1550 0x10, 0x2);
1551 set_driver_byte(cmd, DRIVER_SENSE); 1551 set_driver_byte(cmd, DRIVER_SENSE);
1552 set_host_byte(cmd, DID_ABORT); 1552 set_host_byte(cmd, DID_ABORT);
1553 cmd->result |= SAM_STAT_CHECK_CONDITION << 1; 1553 cmd->result |= SAM_STAT_CHECK_CONDITION << 1;
1554 return 1; 1554 return 1;
1555 } 1555 }
1556
1556 return 1; 1557 return 1;
1557} 1558}
1558 1559
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index c706ed370000..f488cc69fc79 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -472,7 +472,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport)
472 host->can_queue = base_vha->req->length + 128; 472 host->can_queue = base_vha->req->length + 128;
473 host->this_id = 255; 473 host->this_id = 255;
474 host->cmd_per_lun = 3; 474 host->cmd_per_lun = 3;
475 if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && ql2xenabledif) 475 if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif)
476 host->max_cmd_len = 32; 476 host->max_cmd_len = 32;
477 else 477 else
478 host->max_cmd_len = MAX_CMDSZ; 478 host->max_cmd_len = MAX_CMDSZ;
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index d65a3005b439..f57c292845a5 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -2255,7 +2255,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
2255 host->this_id = 255; 2255 host->this_id = 255;
2256 host->cmd_per_lun = 3; 2256 host->cmd_per_lun = 3;
2257 host->unique_id = host->host_no; 2257 host->unique_id = host->host_no;
2258 if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && ql2xenabledif) 2258 if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif)
2259 host->max_cmd_len = 32; 2259 host->max_cmd_len = 32;
2260 else 2260 else
2261 host->max_cmd_len = MAX_CMDSZ; 2261 host->max_cmd_len = MAX_CMDSZ;
@@ -2382,7 +2382,7 @@ skip_dpc:
2382 "Detected hba at address=%p.\n", 2382 "Detected hba at address=%p.\n",
2383 ha); 2383 ha);
2384 2384
2385 if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && ql2xenabledif) { 2385 if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) {
2386 if (ha->fw_attributes & BIT_4) { 2386 if (ha->fw_attributes & BIT_4) {
2387 int prot = 0; 2387 int prot = 0;
2388 base_vha->flags.difdix_supported = 1; 2388 base_vha->flags.difdix_supported = 1;