aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2016-04-25 06:45:44 -0400
committerTejun Heo <tj@kernel.org>2016-05-09 12:36:44 -0400
commitef026b18bb8260e21b4a61685eac46ecdc490d00 (patch)
tree6364573f2b434f0b380e7ab95d88ff61e6b023ca /drivers/scsi
parentd238ffd59d3c65c608f39a0ab2819b63c912f783 (diff)
libsas: enable FPDMA SEND/RECEIVE
Update libsas and dependent drivers to handle FPDMA SEND/RECEIVE correctly. Signed-off-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/hisi_sas/hisi_sas_v2_hw.c2
-rw-r--r--drivers/scsi/isci/request.c4
-rw-r--r--drivers/scsi/libsas/sas_ata.c6
-rw-r--r--drivers/scsi/mvsas/mv_sas.c4
-rw-r--r--drivers/scsi/pm8001/pm8001_sas.c4
5 files changed, 15 insertions, 5 deletions
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
index bbe98ecea0bc..860c9f847371 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
@@ -1630,6 +1630,8 @@ static u8 get_ata_protocol(u8 cmd, int direction)
1630 switch (cmd) { 1630 switch (cmd) {
1631 case ATA_CMD_FPDMA_WRITE: 1631 case ATA_CMD_FPDMA_WRITE:
1632 case ATA_CMD_FPDMA_READ: 1632 case ATA_CMD_FPDMA_READ:
1633 case ATA_CMD_FPDMA_RECV:
1634 case ATA_CMD_FPDMA_SEND:
1633 return SATA_PROTOCOL_FPDMA; 1635 return SATA_PROTOCOL_FPDMA;
1634 1636
1635 case ATA_CMD_ID_ATA: 1637 case ATA_CMD_ID_ATA:
diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c
index cfd0084f1cd2..29456e097a30 100644
--- a/drivers/scsi/isci/request.c
+++ b/drivers/scsi/isci/request.c
@@ -3169,7 +3169,9 @@ static enum sci_status isci_request_stp_request_construct(struct isci_request *i
3169 status = sci_io_request_construct_basic_sata(ireq); 3169 status = sci_io_request_construct_basic_sata(ireq);
3170 3170
3171 if (qc && (qc->tf.command == ATA_CMD_FPDMA_WRITE || 3171 if (qc && (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
3172 qc->tf.command == ATA_CMD_FPDMA_READ)) { 3172 qc->tf.command == ATA_CMD_FPDMA_READ ||
3173 qc->tf.command == ATA_CMD_FPDMA_RECV ||
3174 qc->tf.command == ATA_CMD_FPDMA_SEND)) {
3173 fis->sector_count = qc->tag << 3; 3175 fis->sector_count = qc->tag << 3;
3174 ireq->tc->type.stp.ncq_tag = qc->tag; 3176 ireq->tc->type.stp.ncq_tag = qc->tag;
3175 } 3177 }
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 9c706d8c1441..fe1cd2691748 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -205,7 +205,9 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
205 task->task_done = sas_ata_task_done; 205 task->task_done = sas_ata_task_done;
206 206
207 if (qc->tf.command == ATA_CMD_FPDMA_WRITE || 207 if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
208 qc->tf.command == ATA_CMD_FPDMA_READ) { 208 qc->tf.command == ATA_CMD_FPDMA_READ ||
209 qc->tf.command == ATA_CMD_FPDMA_RECV ||
210 qc->tf.command == ATA_CMD_FPDMA_SEND) {
209 /* Need to zero out the tag libata assigned us */ 211 /* Need to zero out the tag libata assigned us */
210 qc->tf.nsect = 0; 212 qc->tf.nsect = 0;
211 } 213 }
@@ -548,7 +550,7 @@ static struct ata_port_operations sas_sata_ops = {
548 550
549static struct ata_port_info sata_port_info = { 551static struct ata_port_info sata_port_info = {
550 .flags = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA | ATA_FLAG_NCQ | 552 .flags = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA | ATA_FLAG_NCQ |
551 ATA_FLAG_SAS_HOST, 553 ATA_FLAG_SAS_HOST | ATA_FLAG_FPDMA_AUX,
552 .pio_mask = ATA_PIO4, 554 .pio_mask = ATA_PIO4,
553 .mwdma_mask = ATA_MWDMA2, 555 .mwdma_mask = ATA_MWDMA2,
554 .udma_mask = ATA_UDMA6, 556 .udma_mask = ATA_UDMA6,
diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
index 83cd3ea2df41..db3714964c0a 100644
--- a/drivers/scsi/mvsas/mv_sas.c
+++ b/drivers/scsi/mvsas/mv_sas.c
@@ -429,7 +429,9 @@ static u32 mvs_get_ncq_tag(struct sas_task *task, u32 *tag)
429 429
430 if (qc) { 430 if (qc) {
431 if (qc->tf.command == ATA_CMD_FPDMA_WRITE || 431 if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
432 qc->tf.command == ATA_CMD_FPDMA_READ) { 432 qc->tf.command == ATA_CMD_FPDMA_READ ||
433 qc->tf.command == ATA_CMD_FPDMA_RECV ||
434 qc->tf.command == ATA_CMD_FPDMA_SEND) {
433 *tag = qc->tag; 435 *tag = qc->tag;
434 return 1; 436 return 1;
435 } 437 }
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index 949198c01ced..62abd9896625 100644
--- a/drivers/scsi/pm8001/pm8001_sas.c
+++ b/drivers/scsi/pm8001/pm8001_sas.c
@@ -280,7 +280,9 @@ u32 pm8001_get_ncq_tag(struct sas_task *task, u32 *tag)
280 struct ata_queued_cmd *qc = task->uldd_task; 280 struct ata_queued_cmd *qc = task->uldd_task;
281 if (qc) { 281 if (qc) {
282 if (qc->tf.command == ATA_CMD_FPDMA_WRITE || 282 if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
283 qc->tf.command == ATA_CMD_FPDMA_READ) { 283 qc->tf.command == ATA_CMD_FPDMA_READ ||
284 qc->tf.command == ATA_CMD_FPDMA_RECV ||
285 qc->tf.command == ATA_CMD_FPDMA_SEND) {
284 *tag = qc->tag; 286 *tag = qc->tag;
285 return 1; 287 return 1;
286 } 288 }