task->ata_task.retry_count = 1;
        task->task_state_flags = SAS_TASK_STATE_PENDING;
 
-       if (qc->tf.protocol == ATA_PROT_DMA)
+       switch (qc->tf.protocol) {
+       case ATA_PROT_NCQ:
+               task->ata_task.use_ncq = 1;
+               /* fall through */
+       case ATA_PROT_DMA:
                task->ata_task.dma_xfer = 1;
+               break;
+       }
 
        if (sas_ha->lldd_max_execute_num < 2)
                res = i->dft->lldd_execute_task(task, 1, GFP_ATOMIC);
 
 static struct ata_port_info sata_port_info = {
        .flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | ATA_FLAG_SATA_RESET |
-               ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA,
+               ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | ATA_FLAG_NCQ,
        .pio_mask = 0x1f, /* PIO0-4 */
        .mwdma_mask = 0x07, /* MWDMA0-2 */
        .udma_mask = ATA_UDMA6,
 
                ap->private_data = found_dev;
                ap->cbl = ATA_CBL_SATA;
+               ap->scsi_host = shost;
                found_dev->sata_dev.ap = ap;
        }