|
@@ -90,6 +90,7 @@ enum {
|
|
|
board_ahci_mv = 4,
|
|
|
board_ahci_sb700 = 5,
|
|
|
board_ahci_mcp65 = 6,
|
|
|
+ board_ahci_nopmp = 7,
|
|
|
|
|
|
/* global controller registers */
|
|
|
HOST_CAP = 0x00, /* host capabilities */
|
|
@@ -401,6 +402,14 @@ static const struct ata_port_info ahci_port_info[] = {
|
|
|
.udma_mask = ATA_UDMA6,
|
|
|
.port_ops = &ahci_ops,
|
|
|
},
|
|
|
+ /* board_ahci_nopmp */
|
|
|
+ {
|
|
|
+ AHCI_HFLAGS (AHCI_HFLAG_NO_PMP),
|
|
|
+ .flags = AHCI_FLAG_COMMON,
|
|
|
+ .pio_mask = 0x1f, /* pio0-4 */
|
|
|
+ .udma_mask = ATA_UDMA6,
|
|
|
+ .port_ops = &ahci_ops,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static const struct pci_device_id ahci_pci_tbl[] = {
|
|
@@ -525,9 +534,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
|
|
{ PCI_VDEVICE(NVIDIA, 0x0bc7), board_ahci }, /* MCP7B */
|
|
|
|
|
|
/* SiS */
|
|
|
- { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */
|
|
|
- { PCI_VDEVICE(SI, 0x1185), board_ahci }, /* SiS 966 */
|
|
|
- { PCI_VDEVICE(SI, 0x0186), board_ahci }, /* SiS 968 */
|
|
|
+ { PCI_VDEVICE(SI, 0x1184), board_ahci_nopmp }, /* SiS 966 */
|
|
|
+ { PCI_VDEVICE(SI, 0x1185), board_ahci_nopmp }, /* SiS 968 */
|
|
|
+ { PCI_VDEVICE(SI, 0x0186), board_ahci_nopmp }, /* SiS 968 */
|
|
|
|
|
|
/* Marvell */
|
|
|
{ PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */
|
|
@@ -653,6 +662,14 @@ static void ahci_save_initial_config(struct pci_dev *pdev,
|
|
|
cap &= ~HOST_CAP_PMP;
|
|
|
}
|
|
|
|
|
|
+ if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361 &&
|
|
|
+ port_map != 1) {
|
|
|
+ dev_printk(KERN_INFO, &pdev->dev,
|
|
|
+ "JMB361 has only one port, port_map 0x%x -> 0x%x\n",
|
|
|
+ port_map, 1);
|
|
|
+ port_map = 1;
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Temporary Marvell 6145 hack: PATA port presence
|
|
|
* is asserted through the standard AHCI port
|