|
@@ -310,8 +310,10 @@ static void oxygen_restore_eeprom(struct oxygen *chip,
|
|
|
|
|
|
static void configure_pcie_bridge(struct pci_dev *pci)
|
|
|
{
|
|
|
- enum { PI7C9X110 };
|
|
|
+ enum { PEX811X, PI7C9X110 };
|
|
|
static const struct pci_device_id bridge_ids[] = {
|
|
|
+ { PCI_VDEVICE(PLX, 0x8111), .driver_data = PEX811X },
|
|
|
+ { PCI_VDEVICE(PLX, 0x8112), .driver_data = PEX811X },
|
|
|
{ PCI_DEVICE(0x12d8, 0xe110), .driver_data = PI7C9X110 },
|
|
|
{ }
|
|
|
};
|
|
@@ -328,6 +330,19 @@ static void configure_pcie_bridge(struct pci_dev *pci)
|
|
|
return;
|
|
|
|
|
|
switch (id->driver_data) {
|
|
|
+ case PEX811X: /* PLX PEX8111/PEX8112 PCIe/PCI bridge */
|
|
|
+ pci_read_config_dword(bridge, 0x48, &tmp);
|
|
|
+ tmp |= 1; /* enable blind prefetching */
|
|
|
+ tmp |= 1 << 11; /* enable beacon generation */
|
|
|
+ pci_write_config_dword(bridge, 0x48, tmp);
|
|
|
+
|
|
|
+ pci_write_config_dword(bridge, 0x84, 0x0c);
|
|
|
+ pci_read_config_dword(bridge, 0x88, &tmp);
|
|
|
+ tmp &= ~(7 << 27);
|
|
|
+ tmp |= 2 << 27; /* set prefetch size to 128 bytes */
|
|
|
+ pci_write_config_dword(bridge, 0x88, tmp);
|
|
|
+ break;
|
|
|
+
|
|
|
case PI7C9X110: /* Pericom PI7C9X110 PCIe/PCI bridge */
|
|
|
pci_read_config_dword(bridge, 0x40, &tmp);
|
|
|
tmp |= 1; /* park the PCI arbiter to the sound chip */
|