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.

[参考译文] TDA4VP-Q1:R5F.CPU5:通过配置 R5F 控制寄存器 (SCTRL) 来配置 R5F CPU 以陷阱非法指令

Guru**** 2550030 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1554921/tda4vp-q1-r5f-cpu5-configuring-the-r5f-cpu-to-trap-illegal-instructions-by-configuring-the-r5f-control-register-sctrl

器件型号:TDA4VP-Q1


工具/软件:

我正在使用以下代码片段启用零分频异常:

静态空 CSL_armR5EnableDZ_SCTLR (void)

_ASM__ volatile (
“MRC P15、0、r0、C1、c0、 0\n“//读取 SCTLR
“Orr r0、r0、#(1 << 19)\n“//设置 DZ 位
“MCR P15、0、r0、C1、c0、 0\n“//写回 SCTLR
“BX LR\n“//返回
);

静态空 CSL_armR5EnableExceptions_FPSCR (void)

_ASM__ volatile (
“VMRS r0、FPSCR\n“//读取 FPSCR
“BIC r0、r0、#(0x1F << 8)\n“//将位 8 清零至 12
“VMSR FPSCR, r0\n“//写回 FPSCR
“BX LR\n“//返回
);

我们有两个观察结果

案例 1: 这部分代码是 最初添加了 r5_startup.asm 调用的函数。 不幸的是,在启动过程中,我们观察到异常并中止启动文件的闪烁,尤其是当刷新 tispl 文件时。  下面添加了异常的 PFA

