|
@@ -521,7 +521,7 @@ static unsigned char pcie_link_speed[] = {
|
|
|
|
|
|
void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
|
|
|
{
|
|
|
- bus->cur_bus_speed = pcie_link_speed[linksta & 0xf];
|
|
|
+ bus->cur_bus_speed = pcie_link_speed[linksta & PCI_EXP_LNKSTA_CLS];
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(pcie_update_link_speed);
|
|
|
|
|
@@ -579,14 +579,16 @@ static void pci_set_bus_speed(struct pci_bus *bus)
|
|
|
if (pos) {
|
|
|
u16 status;
|
|
|
enum pci_bus_speed max;
|
|
|
- pci_read_config_word(bridge, pos + 2, &status);
|
|
|
|
|
|
- if (status & 0x8000) {
|
|
|
+ pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS,
|
|
|
+ &status);
|
|
|
+
|
|
|
+ if (status & PCI_X_SSTATUS_533MHZ) {
|
|
|
max = PCI_SPEED_133MHz_PCIX_533;
|
|
|
- } else if (status & 0x4000) {
|
|
|
+ } else if (status & PCI_X_SSTATUS_266MHZ) {
|
|
|
max = PCI_SPEED_133MHz_PCIX_266;
|
|
|
- } else if (status & 0x0002) {
|
|
|
- if (((status >> 12) & 0x3) == 2) {
|
|
|
+ } else if (status & PCI_X_SSTATUS_133MHZ) {
|
|
|
+ if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2) {
|
|
|
max = PCI_SPEED_133MHz_PCIX_ECC;
|
|
|
} else {
|
|
|
max = PCI_SPEED_133MHz_PCIX;
|
|
@@ -596,7 +598,8 @@ static void pci_set_bus_speed(struct pci_bus *bus)
|
|
|
}
|
|
|
|
|
|
bus->max_bus_speed = max;
|
|
|
- bus->cur_bus_speed = pcix_bus_speed[(status >> 6) & 0xf];
|
|
|
+ bus->cur_bus_speed = pcix_bus_speed[
|
|
|
+ (status & PCI_X_SSTATUS_FREQ) >> 6];
|
|
|
|
|
|
return;
|
|
|
}
|
|
@@ -607,7 +610,7 @@ static void pci_set_bus_speed(struct pci_bus *bus)
|
|
|
u16 linksta;
|
|
|
|
|
|
pcie_capability_read_dword(bridge, PCI_EXP_LNKCAP, &linkcap);
|
|
|
- bus->max_bus_speed = pcie_link_speed[linkcap & 0xf];
|
|
|
+ bus->max_bus_speed = pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS];
|
|
|
|
|
|
pcie_capability_read_word(bridge, PCI_EXP_LNKSTA, &linksta);
|
|
|
pcie_update_link_speed(bus, linksta);
|