|
@@ -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;
|
|
|
}
|