Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 39016
b: refs/heads/master
c: 76fd231
h: refs/heads/master
v: v3
  • Loading branch information
Jon Mason authored and Andi Kleen committed Oct 5, 2006
1 parent 9ba6926 commit ab39ba4
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: dedc9937e876cb5430bca6a1dccfcc2ff22f8b7c
refs/heads/master: 76fd231717453e06347ad17b3fc1707c6918d172
13 changes: 11 additions & 2 deletions trunk/arch/x86_64/kernel/pci-calgary.c
Original file line number Diff line number Diff line change
Expand Up @@ -790,15 +790,24 @@ static inline unsigned int __init locate_register_space(struct pci_dev *dev)
int rionodeid;
u32 address;

rionodeid = (dev->bus->number % 15 > 4) ? 3 : 2;
/*
* Each Calgary has four busses. The first four busses (first Calgary)
* have RIO node ID 2, then the next four (second Calgary) have RIO
* node ID 3, the next four (third Calgary) have node ID 2 again, etc.
* We use a gross hack - relying on the dev->bus->number ordering,
* modulo 14 - to decide which Calgary a given bus is on. Busses 0, 1,
* 2 and 4 are on the first Calgary (id 2), 6, 8, a and c are on the
* second (id 3), and then it repeats modulo 14.
*/
rionodeid = (dev->bus->number % 14 > 4) ? 3 : 2;
/*
* register space address calculation as follows:
* FE0MB-8MB*OneBasedChassisNumber+1MB*(RioNodeId-ChassisBase)
* ChassisBase is always zero for x366/x260/x460
* RioNodeId is 2 for first Calgary, 3 for second Calgary
*/
address = START_ADDRESS -
(0x800000 * (ONE_BASED_CHASSIS_NUM + dev->bus->number / 15)) +
(0x800000 * (ONE_BASED_CHASSIS_NUM + dev->bus->number / 14)) +
(0x100000) * (rionodeid - CHASSIS_BASE);
return address;
}
Expand Down

0 comments on commit ab39ba4

Please sign in to comment.