工具/软件:
您好:
起初、该解决方案似乎有效、但随着开发的进行、我们现在发现此防火墙配置仅适用于描述符环。
它不包括为帧分配的缓冲区、因此 DMA 能够在不尊重防火墙配置的情况下将接收帧写入存储器中的任何位置。
是否需要阻止其他 ID? 为什么仍然有不同之处、是否涉及另一个负责帧事务的硬件组件?
谢谢
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.
工具/软件:
您好:
起初、该解决方案似乎有效、但随着开发的进行、我们现在发现此防火墙配置仅适用于描述符环。
它不包括为帧分配的缓冲区、因此 DMA 能够在不尊重防火墙配置的情况下将接收帧写入存储器中的任何位置。
是否需要阻止其他 ID? 为什么仍然有不同之处、是否涉及另一个负责帧事务的硬件组件?
谢谢
您好:
我当前的防火墙配置如您所建议的那样:
描述符环位于0xb0000000、帧缓冲区从0xa0000000开始分配。
根据防火墙配置、我假设 DMA 应该无法在0xa0000000处写入、但可以写入。 另一方面、当前台区域位于其他位置时、由于缺少对0xb0000000的访问、DMA 不再工作。
因此、对我来说、防火墙似乎没有正确地保护从 DMA 访问的内存。 我也尝试添加 priv ID 192 (DMA 保留 Priv-ID)到阻止的列表,但没有更改。
我注意到帧缓冲区使用 ASEL (另一个我不完全理解的系统)、并且 TRM 指出 DDR 上的防火墙不支持 ASEL。
这可能是问题吗? 您能解释一下 ASEL 的用途吗?
谢谢
您好:
从防火墙配置中、我假设 DMA 应该无法写入0xa0000000、但可以写入。
应该是这样的、除非 DMA 事务被另一个 PRIVID 标记。
您可以为帧缓冲区地址空间创建另一个前景区域、这些区域具有阻止所有人访问的权限(0xC30000)。 然后、您可以从 SYSFW 的防火墙例外记录中获取 PRIVID。
此致、
Prashant
您好:
有关启用 TIFS 日志的信息、请参阅以下指南:
如果正确启用、TIFS 日志将出现在 MAIN_UART1实例上。
此致、
Prashant
您好:
也可以从存储器缓冲区收集跟踪、如下所述:
https://software-dl.ti.com/tisci/esd/latest/4_trace/trace.html#trace-memory-buffer-location
但是、由于这些缓冲区是圆形缓冲区、因此捕获的迹线可能不完整、并且不提供相关信息。 但是、如果无法启用 UART1、可以尝试使用它。
此致、
Prashant
您好:
我设法从内存缓冲区读取跟踪。
以下是我的调查结果:
阻止描述符环(priv-id 0、从 0xB0200000开始):
因为这里仅阻止了 priv-id 0、所以这应源自 DMA。
FWL Bit 0x1 Exception addr 0x45B0000 FWL Exception 0x1000100 0x60000 0xB0200000 0x0 0x821000 0x8 FWL Bit 0x1 Exception addr 0x45B08000 FWL Exception 0x1000100 0x60000 0xB02002C8 0x0 0x821000 0x8 FWL Bit 0x1 Exception addr 0x45B08000 FWL Exception 0x1000100 0x60000 0xB0200570 0x0 0x821000 0x8
阻止缓冲环(priv-id 0xc3、从 0x8FFF0000开始):
此处、发起方应为 DMA、因为在接收数据(AFAIK)之前未访问该地址。
FWL Bit 0x1 Exception addr 0x45B08000 FWL Exception 0x1000100 0x70000 0x8FFF2040 0x0 0x42201 0x40 FWL Bit 0x1 Exception addr 0x45B08000 FWL Exception 0x1000100 0x70000 0x8FFF4040 0x0 0x42201 0x40 FWL Bit 0x1 Exception addr 0x45B08000 FWL Exception 0x1000100 0x70000 0x8FFF5040 0x0 0x42201 0x40 FWL Bit 0x1 Exception addr 0x45B08000 FWL Exception 0x1000100 0x70000 0x8FFF6040 0x0 0x42201 0x40 FWL Bit 0x1 Exception addr 0x45B08000 FWL Except on 0x1000100 0x70000 0x8FFF7040 0x0 0x42201 0x40
您能帮助我了解这些日志吗?
我可以识别访问的地址、并假定 FWL 位是防火墙 ID (1=DDR)。 如何找到导致事务的 priv-id?
谢谢。
您好:
根据表"表3-5防火墙违规参数"
privid 是 DATA2寄存器的一部分。 在日志中、异常日志中最后第二个值是 DATA2寄存器值。 所以、
阻止缓冲区环(priv-id 0xc3、起始地址为 0x8FFF0000):
这些例外情况适用于 privid 1的写入事务。
根据以下内容、privid 1与 A53关联。
https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/am62x/firewalls.html#list-of-priv-ids
除非 DMA 继承启动器优先级、否则写入事务可能来自 Linux 内核。 是否确定除了 DMA 之外没有任何人正在写入这些缓冲区?
此致、
Prashant
您好:
实际上、DMA 似乎继承了 A53优先级 ID。 经过一些测试后、我确定 DMA 缓冲区区域中所需的权限为非安全/用户/缓存。 如果启用了此功能、则会正确接收帧、但如果禁用该功能、DMA 和 Linux 都无法访问该区域。 我仅使用这一个权限进行了测试、这向我表明它也被 DMA 使用、否则会触发另一个异常。 此外、我在 Linux 代码中看不到对 RX 缓冲区的写入访问。
您好:
对延迟的回复表示歉意。
我从 MCU+ SDK 测试了 A53内核的 UDMA_memcpy_Polling 示例。 我看不出 DMA 对描述符和帧缓冲区使用不同的 PrivID。
// Descriptor buffer FWL Bit 0x1 Exception addr 0x45B08000 FWL Exception 0x1000100 0x60000 0xA0000000 0x0 0x801000 0x10 // Tx and Rx buffers FWL Bit 0x1 Exception addr 0x45B08000 FWL Exception 0x1000100 0x60000 0xA0100000 0x0 0x801000 0x40
您能否共享当前的防火墙配置?
谢谢!
您好 Prashant、
感谢您的测试。 这让我希望硬件支持我的目标、我可能会错过一些配置。
以下是我当前的防火墙配置、带有一些注释:
TI UDMA (INFO)>: fwl_id=1, region=0, n_permission_regs=3 TI UDMA (INFO)>: control=0x11a TI UDMA (INFO)>: perm[0]=0xc3ffff TI UDMA (INFO)>: perm[1]=0xc3ffff TI UDMA (INFO)>: perm[2]=0x008888 <- Disallow UDMA TI UDMA (INFO)>: Range: 0x80000000 - 0xefffffff <- full memory range TI UDMA (INFO)>: fwl_id=1, region=1, n_permission_regs=3 TI UDMA (INFO)>: control=0x1a TI UDMA (INFO)>: perm[0]=0xc3ffff TI UDMA (INFO)>: perm[1]=0xc3ffff TI UDMA (INFO)>: perm[2]=0xc3ffff TI UDMA (INFO)>: Range: 0xb0000000 - 0xb007ffff <- buffer descriptor ring TI UDMA (INFO)>: fwl_id=1, region=2, n_permission_regs=3 TI UDMA (INFO)>: control=0x1a TI UDMA (INFO)>: perm[0]=0xc38888 TI UDMA (INFO)>: perm[1]=0xc38888 TI UDMA (INFO)>: perm[2]=0x018888 <- Kernel cannot boot 0x018c88 (user,nsec,cache) <- Kernel can boot and frames can be received TI UDMA (INFO)>: Range: 0xa0000000 - 0xa8000fff <- Linux Kernel + frame buffers
在最后一个区域、我将尝试了解哪些是有效的、哪些是无效的。 我确定了缓存权限标志、以启用从 Linux 进行的内存访问。 但是、通过设置此标志、DMA 也可以写入存储器。 可能缺少某些高速缓存配置?
谢谢。此致
您好 Prashant、
是否有关于我的防火墙配置的备注?
我现在已经发现、通过设置控制寄存器(0x200)中的高速缓存位、我可以更好地控制访问、并且读取/写入权限的表现更符合我的预期。
但是、我仍然 只捕获对 priv-id 为1的帧缓冲区的访问。
DMA 继承 A53优先 ID 的原因可能是什么? 是否可以在提取描述符后由 A53处理传入事务?
我看到缓冲区地址的 ASEL 设置为15、这可以更改优先级 ID 吗?
谢谢。