gp wrote:
Jeff

I think I may have found an issue in the ATAPI code in the function atapi_packet_task.

From my testing with the sata_via driver, I have been getting a timeout when sending the first inquiry command.


Here is the section of code of interest:


/* make sure DRQ is set */ status = ata_chk_status(ap); if ((status & (ATA_BUSY | ATA_DRQ)) != ATA_DRQ) goto err_out;

    /* send SCSI cdb */
    DPRINTK("send cdb\n");
    assert(ap->cdb_len >= 12);
    ata_data_xfer(ap, qc->cdb, ap->cdb_len, 1);

** Wait is needed here to work correctly
DPRINTK("Wait for a bit\n");

    /* if we are DMA'ing, irq handler takes over from here */
    if (qc->tf.protocol == ATA_PROT_ATAPI_DMA)
        ap->ops->bmdma_start(qc);        /* initiate bmdma */


In the test case, the dma transfer is being used. From my perusal of the ATA spec in section 9.8, it looks like there needs to be a definite state transition before issuing the bmdma_start.

Yeah, it looks like there needs to be an intrq-wait state in there...

Wanna submit a patch?  :)

        Jeff



-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to