diff options
author | Adam Muhle <armuhle@us.ibm.com> | 2011-08-10 16:21:12 -0500 |
---|---|---|
committer | ADAM R. MUHLE <armuhle@us.ibm.com> | 2011-08-15 08:53:32 -0500 |
commit | c7b83cbaf5b18e72846e24e26f990babc5b02708 (patch) | |
tree | fc9a5e5771c9f08ed89e688d265434a5f0fcdcc9 /src/usr | |
parent | 65f04fd6c74f04a3d7b0f11c3f21e634a2b0a9e8 (diff) | |
download | talos-hostboot-c7b83cbaf5b18e72846e24e26f990babc5b02708.tar.gz talos-hostboot-c7b83cbaf5b18e72846e24e26f990babc5b02708.zip |
Move fakePNOR to 5MB, copy fakeext image to sandbox, load fakeext/TOC into phys_mem
Change-Id: Ie9243f22f7afbfd2d3112fa17fe74999467d2dd6
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/251
Tested-by: Jenkins Server
Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/pnor/pnordd.C | 29 | ||||
-rw-r--r-- | src/usr/pnor/pnordd.H | 2 | ||||
-rw-r--r-- | src/usr/pnor/test/pnorddtest.H | 111 |
3 files changed, 105 insertions, 37 deletions
diff --git a/src/usr/pnor/pnordd.C b/src/usr/pnor/pnordd.C index fe4699fbe..ddc760ba3 100644 --- a/src/usr/pnor/pnordd.C +++ b/src/usr/pnor/pnordd.C @@ -18,10 +18,11 @@ #include <errl/errlmanager.H> #include "pnordd.H" #include <pnor/pnorif.H> +#include <pnor/pnor_reasoncodes.H> -#define FAKE_PNOR_START 7*1024*1024 +#define FAKE_PNOR_START 5*1024*1024 #define FAKE_PNOR_END 8*1024*1024 - +#define FAKE_PNOR_SIZE 3*1024*1024 extern trace_desc_t* g_trac_pnor; @@ -158,7 +159,7 @@ errlHndl_t PnorDD::read(void* o_buffer, size_t& io_buflen, uint64_t i_address) { - TRACDCOMP(g_trac_pnor, "PnorDD::read(i_address=0x%llx)> ", i_address); + //TRACDCOMP(g_trac_pnor, "PnorDD::read(i_address=0x%llx)> ", i_address); errlHndl_t l_err = NULL; do{ @@ -194,7 +195,7 @@ errlHndl_t PnorDD::write(void* i_buffer, size_t& io_buflen, uint64_t i_address) { - TRACDCOMP(g_trac_pnor, "PnorDD::write(i_address=0x%llx)> ", i_address); + //TRACDCOMP(g_trac_pnor, "PnorDD::write(i_address=0x%llx)> ", i_address); errlHndl_t l_err = NULL; do{ @@ -272,7 +273,7 @@ PnorDD::PnorDD() PnorDD::~PnorDD() { - //Nothing todo for now + //Nothing to do for now } errlHndl_t PnorDD::verifyAddressRange(uint64_t i_address, @@ -282,10 +283,22 @@ errlHndl_t PnorDD::verifyAddressRange(uint64_t i_address, do{ - if((i_address < FAKE_PNOR_START) || - ((i_address+i_length) > FAKE_PNOR_END)) + if((i_address+i_length) > FAKE_PNOR_SIZE) { - //@TODO create errorlog + TRACFCOMP( g_trac_pnor, "PnorDD::verifyAddressRange> Invalid Address Requested : i_address=%d", i_address ); + /*@ + * @errortype + * @moduleid PNOR::MOD_PNORDD_VERIFYADDRESSRANGE + * @reasoncode PNOR::RC_INVALID_SECTION + * @userdata1 Requested Address + * @userdata2 Requested Length + * @devdesc PnorDD::verifyAddressRange> Invalid Address requested + */ + l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE, + PNOR::MOD_PNORDD_VERIFYADDRESSRANGE, + PNOR::RC_INVALID_ADDRESS, + TO_UINT64(i_address), + TO_UINT64(i_length)); break; } diff --git a/src/usr/pnor/pnordd.H b/src/usr/pnor/pnordd.H index df953e203..ac5453807 100644 --- a/src/usr/pnor/pnordd.H +++ b/src/usr/pnor/pnordd.H @@ -17,7 +17,7 @@ enum lscMode MMRD = 0, /**< Indicates PNOR is in MMRD Mode */ PMWR, /**< Indicates PNOR is in PMWR Mode */ - LAST_MODE = PMWR, + LAST_MODE, }; diff --git a/src/usr/pnor/test/pnorddtest.H b/src/usr/pnor/test/pnorddtest.H index a60d53efe..1ca7ed190 100644 --- a/src/usr/pnor/test/pnorddtest.H +++ b/src/usr/pnor/test/pnorddtest.H @@ -13,7 +13,8 @@ #include <errl/errltypes.H> #include <pnor/pnorif.H> #include <devicefw/userif.H> -//#include "../pnordd.H" + +#define BASE_SCRATCH_SPACE 2*1024*1024+1024*512 //2.5MB offset in fake PNOR extern trace_desc_t* g_trac_pnor; using namespace TARGETING; @@ -24,24 +25,26 @@ class PnorDdTest : public CxxTest::TestSuite public: /** - * @brief PNOR DD test #1 + * @brief PNOR DD readWriteTest * Write some data to PNOR and read it back again + * Using fakePNOR scratch space (2.5 - 3 MB) */ - void testPnorDD1(void) + void test_readwrite(void) { //@TODO: make this table driven so it can test more values - //@TODO: compare results with expected data. //@TODO: Add some more interesting tests TARGETING::Target* l_testTarget = MASTER_PROCESSOR_CHIP_TARGET_SENTINEL; size_t l_size = sizeof(uint64_t); errlHndl_t l_err = NULL; + uint64_t fails = 0; + uint64_t total = 4; do{ - TS_TRACE("testPnorDD1: starting"); + TS_TRACE("PnorDdTest::test_readwrite: starting"); // Perform PnorDD Write 1 - uint64_t l_address = 0x100; + uint64_t l_address = BASE_SCRATCH_SPACE+0x100; uint64_t l_writeData = 0x12345678FEEDB0B0; l_err = deviceWrite(l_testTarget, &l_writeData, @@ -49,19 +52,14 @@ class PnorDdTest : public CxxTest::TestSuite DEVICE_PNOR_ADDRESS(0, l_address)); if (l_err) { - TS_FAIL("testPnorDD1: PNORDD write 1: deviceWrite() failed! Error committed."); + TS_FAIL("PnorDdTest::test_readwrite: PNORDD write 1: deviceWrite() failed! Error committed."); + fails++; break; } - else - { - TS_TRACE("testPnorDD1: PNORDD write 1, Address 0x%llx, Data %llx", - l_address, - (long long unsigned)l_writeData); - } // Perform PnorDD Write 2 - l_address = 0x108; + l_address = BASE_SCRATCH_SPACE+0x108; l_writeData = 0xFEEDBEEF000ABCDE; l_err = deviceWrite(l_testTarget, &l_writeData, @@ -69,18 +67,73 @@ class PnorDdTest : public CxxTest::TestSuite DEVICE_PNOR_ADDRESS(0, l_address)); if (l_err) { - TS_FAIL("testPnorDD1: PNORDD write 2: deviceWrite() failed! Error committed."); + TS_FAIL("PnorDdTest::test_readwrite: PNORDD write 2: deviceWrite() failed! Error committed."); + fails++; break; } - else + + // Perform PnorDD read 1 + l_address = BASE_SCRATCH_SPACE+0x100; + uint64_t l_readData = 0; + l_err = deviceRead(l_testTarget, + &l_readData, + l_size, + DEVICE_PNOR_ADDRESS(0, l_address)); + if (l_err) { - TS_TRACE("testPnorDD1: PNORDD write 2, Address 0x%llx, Data %llx", - l_address, - (long long unsigned)l_writeData); + TS_FAIL("PnorDdTest::test_readwrite: PNORDD read 1: deviceRead() failed! Error committed."); + fails++; + break; + } + else if(l_readData != 0x12345678FEEDB0B0) + { + TS_FAIL("PnorDdTest::test_readwrite: PNORDD read 1: Read data not expected value. Addr: 0x%llx, ExpData: 0x12345678FEEDB0B0, ActData: 0x%llx", + l_address, (long long unsigned)l_readData); + fails++; + break; } - // Perform PnorDD read 1 - l_address = 0x100; + // Perform PnorDD read 2 + l_address = BASE_SCRATCH_SPACE+0x108; + l_err = deviceRead(l_testTarget, + &l_readData, + l_size, + DEVICE_PNOR_ADDRESS(0, l_address)); + if (l_err) + { + TS_FAIL("PnorDdTest::test_readwrite: PNORDD read 2: deviceRead() failed! Error committed."); + break; + } + else if(l_readData != 0xFEEDBEEF000ABCDE) + { + TS_FAIL("PnorDdTest::test_readwrite: PNORDD read 2: Read data not expected value. Addr: 0x%llx, ExpData: 0xFEEDBEEF000ABCDE, ActData: 0x%llx", + l_address, (long long unsigned)l_readData ); + fails++; + break; + } + + }while(0); + + + TRACFCOMP(g_trac_pnor, "PnorDdTest::test_readwrite> %d/%d fails", fails, total ); + + }; + + +/*Not really a real test, just using to verify ext image is loading properly. +Leaving it commented out because the test-case will not dynamically find the extended image based on the TOC +// void testPnorDD2(void) + { + + TARGETING::Target* l_testTarget = MASTER_PROCESSOR_CHIP_TARGET_SENTINEL; + size_t l_size = sizeof(uint64_t); + errlHndl_t l_err = NULL; + + do{ + TS_TRACE("testPnorDD2: starting"); + + //Read fakeext data + uint64_t l_address = 0x690; uint64_t l_readData = 0; l_err = deviceRead(l_testTarget, &l_readData, @@ -88,34 +141,36 @@ class PnorDdTest : public CxxTest::TestSuite DEVICE_PNOR_ADDRESS(0, l_address)); if (l_err) { - TS_FAIL("testPnorDD1: PNORDD read 1: deviceRead() failed! Error committed."); + TS_FAIL("testPnorDD2: PNORDD read fakeext: deviceRead() failed! Error committed."); break; } else { - TS_TRACE("testPnorDD1: PNORDD read 1, Address 0x%llx, Data %llx", + TS_TRACE("testPnorDD2: PNORDD read fakeext, Address 0x%llx, Data %llx", l_address, (long long unsigned)l_readData); } - // Perform PnorDD read 2 - l_address = 0x108; + //Read fakeext data + l_address = 0x698; + l_readData = 0; l_err = deviceRead(l_testTarget, &l_readData, l_size, DEVICE_PNOR_ADDRESS(0, l_address)); if (l_err) { - TS_FAIL("testPnorDD1: PNORDD read 2: deviceRead() failed! Error committed."); + TS_FAIL("testPnorDD2: PNORDD read fakeext: deviceRead() failed! Error committed."); break; } else { - TS_TRACE("testPnorDD1: PNORDD read 2, Address 0x%llx, Data %llx", + TS_TRACE("testPnorDD2: PNORDD read fakeext, Address 0x%llx, Data %llx", l_address, (long long unsigned)l_readData); } + }while(0); @@ -123,7 +178,7 @@ class PnorDdTest : public CxxTest::TestSuite }; - +*/ }; |