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.
您好!
使用的是哪种 SDK? 您能否提供重现问题的步骤、以及您可能进行的任何代码更改? 您还可以 逐步执行代码序列、以识别 ECC_init 中发生错误的位置吗?
此致、
约西塔
我的步骤:
执行 SDL_osal 初始化。
2.启动 A72内核完成,A72 UART 日志显示 A72登录界面。
3.延迟10s。
4.执行 A72外壳初始化,此时我不设置 SCI 电源运行,我认为 A72启动已经完成。
在 A72 INIT 的情况下、将在 RAT 映射后操作 ECC 寄存器。
MCU1_0进入数据中止状态。
您好!
我将尝试重现此问题并在下周前与您联系。
此致、
约西塔
您好、专家:
使用 TDA4VH SDK8.6
您好!
谢谢、我将使用相同的设置来重现问题。
此致、
约西塔
您好!
您使用哪个引导应用程序来引导 A72内核? 引导应用程序是作为 SDK 8.6的一部分发布的吗?
此致、
约西塔
Josiitaa,
是的、它使用 SBL+CAN 引导应用程序并使用 CAN 引导应用程序引导其他内核。
尊敬的 Kangjia:
A72 ECC 初始化后、我将尝试通过 CAN Boot App 启动到 Linux 内核、并在本周结束前与您联系。
此致、
约西塔
尊敬的 Josietaa:
尊敬的 Kangjia:
当 A72内核上电以进行 ECC 初始化时、触发了 Linux 内核问题。 您对代码所做的更改不会影响 A72内核的电源序列。 这是客户的最终要求吗?
此致、
约西塔
康佳您好:
1.我们使用 SDK 9.1、这部分代码包含在引导应用程序中。 我们观察到 ecc_init 的返回值、发现所有返回值都是-1、这意味着 ECC 初始化失败。
int32_t main(void) { Board_initCfg boardCfg; uint32_t ret = CSL_PASS; TaskP_Params bootTaskParams; int32_t retValue = SDL_PASS; boardCfg = BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_UART_STDIO; Board_init(boardCfg); OS_init(); ret = BootApp_SetupSciServer(); if(ret != CSL_PASS) { UART_printf("\nFailed to setup sciserver for boot app\r\n"); OS_stop(); } BootApp_ArmR5PmuCntrInit(); UART_printf("[xxx] Compiled on %s %s\n", __DATE__, __TIME__); UART_printf("SDL_ECC_init start\r\n"); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG0_ARM_COREPAC_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P0_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_COREPAC_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG0_ARM_CORE0_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P0_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_CPU0_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG0_ARM_CORE1_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P0_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_CPU1_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG0_ARM_CORE2_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P0_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_CPU2_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG0_ARM_CORE3_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P0_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_CPU3_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG1_ARM_COREPAC_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P1_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_COREPAC_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG1_ARM_CORE0_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P1_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_CPU0_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG1_ARM_CORE1_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P1_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_CPU1_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG1_ARM_CORE2_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P1_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_CPU2_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); retValue = SDL_ECC_init(SDL_COMPUTE_CLUSTER0_CFG1_ARM_CORE3_ECC_AGGR,&ECC_Test_SDL_COMPUTE_CLUSTER0_COMPUTE_CLUSTER_J7AHP_P1_A72_QUAD_2MB_A72_QUAD_MID_ECC_AGGR_CPU3_initConfig); UART_printf("line %d , retValue = %d\r\n",__LINE__, retValue); UART_printf("SDL_ECC_init end\r\n"); UART_printf("\nMCU R5F App started at %d usecs\r\n", BootApp_GetTimeInMicroSec(CSL_armR5PmuReadCntr(CSL_ARM_R5_PMU_CYCLE_COUNTER_NUM))); /* Initialize the task params */ TaskP_Params_init(&bootTaskParams); bootTaskParams.priority = BOOT_TASK_PRIORITY; bootTaskParams.stack = gBootAppTaskStack; bootTaskParams.stacksize = sizeof (gBootAppTaskStack); gbootTask = TaskP_create(&BootApp_TaskFxn, &bootTaskParams); if (NULL == gbootTask) { UART_printf("\nBoot Task creation failed\r\n"); OS_stop(); } OS_start(); /* does not return */ return(0); }
2. 我们不仅需要 ECC_init 函数,而且还需要 在初始化后运行相应的测试。
()
尊敬的 Kangjia:
是的、我认为 ECC 初始化会失败、因为您没有为 A72内核上电进行测试。 如果您在 SDL 中参阅 ecc_func_app、您会看到在 ECC 初始化之前、Sciclient_pmSetModuleState API 用于内核上电、然后初始化 ESM 模块和 ECC 回调。 我已将测试应用程序作为单个 API 调用添加到引导应用程序中、并测试了 A72的 ECC 初始化和 ECC 自检通过。
问题是、这会使 A72内核在 Boot App 中处于无法使用的状态、因此 Linux 内核流程会受到阻碍。 以前未执行过此操作、我们没有任何验证或文档可以帮助我们完成此操作。 它本质上是一种独立的功能开发。
此致、
约西塔
尊敬的 Kangjia:
根据与内部团队的讨论和多个实验、我们注意到、在 BootApp 将 A72内核上电以执行 ECC 测试之前、A72保持更改状态。 这可能需要复位。 在 A72内核由 BootApp 上电后、我们将测试其他一些可能的权变措施来包括 A72的 ECC、并检查是否可以避免复位。
我们没有为该修复程序定义时间表、但您可以参考此链接以获取内部跟踪信息以及有关该问题的任何其他更新:jira.itg.ti.com/.../JACINTOREQ-7538
此致、
约西塔