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.

[参考译文] AM62A7:R5F ATCM 地址冲突会损坏 AM62A7 SDK v10.01.00.33​ 中的 HSM 入口点

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1499865/am62a7-r5f-atcm-address-conflict-corrupts-hsm-entry-point-in-am62a7-sdk-v10-01-00-33

器件型号:AM62A7

工具/软件:

尊敬的 TI:

从 SDK 9.2迁移到 SDK v10.01.00.33 (采用 HSM Care Package v00.08.00)时、我们遇到严重的 HSM 启动故障。 此问题最初在此处报告:AM62A7:AM62A7 SDK v10.01.00.33和 HSM care Package v00.08.00时 HSM 启动失败-处理器论坛-处理器- TI E2E 支持论坛。 经过调查、我已将问题追溯到 R5F ATCM 初始化中的更改、并找到了一种权变措施。 请看一下、提供一些见解。

1.问题描述 ​

HSM 无法开始执行(在无效操作码下捕获 0xE59FF018)。 调试显示 ​HSM 入口点(0x43C00000UL) ​在 R5F ATCM 初始化期间损坏。


​2.原因分析 ​

  • bootloader_socGetR5fAtcmAddrAndSize ()  在 SDK v10.01.00.33中使用 ​​CSL_WKUP_R5FSS0_ATCM_BASE (0x0) ​​而不是 ​​CSL_WKUP_R5FSS0_CORE0_ATCM_BASE (0x78000000UL) ​​

      

  • 然后导致错误的初始化​​:

      

  • 将 R5F 异常向量写入 0x0 ​​别名到 HSM 入口点(0x43C00000UL) ​(不确定原因、请确认)。
  • HSM 的原始入口代码(位于0x43C00000UL)被 R5F 向量覆盖、CPU 释放后、会在无效的操作码 0xE59FF018处捕获 .

      


​3.变通办法 ​

  • 我们注意到 SDK 9.2使用了 CSL_WKUP_R5FSS0_CORE0_ATCM_BASE (0x78000000UL) 、并且不会出现此问题。
  • 更换 CSL_WKUP_R5FSS0_ATCM_BASE 一方 CSL_WKUP_R5FSS0_CORE0_ATCM_BASE 指定 bootloader_socGetR5fAtcmAddrAndSize 重新编译 libs 可以防止我们观察到的所有启动级别问题。

4.问题

  • 切换到的预期目的是什么  CSL_WKUP_R5FSS0_ATCM_BASE (0x0) in SDK v10.01.00.33?  我们注意到 SDK v11.00.00.16也使用此 宏- TI 是否在发布前验证了这不会在较新的 SDK 中导致 HSM 故障?
  • 是我们的权变措施(恢复到  CORE0_ATCM_BASE )确保生产安全、还是 TI 会发布官方修复程序?
  • 为什么写入0x0会影响0x43C00000UL? 这是预期行为吗?

感谢您及时关注此阻止问题。

