summaryrefslogtreecommitdiffstats
path: root/src/usr/intr/test/intrtest.H
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-03-22 11:14:00 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-03-27 15:12:30 -0500
commit64a9a50f5582133148c7960adae83021e1c23d8c (patch)
treebe09d0bab769ad00c6e1aab09e40dc1fbd86c7eb /src/usr/intr/test/intrtest.H
parente365e2055da924ce134e2f8263d47a6afba23e98 (diff)
downloadtalos-hostboot-64a9a50f5582133148c7960adae83021e1c23d8c.tar.gz
talos-hostboot-64a9a50f5582133148c7960adae83021e1c23d8c.zip
Support P8 interrupt presenter.
Task 35765 RTC: 35561 Change-Id: I9fd382fa1005b593d5bef5a258810a70956129d7 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/788 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/intr/test/intrtest.H')
-rw-r--r--src/usr/intr/test/intrtest.H68
1 files changed, 39 insertions, 29 deletions
diff --git a/src/usr/intr/test/intrtest.H b/src/usr/intr/test/intrtest.H
index bd9e316ca..c0fab1492 100644
--- a/src/usr/intr/test/intrtest.H
+++ b/src/usr/intr/test/intrtest.H
@@ -44,28 +44,33 @@ class IntrTest: public CxxTest::TestSuite
*/
void test_verifyState( void )
{
-#if defined(__INTR_TEST__)
- // TODO Temporaritly DISABLE in VBU until P8 support is added
+
+ // TODO Temporaritly DISABLE in VBU until P8 support is verfied
if( TARGETING::is_vpo() )
{
return;
}
- // Add support for second chip (dummy)
- uint32_t fake_pir = 0x00000001 << 5; // P7 chip 1 TODO P8=?
- msg_q_t intr_msgQ = msg_q_resolve(INTR_MSGQ);
- msg_t * msg = msg_allocate();
- msg->type = INTR::MSG_INTR_ADD_CPU_USR;
- msg->data[0] = fake_pir;
+ //// Add support for second chip (dummy)
+ ////uint32_t fake_pir = 0x00000001 << 5; // P7
+ //uint32_t fake_pir = 0x00000001 << 7; // P8
+ //msg_q_t intr_msgQ = msg_q_resolve(INTR_MSGQ);
+ //msg_t * msg = msg_allocate();
+ //msg->type = INTR::MSG_INTR_ADD_CPU_USR;
+ //msg->data[0] = fake_pir;
- msg_sendrecv(intr_msgQ, msg);
+ //msg_sendrecv(intr_msgQ, msg);
+ //msg_free(msg);
// all the simics registers
- for(uint64_t chip = 0; chip < 4; ++chip)
+ for(uint64_t chip = 0; chip < 1; ++chip)
{
- // simics P7 only supports 4 threads per core
- // and 2 cores - let the thread field overflow
- // into the core field -> 2 cores x 4 threads = 8 threads
+ // simics P8 appears to support 8 threads on 1 core.
+ // simics P7 appears to support 4 threads on 2 cores.
+ // for P7, pretending to have 8 threads works because the
+ // bit fields for cores and threads are contiguous so we can
+ // let the thread count overflow into the core field. so this
+ // works for p7 as well.
for(uint64_t thread = 0; thread < 8; ++thread)
{
uint64_t offset = (chip << 20) | (thread << 12);
@@ -78,17 +83,19 @@ class IntrTest: public CxxTest::TestSuite
if(*addr != 0xFF000000)
{
TS_FAIL
- ("INTR:Master cpu not initialized-XIRR=0x%08x",
- *addr);
+ ("INTR:Master cpu not initialized-XIRR@%p=0x%08x",
+ addr,*addr);
}
}
- if (chip < 2 && thread < 4) // TODO Change when all threads supported
+ // TODO remove restriction when/if simics supports
+ // more than 2 chips and 4 threads each
+ if (chip < 2 && thread < 4)
{
if(offset != 0 && *addr != 0)
{
- TS_FAIL("INTR:Chip %ld Thread %ld bad XIRR=0x%08x",
- chip,thread,*addr);
+ TS_FAIL("INTR:Chip %ld Thread %ld bad XIRR@%p=0x%08x",
+ chip,thread,addr,*addr);
}
@@ -105,7 +112,6 @@ class IntrTest: public CxxTest::TestSuite
}
}
}
-#endif
}
/**
@@ -113,8 +119,7 @@ class IntrTest: public CxxTest::TestSuite
*/
void test_enableDisable( void )
{
-#if defined(__INTR_TEST__)
- // TODO Temporaritly DISABLE in VBU until P8 support is added
+ // TODO Temporaritly DISABLE in VBU until P8 support is confirmed
if( TARGETING::is_vpo() )
{
return;
@@ -133,7 +138,7 @@ class IntrTest: public CxxTest::TestSuite
if((*addr & 0xFF000000) != 0)
{
- TS_FAIL("INTR not disabled");
+ TS_FAIL("INTR not disabled. Addr %p",addr);
}
err = INTR::enableExternalInterrupts();
@@ -148,9 +153,8 @@ class IntrTest: public CxxTest::TestSuite
if((*addr & 0xFF000000) != 0xFF000000)
{
- TS_FAIL("INTR not enabled");
+ TS_FAIL("INTR not enabled. Addr %p", addr);
}
-#endif
}
/**
@@ -159,10 +163,7 @@ class IntrTest: public CxxTest::TestSuite
*/
void test_intr( void )
{
- // Injecting interproc interrupt seems to work sometimes and not others
- // TODO need to investigate.
-#ifdef __NOT_NOW__
- // TODO Temporaritly DISABLE in VBU until P8 support is added
+ // TODO Temporaritly DISABLE in VBU until P8 support is confirmed
if( TARGETING::is_vpo() )
{
return;
@@ -193,7 +194,16 @@ class IntrTest: public CxxTest::TestSuite
TS_FAIL("INTR::unexpected interrupt type %lx",msg->type);
}
msg_respond(msgQ,msg);
-#endif
+
+ msgQ = INTR::unRegisterMsgQ(INTR::INTERPROC);
+ if(msgQ)
+ {
+ msg_q_destroy(msgQ);
+ }
+ else
+ {
+ TS_FAIL("INTR::unRegisterMsgQ failed");
+ }
}
OpenPOWER on IntegriCloud