ata_piix: fix macbook ich8m problems
authorTejun Heo <htejun@gmail.com>
Thu, 29 May 2008 13:04:22 +0000 (22:04 +0900)
committerJeff Garzik <jgarzik@redhat.com>
Fri, 30 May 2008 16:37:29 +0000 (12:37 -0400)
ICH8M on macbooks are peculiar in that some of them lock up when the
second port is enabled, some return bogus values on SIDPR access while
yet others hang on SIDPR access.  Also, the ich8m_apple_sata entry was
wrongly added below generic ich8m entry making it virtually useless.

This patch works around macbook ich8m problems by

* moving ich8m_apple_sata entry above generic ich8m entry
* dropping PIIX_FLAG_SIDPR from ich8m_apple_sata
* adding subsystem 106b:00a1 as ich8m_apple_sata

Reported and tested by MATSUBAYASHI.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: MATSUBAYASHI 'Shaolin' Kohji <shaolin@rhythmaning.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/ata_piix.c

index a9027b8..3548ee7 100644 (file)
@@ -247,10 +247,11 @@ static const struct pci_device_id piix_pci_tbl[] = {
        { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
        /* SATA Controller 2 IDE (ICH8) */
        { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
-       /* Mobile SATA Controller IDE (ICH8M) */
-       { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
        /* Mobile SATA Controller IDE (ICH8M), Apple */
        { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata },
+       { 0x8086, 0x2828, 0x106b, 0x00a1, 0, 0, ich8m_apple_sata },
+       /* Mobile SATA Controller IDE (ICH8M) */
+       { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
        /* SATA Controller IDE (ICH9) */
        { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
        /* SATA Controller IDE (ICH9) */
@@ -526,7 +527,7 @@ static struct ata_port_info piix_port_info[] = {
 
        [ich8m_apple_sata] =
        {
-               .flags          = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR,
+               .flags          = PIIX_SATA_FLAGS,
                .pio_mask       = 0x1f, /* pio0-4 */
                .mwdma_mask     = 0x07, /* mwdma0-2 */
                .udma_mask      = ATA_UDMA6,