Update libsas and dependent drivers to handle FPDMA
SEND/RECEIVE correctly.

Signed-off-by: Hannes Reinecke <h...@suse.com>
---
 drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 2 ++
 drivers/scsi/isci/request.c            | 4 +++-
 drivers/scsi/libsas/sas_ata.c          | 6 ++++--
 drivers/scsi/mvsas/mv_sas.c            | 4 +++-
 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 b733747..fc2e767 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
@@ -1573,6 +1573,8 @@ static u8 get_ata_protocol(u8 cmd, int direction)
        switch (cmd) {
        case ATA_CMD_FPDMA_WRITE:
        case ATA_CMD_FPDMA_READ:
+       case ATA_CMD_FPMDA_RECV:
+       case ATA_CMD_FPDMA_SEND:
        return SATA_PROTOCOL_FPDMA;
 
        case ATA_CMD_ID_ATA:
diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c
index cfd0084..29456e0 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
        status = sci_io_request_construct_basic_sata(ireq);
 
        if (qc && (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
-                  qc->tf.command == ATA_CMD_FPDMA_READ)) {
+                  qc->tf.command == ATA_CMD_FPDMA_READ ||
+                  qc->tf.command == ATA_CMD_FPDMA_RECV ||
+                  qc->tf.command == ATA_CMD_FPDMA_SEND)) {
                fis->sector_count = qc->tag << 3;
                ireq->tc->type.stp.ncq_tag = qc->tag;
        }
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 9c706d8..fe1cd26 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)
        task->task_done = sas_ata_task_done;
 
        if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
-           qc->tf.command == ATA_CMD_FPDMA_READ) {
+           qc->tf.command == ATA_CMD_FPDMA_READ ||
+           qc->tf.command == ATA_CMD_FPDMA_RECV ||
+           qc->tf.command == ATA_CMD_FPDMA_SEND) {
                /* Need to zero out the tag libata assigned us */
                qc->tf.nsect = 0;
        }
@@ -548,7 +550,7 @@ static struct ata_port_operations sas_sata_ops = {
 
 static struct ata_port_info sata_port_info = {
        .flags = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA | ATA_FLAG_NCQ |
-                ATA_FLAG_SAS_HOST,
+                ATA_FLAG_SAS_HOST | ATA_FLAG_FPDMA_AUX,
        .pio_mask = ATA_PIO4,
        .mwdma_mask = ATA_MWDMA2,
        .udma_mask = ATA_UDMA6,
diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
index 83cd3ea..db37149 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)
 
        if (qc) {
                if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
-                       qc->tf.command == ATA_CMD_FPDMA_READ) {
+                   qc->tf.command == ATA_CMD_FPDMA_READ ||
+                   qc->tf.command == ATA_CMD_FPDMA_RECV ||
+                   qc->tf.command == ATA_CMD_FPDMA_SEND) {
                        *tag = qc->tag;
                        return 1;
                }
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index 949198c..62abd98 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)
        struct ata_queued_cmd *qc = task->uldd_task;
        if (qc) {
                if (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
-                       qc->tf.command == ATA_CMD_FPDMA_READ) {
+                   qc->tf.command == ATA_CMD_FPDMA_READ ||
+                   qc->tf.command == ATA_CMD_FPDMA_RECV ||
+                   qc->tf.command == ATA_CMD_FPDMA_SEND) {
                        *tag = qc->tag;
                        return 1;
                }
-- 
1.8.5.6

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to