工具与软件:
继续先前的相关主题...
...我看到 Linux 驱动程序提供当前的 AM65x 平台 SDK(09.01.00.01)现在使用 FDB 实现多播地址过滤。 但是、查看该驱动程序中的代码并未回答(所有)上一主题中未解决的问题。
请您澄清以下几点:
1:驱动程序 将(在 icssg_switch_map.h 中) number_of_FDB_Bucket_entries 定义为4。 我是否可以假设这必须与 ICSSG_FDB_GEN_CFG1寄存器中 FDB_Bucket_SIZE 字段的配置相匹配(默认为4 (字段值0b10))? 如果不是、如何 选择 NUMBER_OF_FDB_Bucket_ENTRIES 的正确值?
2:驱动程序还将 PRUETH_SWITCH_FDB_MASK 定义为((size_of_FDB/number_of_FDB_Bucket_entries)- 1)、并且 size_of_FDB 固定为2048。 这个屏蔽选择[0..512)范围内的值。 此掩码是否需要 与 FDB CFG1寄存器中 FDB_HASH_SIZE 字段的配置相对应? 默认情况下、我认为它看起来似乎不是、因为 FDB_HASH_SIZE 字段默认为0b100、选择1024而不是512的哈希大小。 这是缺陷还是两种配置不相关?
3: 从我的上一个主题:
您是否还能准确解释 MII G RT FDB CFG1寄存器中以下字段的含义:
- FDB_HASH_SIZE -这与宽边时隙条目数是否相关? 它是否必须匹配用于将基于多播地址和滤波器 ID 的 CRC 转换为宽边时隙索引的掩码(例如0x1ff)? 否则、它指的是什么?
- FDB_Bucket_size -这是否指可以 "附加"到相同哈希值/宽边时隙索引的 FDB 条目数? 否则、它指的是什么?
如果多播地址和过滤器 ID 哈希的两种不同组合为相同的值(宽边时隙索引)、FDB 将如何管理此冲突? 是否将相同的 FDB 条目应用于哈希值相同的所有此类组合?
4:在 icssg_prueth.c 中定义的驱动程序函数 EMAC_nDO_SET_RX_MODE_WORK() 似乎会擦除所有 FDB 条目。 我可以看到、这意味着更改一个 EMAC 接口的接收配置会干扰同一 ICSSG 上另一个 EMAC 接口的当前多播地址过滤器配置-是这样吗? 如果是这样,它似乎是一个缺陷的驱动程序。 执行此操作的正确方法是否是读取-修改-写入每个 FDB 条目、以复位与要初始化的端口对应的 FID_C2位、同时使与另一个端口对应的位保持不变?
5:从我的上一个主题:
- 在我的实验中、似乎 当 同一 ICSSG 上的对等端口 直接连接时、入站多播帧的过滤方式与直接连接不同 ICSSG 上的端口时发生的情况不同。 特别是、在第一种情况下、FDB 条目中的端口0和端口1位似乎都需要设置。 是这样吗? 请您解释一下为什么会这样。
提前感谢您的帮助。
Ian