注意: BL31:v2.11.0(发行版):v2.11.0-906-g58b25570c
通知: BL31:建造时间:2025 年 2 月 18 日 16:22:30
错误:  等待线程 SP_RESPONSE 填充时超时
错误:  线程 SP_RESPONSE 验证失败(–60)
错误:  消息接收失败(–60)
错误:  获取响应失败(–60)
错误:  传输发送失败(–60)
错误:  无法查询固件功能(–60)
I/O TC:
I/GNU:OP-TEE 版本:4.4.0 (gcc 版本 11.3.1 20220712 (TC Toolchain 11..Rel1))#1 星期二 2 月 18 日 15:21:35 UTC 2025 Aarch64
I/OP-TEE:警告:此 TC 配置可能不安全!
TC:警告:请访问 https://optee.readthedocs.io/en/latest/architectureporting_guidelines.html
I/O:主 TC 初始化
I/GIC:未提供 TC 转销商基地址
I/GIC:假定默认的 TC 组状态和修饰符
E/队 列:0 k3_sec_proxy_verify_thread:108 TC 正忙
e / TC:0 k3_sec_proxy_recv:196 线程 SEC_proxy_response_thread 验证失败。 RET =–65523
E/ESP TC:0 ti_sci_get_response:101 消息接收失败(–65523)
E/sci_do_xfer TC:150 获取响应失败(–65523)
e/ti_sci_init TC:486 无法与控制固件通信(–65523)
E/0x00070038:0 do_init_calls:22 eary_initcall __text_start + TC 失败
I/UL:已激活 TC 设备
E/队 列:0 k3_sec_proxy_verify_thread:108 TC 正忙
e / TC:0 k3_sec_proxy_recv:196 线程 SEC_proxy_response_thread 验证失败。 RET =–65523
E/ESP TC:0 ti_sci_get_response:101 消息接收失败(–65523)
E/sci_do_xfer TC:150 获取响应失败(–65523)
E/队 列:0 k3_sec_proxy_verify_thread:108 TC 正忙
e / TC:0 k3_sec_proxy_recv:196 线程 SEC_proxy_response_thread 验证失败。 RET =–65523
E/ESP TC:0 ti_sci_get_response:101 消息接收失败(–65523)
E/sci_do_xfer TC:150 获取响应失败(–65523)
E/TRNG:0 sa2ul_init:106 无法更改 TC 防火墙所有者
e/0x0000 do_init_calls:22 service_initcall __text_start + TC 0x000703a0 失败
E/队 列:0 k3_sec_proxy_verify_thread:108 TC 正忙
e / TC:0 k3_sec_proxy_recv:196 线程 SEC_proxy_response_thread 验证失败。 RET =–65523
E/ESP TC:0 ti_sci_get_response:101 消息接收失败(–65523)
E/sci_do_xfer TC:150 获取响应失败(–65523)
E/队 列:0 k3_sec_proxy_verify_thread:108 TC 正忙
e / TC:0 k3_sec_proxy_recv:196 线程 SEC_proxy_response_thread 验证失败。 RET =–65523
E/ESP TC:0 ti_sci_get_response:101 消息接收失败(–65523)
E/sci_do_xfer TC:150 获取响应失败(–65523)
E/队 列:0 k3_sec_proxy_verify_thread:108 TC 正忙
e / TC:0 k3_sec_proxy_recv:196 线程 SEC_proxy_response_thread 验证失败。 RET =–65523
E/ESP TC:0 ti_sci_get_response:101 消息接收失败(–65523)
E/sci_do_xfer TC:150 获取响应失败(–65523)
E/HUK:0 TEE_OTP_GET_HW_UNIQUE_KEY:103 无法获取 TC
E/0x000703c8:0 do_init_calls:22 service_initcall __text_start + TC failed
E/SupportAssist TC:0 0
E/0x14 TC:0 地址处的内核数据中止(转换故障)
E/ESR:0 0 TC 0x96000005 tbr0 0x9e8a5000  tbr1 0x00000000  CIDR 0x0
E/CPUR:0 0 TC #0         CPSR 0x600003c4
E/x0 TC:0 x0 000000009e874000 x1 000000000000
E/00000000 TC:0 x2 0000000000000000 x3 0000000000000000  
e / TC:0 x4 0000000000000030 x5 000000009e873da8  
e/x6 TC:0 0 x6 000000009e85bb58 x7 00000000ffffffff  
E/x8 TC:0 x8 0000000000000008 x9 000000009e8af140  
E/00000008 TC:0 x 10 00000000000004ac x 11 0000000000000008
E/X12:0 0 x12 0000000000000020 TC 13 000000009e8af0d0
E/00000000:0 x 14 TC 000000000000 x 15 0000000000000000
E/X17 0000000000000000:0 x16 000000009e81be9c TC
E/00000000 TC:0 x 18 000000000000 x 19 000000009e8af420
e / TC:0 x 20 000000009e8af428 x 21 000000009e874000
E/000000 TC:0 x 22 000000009e874000 x 23 000000009e874ed8
E/00000000 TC:0 x 24 000000009e873de0 x 25 000000000000
E/00000000:0 x 26 0000000000000000 TC 27 0000000000000000
E/00000000 TC:0 x 28 0000000000000000 x 29 000000009e8af390
E/ELR:0 TC:0 X30 000000009e81667b0 ELR 00009e8166c0
e/0 TC sp_el0 00009e8af390
E/TEE:0 TC 加载地址@ 0x9e800000
E/Call Stack:0 0 TC:
E/0x9e8166c0:0 TC  
E/0x9e807c90:0 0 TC  
E/8219a4 TC:0 0x9e8219a4
E/ARK/ARM/kernel/abort.c TC:582 处出现紧急“未处理的可分页中止“
E/TEE:0 TC 加载地址@ 0x9e800000
E/Call Stack:0 0 TC:
E/0x9e8080 TC:0 0 0x9e80ac
E/0x9e81e414 TC:0 0 0x9e81e414
E/0x9e807858:0 TC:0 0x9e807858
E/0x9e804a6c TC:0 0 0x9e804a6c

案例 2: 当代码被移动时  从 asm 到 c 文件  、它在 AppInit 之后和 appRun 之前调用。 我看到 tiboot3、tispl 文件已刷写、但会阻止我们刷写 uboot。  

问题:

我们的关注:

  1. 是否应在启动代码期间通过 asm 文件或 c 文件(当前实现)启用它?
  2. 为什么在任何一种情况下引导文件中止刷新的原因可能是什么?

