aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64/kernel/pci-calgary.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/kernel/pci-calgary.c')
-rw-r--r--arch/x86_64/kernel/pci-calgary.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/arch/x86_64/kernel/pci-calgary.c b/arch/x86_64/kernel/pci-calgary.c
index 1100031528dc..3c0c7fde09d8 100644
--- a/arch/x86_64/kernel/pci-calgary.c
+++ b/arch/x86_64/kernel/pci-calgary.c
@@ -790,7 +790,16 @@ static inline unsigned int __init locate_register_space(struct pci_dev *dev)
790 int rionodeid; 790 int rionodeid;
791 u32 address; 791 u32 address;
792 792
793 rionodeid = (dev->bus->number % 15 > 4) ? 3 : 2; 793 /*
794 * Each Calgary has four busses. The first four busses (first Calgary)
795 * have RIO node ID 2, then the next four (second Calgary) have RIO
796 * node ID 3, the next four (third Calgary) have node ID 2 again, etc.
797 * We use a gross hack - relying on the dev->bus->number ordering,
798 * modulo 14 - to decide which Calgary a given bus is on. Busses 0, 1,
799 * 2 and 4 are on the first Calgary (id 2), 6, 8, a and c are on the
800 * second (id 3), and then it repeats modulo 14.
801 */
802 rionodeid = (dev->bus->number % 14 > 4) ? 3 : 2;
794 /* 803 /*
795 * register space address calculation as follows: 804 * register space address calculation as follows:
796 * FE0MB-8MB*OneBasedChassisNumber+1MB*(RioNodeId-ChassisBase) 805 * FE0MB-8MB*OneBasedChassisNumber+1MB*(RioNodeId-ChassisBase)
@@ -798,7 +807,7 @@ static inline unsigned int __init locate_register_space(struct pci_dev *dev)
798 * RioNodeId is 2 for first Calgary, 3 for second Calgary 807 * RioNodeId is 2 for first Calgary, 3 for second Calgary
799 */ 808 */
800 address = START_ADDRESS - 809 address = START_ADDRESS -
801 (0x800000 * (ONE_BASED_CHASSIS_NUM + dev->bus->number / 15)) + 810 (0x800000 * (ONE_BASED_CHASSIS_NUM + dev->bus->number / 14)) +
802 (0x100000) * (rionodeid - CHASSIS_BASE); 811 (0x100000) * (rionodeid - CHASSIS_BASE);
803 return address; 812 return address;
804} 813}