11_libata_debug.patch As usual, debug messages and error triggers.
Signed-off-by: Tejun Heo <[EMAIL PROTECTED]> drivers/scsi/ahci.c | 43 +++++++++++++++++++++++++++++++ drivers/scsi/libata-core.c | 9 ++++++ drivers/scsi/sata_sil.c | 61 ++++++++++++++++++++++++++++++++++++++++++++- include/linux/libata.h | 2 - 4 files changed, 113 insertions(+), 2 deletions(-) Index: work/drivers/scsi/ahci.c =================================================================== --- work.orig/drivers/scsi/ahci.c 2005-07-07 22:08:37.000000000 +0900 +++ work/drivers/scsi/ahci.c 2005-07-07 22:08:37.000000000 +0900 @@ -681,11 +681,54 @@ static int ahci_qc_issue(struct ata_queu struct ata_port *ap = qc->ap; void *port_mmio = (void *) ap->ioaddr.cmd_addr; +#if 0 + if (qc->tag == 3) { + struct ahci_port_priv *pp = qc->ap->private_data; + int offset = qc->tag * AHCI_CMD_TOTAL; + u8 *fis = pp->cmd_tbl + offset; + printk("AHCI%u: FAILING %02u %p: %08x %08x %08x %08x %08x\n", + ap->id, qc->tag, qc->scsicmd, + ((unsigned *)fis)[0], ((unsigned *)fis)[1], + ((unsigned *)fis)[2], ((unsigned *)fis)[3], + ((unsigned *)fis)[4]); + fis[4] = 0xff; + fis[5] = 0xff; + fis[6] = 0xff; + fis[8] = 0xff; + fis[9] = 0xff; + fis[10] = 0xff; + } +#endif + +#if 1 + { + struct ahci_port_priv *pp = qc->ap->private_data; + unsigned *fis = pp->cmd_tbl + (qc->tag * AHCI_CMD_TOTAL); + printk("AHCI%u: FIS(tag%02u) %p: %08x %08x %08x %08x %08x\n", + ap->id, qc->tag, qc->scsicmd, + fis[0], fis[1], fis[2], fis[3], fis[4]); + if (qc->tf.command == 0xa0) { + u8 *p = qc->cdb; + printk("AHCI%u: PACKET: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", + ap->id, + p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], + p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]); + } + } +#endif + if (qc->flags & ATA_QCFLAG_NCQ) { writel(1 << qc->tag, port_mmio + PORT_SCR_ACT); readl(port_mmio + PORT_SCR_ACT); } +#if 0 + if (qc->tag == 3) { + printk("AHCI: SKIPPING %02u\n", qc->tag); + return 0; + } +#endif + writel(1 << qc->tag, port_mmio + PORT_CMD_ISSUE); readl(port_mmio + PORT_CMD_ISSUE); /* flush */ Index: work/drivers/scsi/libata-core.c =================================================================== --- work.orig/drivers/scsi/libata-core.c 2005-07-07 22:08:37.000000000 +0900 +++ work/drivers/scsi/libata-core.c 2005-07-07 22:08:37.000000000 +0900 @@ -2981,6 +2981,15 @@ static void atapi_request_sense(struct a cmd->result = SAM_STAT_CHECK_CONDITION; +#if 1 + { + u8 *p = cmd->sense_buffer; + printk("SENSE: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", + p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], + p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]); + } +#endif + DPRINTK("EXIT\n"); } Index: work/include/linux/libata.h =================================================================== --- work.orig/include/linux/libata.h 2005-07-07 22:08:37.000000000 +0900 +++ work/include/linux/libata.h 2005-07-07 22:08:37.000000000 +0900 @@ -37,7 +37,7 @@ #undef ATA_VERBOSE_DEBUG /* yet more debugging output */ #undef ATA_IRQ_TRAP /* define to ack screaming irqs */ #undef ATA_NDEBUG /* define to disable quick runtime checks */ -#undef ATA_ENABLE_ATAPI /* define to enable ATAPI support */ +#define ATA_ENABLE_ATAPI /* define to enable ATAPI support */ #undef ATA_ENABLE_PATA /* define to enable PATA support in some * low-level drivers */ #undef ATAPI_ENABLE_DMADIR /* enables ATAPI DMADIR bridge support */ Index: work/drivers/scsi/sata_sil.c =================================================================== --- work.orig/drivers/scsi/sata_sil.c 2005-07-07 22:08:35.000000000 +0900 +++ work/drivers/scsi/sata_sil.c 2005-07-07 22:08:37.000000000 +0900 @@ -138,6 +138,65 @@ static Scsi_Host_Template sil_sht = { .ordered_flush = 1, }; +static int sil_qc_debug_issue(struct ata_queued_cmd *qc) +{ +#if 1 + { + static unsigned cnt = 0; + struct ata_port *ap = qc->ap; + struct ata_taskfile *tf = &qc->tf; + + if (tf->command == ATA_CMD_READ_EXT) { + if (++cnt % 100 == 0) { + printk("SIL%u: FAILING H f=%02x n=%02x l=%02x m=%02x h=%02x L f=%02x n=%02x l=%02x m=%02x h=%02x C=%02x\n", + ap->id, tf->hob_feature, tf->hob_nsect, + tf->hob_lbal, tf->hob_lbam, tf->hob_lbah, + tf->feature, tf->nsect, tf->lbal, + tf->lbam, tf->lbah, tf->command); + tf->hob_lbal = 0xff; + tf->hob_lbam = 0xff; + tf->hob_lbah = 0xff; + } + } + } +#endif + +#if 1 + { + struct ata_port *ap = qc->ap; + struct ata_taskfile *tf = &qc->tf; + printk("SIL%u: tf %p: H f=%02x n=%02x l=%02x m=%02x h=%02x L f=%02x n=%02x l=%02x m=%02x h=%02x C=%02x\n", + ap->id, qc->scsicmd, tf->hob_feature, tf->hob_nsect, + tf->hob_lbal, tf->hob_lbam, tf->hob_lbah, tf->feature, + tf->nsect, tf->lbal, tf->lbam, tf->lbah, tf->command); + + if (qc->tf.command == 0xa0) { + u8 *p = qc->cdb; + printk("SIL%u: PACKET: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", + ap->id, + p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], + p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]); + } + } +#endif + +#if 0 + { + static unsigned cnt = 0; + struct ata_port *ap = qc->ap; + struct ata_taskfile *tf = &qc->tf; + + if (tf->command == ATA_CMD_READ_EXT) { + if (++cnt % 100 == 0) { + printk("SIL%u: skipping...\n", ap->id); + return 0; + } + } + } +#endif + return ata_qc_issue_prot(qc); +} + static struct ata_port_operations sil_ops = { .port_disable = ata_port_disable, .dev_config = sil_dev_config, @@ -153,7 +212,7 @@ static struct ata_port_operations sil_op .bmdma_stop = ata_bmdma_stop, .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, - .qc_issue = ata_qc_issue_prot, + .qc_issue = sil_qc_debug_issue, .error_handler = ata_error_handler, .irq_handler = ata_interrupt, .irq_clear = ata_bmdma_irq_clear, - 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