工具与软件:
尊敬的 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......
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