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>
This commit is contained in:
Родитель
d238ffd59d
Коммит
ef026b18bb
|
@ -1630,6 +1630,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_FPDMA_RECV:
|
||||
case ATA_CMD_FPDMA_SEND:
|
||||
return SATA_PROTOCOL_FPDMA;
|
||||
|
||||
case ATA_CMD_ID_ATA:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче