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.

[参考译文] AM6442:HS-SE 上的 EnetLLD 和 PKTDMA 存在防火墙问题

Guru**** 2484615 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1439138/am6442-firewall-issues-with-enetlld-and-pktdma-on-hs-se

器件型号:AM6442

工具与软件:

尊敬的 TI 团队:

我们正在开发一个在运行 FreeRTOS 的 R5内核上利用 EnetLLD 的应用。

该应用程序在运行 FS 并与 R5f 上的代码并行的 HS-Linux 器件上运行良好、但在 HS-SE 器件上失败。

在我们尝试传输数据包后、我们会遇到防火墙15的防火墙例外:

44043000: 30327830 30303038 300a3030 38303278                0x20800000.0x208
44043010: 30303030 57460a31 6942204c 30202074                00001.FWL Bit  0
44043020: 450a3078 70656378 6e6f6974 64646120                x0.Exception add
44043030: 30202072 42353478 30303830 57460a30                r  0x45B08000.FW
44043040: 7845204c 74706563 206e6f69 31783020                L Exception  0x1
44043050: 46303030 200a3030 30367830 0a303030                000F00. 0x60000.
44043060: 37783020 37343030 0a303839 30783020                 0x70047980. 0x0
44043070: 7830200a 30313238 200a3030 0a387830                . 0x821000. 0x8.
44043080: 4c57460a 74694220 78302020 78450a30                .FWL Bit  0x0.Ex
44043090: 74706563 206e6f69 72646461 78302020                ception addr  0x
440430a0: 30423534 30303038 4c57460a 63784520                45B08000.FWL Exc
440430b0: 69747065 20206e6f 30317830 30463030                eption  0x1000F0
440430c0: 30200a30 30303678 200a3030 30377830                0. 0x60000. 0x70
440430d0: 39373430 200a3038 0a307830 38783020                047980. 0x0. 0x8
440430e0: 30303132 30200a30 0a0a3878 00000003                21000. 0x8......

https://downloads.ti.com/tisci/esd/latest/6_topic_user_guides/firewall_faq.html#how-do-i-debug-firewall-issues 之后的解码消息

1 FWL Bit  0x0
2 Exception addr  0x45B08000
3 FWL Exception  0x1000F00
4 0x60000
5 0x70047980.
6 0x0.
7 0x821000.
8 0x8

该防火墙异常似乎是 读取 来自地址0x70047980的总地址为8字节、具有 priv_id 0;路由 ID 130。

`发现异常中的` priv_id`适用于0、对应于 MUPSDK 中` firewall.h `头文件中的` PRIVID_NONE 、该例外设置不适用于 priv-id 列表(downloads.ti.com/.../firewalls.html

同样地、TRM 中未记录路由 ID (0x82、十进制130)(第3.7章、表3-3):

防火墙配置

经检查、我们看到防火墙15配置如下(在 HS-SE 器件上):

FWL 15 region 0:
  fwl_id             = 0x000f
  region             = 0x0000
  n_permission_regs  = 0x00000003
  control            = 0x0000030a
  permissions[0]     = 0x00c3bbbb
  permissions[1]     = 0x00000000
  permissions[2]     = 0x00000000
  start_address[:32] = 0x70040000
  end_address[:32]   = 0x7007ffff
FWL 15 region 1:
  fwl_id             = 0x000f
  region             = 0x0001
  n_permission_regs  = 0x00000003
  control            = 0x00000000
  permissions[0]     = 0x00ca3333
  permissions[1]     = 0x00000000
  permissions[2]     = 0x00c32222
  start_address[:32] = 0x70040000
  end_address[:32]   = 0x7007ffff
FWL 15 region 2:
  fwl_id             = 0x000f
  region             = 0x0002
  n_permission_regs  = 0x00000003
  control            = 0x00000000
  permissions[0]     = 0x00000000
  permissions[1]     = 0x00000000
  permissions[2]     = 0x00000000
  start_address[:32] = 0x00000000
  end_address[:32]   = 0x00000fff
FWL 15 region 3:
  fwl_id             = 0x000f
  region             = 0x0003
  n_permission_regs  = 0x00000003
  control            = 0x00000000
  permissions[0]     = 0x00000000
  permissions[1]     = 0x00000000
  permissions[2]     = 0x00000000
  start_address[:32] = 0x00000000
  end_address[:32]   = 0x00000fff

  • 环形存储器位于 MSRAM 中的地址0x70047980处、该地址位于防火墙15区域0和1保护的地址范围内。
    • 从 A53写入环形存储器的操作有效
    • 写入 RA 门铃看起来不会自行触发固件异常、因为异常是 A 读取
  • 默认情况下启用区域0 (如 CONTROL 寄存器所示)、并将防火墙权限设置为`allow_everyone`(0xC3)。 但是、`priv_id` of `none`似乎不被认为是的一部分
    `每个人`、这可能导致异常。
  • 根据 TISCI 文档、默认情况下不应启用防火墙15、但我们观察到防火墙在 HS-SE 型号中已启用、在 HS-SPI FS 器件上已禁用。

当前权变措施

  • 在 HS-RAM 器件上、我们看到 FS 防火墙默认处于禁用状态(CONTROL = 0x0)。 在这种情况下、我们不会出现问题。
  • 当我们在引导早期(在 U-Boot R5 SPL 内、检查 ROM 是否已加载 SysFW 之后立即禁用七个(第8个属于 DMSC) MSRAM 防火墙时、应用程序正常运行、我们观察到这些防火墙的控制寄存器设置为0x0 ->未激活。

假设和开放式问题

  • 我们怀疑 EnetLLD 用例可能未针对 HS-SE 器件进行完全验证。 遗憾的是、我们只有处于 HS-SE 状态的定制硬件、TI 示例无法在该开箱即用的硬件上运行、因此我们无法轻松验证这些示例是否适用于 HS-SE。
    • 您能否了解 TI 是否有人在 HS-SE 硬件上成功使用了 EnetLLD 示例?
  • 哪个启动程序导致了此防火墙异常? 我们假设它是"PKTDMA"、但没有记录路由 ID 130、特权 ID 0似乎只是"not set"。
  • 我们找到了对 uDMA 驱动程序(udma_ringSetCfgLcdma)和 CSL 代码(csl_ringaccCfgRingCred、csl_lcdma_ringaccInitRing)中设置的`priv_id`字段的引用
    • udma_ringSetCfgLcdma 设置多个"cred..." CSL_LcdmaRingaccRingCfg 的字段(包括 credPrivId)、但在任何地方都不会调用显示使用该字段的唯一函数(CSL_lcdma_ringaccInitRing)
    • 我们的理解是、R5内核无论如何都不能直接设置该值、因为 DMSC 拥有防火墙来保护这些寄存器
    • 似乎没有任何 SysFW/TISCI 消息用于配置"priv_id"/凭据的任何其他部分
  • 我们搜索配置`priv_id`字段的其他示例软件迄今未成功。
  • 是否有必要配置`DMASS0_PKTDMA_0_CRED_CRED_j`寄存器?如果有、哪个元件负责设置该值?
  • 为什么在 HS-SE 上默认激活 MSRAM 防火墙(但在 HS-RAM 上不激活 FS)
    • 为什么启用了具有访问允许所有人的防火墙、即启用防火墙的原因是什么、但对每个人都开放?
    • 禁用此防火墙是否有任何缺点?
  • 此外、在 HS-SE 器件上使用防火墙和 PKTDMA 时、是否存在任何已知问题或配置步骤?

此致、

Dominic

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

    您好!

    [quote userid="387520" url="~/support/processors-group/processors/f/processors-forum/1439138/am6442-firewall-issues-with-enetlld-and-pktdma-on-hs-se 检查后、我们看到防火墙15的配置如下(在 HS-SE 设备上):

    区域0 权限寄存器将阻止对 privid 为0的事务的访问、因为确切匹配(privid=0)优先于通配符匹配(privid=0xC3)。

    这些配置还表明、您的 SBL 不会像在 MCU+ SDK 中的 SBL 示例中重新配置的那样重新配置 MSRAM 防火墙、以允许所有人访问。

    https://github.com/TexasInstruments/mcupsdk-core/blob/60f60ad115ead0c6f463d734b8bbb6f6cad4ce2a/examples/drivers/boot/sbl_ospi/am64x-evm/r5fss0-0_nortos/main.c#L103

    如果确实出现问题、请重新配置 MSRAM 防火墙以解决问题。

    此致、

    Prashant

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

    您好 Prashant:

    感谢您指出有关 SBL 引导流程的这些细节。 我们正在使用 U-Boot 来引导系统、显然在这种情况下、这些防火墙在其(可悲的是未记录)默认状态下工作。

    Bootloader_socOpenFirewalls 的文档帮助不大("API 用于使用 SYSFW 打开所需的防火墙。 ")、但我对实施情况进行了研究。 似乎代码也不会禁用这些防火墙、而是将所有3个权限字段编程为允许所有人使用。

    我想您所说的是、包含0 ("no access")和 privid 0的权限寄存器产生了精确匹配、并且这优先于通配符允许每个人使用。 这就是 MCU+ SDK 代码工作的原因、因为它对所有三个权限寄存器进行的编程完全相同、允许每个人都访问、不允许任何权限为0。

    • 为什么这最好是禁用防火墙?有什么原因吗?

    如果能在我的初始帖子中找到剩余问题的答案、仍然是很好的做法:

    • 哪个启动程序导致了此防火墙异常? 我们假设它是"PKTDMA"、但没有记录路由 ID 130、特权 ID 0似乎只是"not set"。
      • ->"路由 ID 130"是谁?

    假设我想在 MSRAM 上使用防火墙、以限制访问、例如对 A53和 PKTDMA 的访问:

    • 是否有必要配置`DMASS0_PKTDMA_0_CRED_CRED_j`寄存器?如果有、哪个元件负责设置该值?

    此致、

    Dominic

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

    您好、Dominic:

    我想您说的是、包含0 ("no access")和 privid 0的权限寄存器引起了完全匹配、并且优先于通配符的权限允许所有人使用。 这就是 MCU+ SDK 代码的作用、因为它对所有三个权限寄存器进行的编程完全相同、允许每个人都使用、不允许任何权限访问0。[/QUOT]

    完全正确。

    为什么这最好是禁用防火墙?

    防火墙也可能刚刚被禁用。  但是、我们必须禁用每个区域、否则、如果它未通过任何已启用区域的权限检查、则事务将被拒绝。

    哪个启动程序导致了此防火墙异常? 我们假设它是"PKTDMA"、但没有记录路由 ID 130、特权 ID 0似乎只是"not set"。

    我不确定路由 id 130、因为它不在 TRM 中。 但是、privid 0与来自 DMA IP 的事务相关联。

    假设我想在 MSRAM 上使用防火墙、以便限制对 A53和 PKTDMA 的访问:

    您可以配置第一个权限寄存器以允许所有人访问(0xC3)。 然后、可以将第二个和第三个权限寄存器配置为分别阻止对 A53和 DMA 的访问。

    此致、

    Prashant

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

    您好 Prashant:

    [报价 userid="531297" url="~/support/processors-group/processors/f/processors-forum/1439138/am6442-firewall-issues-with-enetlld-and-pktdma-on-hs-se/5520154 #5520154"]我不确定路由 ID 130、因为它不在 TRM 中。 但是、privid 0与来自 DMA IP 的事务相关联。[/QUOT]

    "DMA IP"(我假设它同时引用 BCDMA 和 PKTDMA)是否是使用 privid 0的唯一发起方? 如果我们要明确允许访问、那么了解还有谁在使用 privid 0很重要。

    抬起防火墙(或者明确允许访问 privid 0、我想)可以解决我们眼前的问题、但我想了解这会带来哪些限制、例如无法区分任何 DMA 外设。 如果所有 DMA 通道都使用相同的 privid、这似乎会使整个防火墙概念无效。

    这感觉实现不完整、因为显然有一个寄存器用于为 PKTDMA 通道分配 privid、但没有(SysFW-) API 来配置它。

    您知道未来是否计划增强功能?

    此致、

    Dominic

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

    您好、Dominic:

    我会得到团队的澄清、然后回复给您。

    此致、

    Prashant

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

    您好、Dominic:

    我确实和团队核实了。 反馈只是来自 DMA IP (PKTDMA 和 BCDMA)的事务被分配了 privid 0。 在凭证寄存器中提供了 privid、但 SYSFW 不允许通过防火墙配置这些寄存器、并且也不提供任何 API。

    此致、

    Prashant