diff options
-rw-r--r-- | drivers/ata/ata_piix.c | 40 | ||||
-rw-r--r-- | drivers/ata/sata_mv.c | 3 |
2 files changed, 37 insertions, 6 deletions
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index 1a4c03d5de9f..965b4f0ba711 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
@@ -126,7 +126,8 @@ enum { | |||
126 | ich6_sata = 7, | 126 | ich6_sata = 7, |
127 | ich6_sata_ahci = 8, | 127 | ich6_sata_ahci = 8, |
128 | ich6m_sata_ahci = 9, | 128 | ich6m_sata_ahci = 9, |
129 | ich8_sata_ahci = 10, | 129 | ich7m_sata_ahci = 10, |
130 | ich8_sata_ahci = 11, | ||
130 | 131 | ||
131 | /* constants for mapping table */ | 132 | /* constants for mapping table */ |
132 | P0 = 0, /* port 0 */ | 133 | P0 = 0, /* port 0 */ |
@@ -226,7 +227,7 @@ static const struct pci_device_id piix_pci_tbl[] = { | |||
226 | /* 82801GB/GR/GH (ICH7, identical to ICH6) */ | 227 | /* 82801GB/GR/GH (ICH7, identical to ICH6) */ |
227 | { 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, | 228 | { 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, |
228 | /* 2801GBM/GHM (ICH7M, identical to ICH6M) */ | 229 | /* 2801GBM/GHM (ICH7M, identical to ICH6M) */ |
229 | { 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6m_sata_ahci }, | 230 | { 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich7m_sata_ahci }, |
230 | /* Enterprise Southbridge 2 (where's the datasheet?) */ | 231 | /* Enterprise Southbridge 2 (where's the datasheet?) */ |
231 | { 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, | 232 | { 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, |
232 | /* SATA Controller 1 IDE (ICH8, no datasheet yet) */ | 233 | /* SATA Controller 1 IDE (ICH8, no datasheet yet) */ |
@@ -407,6 +408,24 @@ static const struct piix_map_db ich6m_map_db = { | |||
407 | }, | 408 | }, |
408 | }; | 409 | }; |
409 | 410 | ||
411 | static const struct piix_map_db ich7m_map_db = { | ||
412 | .mask = 0x3, | ||
413 | .port_enable = 0x5, | ||
414 | .present_shift = 4, | ||
415 | |||
416 | /* Map 01b isn't specified in the doc but some notebooks use | ||
417 | * it anyway. ATM, the only case spotted carries subsystem ID | ||
418 | * 1025:0107. This is the only difference from ich6m. | ||
419 | */ | ||
420 | .map = { | ||
421 | /* PM PS SM SS MAP */ | ||
422 | { P0, P2, RV, RV }, /* 00b */ | ||
423 | { IDE, IDE, P1, P3 }, /* 01b */ | ||
424 | { P0, P2, IDE, IDE }, /* 10b */ | ||
425 | { RV, RV, RV, RV }, | ||
426 | }, | ||
427 | }; | ||
428 | |||
410 | static const struct piix_map_db ich8_map_db = { | 429 | static const struct piix_map_db ich8_map_db = { |
411 | .mask = 0x3, | 430 | .mask = 0x3, |
412 | .port_enable = 0x3, | 431 | .port_enable = 0x3, |
@@ -426,6 +445,7 @@ static const struct piix_map_db *piix_map_db_table[] = { | |||
426 | [ich6_sata] = &ich6_map_db, | 445 | [ich6_sata] = &ich6_map_db, |
427 | [ich6_sata_ahci] = &ich6_map_db, | 446 | [ich6_sata_ahci] = &ich6_map_db, |
428 | [ich6m_sata_ahci] = &ich6m_map_db, | 447 | [ich6m_sata_ahci] = &ich6m_map_db, |
448 | [ich7m_sata_ahci] = &ich7m_map_db, | ||
429 | [ich8_sata_ahci] = &ich8_map_db, | 449 | [ich8_sata_ahci] = &ich8_map_db, |
430 | }; | 450 | }; |
431 | 451 | ||
@@ -512,7 +532,7 @@ static struct ata_port_info piix_port_info[] = { | |||
512 | .port_ops = &piix_sata_ops, | 532 | .port_ops = &piix_sata_ops, |
513 | }, | 533 | }, |
514 | 534 | ||
515 | /* ich6_sata_ahci:8 */ | 535 | /* ich6_sata_ahci: 8 */ |
516 | { | 536 | { |
517 | .sht = &piix_sht, | 537 | .sht = &piix_sht, |
518 | .flags = ATA_FLAG_SATA | | 538 | .flags = ATA_FLAG_SATA | |
@@ -536,7 +556,19 @@ static struct ata_port_info piix_port_info[] = { | |||
536 | .port_ops = &piix_sata_ops, | 556 | .port_ops = &piix_sata_ops, |
537 | }, | 557 | }, |
538 | 558 | ||
539 | /* ich8_sata_ahci */ | 559 | /* ich7m_sata_ahci: 10 */ |
560 | { | ||
561 | .sht = &piix_sht, | ||
562 | .host_flags = ATA_FLAG_SATA | | ||
563 | PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR | | ||
564 | PIIX_FLAG_AHCI, | ||
565 | .pio_mask = 0x1f, /* pio0-4 */ | ||
566 | .mwdma_mask = 0x07, /* mwdma0-2 */ | ||
567 | .udma_mask = 0x7f, /* udma0-6 */ | ||
568 | .port_ops = &piix_sata_ops, | ||
569 | }, | ||
570 | |||
571 | /* ich8_sata_ahci: 11 */ | ||
540 | { | 572 | { |
541 | .sht = &piix_sht, | 573 | .sht = &piix_sht, |
542 | .flags = ATA_FLAG_SATA | | 574 | .flags = ATA_FLAG_SATA | |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index 34f1939b44c9..fdce6e07ecd2 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
@@ -1960,8 +1960,7 @@ comreset_retry: | |||
1960 | timeout = jiffies + msecs_to_jiffies(200); | 1960 | timeout = jiffies + msecs_to_jiffies(200); |
1961 | do { | 1961 | do { |
1962 | sata_scr_read(ap, SCR_STATUS, &sstatus); | 1962 | sata_scr_read(ap, SCR_STATUS, &sstatus); |
1963 | sstatus &= 0x3; | 1963 | if (((sstatus & 0x3) == 3) || ((sstatus & 0x3) == 0)) |
1964 | if ((sstatus == 3) || (sstatus == 0)) | ||
1965 | break; | 1964 | break; |
1966 | 1965 | ||
1967 | __msleep(1, can_sleep); | 1966 | __msleep(1, can_sleep); |