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.

RM48L952: SafeTI: SRAM_LIVELOCK_DIAGNOSTICS - is that test "complete" & ready to run?

Part Number: RM48L952

Hello,

As requested here I'll open new topic: e2e.ti.com/.../2232968

That test looks to generate 1bit ram errors to both banks with 1 unaligned access, after the test SR1 has value 0x1400 0000 - that looks correct. But those ESM errors are not acked nor checked so bits are left active in the ESM when test is exited also return value is not set and registers content not restored. In case this test is run in the start up routines (recommended phase 29 where testing the RAM is mentioned) the SR bits will be cleared later by ESM init (in recommended phase 42).

Based on my observation for this live clock test (compared to "any other" group1 test):

- Test return value (sram_stResult) is not touched, returns what user gives (this is not a fault inject test based on the test name or functionality)

- ISR & nERROR action is not back upped and turned OFF in the beginning

- ESM register status is not verified after the fault(s) has been generated

- ISR & nERROR action is not returned

Based on my observation for this live clock test (compared to "other SRAM" tests):

- RAMTHRESHOLD value is back upped BUT not restored

- RAMCTRL value is not back upped nor restored

- Uses "application" RAM without IRQ protection ( tp = (volatile uint64 *)0x08000004u; /*start address of unaligned access*/ ) should it use sramEccTestBuff[0] & sramEccTestBuff[1] and take ½ point from there "tp = (uint64*)((uint8*)&sramEccTestBuff[0] + 4)" like those other tests do to ensure that application does not operate in same RAM range???

- RAMOCCUR is not written to 0 like in other tests in the beginning

Test pattern what happens if ramoccur != 0 for live clock test --> no ESM errors reported like TRM says
        sl_tcram1REG->RAMOCCUR = 5; // emulate that errors has been already happened before this test
        sl_tcram2REG->RAMOCCUR = 5; // emulate that errors has been already happened before this test
        /* set threshold to 1 */
        sl_tcram1REG->RAMTHRESHOLD = 0x1u;
        sl_tcram2REG->RAMTHRESHOLD = 0x1u;


Test could make runnable just by adding those "basic" routines to the beginning & end of the test which are in other tests.

After that the currently used RAM address 0x08000004 is the only one rising questions why it does not use the same test area as other 1 bit error tests (basically it should not matter since if application simultaneously access the area, the error is corrected. But if there is another bit flip due to disturbance say in 08000000-08000003 area at same time and application reads from RAM start then this would cause uncorrectable error (probability for this is of course small)...


Which unique identifier belongs to this test: RAM13 / RAM12? Is this test needed to full fill the unique identifier where it belongs to or is it enough to run similar "SRAM_ECC_ERROR_FORCING_1BIT" test?

Also would like to ask (to improve own understanding): does this test something different than SRAM_ECC_ERROR_FORCING_1BIT when it generates errors individually to both banks and this live clock test makes the error with just 1 unaligned access which goes simultaneously to both banks?

  • Hello Jarkko,

    I will have a look at this closer Weds next week after the US 4th of July Holiday. Apologies ahead of time for the delay.
  • Hi,

    Originally I said that using 0x08000004 would not matter in case no context switches... Actually it matters, since 1 bit errors are generated, the HW automatically fixes the values in the RAM, this yields to a situation that after the test, the "start of RAM" has changed content. There are 2pcs of 1s in memory when before the test all were 0s.

    before the test:
    from 0x08000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    after the test:
    from 0x08000000: 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00