diff options
| author | Hannes Reinecke <hare@suse.de> | 2016-04-25 06:45:44 -0400 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2016-05-09 12:36:44 -0400 |
| commit | ef026b18bb8260e21b4a61685eac46ecdc490d00 (patch) | |
| tree | 6364573f2b434f0b380e7ab95d88ff61e6b023ca /drivers/scsi | |
| parent | d238ffd59d3c65c608f39a0ab2819b63c912f783 (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.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/isci/request.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/libsas/sas_ata.c | 6 | ||||
| -rw-r--r-- | drivers/scsi/mvsas/mv_sas.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/pm8001/pm8001_sas.c | 4 |
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 | ||
| 549 | static struct ata_port_info sata_port_info = { | 551 | static 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 | } |
