diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-08-29 15:59:42 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-08-29 15:59:42 -0400 |
commit | 70d374ea9907036e15574a5ce89219edd5baee10 (patch) | |
tree | b858bb4a841eb91b1d91b41c33698d05fa7bfb37 /drivers/scsi/ahci.c | |
parent | aa7e16d6b88b3b38db0d2ee49ed5e44e7b2045ec (diff) | |
parent | bf4e70e54cf31dcca48d279c7f7e71328eebe749 (diff) |
Merge /spare/repo/linux-2.6/
Diffstat (limited to 'drivers/scsi/ahci.c')
-rw-r--r-- | drivers/scsi/ahci.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c index 7eaaf7a2744d..179c95c878ac 100644 --- a/drivers/scsi/ahci.c +++ b/drivers/scsi/ahci.c | |||
@@ -277,6 +277,8 @@ static struct pci_device_id ahci_pci_tbl[] = { | |||
277 | board_ahci }, /* ESB2 */ | 277 | board_ahci }, /* ESB2 */ |
278 | { PCI_VENDOR_ID_INTEL, 0x2683, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | 278 | { PCI_VENDOR_ID_INTEL, 0x2683, PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
279 | board_ahci }, /* ESB2 */ | 279 | board_ahci }, /* ESB2 */ |
280 | { PCI_VENDOR_ID_INTEL, 0x27c6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
281 | board_ahci }, /* ICH7-M DH */ | ||
280 | { } /* terminate list */ | 282 | { } /* terminate list */ |
281 | }; | 283 | }; |
282 | 284 | ||
@@ -592,12 +594,16 @@ static void ahci_intr_error(struct ata_port *ap, u32 irq_stat) | |||
592 | 594 | ||
593 | static void ahci_eng_timeout(struct ata_port *ap) | 595 | static void ahci_eng_timeout(struct ata_port *ap) |
594 | { | 596 | { |
595 | void *mmio = ap->host_set->mmio_base; | 597 | struct ata_host_set *host_set = ap->host_set; |
598 | void *mmio = host_set->mmio_base; | ||
596 | void *port_mmio = ahci_port_base(mmio, ap->port_no); | 599 | void *port_mmio = ahci_port_base(mmio, ap->port_no); |
597 | struct ata_queued_cmd *qc; | 600 | struct ata_queued_cmd *qc; |
601 | unsigned long flags; | ||
598 | 602 | ||
599 | DPRINTK("ENTER\n"); | 603 | DPRINTK("ENTER\n"); |
600 | 604 | ||
605 | spin_lock_irqsave(&host_set->lock, flags); | ||
606 | |||
601 | ahci_intr_error(ap, readl(port_mmio + PORT_IRQ_STAT)); | 607 | ahci_intr_error(ap, readl(port_mmio + PORT_IRQ_STAT)); |
602 | 608 | ||
603 | qc = ata_qc_from_tag(ap, ap->active_tag); | 609 | qc = ata_qc_from_tag(ap, ap->active_tag); |
@@ -615,6 +621,7 @@ static void ahci_eng_timeout(struct ata_port *ap) | |||
615 | ata_qc_complete(qc, ATA_ERR); | 621 | ata_qc_complete(qc, ATA_ERR); |
616 | } | 622 | } |
617 | 623 | ||
624 | spin_unlock_irqrestore(&host_set->lock, flags); | ||
618 | } | 625 | } |
619 | 626 | ||
620 | static inline int ahci_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc) | 627 | static inline int ahci_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc) |
@@ -704,9 +711,6 @@ static int ahci_qc_issue(struct ata_queued_cmd *qc) | |||
704 | struct ata_port *ap = qc->ap; | 711 | struct ata_port *ap = qc->ap; |
705 | void *port_mmio = (void *) ap->ioaddr.cmd_addr; | 712 | void *port_mmio = (void *) ap->ioaddr.cmd_addr; |
706 | 713 | ||
707 | writel(1, port_mmio + PORT_SCR_ACT); | ||
708 | readl(port_mmio + PORT_SCR_ACT); /* flush */ | ||
709 | |||
710 | writel(1, port_mmio + PORT_CMD_ISSUE); | 714 | writel(1, port_mmio + PORT_CMD_ISSUE); |
711 | readl(port_mmio + PORT_CMD_ISSUE); /* flush */ | 715 | readl(port_mmio + PORT_CMD_ISSUE); /* flush */ |
712 | 716 | ||