Hello,
could you please provide support? The PBIST is configured to test set of two-port RAMs, but the test fails with result RAMT = 0x101200C which means PBIST_ROM test failed.
When RINFOL/RINFOU registers are checked, their values are 0xFFFFFFFF/0xFFFFFFFF (so default values).
#define MSTGCR_MSTGENA (0x0Au)
#define MSTGCR_MSTGDIS (0x05u)
#define MSTGCR_ROM_DIV1 (0u << 8u)
#define MSTGCR_ROM_DIV2 (1u << 8u)
#define MSTGCR_ROM_DIV4 (2u << 8u)
#define MSTGCR_ROM_DIV8 (3u << 8u)
#define PBIST_ALGO_MARCH13_TWO_PORT (0x04u)
#define PBIST_ALGO_MARCH13_SINGLE_PORT (0x08u)
U32 dbg_pbistResult = 0u;
U32 dbg_RINFOL = 0u;
U32 dbg_RINFOU = 0u;
U32 dbg_pbist_RAMT = 0u;
void pbist_peripherals(void)
{
U32 ii;
// Disable PBIST to reset its controller
systemREG1->MSTGCR = (U32)MSTGCR_MSTGDIS;
// Enable PBIST controller
systemREG1->MSINENA = 0x01u;
// Enable PBIST and set PBIST ROM clock => RTOS_GCLK_MHZ / 4 = 300 / 4 = 75 MHz (max. 82.5 MHz)
systemREG1->MSTGCR = (systemREG1->MSTGCR & 0xFFFF0000u) | (U32)MSTGCR_ROM_DIV4 | (U32)MSTGCR_MSTGENA;
// Wait for at least 64 VCLK cycles in a software loop
for (ii = 0u; ii < 64u; ii++)
{
__asm__ __volatile__ ("nop");
}
// Enable PBIST clocks and ROM clock
pbistREG->PACT = 0x01u;
// Disable RAM selection override
pbistREG->OVER = 0x00u;
// Choose memory testing algorithm
pbistREG->ALGO = PBIST_ALGO_MARCH13_TWO_PORT;
// Select RAM group to be tested
pbistREG->RINFOL = ((U32)PBIST_RINFOL_AWM1 |
(U32)PBIST_RINFOL_DCAN1 |
(U32)PBIST_RINFOL_DCAN2 |
(U32)PBIST_RINFOL_DMA |
(U32)PBIST_RINFOL_HTU1 |
(U32)PBIST_RINFOL_MIBSPI1 |
(U32)PBIST_RINFOL_MIBSPI2 |
(U32)PBIST_RINFOL_MIBSPI3 |
(U32)PBIST_RINFOL_N2HET1 |
(U32)PBIST_RINFOL_VIM |
(U32)PBIST_RINFOL_RTP |
(U32)PBIST_RINFOL_ATB |
(U32)PBIST_RINFOL_AWM2 |
(U32)PBIST_RINFOL_DCAN3 |
(U32)PBIST_RINFOL_DCAN4 |
(U32)PBIST_RINFOL_HTU2 |
(U32)PBIST_RINFOL_MIBSPI4 |
(U32)PBIST_RINFOL_MIBSPI5 |
(U32)PBIST_RINFOL_N2HET2 |
(U32)PBIST_RINFOL_FTU |
(U32)PBIST_RINFOL_CPGMAC_STATE_RXADDR |
(U32)PBIST_RINFOL_CPGMAC_STAT_FIFO);
pbistREG->RINFOU = 0u;
dbg_RINFOL = pbistREG->RINFOL;
dbg_RINFOU = pbistREG->RINFOU;
// Select both Algorithm and RAM information from on-chip PBIST ROM
pbistREG->ROM = 0x03u;
// Configure PBIST to run in ROM Mode and launch the PBIST test
pbistREG->DLR = 0x14u;
// Wait for result
while((systemREG1->MSTCGSTAT & 0x01u) == 0u)
{
__asm__ __volatile__ ("nop");
}
// Check result
dbg_pbistResult = pbistREG->FSRF0;
dbg_pbist_RAMT = pbistREG->RAMT;
// Disable PBIST clocks and ROM
pbistREG->PACT = 0x0u;
// Disable PBIST
systemREG1->MSTGCR &= ~((U32)0xFu);
systemREG1->MSTGCR |= 0x5u;
}
Debug variables values after function:
dbg_pbistResult = 1 dbg_RINFOL = 0xFFFFFFFF dbg_RINFOU = 0xFFFFFFFF
dbg_pbist_RAMT = 0x101200C
Please advice, what could be wrong?