diff options
author | Brad Bishop <bradleyb@us.ibm.com> | 2012-12-14 10:22:22 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-12-17 21:00:41 -0600 |
commit | 3147572991fa9eff4be6095b08b0299421e596b5 (patch) | |
tree | 8903292ec32145c768d46d7c7a2b5073caf8c602 /src/usr/diag/attn | |
parent | 4585387058949c654a82c0ed40e1efe6b8e82f2a (diff) | |
download | talos-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.C | 4 | ||||
-rw-r--r-- | src/usr/diag/attn/attnmem.C | 6 | ||||
-rw-r--r-- | src/usr/diag/attn/attnproc.C | 6 | ||||
-rw-r--r-- | src/usr/diag/attn/attnsvc.C | 13 | ||||
-rw-r--r-- | src/usr/diag/attn/test/attnfakeipoll.C | 6 | ||||
-rw-r--r-- | src/usr/diag/attn/test/attntestmem.H | 12 | ||||
-rw-r--r-- | src/usr/diag/attn/test/attntestproc.H | 18 | ||||
-rw-r--r-- | src/usr/diag/attn/test/attnvalidate.C | 6 |
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(); |