summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/attn
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@us.ibm.com>2012-12-14 10:22:22 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-12-17 21:00:41 -0600
commit3147572991fa9eff4be6095b08b0299421e596b5 (patch)
tree8903292ec32145c768d46d7c7a2b5073caf8c602 /src/usr/diag/attn
parent4585387058949c654a82c0ed40e1efe6b8e82f2a (diff)
downloadtalos-hostboot-3147572991fa9eff4be6095b08b0299421e596b5.tar.gz
talos-hostboot-3147572991fa9eff4be6095b08b0299421e596b5.zip
Cleanup interrupt status register
- Cleanup interrupt status register - Fix inverted use of ipoll mask Change-Id: Ia16fba463f51d5b7bce94e9e96f6fe1d3fc7db0b RTC: 59222 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/2700 Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/diag/attn')
-rw-r--r--src/usr/diag/attn/attn.C4
-rw-r--r--src/usr/diag/attn/attnmem.C6
-rw-r--r--src/usr/diag/attn/attnproc.C6
-rw-r--r--src/usr/diag/attn/attnsvc.C13
-rw-r--r--src/usr/diag/attn/test/attnfakeipoll.C6
-rw-r--r--src/usr/diag/attn/test/attntestmem.H12
-rw-r--r--src/usr/diag/attn/test/attntestproc.H18
-rw-r--r--src/usr/diag/attn/test/attnvalidate.C6
8 files changed, 40 insertions, 31 deletions
diff --git a/src/usr/diag/attn/attn.C b/src/usr/diag/attn/attn.C
index f2d962cbd..a291036f7 100644
--- a/src/usr/diag/attn/attn.C
+++ b/src/usr/diag/attn/attn.C
@@ -98,7 +98,7 @@ errlHndl_t checkForIplAttentions()
// query the proc resolver for active attentions
- err = procOps.resolve(*tit, 0, attentions);
+ err = procOps.resolve(*tit, ~0, attentions);
if(err)
{
@@ -107,7 +107,7 @@ errlHndl_t checkForIplAttentions()
// query the mem resolver for active attentions
- err = memOps.resolve(*tit, 0, attentions);
+ err = memOps.resolve(*tit, ~0, attentions);
if(err)
{
diff --git a/src/usr/diag/attn/attnmem.C b/src/usr/diag/attn/attnmem.C
index ebf60cd58..53af72c94 100644
--- a/src/usr/diag/attn/attnmem.C
+++ b/src/usr/diag/attn/attnmem.C
@@ -64,7 +64,7 @@ errlHndl_t MemOps::mask(const AttnData & i_data)
IPOLL::getCheckbits(HOST, ipollMaskWriteBits);
err = modifyScom(proc, IPOLL::address,
- ipollMaskWriteBits, SCOM_OR);
+ ~ipollMaskWriteBits, SCOM_AND);
if(err)
{
@@ -106,7 +106,7 @@ errlHndl_t MemOps::unmask(const AttnData & i_data)
IPOLL::getCheckbits(HOST, ipollMaskWriteBits);
err = modifyScom(proc, IPOLL::address,
- ~ipollMaskWriteBits, SCOM_AND);
+ ipollMaskWriteBits, SCOM_OR);
if(err)
{
@@ -223,7 +223,7 @@ errlHndl_t MemOps::resolve(
do {
- if(hostMask & i_typeMask)
+ if(hostMask & ~i_typeMask)
{
// host attentions are masked....
diff --git a/src/usr/diag/attn/attnproc.C b/src/usr/diag/attn/attnproc.C
index 3cfffa3a1..178530843 100644
--- a/src/usr/diag/attn/attnproc.C
+++ b/src/usr/diag/attn/attnproc.C
@@ -49,7 +49,7 @@ errlHndl_t ProcOps::mask(const AttnData & i_data)
IPOLL::getCheckbits(i_data.attnType, ipollMaskWriteBits);
err = modifyScom(i_data.targetHndl, IPOLL::address,
- ipollMaskWriteBits, SCOM_OR);
+ ~ipollMaskWriteBits, SCOM_AND);
return err;
}
@@ -63,7 +63,7 @@ errlHndl_t ProcOps::unmask(const AttnData & i_data)
IPOLL::getCheckbits(i_data.attnType, ipollMaskWriteBits);
err = modifyScom(i_data.targetHndl, IPOLL::address,
- ~ipollMaskWriteBits, SCOM_AND);
+ ipollMaskWriteBits, SCOM_OR);
return err;
}
@@ -128,7 +128,7 @@ errlHndl_t ProcOps::resolve(
IPOLL::getCheckbits(type, mask);
- if(!(mask & ~i_typeMask))
+ if(mask & ~i_typeMask)
{
// this attention type is masked
diff --git a/src/usr/diag/attn/attnsvc.C b/src/usr/diag/attn/attnsvc.C
index 47f814144..5f8fb5eca 100644
--- a/src/usr/diag/attn/attnsvc.C
+++ b/src/usr/diag/attn/attnsvc.C
@@ -244,8 +244,8 @@ errlHndl_t Service::configureInterrupts(
err = modifyScom(
*it,
IPOLL::address,
- i_mode == UP ? ~mask : mask,
- i_mode == UP ? SCOM_AND : SCOM_OR);
+ i_mode == UP ? mask : ~mask,
+ i_mode == UP ? SCOM_OR : SCOM_AND);
if(err)
{
@@ -405,6 +405,15 @@ errlHndl_t Service::processIntrQMsgPreAck(const msg_t & i_msg,
break;
}
+ // clear anything in the status register
+
+ err = putScom(proc, INTR_TYPE_LCL_ERR_STATUS_REG, 0);
+
+ if(err)
+ {
+ break;
+ }
+
ATTN_DBG("...resolved %d", o_attentions.size());
} while(0);
diff --git a/src/usr/diag/attn/test/attnfakeipoll.C b/src/usr/diag/attn/test/attnfakeipoll.C
index 10b139518..a84747c05 100644
--- a/src/usr/diag/attn/test/attnfakeipoll.C
+++ b/src/usr/diag/attn/test/attnfakeipoll.C
@@ -65,11 +65,11 @@ errlHndl_t FakeIpoll::processPutReg(
? i_new
: i_sys.getReg(i_target, iv_address);
- bool masked = (ipollContent & iv_ipollbits);
+ bool masked = (~ipollContent & iv_ipollbits);
bool hi = (content & iv_gfirbits);
bool unmasked = i_address == IPOLL::address
- ? ~ipollContent & i_old & iv_ipollbits
+ ? ipollContent & ~i_old & iv_ipollbits
: false;
bool set = i_address == IPOLL::address
@@ -96,7 +96,7 @@ void FakeIpoll::processEoi(
uint64_t ipollContent = i_sys.getReg(i_source, IPOLL::address);
uint64_t content = i_sys.getReg(i_source, iv_address);
- bool masked = ipollContent & iv_ipollbits;
+ bool masked = ~ipollContent & iv_ipollbits;
bool high = content & iv_gfirbits;
if(high && !masked)
diff --git a/src/usr/diag/attn/test/attntestmem.H b/src/usr/diag/attn/test/attntestmem.H
index 84a98d084..48e10a558 100644
--- a/src/usr/diag/attn/test/attntestmem.H
+++ b/src/usr/diag/attn/test/attntestmem.H
@@ -101,7 +101,7 @@ class AttnMemTest: public CxxTest::TestSuite
break;
}
- randomData = randomData & ~maskbits;
+ randomData = randomData | maskbits;
err = putScom(
proc,
@@ -132,13 +132,13 @@ class AttnMemTest: public CxxTest::TestSuite
// verify that the attn was masked, and that
// other bits weren't touched
- if(!(data & maskbits))
+ if(!(~data & maskbits))
{
TS_FAIL("attention not masked");
break;
}
- if((data & ~maskbits) != randomData)
+ if((data | maskbits) != randomData)
{
TS_FAIL("unexpected data in mask register");
break;
@@ -212,7 +212,7 @@ class AttnMemTest: public CxxTest::TestSuite
break;
}
- randomData = randomData | maskbits;
+ randomData = randomData & ~maskbits;
err = putScom(proc, IPOLL::address, randomData);
if(err)
@@ -240,13 +240,13 @@ class AttnMemTest: public CxxTest::TestSuite
// verify that the attn was masked, and that
// other bits weren't touched
- if(!(~data & maskbits))
+ if(!(data & maskbits))
{
TS_FAIL("attention not unmasked");
break;
}
- if((data | maskbits) != randomData)
+ if((data & ~maskbits) != randomData)
{
TS_FAIL("unexpected data in mask register");
break;
diff --git a/src/usr/diag/attn/test/attntestproc.H b/src/usr/diag/attn/test/attntestproc.H
index 0d38ee894..218f97036 100644
--- a/src/usr/diag/attn/test/attntestproc.H
+++ b/src/usr/diag/attn/test/attntestproc.H
@@ -96,7 +96,7 @@ class AttnProcTest: public CxxTest::TestSuite
break;
}
- randomData = randomData & ~maskbits;
+ randomData = randomData | maskbits;
err = putScom(
d.targetHndl,
@@ -127,13 +127,13 @@ class AttnProcTest: public CxxTest::TestSuite
// verify that the attn was masked, and that
// other bits weren't touched
- if(!(data & maskbits))
+ if(!(~data & maskbits))
{
- TS_FAIL("attention not masked");
+ TS_FAIL("attention unmasked");
break;
}
- if((data & ~maskbits) != randomData)
+ if((data | maskbits) != randomData)
{
TS_FAIL("unexpected data in mask register");
break;
@@ -204,7 +204,7 @@ class AttnProcTest: public CxxTest::TestSuite
break;
}
- randomData = randomData | maskbits;
+ randomData = randomData & ~maskbits;
err = putScom(d.targetHndl, IPOLL::address, randomData);
if(err)
@@ -217,7 +217,7 @@ class AttnProcTest: public CxxTest::TestSuite
if(err)
{
- TS_FAIL("unexpected error masking attention");
+ TS_FAIL("unexpected error unmasking attention");
break;
}
@@ -232,13 +232,13 @@ class AttnProcTest: public CxxTest::TestSuite
// verify that the attn was unmasked, and that
// other bits weren't touched
- if(!(~data & maskbits))
+ if(!(data & maskbits))
{
- TS_FAIL("attention not unmasked");
+ TS_FAIL("attention masked");
break;
}
- if((data | maskbits) != randomData)
+ if((data & ~maskbits) != randomData)
{
TS_FAIL("unexpected data in mask register");
break;
diff --git a/src/usr/diag/attn/test/attnvalidate.C b/src/usr/diag/attn/test/attnvalidate.C
index dec7766a9..1897f2f6c 100644
--- a/src/usr/diag/attn/test/attnvalidate.C
+++ b/src/usr/diag/attn/test/attnvalidate.C
@@ -68,7 +68,7 @@ errlHndl_t Validator::processPutAttention(
target = getTargetService().getProc(i_attention.targetHndl);
}
- bool masked = i_sys.getReg(target, IPOLL::address) & ipollCheckbits;
+ bool masked = ~i_sys.getReg(target, IPOLL::address) & ipollCheckbits;
if(!masked)
{
@@ -217,7 +217,7 @@ errlHndl_t Validator::processPutReg(
// these bits turned off
- IPOLL::forEach(i_old & ~i_new, &args, &appendOuterLoop);
+ IPOLL::forEach(i_new & ~i_old, &args, &appendOuterLoop);
AttnList::iterator it = args.list.begin();
@@ -231,7 +231,7 @@ errlHndl_t Validator::processPutReg(
// these bits turned on
- IPOLL::forEach(i_new & ~i_old, &args, &appendOuterLoop);
+ IPOLL::forEach(i_old & ~i_new, &args, &appendOuterLoop);
it = args.list.begin();
OpenPOWER on IntegriCloud