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.

How to send/receive jumbo packet by AM335x EMAC?

Guru 15510 points
Hi,

I have a question about AM335x EMAC.

Does AM335x EMAC support jumbo frame packet? 
If yes, are there any guide which I can refer to?

best regards, 
g.f.

  • Hi g.f,

    From what is see in Figure 14-8 and Section 14.3.2.4.1.2.3 of the AM335X TRM Rev. L, the Buffer Length field is 11 bits long, which would make for a maximum value of 2048.
  • Sorry, it should be "packet length" instead of "buffer length", but what I posted above for max. value is valid, both for TX and RX.
  • Hi Biser,

    Thank you for the reply.
    Jumbo packet is more than 1500bytes, so that AM335x EMAC are supporting Jumbo packet, right?
    To support jumbo packet, do I only need to configure the size of Packet Length to more than 1500 ?

    By the way, is there NDK(Network Development Kit) for AM335x?

    best regards,
    g.f.
  • Hi g.f,

    This is a very good definition that I found on the net:

    "Jumbo frames are used on local area networks that support at least 1 Gbps and can be as large as 9,000 bytes. Because jumbo frames are not defined in the IEEE 802.3 specifications for Ethernet, vendor support for jumbo frames and their maximum transmission units may vary.

    Enabling jumbo frames can improve network performance by making data transmissions more efficient. The CPUs on switches and routers can only process one frame at a time. By putting a larger payload into each frame, the CPUs have fewer frames to process. In return, this can reduce the amount of heat the network devices generate.

    These gains are only realized, however, if each link in the network path -- including servers and endpoints -- is configured to enable jumbo frames at the same MTU. Otherwise, performance may actually decrease as incompatible devices drop frames or fragment them, the latter of which can task the CPU with higher processing requirements. Enabling jumbo frames may also increase packet loss rates."

    In my opinion it's the last consideration that matters most here, as you will not see a significant increase in size from 1500 to 2000 or so bytes per frame.

    On your other question, NDK is now part of the Processor RTOS SDK: http://processors.wiki.ti.com/index.php/Processor_SDK_RTOS_NDK

  • Hi Biser,

    Thank you for the reply.

    Let me ask again to make me sure.

    AM335x are supporting jumbo packet but the packet length is 11 bit(MAX).
    So, may be performance will not increase as expected, is it correct?

    best regards,
    g.f.
  • Yes, 2^11 = 2048 bytes max. length, this is correct.
  • Hi Biser,

    Thank you for the reply.

    Sorry, I'm confusing about the Jumbo packet after I checked the following wiki page.
    processors.wiki.ti.com/.../Network_Developers_Kit_FAQ

    It said that DM648 hardware does not support Jumbo packet since limitation of receive frames(up to 2047).
    I understand that it is different device, but the receive frame size are same.
    Let me ask to make me sure.
    AM335x EMAC hardware are supporting jumbo packet, right?

    And I also have question about configuration of AM335x EMAC to use jumbo packet.
    Is it available to send/receive jumbo packet only setting up the value of PACKET_Length bit to more than 1500?

    best regards,
    g.f.
  • I have asked the Ethernet experts to comment.
  • The CPSW IP in AM335x (and AM437x for that matter) supports a maximum frame size of 2016 bytes (2020 with 802.1Q tag (VLAN)).

    Each frame in a MAC-48 network has 18 bytes reserved for layer 2 overhead (header+FCS) which leaves 1998 bytes available for payload. Exceeding this value is not supported.

    Technically, this meets the definition of "jumbo" as the MTU exceeds1500 bytes, but many expect a MTU of ~9000 when using the term.

  • Hi DK,

    Thank you for the reply.

    Okay, I understand.
    But may I ask about the configuration of the following case:
    If 2016 bytes is enough for the customer, what configurations are needed?
    Only setting Packet_Length bit to 0x7E0(2016 byte)?
    Do they also need to set RX_MAXLEN bit to 0x7E0?

    By the way, I think it is possible to enable Jumbo Packet in NDK.
    Is this also available for AM335x?

    best regards,
    g.f.
  • Setting packet_length and RX_MAXLEN to 2016 should be sufficient.

    I can't speak to the NDK question(s)...I'll need a SW resource to chime in.