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.

[参考译文] TDA4VM:ECC 聚合器和 RAT

Guru**** 2542420 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1109753/tda4vm-ecc-aggregator-and-rat

器件型号:TDA4VM

您好,

我想 从主域内的 r5f 访问 ECC 聚合器地址。 代码是  

result = SDL_ECC_init(SDL_ECC_MEMTYPE_MAIN_MSMC_AGGR0, &ECC_Test_MAINMSMCA0ECCInitConfig);

我使用 osal_interface 初始化 OSAL、并使用它的 addrTranslate 函数 SDL_test_addrTranslate。

#define PBIST_RAT_CFG_BASE CSL_MCU_ARMSS_RAT_CFG_BASE

static SDL_OSAL_Interface osal_interface =
{
    .enableInterrupt = (pSDL_OSAL_interruptFunction) SDL_enableInterrupt,
    .disableInterrupt = (pSDL_OSAL_interruptFunction) SDL_disableInterrupt,
    .registerInterrupt = (pSDL_OSAL_registerFunction) SDL_registerInterrupt,
    .deregisterInterrupt = (pSDL_OSAL_deregisterFunction) HwiP_delete,
    .globalDisableInterrupts = (pSDL_OSAL_globalDisableInterruptsFunction) SDL_globalDisableInterrupts,
    .globalRestoreInterrupts = (pSDL_OSAL_globalRestoreInterruptsFunction) SDL_globalRestoreInterrupts,
    .printFxn = (pSDL_OSAL_printFunction) printf,
    .delay = (pSDL_OSAL_delayFunction) Osal_delay,
    .addrTranslate = (pSDL_OSAL_addrTranslateFunction) SDL_TEST_addrTranslate
};

ret = SDL_OSAL_init(&osal_interface);

但是、当我运行此应用程序时、它在 CSL_ratDisableRegionTranslation 函数中挂起。

总体调用关系如下:

SDL_ECC_init
    SDL_ECC_mapEccAggrReg
        SDL_OSAL_addrTranslate
            gOSAL_Interface->addrTranslate
                SDL_TEST_addrTranslate
                    CSL_ratDisableRegionTranslation
                        CSL_ratGetMaxRegions
                            CSL_REG32_FEXT

