• Ioana Radulescu's avatar
    dpaa2-eth: Add pause frame support · 8eb3cef8
    Ioana Radulescu authored
    
    
    Starting with firmware version MC10.18.0, we have support for
    L2 flow control. Asymmetrical configuration (Rx or Tx only) is
    supported, but not pause frame autonegotioation.
    
    Pause frame configuration is done via ethtool. By default, we start
    with flow control enabled on both Rx and Tx. Changes are propagated
    to hardware through firmware commands, using two flags (PAUSE,
    ASYM_PAUSE) to specify Rx and Tx pause configuration, as follows:
    
    PAUSE | ASYM_PAUSE | Rx pause | Tx pause
    ----------------------------------------
      0   |     0      | disabled | disabled
      0   |     1      | disabled | enabled
      1   |     0      | enabled  | enabled
      1   |     1      | enabled  | disabled
    
    The hardware can automatically send pause frames when the number
    of buffers in the pool goes below a predefined threshold. Due to
    this, flow control is incompatible with Rx frame queue taildrop
    (both mechanisms target the case when processing of ingress
    frames can't keep up with the Rx rate; for large frames, the number
    of buffers in the pool may never get low enough to trigger pause
    frames as long as taildrop is enabled). So we set pause frame
    generation and Rx FQ taildrop as mutually exclusive.
    
    Signed-off-by: default avatarIoana Radulescu <ruxandra.radulescu@nxp.com>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8eb3cef8