]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/ata/ahci.c
libata: prefer hardreset
[linux-2.6-omap-h63xx.git] / drivers / ata / ahci.c
index 17ee6ed985d9198ad356a9b68efebf406a4b11f6..f6bbd52b1547d04e0c304d81ee411ac71c211c03 100644 (file)
@@ -433,6 +433,7 @@ static const struct ata_port_info ahci_port_info[] = {
        /* board_ahci_sb600 */
        {
                AHCI_HFLAGS     (AHCI_HFLAG_IGN_SERR_INTERNAL |
+                                AHCI_HFLAG_32BIT_ONLY |
                                 AHCI_HFLAG_SECT255 | AHCI_HFLAG_NO_PMP),
                .flags          = AHCI_FLAG_COMMON,
                .link_flags     = AHCI_LFLAG_COMMON,
@@ -1217,8 +1218,11 @@ static void ahci_dev_config(struct ata_device *dev)
 {
        struct ahci_host_priv *hpriv = dev->link->ap->host->private_data;
 
-       if (hpriv->flags & AHCI_HFLAG_SECT255)
+       if (hpriv->flags & AHCI_HFLAG_SECT255) {
                dev->max_sectors = 255;
+               ata_dev_printk(dev, KERN_INFO,
+                              "SB600 AHCI: limiting to 255 sectors per cmd\n");
+       }
 }
 
 static unsigned int ahci_dev_classify(struct ata_port *ap)
@@ -1659,7 +1663,7 @@ static void ahci_error_intr(struct ata_port *ap, u32 irq_stat)
                u32 *unk = (u32 *)(pp->rx_fis + RX_FIS_UNK);
 
                active_ehi->err_mask |= AC_ERR_HSM;
-               active_ehi->action |= ATA_EH_SOFTRESET;
+               active_ehi->action |= ATA_EH_RESET;
                ata_ehi_push_desc(active_ehi,
                                  "unknown FIS %08x %08x %08x %08x" ,
                                  unk[0], unk[1], unk[2], unk[3]);
@@ -1667,19 +1671,19 @@ static void ahci_error_intr(struct ata_port *ap, u32 irq_stat)
 
        if (ap->nr_pmp_links && (irq_stat & PORT_IRQ_BAD_PMP)) {
                active_ehi->err_mask |= AC_ERR_HSM;
-               active_ehi->action |= ATA_EH_SOFTRESET;
+               active_ehi->action |= ATA_EH_RESET;
                ata_ehi_push_desc(active_ehi, "incorrect PMP");
        }
 
        if (irq_stat & (PORT_IRQ_HBUS_ERR | PORT_IRQ_HBUS_DATA_ERR)) {
                host_ehi->err_mask |= AC_ERR_HOST_BUS;
-               host_ehi->action |= ATA_EH_SOFTRESET;
+               host_ehi->action |= ATA_EH_RESET;
                ata_ehi_push_desc(host_ehi, "host bus error");
        }
 
        if (irq_stat & PORT_IRQ_IF_ERR) {
                host_ehi->err_mask |= AC_ERR_ATA_BUS;
-               host_ehi->action |= ATA_EH_SOFTRESET;
+               host_ehi->action |= ATA_EH_RESET;
                ata_ehi_push_desc(host_ehi, "interface fatal error");
        }
 
@@ -1767,7 +1771,7 @@ static void ahci_port_intr(struct ata_port *ap)
        /* while resetting, invalid completions are expected */
        if (unlikely(rc < 0 && !resetting)) {
                ehi->err_mask |= AC_ERR_HSM;
-               ehi->action |= ATA_EH_SOFTRESET;
+               ehi->action |= ATA_EH_RESET;
                ata_port_freeze(ap);
        }
 }