• Grygorii Strashko's avatar
    drivers: net: cpsw: ale: add broadcast/multicast rate limit support · e3a5e33f
    Grygorii Strashko authored
    The CPSW ALE supports feature to rate limit number ingress
    broadcast(BC)/multicast(MC) packets per/sec which main purpose is BC/MC
    storm prevention.
    
    The ALE BC/MC packet rate limit configuration consist of two parts:
    - global
      ALE_CONTROL.ENABLE_RATE_LIMIT bit 0 which enables rate limiting globally
      ALE_PRESCALE.PRESCALE specifies rate limiting interval
    - per-port
      ALE_PORTCTLx.BCASTMCAST/_LIMIT specifies number of BC/MC packets allowed
      per rate limiting interval.
      When port.BCASTMCAST/_LIMIT is 0 rate limiting is disabled for Port.
    
    When BC/MC packet rate limiting is enabled the number of allowed packets
    per/sec is defined as:
      number_of_packets/sec = (Fclk / ALE_PRESCALE) * port.BCASTMCAST/_LIMIT
    
    Hence, the ALE_PRESCALE configuration is common for all ports the 1ms
    interval is selected and configured during ALE initialization while
    port.BCAST/MCAST_LIMIT are configured per-port.
    This allows to achieve:
     - min number_of_packets = 1000 when port.BCAST/MCAST_LIMIT = 1
     - max number_of_packets = 1000 * 255 = 255000
       when port.BCAST/MCAST_LIMIT = 0xFF
    
    The ALE_CONTROL.ENABLE_RATE_LIMIT can also be enabled once during ALE
    initialization as rate limiting enabled by non zero port.BCASTMCAST/_LIMIT
    values.
    
    This patch implements above logic in ALE and adds new ALE APIs
     cpsw_ale_rx_ratelimit_bc();
     cpsw_ale_rx_ratelimit_mc();
    Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e3a5e33f
cpsw_ale.h 4.16 KB