如果需要考虑任何执行问题、请向我们提出建议。

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

    您好、

    我会更仔细地研究一下、然后再回来联系您。

    此致、

    Karthik

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

    您好、

    如果实施需要考虑任何问题、请向我们提出建议

    请解释一下 RTOS 到 Linux 切换的引导流程。 另外、您是否要确认您使用的是 PROCESSOR-SDK-LINUX-J784S4 还是 PROCESSOR-SDK-RTOS-J784S4?

    此致、

    Karthik

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

    您好、我们使用的 是 Linux-J784S4、 只有 uboot 来自 PROCESSOR-SDK-RTOS PSDK

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

    您好、

    您好 、我们使用的 是 Linux-J784S4、只有 uboot 来自 PROCESSOR-SDK-RTOS PSD

    您能解释一下 RTOS 到 Linux 切换的引导流程。 您还遵循了任何 TI 文档吗? 如果是、请您与我分享该文档吗?

    此致、

    Karthik

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

    “ 您也遵循了任何 TI 文档吗?  “  你指的是哪一个? 引导流程或启用 DZ?

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

    您好、

    https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/psdk_rtos/docs/user_guide/developer_notes_bootloaders.html

    对 EMI 进行优化。
    Linux 引导加载程序用于加载 SPL 和 uboot。

    我们将 tiboot3 -->tispl-->uboot entry tiny QNX 刷写到 eMMC 区域中刷写 QNX 映像。 流量与部分中给出的值非常相似  3.1.1.4.引导流程 文中所述

    https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-sk-tda4vm/latest/exports/docs/linux/Foundational_Components /U-Boot/UG-General-Info.html

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

    您好、

    ]我们将 tiboot3 -->tispl-->uboot entry tiny QNX 刷写到 eMMC 区域中刷写 QNX 映像。 流量与部分中给出的值非常相似  3.1.1.4.引导流程 在下面的链接

    我会在内部进行检查、然后返回给您。

    此致、

    Karthik

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

    您好、
    您可以在 AppInit 之前尝试调用它吗? 此外、您能告诉我 您的应用代码在哪个核心上运行吗?

    此致、

    Karthik

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

    MCU R5F 内核。 案例 1 :它是在 AppInit 之前的 MpuInit 中完成启用(调用)的位置  

    _enable_mpu();/*启用 MPU */
    enable_cache();/*启用所有缓存*/
    CSL_armR5StartupFPuEnable( 1 );/*启用 FPU */
    CSL_armR5StartupIntrEnableVic (1);/*启用 VIC */
    /*----------------------------------------------------
    在 SCTLR - COA-36166 中启用零分频陷阱
    ------------------------------------------------ */
    CSL_armR5EnableDZ_SCTLR ();

    /*----------------------------------------------------
    在 FPSCR 中启用浮点异常
    IDE(位 0)、OFE(位 3)、UFE(位 4)- COA-36166
    ------------------------------------------------ */

    CSL_armR5EnableExceptions_FPSCR ();

    ...

    不过 在 AppInit 之后调用除以零误差。

    static bool selfest_divByZero (void){

    Bool RetVal = false;
    易失性 uint8_t divByZero Nu_Check = 108U;
    易失性 uint8_t divByZero Dn_Check = 0U;
    易失性 uint8_t checkResult = 0U;
    Volatile uint32_t tempResult =(uint32_t) divByZero Nu_Check /(uint32_t) divByZero Dn_Check;
    retval = true;
    返回 RetVal;
    }

    我们还应该检查这方面的哪些内容?

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

    您好、

    仅供参考、MCU1_0 是器件管理器内核、负责 SoC 的资源和电源管理器。

    如果 MCU1_0 未运行、来自其他内核的资源请求将不会得到处理、因此、资源请求将出现故障、内核处于挂起状态或根据运行的应用进入错误状态。  

    以上案例 1:
    如果您在启动时添加异常代码、则会将移动 MCU1_0 加载到异常状态、并且 ATF 发出资源/电源请求、OPTEE 将不会得到处理、导致发生超时、不会引导。

    案例 2:
    在应用程序主任务中放置异常代码的位置、直到这时、如果 SciServer 任务的优先级较高、MCU1_0 开始处理资源请求、并且当从它们观察到异常停止响应远程核心资源/电源请求时、MCU1_0 才会开始处理资源请求。

    如果您想进行任何实验、建议执行其他内核、而不是使用 MCU1_0 内核。

    此致、
    Sudheer

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

    您好 Doredla Sudheer Kumar 

    我们正在努力实现以下安全要求、而不是任何其他实验:

    R5F.CPU5 — 非法操作和指令陷入
    R5F CPU 内核包括对非法操作的诊断和可提供安全的指令
    机制。 其中许多陷阱在复位后未启用、必须由软件进行配置。
    为了支持硬件非法操作和指令陷入、安装软件句柄非常重要
    推荐。

    考虑 R5F.CPU5、它可能处于开启状态 MCU1-0 你认为我们是否必须对实施作出改变?  请告诉我。

    当前实施的方案如下:

    • 在启动或集成代码中启用 DZ 位和 FPSCR
    • 注册 R5F 的异常处理程序
    • 对零除法执行自检(如上所述)  selftest_divByZero )
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    [引述 userid=“661229" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1554921/tda4vp-q1-r5f-cpu5-configuring-the-r5f-cpu-to-trap-illegal-instructions-by-configuring-the-r5f-control-register-sctrl/6001336

    R5F.CPU5 — 非法操作和指令陷入
    R5F CPU 内核包括对非法操作的诊断和可提供安全的指令
    机制。 其中许多陷阱在复位后未启用、必须由软件进行配置。
    为了支持硬件非法操作和指令陷入、安装软件句柄非常重要
    推荐。

    考虑 R5F.CPU5、它可能处于开启状态 MCU1-0 你认为我们是否必须对实施作出改变?  请告诉我。

    当前实施的方案如下:

    • 在启动或集成代码中启用 DZ 位和 FPSCR
    • 注册 R5F 的异常处理程序
    • 对零除法执行自检(如上所述)  selftest_divByZero )
    [/报价]

    可以执行安全要求并进行预先自检以进行确认。

    请注意、MCU1_0 负责 SoC 中所有内核的资源/电源管理器。 这会导致在执行自检时引导失败。

    您的查询与引导影响的原因有关、以上是说明。

    我希望您的 疑问现在已经得到解决。 如果您有任何疑问、请创建一个包含更多详细信息的新主题。

    此致、
    Sudheer

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

     Doredla Sudheer Kumar  我认为查询和上下文仍然是一样的。  

    1.如果它影响引导,发生异常,我们该如何继续刷新?

    2.我们应该在哪里处理这个实现是在启动还是集成代码?

    我们的问题是、由于该实现例外、我们无法继续进行刷写。

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

     Doredla Sudheer Kumar  我认为查询和上下文仍然是一样的。  

    1.如果它影响引导,发生异常,我们该如何继续刷新?

    2.我们应该在哪里处理这个实现是在启动还是集成代码?

    我们的问题是、由于该实现例外、我们无法继续进行刷写。

    打开了一个新线程  
    e2e.ti.com/.../tda4vp-q1-r5f-cpu5-configuring-the-r5f-cpu-to-trap-illegal-instructions-by-configuring-the-r5f-control-register-sctrl

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

    您好、

    [引述 userid=“661229" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1554921/tda4vp-q1-r5f-cpu5-configuring-the-r5f-cpu-to-trap-illegal-instructions-by-configuring-the-r5f-control-register-sctrl/6001867

    1.如果它影响引导,发生异常,我们该如何继续刷新?

    2.我们应该在哪里处理这个实现是在启动还是集成代码?

    我们的问题是、由于该实现例外、我们无法继续进行刷写。

    [/报价]

    预计在运行时不会观察到这些错误。 如果任何此类错误内核将进入中止状态。

    如果要处理异常并 恢复到原始应用程序、则已从自定义 ISR 实现恢复。

    如果未实现恢复、则内核预计会自行恢复、并将为来自其他内核的资源/电源管理请求提供服务。

    在上面的自检中、您只是触发异常。 但是、除非出现真正的问题、否则不会实时发生。
    此外、您还没有实施恢复机制来恢复内核并运行应用程序、这里的内核例外、由自检引入。

    不建议进行此自检。 默认异常会映射到异常处理程序、只有在实时观察到任何异常时、内核才会等待该异常。

    请更正所需的线程请求和信息、以了解如何从异常中恢复。 但是、一旦检测到异常处于不良状态、就不建议根据安全标准进行操作。  

    我希望我们能结束这一主题。


    此致、
    Sudheer