This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Ram test status, and verifications

Other Parts Discussed in Thread: HALCOGEN

I'm using the HalCoGen code that runs PBIST on the CPU RAM.  I have two problems.  The first problem is that if the test should fail, there's no way to record the status and then continue running.  It calls memoryPort1TestFailNotification, but then the RAM is completely overwritten and any status is lost.  Since PBIST is run agian on different memories, even the status registers are lost.

I think I solved the first problem by re-arranging the HalCoGen code so that the CPU RAM test is run, then memoryInit(0x1) is called, and then  __cmain is called.  After that, the results of the RAM test should still be in the PBIST registers, so pbistIsTestPassed  should return the result.  Finally, the rest of the initialization code (and POST)  is called from main().  Does that sound like a reasonable way to re-arrange the code?

The second problem is that I don't have a way to verify that the PBIST is actually testing the CPU RAM.  The pbistSelfCheck function verifies that the PBIST controller can generate a failure, but I need to force a CPU RAM test failure to verify that the code works properly and the PBIST is doing its job.  Is there a way to do that?  I tried changing the code that waits for PBIST to complete to this:

    /* Wait for PBIST for CPU RAM to be completed */
    while((!pbistIsTestCompleted()) == TRUE)
    {
         MyVolatileVariable++;
    }/* Wait */

But that doesn't cause the PBIST RAM test to fail even though MyVolatileVariable is clearly overwritten by the test.

  • Jeremy,

    i would suggest to run PBIST test on CPU RAM and peripheral memories separately. You are right that all RAM content will be lost after PBIST test is complete. You need to make sure that no RAM is used after PBIST test is started. You need to use a register as the pointer to access the PBIST registers. You can also save the status to a register or to a peripheral RAM location. After PBIST test for CPU RAM you can do memory initialization of the CPU RAM, initialize tack pointers and global variables, and move the PBIST status to a CPU RAM location. You can do peripheral RAM PBIST and memory initialization later in main().

    I am not aware of any method to force a PBIST error.

    Thanks and regards,

    Zhaohong