Commit ef026b18 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Tejun Heo

libsas: enable FPDMA SEND/RECEIVE

Update libsas and dependent drivers to handle FPDMA
SEND/RECEIVE correctly.
Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent d238ffd5
...@@ -1630,6 +1630,8 @@ static u8 get_ata_protocol(u8 cmd, int direction) ...@@ -1630,6 +1630,8 @@ static u8 get_ata_protocol(u8 cmd, int direction)
switch (cmd) { switch (cmd) {
case ATA_CMD_FPDMA_WRITE: case ATA_CMD_FPDMA_WRITE:
case ATA_CMD_FPDMA_READ: case ATA_CMD_FPDMA_READ:
case ATA_CMD_FPDMA_RECV:
case ATA_CMD_FPDMA_SEND:
return SATA_PROTOCOL_FPDMA; return SATA_PROTOCOL_FPDMA;
case ATA_CMD_ID_ATA: case ATA_CMD_ID_ATA:
......
...@@ -3169,7 +3169,9 @@ static enum sci_status isci_request_stp_request_construct(struct isci_request *i ...@@ -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); status = sci_io_request_construct_basic_sata(ireq);
if (qc && (qc->tf.command == ATA_CMD_FPDMA_WRITE || 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; fis->sector_count = qc->tag << 3;
ireq->tc->type.stp.ncq_tag = qc->tag; ireq->tc->type.stp.ncq_tag = qc->tag;
} }
......
...@@ -205,7 +205,9 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc) ...@@ -205,7 +205,9 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
task->task_done = sas_ata_task_done; task->task_done = sas_ata_task_done;
if (qc->tf.command == ATA_CMD_FPDMA_WRITE || 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 */ /* Need to zero out the tag libata assigned us */
qc->tf.nsect = 0; qc->tf.nsect = 0;
} }
...@@ -548,7 +550,7 @@ static struct ata_port_operations sas_sata_ops = { ...@@ -548,7 +550,7 @@ static struct ata_port_operations sas_sata_ops = {
static struct ata_port_info sata_port_info = { static struct ata_port_info sata_port_info = {
.flags = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA | ATA_FLAG_NCQ | .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, .pio_mask = ATA_PIO4,
.mwdma_mask = ATA_MWDMA2, .mwdma_mask = ATA_MWDMA2,
.udma_mask = ATA_UDMA6, .udma_mask = ATA_UDMA6,
......
...@@ -429,7 +429,9 @@ static u32 mvs_get_ncq_tag(struct sas_task *task, u32 *tag) ...@@ -429,7 +429,9 @@ static u32 mvs_get_ncq_tag(struct sas_task *task, u32 *tag)
if (qc) { if (qc) {
if (qc->tf.command == ATA_CMD_FPDMA_WRITE || 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; *tag = qc->tag;
return 1; return 1;
} }
......
...@@ -280,7 +280,9 @@ u32 pm8001_get_ncq_tag(struct sas_task *task, u32 *tag) ...@@ -280,7 +280,9 @@ u32 pm8001_get_ncq_tag(struct sas_task *task, u32 *tag)
struct ata_queued_cmd *qc = task->uldd_task; struct ata_queued_cmd *qc = task->uldd_task;
if (qc) { if (qc) {
if (qc->tf.command == ATA_CMD_FPDMA_WRITE || 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; *tag = qc->tag;
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment