u32  opc = OPC_INB_SATA_HOST_OPSTART;
        memset(&sata_cmd, 0, sizeof(sata_cmd));
        circularQ = &pm8001_ha->inbnd_q_tbl[0];
-       if (task->data_dir == DMA_NONE) {
+
+       if (task->data_dir == DMA_NONE && !task->ata_task.use_ncq) {
                ATAP = 0x04;  /* no data*/
                pm8001_dbg(pm8001_ha, IO, "no data\n");
        } else if (likely(!task->ata_task.device_control_reg_update)) {
-               if (task->ata_task.dma_xfer) {
+               if (task->ata_task.use_ncq &&
+                   dev->sata_dev.class != ATA_DEV_ATAPI) {
+                       ATAP = 0x07; /* FPDMA */
+                       pm8001_dbg(pm8001_ha, IO, "FPDMA\n");
+               } else if (task->ata_task.dma_xfer) {
                        ATAP = 0x06; /* DMA */
                        pm8001_dbg(pm8001_ha, IO, "DMA\n");
                } else {
                        ATAP = 0x05; /* PIO*/
                        pm8001_dbg(pm8001_ha, IO, "PIO\n");
                }
-               if (task->ata_task.use_ncq &&
-                       dev->sata_dev.class != ATA_DEV_ATAPI) {
-                       ATAP = 0x07; /* FPDMA */
-                       pm8001_dbg(pm8001_ha, IO, "FPDMA\n");
-               }
        }
        if (task->ata_task.use_ncq && pm8001_get_ncq_tag(task, &hdr_tag)) {
                task->ata_task.fis.sector_count |= (u8) (hdr_tag << 3);
 
        q_index = (u32) (cpu_id) % (pm8001_ha->max_q_num);
        circularQ = &pm8001_ha->inbnd_q_tbl[q_index];
 
-       if (task->data_dir == DMA_NONE) {
+       if (task->data_dir == DMA_NONE && !task->ata_task.use_ncq) {
                ATAP = 0x04; /* no data*/
                pm8001_dbg(pm8001_ha, IO, "no data\n");
        } else if (likely(!task->ata_task.device_control_reg_update)) {
-               if (task->ata_task.dma_xfer) {
+               if (task->ata_task.use_ncq &&
+                   dev->sata_dev.class != ATA_DEV_ATAPI) {
+                       ATAP = 0x07; /* FPDMA */
+                       pm8001_dbg(pm8001_ha, IO, "FPDMA\n");
+               } else if (task->ata_task.dma_xfer) {
                        ATAP = 0x06; /* DMA */
                        pm8001_dbg(pm8001_ha, IO, "DMA\n");
                } else {
                        ATAP = 0x05; /* PIO*/
                        pm8001_dbg(pm8001_ha, IO, "PIO\n");
                }
-               if (task->ata_task.use_ncq &&
-                   dev->sata_dev.class != ATA_DEV_ATAPI) {
-                       ATAP = 0x07; /* FPDMA */
-                       pm8001_dbg(pm8001_ha, IO, "FPDMA\n");
-               }
        }
        if (task->ata_task.use_ncq && pm8001_get_ncq_tag(task, &hdr_tag)) {
                task->ata_task.fis.sector_count |= (u8) (hdr_tag << 3);