1. numRams 为0
我将参数"SDL_ECC_MEMTYPE_MCU_CBASS_ECC_aggr0、&ECC_Test_MCUCBASSECInitConfig"传递给函数 SDL_ECC_init、它成功且 numRams 等于 115、但同样地传递了其他 ECC ARRG 、它们失败且 numRams 等于0。
从 函数 SDL_ECC_aggrGetNumRams 中读取寄存器 numRams、该函数的路径为"SDL/src/IP/ECC/V1/SDL_IP_EC.c"。 代码如下第 473行所示:
462 /**
463 * Design: PROC_SDL-1186,PROC_SDL-1187
464 */
465 int32_t SDL_ecc_aggrGetNumRams(const SDL_ecc_aggrRegs *pEccAggrRegs, uint32_t *pNumRams)
466 {
467 int32_t retVal = SDL_EBADARGS;
468
469 if ( pEccAggrRegs != NULL_PTR )
470 {
471 if (pNumRams != NULL_PTR)
472 {
473 *pNumRams = (uint32_t)SDL_REG32_FEXT(&pEccAggrRegs->STAT, ECC_AGGR_STAT_NUM_RAMS);
474 retVal = SDL_PASS;
475 }
476 }
477 /* Return the API success/fail with value in the address provided by caller */
478 return (retVal);
479 }
大多数 ECC 寄存器将失败、请参阅以下代码及其注释
static struct ecc_st ecc_array[] = {
{SDL_COMPUTE_CLUSTER0_A72SS0_COMMON_ECC_AGGR, &ECC_Test_A72SS0_COMMON_ECCInitConfig}, // failed 96 numRams = 0
{SDL_COMPUTE_CLUSTER0_A72SS0_CORE0_ECC_AGGR, &ECC_Test_A72SS0_CORE0_ECCInitConfig}, // failed 96 numRams = 0
{SDL_COMPUTE_CLUSTER0_A72SS0_CORE1_ECC_AGGR, &ECC_Test_A72SS0_CORE1_ECCInitConfig}, // failed 96 numRams = 0
{SDL_COMPUTE_CLUSTER0_C71SS0_ECC_AGGR, &ECC_Test_C71SS0_ECCInitConfig}, // failed 102 numRams = 0
{SDL_PCIE0_ECC_AGGR_CORE_0, &ECC_Test_PCIE0_ECCInitConfig}, // failed 29 MPU falut_type:1 falut_addr:0x2a0000c
{SDL_PCIE0_ECC_AGGR_CORE_AXI_0, &ECC_Test_PCIE0_ECCInitConfig}, // failed 30 MPU falut_type:1 falut_addr:0x2a0100c numRams = 0
{SDL_PCIE1_ECC_AGGR_CORE_0, &ECC_Test_PCIE1_ECCInitConfig}, // failed 31 MPU falut_type:1 falut_addr:0x2a0200c
{SDL_PCIE1_ECC_AGGR_CORE_AXI_0, &ECC_Test_PCIE1_AXI_0_ECCInitConfig}, // failed 32 MPU falut_type:1 falut_addr:0x2a0300c
{SDL_PCIE2_ECC_AGGR_CORE_0, &ECC_Test_PCIE2_ECCInitConfig}, // failed 33 MPU falut_type:1 falut_addr:0x2a0400c
{SDL_PCIE2_ECC_AGGR_CORE_AXI_0, &ECC_Test_PCIE2_AXI_0_ECCInitConfig}, // failed 34 MPU falut_type:1 falut_addr:0x2a0500c
{SDL_PCIE3_ECC_AGGR_CORE_0, &ECC_Test_PCIE3_ECCInitConfig}, // failed 35 MPU falut_type:1 falut_addr:0x2a0600c
{SDL_PCIE3_ECC_AGGR_CORE_AXI_0, &ECC_Test_PCIE3_AXI_0_ECCInitConfig}, // failed 36 MPU falut_type:1 falut_addr:0x2a0700c
{SDL_R5FSS0_CORE0_ECC_AGGR, &ECC_Test_R5FSS0_CORE0_ECCInitConfig}, // success numRams = 36
{SDL_ECC_MEMTYPE_MCU_CBASS_ECC_AGGR0, &ECC_Test_MCUCBASSECCInitConfig}, // success type 13, numRams = 115
{SDL_ECC_MEMTYPE_MAIN_MSMC_AGGR0, &ECC_Test_MAINMSMCA0ECCInitConfig}, // failed 93 numRams = 0
{SDL_MCU_I3C0_I3C_P_ECC_AGGR, &ECC_Test_MCU_I3C0_P_ECCInitConfig}, // failed 39 numRams = 4 MPU: Data Abort exception!!
{SDL_I3C0_I3C_S_ECC_AGGR, &ECC_Test_I3C0_S_ECCInitConfig}, // failed 37 numRams = 4 MPU: Data Abort exception!!
};
memconfig.readable 为0
PCIe ECC 测试 SDL_PCIE0_ECC_aggr_core_0延迟约5秒、Init 已通过测试。 但调用 SDL_ECC_C注入 错误时失败。
根据日志、ESM 中断未被触发。
static int32_t ECC_sdlFuncTest(void)
{
int32_t result;
int32_t retVal = 0;
uint32_t maxTimeOutMilliSeconds = 10000;
uint32_t timeOutCnt = 0;
printf("\n\n ESM Safety Example tests: starting");
if (retVal == 0)
{
result = ECC_Test_runECC1BitMSMCParityInjectTest();
if (result == SDL_PASS)
{
printf("\n\n Waiting for ESM Interrupt \n\n");
do
{
/* dummy wait for the interrupt */
SDL_OSAL_delay(SDL_DELAY_US);;
timeOutCnt += 10;
if (timeOutCnt > maxTimeOutMilliSeconds)
{
printf("Ruifeng %s %d timeOutCnt = %d maxTimeOutMilliSeconds = %d esmError = %d break;\n", __func__, __LINE__, timeOutCnt, maxTimeOutMilliSeconds, esmError);
result = SDL_EFAIL;
break;
}
} while (esmError == false);
}
if(result == SDL_PASS){
printf("\n\n Memory Parity Error Test Complete \n\n");
esmError = false;
}
if (result != SDL_PASS) {
retVal = -1;
printf("\n\n Memory Parity Error Test has failed...");
}
}
以上代码将输出日志:
Ruifeng ECC_sdlFuncTest 481 timeOutCnt = 10010 maxTimeOutMilliSeconds = 10000 esmError = 0 break;
通过添加一些日志、我在 PCIe ECC aggr 的函数 SDL_ECC_C注入 错误中发现 memconfig.readable 值等于0。
if ((retVal == SDL_PASS) && (memConfig.readable == (bool)true))
结果是以下代码无法执行、并且无法触发 ECC 事件和 ESM 中断。
if ((retVal == SDL_PASS) && (memConfig.readable == (bool)true))
{
printf("Ruifeng %s %d retVal = %d pECCErrorConfig->pErrMem = 0x%x memConfig.memStartAddr = 0x%x\n", __func__, __LINE__, retVal, (uint32_t)pECCErrorConfig->pErrMem, memConfig.memStartAddr);
if ( ((uintptr_t)pECCErrorConfig->pErrMem) < memConfig.memStartAddr) {
retVal = SDL_EFAIL;
} else {
/* Calculate error offset */
errAddrOffset = ((uintptr_t)pECCErrorConfig->pErrMem - memConfig.memStartAddr)
/ (memConfig.stride);
printf("Ruifeng %s %d retVal = %d errAddrOffset = %d\n", __func__, __LINE__, retVal, errAddrOffset);
}
if (retVal == SDL_PASS) {
/* Set error Address in ECC Wrapper RAM ID */
sdlRetval = SDL_ecc_aggrWriteEccRamErrCtrlReg(eccAggrRegs,
ramId, 0u,
errAddrOffset);
if (sdlRetval != SDL_PASS) {
retVal = SDL_EFAIL;
}
}
}
3. RAT 不能映射内存。
我使用 RAT 将 ECC aggr“SDL_COMPACT_CLUSTER0_A72SS0_common_ecc_aggr”映射到 mcu3_0。 我读出 RAT 寄存器、它看起来正常工作、但无法映射存储器。 释放的代码如下所示:
MCU3_0上保留的存储器、用于 RAT 映射。
/* ========================================================================== */
/* Global Variables SDL Config */
/* ========================================================================== */
/* Note that this example provide a single instance of mappedEccRegs (which is RAT-mapped
* ECC aggregator configuration registers that lie in larger address space than the 32-bit
* address space on the MCU. If more ECC aggregator registers need to be mapped, additional
* global variables are needed for each set of aggregator registers, and SDL_ECC_init() needs
* to be modified to make SDL_ECC_mapEccAggrReg() calls for each one that needs to be mapped.
* The expectation is that this mapping will be retained in perpetuity because in order to obtain
* information about the ECC errors, the ECC Aggregator configuration registers require to be
* visible from the MCU. */
__attribute((section(".my_aggr_reg"))) uint8_t mappedEccRegs[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg1"))) uint8_t mappedEccRegs1[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg2"))) uint8_t mappedEccRegs2[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg3"))) uint8_t mappedEccRegs3[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg4"))) uint8_t mappedEccRegs4[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg5"))) uint8_t mappedEccRegs5[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg6"))) uint8_t mappedEccRegs6[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg7"))) uint8_t mappedEccRegs7[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg8"))) uint8_t mappedEccRegs8[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg9"))) uint8_t mappedEccRegs9[0x400] __attribute__ ((aligned (0x400)));
__attribute((section(".my_aggr_reg10"))) uint8_t mappedEccRegs10[0x400] __attribute__ ((aligned (0x400)));
RAT 转换函数
void* SDL_TEST_addrTranslate(uint64_t addr, uint32_t size)
{
void * ret = (void *)(-1);
CSL_RatTranslationCfgInfo translationCfg;
uint32_t transAddr = (uint32_t)(-1);
uint32_t index = 0;
bool result;
printf("rat version = %d\n", CSL_ratGetRevision((CSL_ratRegs *)PBIST_RAT_CFG_BASE));
printf("Ruifeng %s %d input addr = 0x%llx\n", __func__, __LINE__, addr);
if ((addr == SDL_COMPUTE_CLUSTER0_C71SS0_PBIST_BASE) ||
(addr == SDL_COMPUTE_CLUSTER0_A72SS0_PBIST0_BASE) ||
(addr == SDL_C66SS0_VBUSP_CFG_PBISTCFG_BASE) ||
(addr == SDL_C66SS1_VBUSP_CFG_PBISTCFG_BASE) ||
(addr == SDL_COMPUTE_CLUSTER0_MSMC_PBIST_BASE) ||
(addr == SDL_COMPUTE_CLUSTER0_MSMC_PBIST_BASE))
{
/* Disable RAT translation */
result = CSL_ratDisableRegionTranslation((CSL_ratRegs *)PBIST_RAT_CFG_BASE,
PBIST_RAT_REGION_INDEX);
transAddr = (uint32_t)0x60000000;
index = PBIST_RAT_REGION_INDEX;
}
else
{
/* Currently, below aggregators configuration registers can be
* mapped by this code. To expand to other aggregators, additional
* instances of "mappedEccRegs" are needed and should be mapped to
* those additional aggregators. */
switch(addr)
{
case SDL_COMPUTE_CLUSTER0_MSMC_ECC_AGGR0_BASE:
transAddr = (uint32_t)mappedEccRegs;
index = 1;
break;
case SDL_COMPUTE_CLUSTER0_MSMC_ECC_AGGR1_BASE:
transAddr = (uint32_t)mappedEccRegs1;
index = 2;
break;
case SDL_COMPUTE_CLUSTER0_MSMC_ECC_AGGR2_BASE:
transAddr = (uint32_t)mappedEccRegs2;
index = 3;
break;
case SDL_COMPUTE_CLUSTER0_A72SS0_COMMON_ECC_AGGR_BASE:
transAddr = (uint32_t)mappedEccRegs3;
index = 4;
break;
case SDL_COMPUTE_CLUSTER0_A72SS0_CORE0_ECC_AGGR_BASE:
transAddr = (uint32_t)mappedEccRegs4;
index = 5;
break;
case SDL_COMPUTE_CLUSTER0_A72SS0_CORE1_ECC_AGGR_BASE:
transAddr = (uint32_t)mappedEccRegs5;
index = 6;
break;
case SDL_COMPUTE_CLUSTER0_ECC_AGGR_VBUS_BASE:
transAddr = (uint32_t)mappedEccRegs6;
index = 7;
break;
case SDL_COMPUTE_CLUSTER0_ECC_AGGR_CTL_BASE:
transAddr = (uint32_t)mappedEccRegs7;
index = 8;
break;
case SDL_COMPUTE_CLUSTER0_ECC_AGGR_CFG_BASE:
transAddr = (uint32_t)mappedEccRegs8;
index = 9;
break;
case SDL_COMPUTE_CLUSTER0_C71SS0_ECC_AGGR_BASE:
transAddr = (uint32_t)mappedEccRegs9;
index = 10;
break;
case SDL_R5FSS0_CORE0_ICACHE_BASE:
transAddr = (uint32_t)mappedEccRegs10;
index = 11;
break;
default:
break;
}
}
if (transAddr != (uint32_t)(-1))
{
/* Add RAT configuration to access address > 32bit address range */
translationCfg.translatedAddress = addr;
translationCfg.sizeInBytes = size;
translationCfg.baseAddress = transAddr;
printf("Ruifeng %s %d translationCfg.translatedAddress = 0x%llx transAddr = 0x%x size = 0x%x\n", __func__, __LINE__, translationCfg.translatedAddress, transAddr, size);
/* Set up RAT translation */
result = CSL_ratConfigRegionTranslation((CSL_ratRegs *)PBIST_RAT_CFG_BASE,
index, &translationCfg);
printf("Ruifeng %s %d result = %s\n", __func__, __LINE__, result?"true":"false");
if (result == (bool)true ) {
ret = (void *)transAddr;
CSL_ratRegs *pRatRegs = (CSL_ratRegs *)PBIST_RAT_CFG_BASE;
int i;
printf("Ruifeng %s %d CSL_REG32_RD(&pRatRegs->CONFIG) = 0x%x\n", __func__, __LINE__, CSL_REG32_RD(&pRatRegs->CONFIG));
for (i = 0; i < 16; i++)
{
printf("Ruifeng %s %d REGION[%d] CTRL = 0x%x\n", __func__, __LINE__, i, CSL_REG32_RD(&pRatRegs->REGION[i].CTRL));
printf("Ruifeng %s %d REGION[%d] BASE = 0x%x\n", __func__, __LINE__, i, CSL_REG32_RD(&pRatRegs->REGION[i].BASE));
printf("Ruifeng %s %d REGION[%d] TRANS_L = 0x%x\n", __func__, __LINE__, i, CSL_REG32_RD(&pRatRegs->REGION[i].TRANS_L));
printf("Ruifeng %s %d REGION[%d] TRANS_U = 0x%x\n", __func__, __LINE__, i, CSL_REG32_RD(&pRatRegs->REGION[i].TRANS_U));
}
for (i = 0; i < 0x400 / 4; i++)
{
if (i % 50 == 0)
printf("\n[%04d] ", i);
printf("%02x ", *((uint32_t *)mappedEccRegs3 + i));
}
printf("\n");
}
}
printf("Ruifeng %s %d transAddr = 0x%x\n", __func__, __LINE__, transAddr);
return ret;
}
我使用了 ECC aggr "SDL_COMPACT_CLUSTER0_A72SS0_common_ecc_aggr"、内存地址为 SDL_COMPACT_CLUSTER0_A72SS0_common_ecc_aggr_BASE。
case SDL_COMPUTE_CLUSTER0_A72SS0_COMMON_ECC_AGGR_BASE:
transAddr = (uint32_t)mappedEccRegs3;
index = 4;
break;
然后、我输出 RAT 寄存器并 使用上面第99行到第115行之间的代码映射存储器"mappedEccRegs3"。 再次连接。
int i;
printf("Ruifeng %s %d CSL_REG32_RD(&pRatRegs->CONFIG) = 0x%x\n", __func__, __LINE__, CSL_REG32_RD(&pRatRegs->CONFIG));
for (i = 0; i < 16; i++)
{
printf("Ruifeng %s %d REGION[%d] CTRL = 0x%x\n", __func__, __LINE__, i, CSL_REG32_RD(&pRatRegs->REGION[i].CTRL));
printf("Ruifeng %s %d REGION[%d] BASE = 0x%x\n", __func__, __LINE__, i, CSL_REG32_RD(&pRatRegs->REGION[i].BASE));
printf("Ruifeng %s %d REGION[%d] TRANS_L = 0x%x\n", __func__, __LINE__, i, CSL_REG32_RD(&pRatRegs->REGION[i].TRANS_L));
printf("Ruifeng %s %d REGION[%d] TRANS_U = 0x%x\n", __func__, __LINE__, i, CSL_REG32_RD(&pRatRegs->REGION[i].TRANS_U));
}
for (i = 0; i < 0x400 / 4; i++)
{
if (i % 50 == 0)
printf("\n[%04d] ", i);
printf("%02x ", *((uint32_t *)mappedEccRegs3 + i));
}
printf("\n");
有关 RAT 问题的完整日志为:
[MCU3_0] 9.448673 s: enter Ecc_Task [MCU3_0] 9.448730 s: Ruifeng sdl_ecc_init 609 [MCU3_0] 9.448789 s: Ruifeng i = 0 sizeof(ecc_array) = 1 ecc_array[i].ecc_type = 96 [MCU3_0] 9.448843 s: Ruifeng SDL_ECC_mapEccAggrReg 253 [MCU3_0] 9.448889 s: rat version = 1719677184 [MCU3_0] 9.448942 s: Ruifeng SDL_TEST_addrTranslate 99 input addr = 0x4d20010000 [MCU3_0] 9.449023 s: Ruifeng SDL_TEST_addrTranslate 177 translationCfg.translatedAddress = 0x4d20010000 transAddr = 0x2000 size = 0x210 [MCU3_0] 9.449112 s: Ruifeng SDL_TEST_addrTranslate 182 result = true [MCU3_0] 9.449174 s: Ruifeng SDL_TEST_addrTranslate 188 CSL_REG32_RD(&pRatRegs->CONFIG) = 0x300210 [MCU3_0] 9.449241 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[0] CTRL = 0x0 [MCU3_0] 9.449304 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[0] BASE = 0x0 [MCU3_0] 9.449364 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[0] TRANS_L = 0x0 [MCU3_0] 9.449426 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[0] TRANS_U = 0x0 [MCU3_0] 9.449487 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[1] CTRL = 0x0 [MCU3_0] 9.449549 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[1] BASE = 0x0 [MCU3_0] 9.449610 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[1] TRANS_L = 0x0 [MCU3_0] 9.449682 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[1] TRANS_U = 0x0 [MCU3_0] 9.449749 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[2] CTRL = 0x0 [MCU3_0] 9.449813 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[2] BASE = 0x0 [MCU3_0] 9.449877 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[2] TRANS_L = 0x0 [MCU3_0] 9.449939 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[2] TRANS_U = 0x0 [MCU3_0] 9.450001 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[3] CTRL = 0x0 [MCU3_0] 9.450062 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[3] BASE = 0x0 [MCU3_0] 9.450123 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[3] TRANS_L = 0x0 [MCU3_0] 9.450184 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[3] TRANS_U = 0x0 [MCU3_0] 9.450245 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[4] CTRL = 0x8000000a [MCU3_0] 9.450308 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[4] BASE = 0x2000 [MCU3_0] 9.450370 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[4] TRANS_L = 0x20010000 [MCU3_0] 9.450433 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[4] TRANS_U = 0x4d [MCU3_0] 9.450493 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[5] CTRL = 0x0 [MCU3_0] 9.450554 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[5] BASE = 0x0 [MCU3_0] 9.450615 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[5] TRANS_L = 0x0 [MCU3_0] 9.450704 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[5] TRANS_U = 0x0 [MCU3_0] 9.450772 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[6] CTRL = 0x0 [MCU3_0] 9.450833 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[6] BASE = 0x0 [MCU3_0] 9.450893 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[6] TRANS_L = 0x0 [MCU3_0] 9.450954 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[6] TRANS_U = 0x0 [MCU3_0] 9.451016 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[7] CTRL = 0x0 [MCU3_0] 9.451076 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[7] BASE = 0x0 [MCU3_0] 9.451136 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[7] TRANS_L = 0x0 [MCU3_0] 9.451197 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[7] TRANS_U = 0x0 [MCU3_0] 9.451258 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[8] CTRL = 0x0 [MCU3_0] 9.451317 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[8] BASE = 0x0 [MCU3_0] 9.451377 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[8] TRANS_L = 0x0 [MCU3_0] 9.451437 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[8] TRANS_U = 0x0 [MCU3_0] 9.451499 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[9] CTRL = 0x0 [MCU3_0] 9.451559 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[9] BASE = 0x0 [MCU3_0] 9.451620 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[9] TRANS_L = 0x0 [MCU3_0] 9.451690 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[9] TRANS_U = 0x0 [MCU3_0] 9.451753 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[10] CTRL = 0x0 [MCU3_0] 9.451814 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[10] BASE = 0x0 [MCU3_0] 9.451876 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[10] TRANS_L = 0x0 [MCU3_0] 9.451938 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[10] TRANS_U = 0x0 [MCU3_0] 9.451999 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[11] CTRL = 0x0 [MCU3_0] 9.452063 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[11] BASE = 0x0 [MCU3_0] 9.452122 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[11] TRANS_L = 0x0 [MCU3_0] 9.452185 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[11] TRANS_U = 0x0 [MCU3_0] 9.452245 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[12] CTRL = 0x0 [MCU3_0] 9.452305 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[12] BASE = 0x0 [MCU3_0] 9.452365 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[12] TRANS_L = 0x0 [MCU3_0] 9.452426 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[12] TRANS_U = 0x0 [MCU3_0] 9.452486 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[13] CTRL = 0x0 [MCU3_0] 9.452546 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[13] BASE = 0x0 [MCU3_0] 9.452608 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[13] TRANS_L = 0x0 [MCU3_0] 9.452680 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[13] TRANS_U = 0x0 [MCU3_0] 9.452746 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[14] CTRL = 0x0 [MCU3_0] 9.452808 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[14] BASE = 0x0 [MCU3_0] 9.452868 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[14] TRANS_L = 0x0 [MCU3_0] 9.452930 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[14] TRANS_U = 0x0 [MCU3_0] 9.452992 s: Ruifeng SDL_TEST_addrTranslate 191 REGION[15] CTRL = 0x0 [MCU3_0] 9.453052 s: Ruifeng SDL_TEST_addrTranslate 192 REGION[15] BASE = 0x0 [MCU3_0] 9.453116 s: Ruifeng SDL_TEST_addrTranslate 193 REGION[15] TRANS_L = 0x0 [MCU3_0] 9.453179 s: Ruifeng SDL_TEST_addrTranslate 194 REGION[15] TRANS_U = 0x0 [MCU3_0] 9.453216 s: [MCU3_0] 9.453476 s: [0000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [MCU3_0] 9.453787 s: [0050] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [MCU3_0] 9.454096 s: [0100] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [MCU3_0] 9.454403 s: [0150] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [MCU3_0] 9.454714 s: [0200] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [MCU3_0] 9.454817 s: [0250] 00 00 00 00 00 00 [MCU3_0] 9.454866 s: Ruifeng SDL_TEST_addrTranslate 208 transAddr = 0x2000 [MCU3_0] 9.454926 s: Ruifeng SDL_ECC_init 903 eccMemType = 96 Using RAT translate! [MCU3_0] 9.454973 s: Ruifeng SDL_ECC_init 912 [MCU3_0] 9.455015 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1526 [MCU3_0] 9.455059 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1530 [MCU3_0] 9.455120 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 410 numRams = 0 sdlRet = 0 [MCU3_0] 9.455173 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1534 [MCU3_0] 9.455233 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 410 numRams = 0 sdlRet = 0 [MCU3_0] 9.455292 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1537 retVal = 0 [MCU3_0] 9.455347 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1539 retVal = 0


