aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Rohwer <tr@tng.de>2007-11-18 21:54:24 -0500
committerTejun Heo <htejun@gmail.com>2007-11-18 22:28:11 -0500
commit8d8ef2fb931d1035e1f02095086cfd3f78eafe3f (patch)
tree7544956b7a74383dd3c34a3072028291059dd7b9
parent00242ec87608d7a0ed989e54333f3fc8f3d665b0 (diff)
ata_piix: only enable the first port on apple macbook pro
ICH8M on apple macbook pro occasionally locks up completely during PCS initialization if ports other than the first one are enabled. Add a separate controller ID and only enable the first port. tj: commit description added and patch updated to fit with the previous controller ID update. Signed-off-by: Thomas Rohwer <tr@tng.de> Signed-off-by: Tejun Heo <htejun@gmail.com>
-rw-r--r--drivers/ata/ata_piix.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 77fea05990d2..d5ff1d89bea3 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -130,6 +130,7 @@ enum {
130 ich6m_sata_ahci, 130 ich6m_sata_ahci,
131 ich8_sata_ahci, 131 ich8_sata_ahci,
132 ich8_2port_sata, 132 ich8_2port_sata,
133 ich8m_apple_sata_ahci, /* locks up on second port enable */
133 tolapai_sata_ahci, 134 tolapai_sata_ahci,
134 135
135 /* constants for mapping table */ 136 /* constants for mapping table */
@@ -242,6 +243,8 @@ static const struct pci_device_id piix_pci_tbl[] = {
242 { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, 243 { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
243 /* Mobile SATA Controller IDE (ICH8M) */ 244 /* Mobile SATA Controller IDE (ICH8M) */
244 { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 245 { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
246 /* Mobile SATA Controller IDE (ICH8M), Apple */
247 { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata_ahci },
245 /* SATA Controller IDE (ICH9) */ 248 /* SATA Controller IDE (ICH9) */
246 { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 249 { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
247 /* SATA Controller IDE (ICH9) */ 250 /* SATA Controller IDE (ICH9) */
@@ -449,6 +452,18 @@ static const struct piix_map_db ich8_2port_map_db = {
449 }, 452 },
450}; 453};
451 454
455static const struct piix_map_db ich8m_apple_map_db = {
456 .mask = 0x3,
457 .port_enable = 0x1,
458 .map = {
459 /* PM PS SM SS MAP */
460 { P0, NA, NA, NA }, /* 00b */
461 { RV, RV, RV, RV },
462 { P0, P2, IDE, IDE }, /* 10b */
463 { RV, RV, RV, RV },
464 },
465};
466
452static const struct piix_map_db tolapai_map_db = { 467static const struct piix_map_db tolapai_map_db = {
453 .mask = 0x3, 468 .mask = 0x3,
454 .port_enable = 0x3, 469 .port_enable = 0x3,
@@ -468,6 +483,7 @@ static const struct piix_map_db *piix_map_db_table[] = {
468 [ich6m_sata_ahci] = &ich6m_map_db, 483 [ich6m_sata_ahci] = &ich6m_map_db,
469 [ich8_sata_ahci] = &ich8_map_db, 484 [ich8_sata_ahci] = &ich8_map_db,
470 [ich8_2port_sata] = &ich8_2port_map_db, 485 [ich8_2port_sata] = &ich8_2port_map_db,
486 [ich8m_apple_sata_ahci] = &ich8m_apple_map_db,
471 [tolapai_sata_ahci] = &tolapai_map_db, 487 [tolapai_sata_ahci] = &tolapai_map_db,
472}; 488};
473 489
@@ -595,6 +611,18 @@ static struct ata_port_info piix_port_info[] = {
595 .udma_mask = ATA_UDMA6, 611 .udma_mask = ATA_UDMA6,
596 .port_ops = &piix_sata_ops, 612 .port_ops = &piix_sata_ops,
597 }, 613 },
614
615 [ich8m_apple_sata_ahci] =
616 {
617 .sht = &piix_sht,
618 .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR |
619 PIIX_FLAG_AHCI,
620 .pio_mask = 0x1f, /* pio0-4 */
621 .mwdma_mask = 0x07, /* mwdma0-2 */
622 .udma_mask = ATA_UDMA6,
623 .port_ops = &piix_sata_ops,
624 },
625
598}; 626};
599 627
600static struct pci_bits piix_enable_bits[] = { 628static struct pci_bits piix_enable_bits[] = {