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:无法在 enet-icssg 上接收带 PCP 标记的数据包

Guru**** 2482155 points
Other Parts Discussed in Thread: AM6442

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1451427/am6442-unable-to-receive-pcp-tagged-packets-on-enet-icssg

器件型号:AM6442

工具与软件:

您好!

我们有一个在开关模式下使用 AM6442和 enet-icssg 的器件在 r5f0_1内核上运行。  代码最初基于 enet_layer2_icssg 示例、但做了一些小修改。  出于某种原因、我们绝不会接收到802.1q 标头中包含非零 PCP 的数据包。  不同的 VLAN ID 工作正常。  我还可以在端口统计信息中看到 rxClassX 值与我们预期将接收的数据包数量相匹配、但固件从不接收这些数据包。  

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

    我还能够使用 am243 Launchpad 的 enet_layer2_icssg 示例重现此问题。  

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

    您好、Cassandra、

    默认情况下、在 enet_layer2_example 中、例如 example.syscfg -> TI Networking -> Enet (ICSS)-> DMA 通道配置-> ENET Rx DMA 通道、有2个 Rx Ch ID'= 0和1的 RX 通道。 因此、每个端口仅启用一个流、因此仅   接收到 PCP = 0的数据包。



    可以添加所有16个 Rx DMA 通道、以便在两个端口上接收全部8个 PC。 因为 一个 PCP 映射到一个 RX DMA 通道流。


    步骤:
    a)添加16个"ENET Rx DMA 通道"实例
    b)"数据包数量":可以对所有16个通道将此项设置为8。 可以根据需要增加增益。
    c)'MAC 地址数量':只能为'ENET Rx DMA 通道0'设置'1'。 对于所有其他 Rx DMA 通道、值必须为"0"。
    d)"使用共享全局事件":  默认情况下已启用。 它可以 保持 所有通道的原样。
    e)" Rx Flow Size Threshold":默认值为7。 它可以保持所有通道的原样。
    f)  Rx Ch ID':八个通道必须为"0"、其余八个通道必须为"1"。 该域表示 Rx DMA 通道流关联的 MAC 端口号。 (没有特定顺序、任何通道都可以具有 Rx Ch ID = 0/1)。
    g)确保根据提示消息修改了"Packet Pool Config"(数据包池配置)->"Large pool packet count"(大池数据包计数)。

    您可以尝试此配置、如果您有进一步的说明、请告诉我们。

    谢谢。此致、
    Miriam

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

    您好!

    这确实解决了我的问题、我唯一的抱怨是、它意味着分配更多的数据包、这些数据包将不会被使用。  是否有办法将其余 PCP 重新映射到原始的两个 Rx 流?

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

    尊敬的 Cassandra:

    是的、您可以将 PCP 重新映射到0以使用原始的两个流程。

    可在此处执行此操作:
    Enet_layer2_icssg.c -> EnetMp_rxTask ()  

        for(flowIdx = 0; flowIdx< ENETMP_MAX_TX_CHANNEL_NUM; flowIdx++)
        {
            /*Here the re-mapping can be done*/
            //prioMap[flowIdx] =  flowIdx;  /*default is one-to-one mapped*/
            prioMap[flowIdx] =  0;        /*Instead this can be done to remap all PCPs to 0 ( original flow)*/
        }
    
        status = set_priority_queue_mapping(perCtxt, ENET_MAC_PORT_1, prioMap);
        status = set_priority_queue_mapping(perCtxt, ENET_MAC_PORT_2, prioMap);


    谢谢。此致、
    Miriam