我需要以下方面的帮助:
1) 1)在 TDA4芯片上、我找到了名为 CSL_MCU_ARMSS_RAT_CFG_BASE 的 RAT 寄存器是否正确?
2) 2)我参考 SDL 编写的上述代码是否存在任何问题? 为什么它在 RAT 地址转换函数中挂起?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zhang、

    您能否分享 SDL_OSAL_init 的功能? 此 API 似乎不是来自 PDK。
    此外、请说明您正在使用的 SDK 版本?

    此致、
    Parth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Parth、

    SDL 在 RTOS SDK8.2链接: PROCESSOR-SDK-RTOS-J721E 软件开发套件(SDK)|德州仪器 TI.com 中提供 SDL_OSAL_init 函数。

    sdl/osal/src/sdl_osal.c
    
    int32_t SDL_OSAL_init(SDL_OSAL_Interface *osalInterface)
    {
        SDL_ErrType_t ret = SDL_PASS;
    
        if (osalInterface == NULL_PTR)
        {
            ret = SDL_EINVALID_PARAMS;
        }
        else
        {
            gOSAL_Interface = osalInterface;
        }
    
        return ret;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Parth、

    关于此主题,您能给我一些建议吗? 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    能否在主域 MCU 内核中访问基地址"CSL_MCU_ARMSS_RAT_CFG_BASE 0x40f90000U"?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据 TRM 8.4.1、我应该可以从主域中的 MCU 访问 RAT 模块。 在哪里可以找到它的基地址。

    从 pdk_jacinto_08_02_00_21/packages/ti/cSL/test/core-R5/core_r5_rat_test.c 的代码路径 中,似乎只定义了来自 MCU 域的地址访问。

    int32_t cslcore_r5_ratTest(void)
    {
        /* Declarations of variables */
        CSL_RatExceptionInfo  ratExceptionInfo;
        int32_t    testResult = CSL_APP_TEST_PASS;
    #if defined (SOC_AM65XX)
        CSL_ratRegs *pRatRegs = (CSL_ratRegs *)CSL_MCU_RAT_CFG_BASE;
    #elif defined (SOC_AM64X)
        CSL_ratRegs *pRatRegs = (CSL_ratRegs *) CSL_R5FSS0_RAT_CFG_BASE;
    #elif defined (SOC_J721E)
        CSL_ratRegs *pRatRegs = (CSL_ratRegs *) CSL_MCU_ARMSS_RAT_CFG_BASE;
    #elif defined (SOC_J7200)
        CSL_ratRegs *pRatRegs = (CSL_ratRegs *) CSL_MCU_R5FSS0_RAT_CFG_BASE;
    #else
        # error "RAT register BASE not defined"
    #endif
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    查看 TRM 文档、可以在使用 RAT 的模块中定义 RAT 寄存器基址。

    以主域 R5s 为例、基地址如下所示为0x0FF90000、请参见 TRM 代码段下方的(2)。

    SDK RTOS 8.2中的 MCU2_0 (R5主域)编码示例、可使用以下文件中的0x0FF90000基址查看。

    packages/ti/CSL/example/ospi/DDR_memory_daling_main_rtos.c

    此致、

    KB

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Kb。

    最恰当的考虑。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 KB:

    关于 ECC aggr 的另一个问题、我无法获取 ECC aggr ramnums。 第9行返回 pNumRams 为0。 我发现 pEccAggrRegs->STAT 可以被置位、也等于0。

    int32_t SDL_ecc_aggrGetNumRams(const SDL_ecc_aggrRegs *pEccAggrRegs, uint32_t *pNumRams)
    {
        int32_t    retVal = SDL_EBADARGS;
    
        if ( pEccAggrRegs != NULL_PTR )
        {
            if (pNumRams  != NULL_PTR)
            {
                *pNumRams = (uint32_t)SDL_REG32_FEXT(&pEccAggrRegs->STAT, ECC_AGGR_STAT_NUM_RAMS);
                 retVal   = SDL_PASS;
            }
        }
        /* Return the API success/fail with value in the address provided by caller */
        return (retVal);
    }

    您能就这个问题提供一些建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 KB:

    我调用 了在主域的 MCU 内核中的 SDL/示例文件名 ECC_TRIGGER.c 中定义的函数"ECC_funcTest"。  

    但它会将 RAM 的数量报告为0、如上所示。

    完整日志如下所示,您能告诉我代码的错误位置吗?

    [MCU3_0]      3.963121 s: CIO: Init ... Done !!!
    [MCU3_0]      3.963197 s: ### CPU Frequency = 1000000000 Hz
    [MCU3_0]      3.963238 s: APP: Init ... !!!
    [MCU3_0]      3.963264 s: SCICLIENT: Init ... !!!
    [MCU3_0]      3.963538 s: SCICLIENT: DMSC FW version [22.1.1--v2022.01 (Terrific Llam]
    [MCU3_0]      3.963586 s: SCICLIENT: DMSC FW revision 0x16
    [MCU3_0]      3.963635 s: SCICLIENT: DMSC FW ABI revision 3.1
    [MCU3_0]      3.963673 s: SCICLIENT: Init ... Done !!!
    [MCU3_0]      3.963702 s: MEM: Init ... !!!
    [MCU3_0]      3.963742 s: MEM: Created heap (DDR_SHARED_MEM, id=0, flags=0x00000004) @ db000000 of size 8388608 bytes !!!
    [MCU3_0]      3.963816 s: MEM: Init ... Done !!!
    [MCU3_0]      3.963843 s: IPC: Init ... !!!
    [MCU3_0]      3.963907 s: IPC: 8 CPUs participating in IPC !!!
    [MCU3_0]      3.985068 s: IPC: Init ... Done !!!
    [MCU3_0]      3.985136 s: APP: Syncing with 7 CPUs ... !!!
    [MCU3_0]      4.709536 s: APP: Syncing with 7 CPUs ... Done !!!
    [MCU3_0]      4.709580 s: REMOTE_SERVICE: Init ... !!!
    [MCU3_0]      4.711653 s: REMOTE_SERVICE: Init ... Done !!!
    [MCU3_0]      4.711738 s:  VX_ZONE_INIT:Enabled
    [MCU3_0]      4.711779 s:  VX_ZONE_ERROR:Enabled
    [MCU3_0]      4.711809 s:  VX_ZONE_WARNING:Enabled
    [MCU3_0]      4.712844 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:54] Added target IPU2-0
    [MCU3_0]      4.712909 s:  VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
    [MCU3_0]      4.712948 s: APP: OpenVX Target kernel init ... !!!
    [MCU3_0]      4.712982 s: APP: OpenVX Target kernel init ... Done !!!
    [MCU3_0]      4.713015 s: APP: Init ... Done !!!
    [MCU3_0]      4.714161 s:
    [MCU3_0]      4.714203 s:  ECC_Test_init: Init MCU ESM complete
    [MCU3_0]      4.761676 s: Ruifeng SDL_ECC_init 895 retVal = 0
    [MCU3_0]      4.761737 s: Ruifeng SDL_ECC_mapEccAggrReg 256
    [MCU3_0]      4.761788 s: Ruifeng SDL_ECC_mapRatEccAggrBaseAddress 221
    [MCU3_0]      4.761838 s: rat version = 1719677184
    [MCU3_0]      4.761883 s: Ruifeng CSL_ratConfigRegionTranslation 574
    [MCU3_0]      4.761932 s: Ruifeng CSL_ratConfigRegionTranslation 579
    [MCU3_0]      4.761988 s: Ruifeng CSL_ratValidateTranslationConfig 140 Input regionIndex = 1
    [MCU3_0]      4.762043 s: Ruifeng CSL_ratValidateTranslationConfig 143
    [MCU3_0]      4.762110 s: Ruifeng CSL_ratValidateTranslationConfig 158 (uint64_t)pTranslationCfg->baseAddress & (regionSize-1UL) = 0
    [MCU3_0]      4.762210 s: Ruifeng CSL_ratValidateTranslationConfig 160 translatedAddress = 0x4d20000000 regionSize = 0x400 (pTranslationCfg->translatedAddress     & (regionSize-1UL) = 0
    [MCU3_0]      4.762314 s: Ruifeng CSL_ratValidateTranslationConfig 162 CSL_ratIsRegionOverlap(pRatRegs, regionIndex, pTranslationCfg ) = 0
    [MCU3_0]      4.762384 s: Ruifeng CSL_ratConfigRegionTranslation 589
    [MCU3_0]      4.762432 s: Ruifeng CSL_ratConfigRegionTranslation 593
    [MCU3_0]      4.762478 s: Ruifeng CSL_ratConfigRegionTranslation 601
    [MCU3_0]      4.762536 s: Ruifeng CSL_ratValidateTranslationConfig 140 Input regionIndex = 1
    [MCU3_0]      4.762606 s: Ruifeng CSL_ratValidateTranslationConfig 158 (uint64_t)pTranslationCfg->baseAddress & (regionSize-1UL) = 0
    [MCU3_0]      4.762713 s: Ruifeng CSL_ratValidateTranslationConfig 160 translatedAddress = 0x4d20000000 regionSize = 0x400 (pTranslationCfg->translatedAddress     & (regionSize-1UL) = 0
    [MCU3_0]      4.762815 s: Ruifeng CSL_ratValidateTranslationConfig 162 CSL_ratIsRegionOverlap(pRatRegs, regionIndex, pTranslationCfg ) = 0
    [MCU3_0]      4.762893 s: Ruifeng CSL_ratConfigRegionTranslation 603 retVal = 1
    [MCU3_0]      4.762942 s: Ruifeng CSL_ratConfigRegionTranslation 609
    [MCU3_0]      4.762993 s: Ruifeng SDL_TEST_addrTranslate 266 result = 1
    [MCU3_0]      4.763042 s: Ruifeng SDL_ECC_mapRatEccAggrBaseAddress 223
    [MCU3_0]      4.763094 s: Ruifeng SDL_ECC_mapEccAggrReg 261 mapIdx = 0
    [MCU3_0]      4.763143 s: Ruifeng SDL_ECC_mapEccAggrReg 266
    [MCU3_0]      4.763188 s: Ruifeng SDL_ECC_mapEccAggrReg 271
    [MCU3_0]      4.763237 s: Ruifeng SDL_ECC_init 901 retVal = 0
    [MCU3_0]      4.763277 s: Ruifeng SDL_ECC_init 909
    [MCU3_0]      4.763319 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1536
    [MCU3_0]      4.763363 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1540
    [MCU3_0]      4.763410 s: Ruifeng SDL_ecc_aggrDisableIntrs 1489
    [MCU3_0]      4.763457 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 404
    [MCU3_0]      4.763504 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 410
    [MCU3_0]      4.763551 s: Ruifeng SDL_ecc_aggrGetNumRams 475
    [MCU3_0]      4.763594 s: Ruifeng SDL_ecc_aggrGetNumRams 478
    [MCU3_0]      4.763663 s: Ruifeng SDL_ecc_aggrGetNumRams 483 pEccAggrRegs->STAT = 0x0 *pNumRams = 0 retVal = 0
    [MCU3_0]      4.763722 s: Ruifeng SDL_ecc_aggrGetNumRams 487
    [MCU3_0]      4.763772 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 412 sdlRet = 0
    [MCU3_0]      4.763834 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 440 sdlRet = 0 retVal = 1
    [MCU3_0]      4.763891 s: Ruifeng SDL_ecc_aggrDisableIntrs 1494 operation = 1
    [MCU3_0]      4.763946 s: Ruifeng SDL_ecc_aggrDisableIntrs 1506 retVal = 0
    [MCU3_0]      4.763999 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1542 retVal = 0
    [MCU3_0]      4.764046 s: Ruifeng SDL_ecc_aggrDisableIntrs 1489
    [MCU3_0]      4.764091 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 404
    [MCU3_0]      4.764138 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 410
    [MCU3_0]      4.764182 s: Ruifeng SDL_ecc_aggrGetNumRams 475
    [MCU3_0]      4.764225 s: Ruifeng SDL_ecc_aggrGetNumRams 478
    [MCU3_0]      4.764287 s: Ruifeng SDL_ecc_aggrGetNumRams 483 pEccAggrRegs->STAT = 0x0 *pNumRams = 0 retVal = 0
    [MCU3_0]      4.764343 s: Ruifeng SDL_ecc_aggrGetNumRams 487
    [MCU3_0]      4.764391 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 412 sdlRet = 0
    [MCU3_0]      4.764451 s: Ruifeng SDL_ecc_aggrToggleIntrsEnable 440 sdlRet = 0 retVal = 1
    [MCU3_0]      4.764508 s: Ruifeng SDL_ecc_aggrDisableIntrs 1494 operation = 1
    [MCU3_0]      4.764559 s: Ruifeng SDL_ecc_aggrDisableIntrs 1506 retVal = 0
    [MCU3_0]      4.764619 s: Ruifeng SDL_ecc_aggrDisableAllIntrs 1548 retVal = 0
    [MCU3_0]      4.764669 s: Ruifeng SDL_ecc_aggrGetNumRams 475
    [MCU3_0]      4.764711 s: Ruifeng SDL_ecc_aggrGetNumRams 478
    [MCU3_0]      4.764774 s: Ruifeng SDL_ecc_aggrGetNumRams 483 pEccAggrRegs->STAT = 0x0 *pNumRams = 0 retVal = 0
    [MCU3_0]      4.764831 s: Ruifeng SDL_ecc_aggrGetNumRams 487
    [MCU3_0]      4.764889 s: Ruifeng SDL_ECC_init 916 sdlResult = 0 numMemRegions = 0
    [MCU3_0]      4.764943 s: Ruifeng SDL_ECC_init 919 sdlResult = 0
    [MCU3_0]      4.764991 s: Ruifeng SDL_ECC_init 922 retVal = -1
    [MCU3_0]      4.765041 s: Ruifeng SDL_ECC_init 944 retVal = -1
    [MCU3_0]      4.765088 s: Ruifeng SDL_ECC_init 954 retVal = -1
    [MCU3_0]      4.765137 s: Ruifeng SDL_ECC_init 1010 retVal = -1
    [MCU3_0]      4.869619 s: APP: Run ... !!!
    [MCU3_0]      4.869656 s: IPC: Starting echo test ...
    [MCU3_0]      4.873083 s: APP: Run ... Done !!!
    [MCU3_0]      4.874721 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] mcu3_0[s] mcu3_1[.] C66X_1[.] C66X_2[.] C7X_1[.]
    [MCU3_0]      4.874855 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] mcu3_0[s] mcu3_1[.] C66X_1[P] C66X_2[.] C7X_1[.]
    [MCU3_0]      4.874973 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] mcu3_0[s] mcu3_1[P] C66X_1[P] C66X_2[.] C7X_1[.]
    [MCU3_0]      4.875078 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] mcu3_0[s] mcu3_1[P] C66X_1[P] C66X_2[P] C7X_1[.]
    [MCU3_0]      4.875185 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] mcu3_0[s] mcu3_1[P] C66X_1[P] C66X_2[P] C7X_1[P]
    [MCU3_0]      4.902715 s: IPC: Echo status: mpu1_0[x] mcu2_0[P] mcu2_1[P] mcu3_0[s] mcu3_1[P] C66X_1[P] C66X_2[P] C7X_1[P]
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    TI 在 MCU 安全岛的 MCU1_0上测试 SDL 版本、通常 MCU1_0是 SDL 运行安全解决方案的预期位置。

    要使 代码在 MCU3_0上正常工作、但可能必须执行一些移植。   

    关于所述问题、系统的其余部分此时是否空闲、或者是否正在使用其他内核?

    谢谢、

    KB

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 KB:

    感谢您的回复。

    我们仍处于功能安全的开发阶段。 当出现上述问题时,系统中的大多数 CPU 都处于空闲状态。

    1) 1) ECC aggr RAM 编号是否等于0与 CPU 使用相关?
    2) 2)我们计划在主域的 mcu3_0上实施部分功能安全。 此设计是否可行且合理?
    3) 3)根据日志的打印、读取 ECC aggr 寄存器中的值为0。 在哪里可以看到每个 ECC AGG 的器件手册? 我应该如何继续进行下一次分析?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 KB:

    以上问题、请帮助检查、谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我发现这个主题开始介绍标题不一定包含的主题、而一些主题似乎与其他 e2e 主题重叠。

    (+) TDA4VM:TRM 中的 ECC aggr 类型应如何与 SDL 中的类型和子类型匹配? -处理器论坛-处理器- TI E2E 支持论坛

    是否已解决最初的"ECC 聚合器和 RAT"问题?  如果是、可以关闭此线程、并根据需要创建一个新线程以涵盖(1)(2)和(3)?

    谢谢、

    KB