此致、
Frank Yang

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

    您好 Frank、

    请给我1-2天时间来检查一下、然后再回复您。

    此致、
    会面。

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

    您好 Frank、

    这在 MCU+SDK 版本09.02.01中进行了更改、请查看版本说明 https://software-dl.ti.com/mcu-plus-sdk/esd/AM62AX/10_01_00_33/exports/docs/api_guide_am62ax/RELEASE_NOTES_09_02_01_PAGE.html#autotoc_md94中的已修复问题中的 SITSW-4337

    之前的 Bootloader_socInitR5FATcmBtcm 函数使用全局 ATCM 地址(CSL_WKUP_R5FSS0_CORE0_ATCM_BASE)、导致 CBASS 错误、因此修复了这一问题以使用 R5本地地址(​​CSL_WKUP_R5FSS0_ATCM_BASE)。

    我不知道为什么这会影响 HSM 入口点处的代码:

    Unknown 说:
    HSM 0x43C00000UL 的原始条目代码被 R5F 向量覆盖、CPU 释放后、它被捕获到无效的操作码 0xE59FF018

    您能告诉我、您是如何确认0x43C00000处的原始入口代码正在被 R5F 向量覆盖的?

    此致、

    会面。

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

    大家好、

    感谢您的答复。 以下是您问题的答案:

    ​第一个问题: ​
    我们观察到 0x0 0x43C00000地址写入 R5F 别名这种.行为是意外的、需要进一步调查。 TI 或许可以确认这一点?

    ​第二个问题: ​
    为确认处的原始入口代码 0x43C00000UL 正在被 R5F 向量覆盖、我们执行了以下步骤:

    1. 转换后的 HS-SE 器件状态:​​我们确保已正确转换 HS-SE 器件状态以允许访问 HSM。
    2. 解锁 HSM 内核: ​​我们通过每次上电后通过 A 内核传输必要的证书来解锁 HSM 内核。
    3. ​将 CCS 连接到 HSM: ​​我们将 CCS 连接到 HSM 以监控其状态。
    4. ​调试: ​​我们观察到 HSM 上的 PC 寄存器包含  0xE59FF018。 这实际上是我们能够跟踪回 R5F 矢量的原因。

    关于  CBASS 错误、该错误可能会产生什么影响? 目前、我们的客户必须使用前面的方法来确保可以启动 HSM、我们需要告知他们这种影响。

    感谢您关注此问题、并希望此信息有助于了解根本原因。

    此致、
    Frank Yang

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

    您好 Frank、

    我还观察到 GSOC_r5fVectors 在 0x43C00000处被写入、我正在进一步寻找相同的原因。

    关于  CBASS 错误、该错误可能会产生什么影响

    请参阅以下相同版本:(+) AM625:SBL 中的 CBASS 互连错误- Bosch Sitara MPU 论坛- Bosch - TI 汽车处理器- TI E2E 支持论坛

    此致、

    会面。

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

    尊敬的会议:

    您分享的页面不存在。 您能否确认 并更新新链接?

    此致、

    Frank

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

    您好 Frank、

    对不起,这篇文章只是报告了一个 CBASS 错误,由于  bootloader_socGetR5fAtcmAddrAndSize  使用全局 TCM 地址(0x78000000)而不是本地地址(0x0)。 TRM 中也提到了以下内容:

    因此、不建议将该地址更改为全局地址(0x78000000)。

    此致、

    会面。

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

    尊敬的会议:

    感谢您的分享。 但是、为了确保 HSM 能够正确引导、目前我们必须回滚到旧地址。 是否有其他方法可以解决此问题? 如果不是、是否有正式固定的时间表?

    此致、

    Yang

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

    您好 Frank、

    我浏览了文档、SBL 的链接器命令文件必须将向量放置在地址0x43C00000处、这是 SBL 的入口点、这也是在 SDK v9.2中完成的、因此我不认为这是意外的、请参阅以下地址: https://software-dl.ti.com/mcu-plus-sdk/esd/AM62AX/09_02_00_38/exports/docs/api_guide_am62ax/BOOTFLOW_GUIDE.html#autotoc_md138

    如果您在 SDK v9.2中使用 SBL、能否检查在地址0x43C00000处观察到什么情况?

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

    尊敬的会议:

    我认为问题是 0x43C00000也是 HSM 条目(检查 CSL_SMS0_HSM_SRAM0_0_BASE)? 在 SDK v9.2中、R5向量被写入 0x78000000、因此我们没有看到这个问题。

    此致、

    Yang

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

    您好 Frank、

    对于 AM62Ax 器件、ROM 会将 SBL 阶段1加载到 HSM SRAM (从0x43C00000开始)中、因此链接器发出的向量会复制到该位置。 在 MCU+SDK 9.2版中也遵循了相同的规则、因此在这个版本中、引导矢量也应写入0x43C00000。 TRM 中也提到了这一点:

    请参阅引导流程指南: https://software-dl.ti.com/mcu-plus-sdk/esd/AM62AX/10_01_00_33/exports/docs/api_guide_am62ax/SBL_BOOTING_LINUX_OSPI.html 这里的 SBL 1级将2级加载到 DDR、从而使 HSM RAM 免费并且可以加载 HSM 应用程序。 如果您尝试在 SBL stage-1完成执行之前加载 HSM appimage、则可能会造成这个问题。 如何加载 HSM appimage? 如果您使用默认的 SBL 引导流、则不会产生任何问题。

    此致、

    会面。

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

    尊敬的会议:

    我们使用默认的 SBL 引导流程。

    在 SBL 阶段2期间、 App_loadImages 将首先处理 HSM 映像、写入 0x43C00000。 然后它 加载 C75、A53和最后的内核 R5、在加载 R5期间、它将 R5向量写入地址0x0、 也会重新写入0x43C00000 。 因此、当 SBL 进入 负责运行 HSM 的 App_runCpus 时、HSM 0x43C00000的入口点已经用 R5向量重新写入。

    这是客户和我们遇到的问题。 您能否在您的最终验证这一点?

    此致、

    Yang

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

    您好:

    这是一个有效的错误。 地址0x0确实被别名为地址0x43C00000、因此这段代码实际上会覆盖已加载 HSM 固件的初始字节。

    您可以应用以下补丁来跳过加载任何不需要的 R5F 向量、因为向量是映像本身的一部分(.vectors 段)并会相应地加载。  

    diff --git a/source/drivers/bootloader/soc/am62ax/bootloader_soc.c b/source/drivers/bootloader/soc/am62ax/bootloader_soc.c
    index fc38c7f..646c0de 100644
    --- a/source/drivers/bootloader/soc/am62ax/bootloader_soc.c
    +++ b/source/drivers/bootloader/soc/am62ax/bootloader_soc.c
    @@ -476,7 +476,7 @@ void Bootloader_socInitR5FAtcmBtcm(uint32_t cpuId)
             pAddr = (volatile uint32_t *)addr;
             for(i=0; i< sizeof(gSOC_r5fVectors)/sizeof(uint32_t); i++)
             {
    -            pAddr[i] = gSOC_r5fVectors[i];
    +            pAddr[i];
             }
         }
         Bootloader_socGetR5fBtcmAddrAndSize(cpuId, &addr, &size);
    

    此致、

    Prashant