diff options
Diffstat (limited to 'drivers/ata/ahci.c')
| -rw-r--r-- | drivers/ata/ahci.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 966ab401e523..6a4a2a25d97a 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -90,6 +90,7 @@ enum { | |||
| 90 | board_ahci_mv = 4, | 90 | board_ahci_mv = 4, |
| 91 | board_ahci_sb700 = 5, | 91 | board_ahci_sb700 = 5, |
| 92 | board_ahci_mcp65 = 6, | 92 | board_ahci_mcp65 = 6, |
| 93 | board_ahci_nopmp = 7, | ||
| 93 | 94 | ||
| 94 | /* global controller registers */ | 95 | /* global controller registers */ |
| 95 | HOST_CAP = 0x00, /* host capabilities */ | 96 | HOST_CAP = 0x00, /* host capabilities */ |
| @@ -401,6 +402,14 @@ static const struct ata_port_info ahci_port_info[] = { | |||
| 401 | .udma_mask = ATA_UDMA6, | 402 | .udma_mask = ATA_UDMA6, |
| 402 | .port_ops = &ahci_ops, | 403 | .port_ops = &ahci_ops, |
| 403 | }, | 404 | }, |
| 405 | /* board_ahci_nopmp */ | ||
| 406 | { | ||
| 407 | AHCI_HFLAGS (AHCI_HFLAG_NO_PMP), | ||
| 408 | .flags = AHCI_FLAG_COMMON, | ||
| 409 | .pio_mask = 0x1f, /* pio0-4 */ | ||
| 410 | .udma_mask = ATA_UDMA6, | ||
| 411 | .port_ops = &ahci_ops, | ||
| 412 | }, | ||
| 404 | }; | 413 | }; |
| 405 | 414 | ||
| 406 | static const struct pci_device_id ahci_pci_tbl[] = { | 415 | static const struct pci_device_id ahci_pci_tbl[] = { |
| @@ -525,9 +534,9 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 525 | { PCI_VDEVICE(NVIDIA, 0x0bc7), board_ahci }, /* MCP7B */ | 534 | { PCI_VDEVICE(NVIDIA, 0x0bc7), board_ahci }, /* MCP7B */ |
| 526 | 535 | ||
| 527 | /* SiS */ | 536 | /* SiS */ |
| 528 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ | 537 | { PCI_VDEVICE(SI, 0x1184), board_ahci_nopmp }, /* SiS 966 */ |
| 529 | { PCI_VDEVICE(SI, 0x1185), board_ahci }, /* SiS 966 */ | 538 | { PCI_VDEVICE(SI, 0x1185), board_ahci_nopmp }, /* SiS 968 */ |
| 530 | { PCI_VDEVICE(SI, 0x0186), board_ahci }, /* SiS 968 */ | 539 | { PCI_VDEVICE(SI, 0x0186), board_ahci_nopmp }, /* SiS 968 */ |
| 531 | 540 | ||
| 532 | /* Marvell */ | 541 | /* Marvell */ |
| 533 | { PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */ | 542 | { PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */ |
| @@ -653,6 +662,14 @@ static void ahci_save_initial_config(struct pci_dev *pdev, | |||
| 653 | cap &= ~HOST_CAP_PMP; | 662 | cap &= ~HOST_CAP_PMP; |
| 654 | } | 663 | } |
| 655 | 664 | ||
| 665 | if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361 && | ||
| 666 | port_map != 1) { | ||
| 667 | dev_printk(KERN_INFO, &pdev->dev, | ||
| 668 | "JMB361 has only one port, port_map 0x%x -> 0x%x\n", | ||
| 669 | port_map, 1); | ||
| 670 | port_map = 1; | ||
| 671 | } | ||
| 672 | |||
| 656 | /* | 673 | /* |
| 657 | * Temporary Marvell 6145 hack: PATA port presence | 674 | * Temporary Marvell 6145 hack: PATA port presence |
| 658 | * is asserted through the standard AHCI port | 675 | * is asserted through the standard AHCI port |
