summaryrefslogtreecommitdiffstats
path: root/src/include/kernel/intmsghandler.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/kernel/intmsghandler.H')
-rw-r--r--src/include/kernel/intmsghandler.H14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/include/kernel/intmsghandler.H b/src/include/kernel/intmsghandler.H
index b4042c950..73fbd9313 100644
--- a/src/include/kernel/intmsghandler.H
+++ b/src/include/kernel/intmsghandler.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* COPYRIGHT International Business Machines Corp. 2011,2013 */
/* */
/* p1 */
/* */
@@ -63,7 +63,7 @@ class InterruptMsgHdlr : public MessageHandler
P8_IP_THREADID_LSL = (12-0),
P8_IP_COREID_LSL = (15-3),
P8_IP_CHIPID_LSL = (20-7),
- P8_IP_NODEID_LSL = (23-10),
+ P8_IP_NODEID_LSL = (22-10),
XIRR_ADDR_OFFSET = 4,
};
@@ -102,11 +102,13 @@ class InterruptMsgHdlr : public MessageHandler
{
uint64_t offset = 0;
- // The node and chip id fields are adjacent in both the PIR and
- // the mmio offset - so they can be done in one shift operation
+ // The PIR chip id field has 1 extra bit (8 chips), so we need
+ // to shift the node and chip separately
offset |=
- (i_pir & (P8_PIR_NODEID_MSK | P8_PIR_CHIPID_MSK))
- << P8_IP_CHIPID_LSL;
+ (i_pir & P8_PIR_NODEID_MSK) << P8_IP_NODEID_LSL;
+
+ offset |=
+ (i_pir & P8_PIR_CHIPID_MSK) << P8_IP_CHIPID_LSL;
// The core and thread id field are adjacent in both the PIR and
// the mmio offset, so they can be done in one shift operation.
OpenPOWER on IntegriCloud