1. 24 Jul, 2018 5 commits
    • Ivan Khoronzhuk's avatar
      net: ethernet: ti: cpsw: add CBS Qdisc offload · 57d90148
      Ivan Khoronzhuk authored
      The cpsw has up to 4 FIFOs per port and upper 3 FIFOs can feed rate
      limited queue with shaping. In order to set and enable shaping for
      those 3 FIFOs queues the network device with CBS qdisc attached is
      needed. The CBS configuration is added for dual-emac/single port mode
      only, but potentially can be used in switch mode also, based on
      switchdev for instance.
      
      Despite the FIFO shapers can work w/o cpdma level shapers the base
      usage must be in combine with cpdma level shapers as described in TRM,
      that are set as maximum rates for interface queues with sysfs.
      
      One of the possible configuration with txq shapers and CBS shapers:
      
                            Configured with echo RATE >
                        /sys/class/net/eth0/queues/tx-0/tx_maxrate
                   /---------------------------------------------------
                  /
                 /            cpdma level shapers
              +----+ +----+ +----+ +----+ +----+ +----+ +----+ +----+
              | c7 | | c6 | | c5 | | c4 | | c3 | | c2 | | c1 | | c0 |
              \    / \    / \    / \    / \    / \    / \    / \    /
               \  /   \  /   \  /   \  /   \  /   \  /   \  /   \  /
                \/     \/     \/     \/     \/     \/     \/     \/
      +---------|------|------|------|-------------------------------------+
      |    +----+      |      |  +---+                                     |
      |    |      +----+      |  |                                         |
      |    v      v           v  v                                         |
      | +----+ +----+ +----+ +----+ p        p+----+ +----+ +----+ +----+  |
      | |    | |    | |    | |    | o        o|    | |    | |    | |    |  |
      | | f3 | | f2 | | f1 | | f0 | r  CPSW  r| f3 | | f2 | | f1 | | f0 |  |
      | |    | |    | |    | |    | t        t|    | |    | |    | |    |  |
      | \    / \    / \    / \    / 0        1\    / \    / \    / \    /  |
      |  \  X   \  /   \  /   \  /             \  /   \  /   \  /   \  /   |
      |   \/ \   \/     \/     \/               \/     \/     \/     \/    |
      +-------\------------------------------------------------------------+
               \
                \ FIFO shaper, set with CBS offload added in this patch,
                 \ FIFO0 cannot be rate limited
                  ------------------------------------------------------
      
      CBS shaper configuration is supposed to be used with root MQPRIO Qdisc
      offload allowing to add sk_prio->tc->txq maps that direct traffic to
      appropriate tx queue and maps L2 priority to FIFO shaper.
      
      The CBS shaper is intended to be used for AVB where L2 priority
      (pcp field) is used to differentiate class of traffic. So additionally
      vlan needs to be created with appropriate egress sk_prio->l2 prio map.
      
      If CBS has several tx queues assigned to it, the sum of their
      bandwidth has not overlap bandwidth set for CBS. It's recomended the
      CBS bandwidth to be a little bit more.
      
      The CBS shaper is configured with CBS qdisc offload interface using tc
      tool from iproute2 packet.
      
      For instance:
      
      $ tc qdisc replace dev eth0 handle 100: parent root mqprio num_tc 3 \
      map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@1 2@2 hw 1
      
      $ tc -g class show dev eth0
      +---(100:ffe2) mqprio
      |    +---(100:3) mqprio
      |    +---(100:4) mqprio
      |    
      +---(100:ffe1) mqprio
      |    +---(100:2) mqprio
      |    
      +---(100:ffe0) mqprio
           +---(100:1) mqprio
      
      $ tc qdisc add dev eth0 parent 100:1 cbs locredit -1440 \
      hicredit 60 sendslope -960000 idleslope 40000 offload 1
      
      $ tc qdisc add dev eth0 parent 100:2 cbs locredit -1470 \
      hicredit 62 sendslope -980000 idleslope 20000 offload 1
      
      The above code set CBS shapers for tc0 and tc1, for that txq0 and
      txq1 is used. Pay attention, the real set bandwidth can differ a bit
      due to discreteness of configuration parameters.
      
      Here parameters like locredit, hicredit and sendslope are ignored
      internally and are supposed to be set with assumption that maximum
      frame size for frame - 1500.
      
      It's supposed that interface speed is not changed while reconnection,
      not always is true, so inform user in case speed of interface was
      changed, as it can impact on dependent shapers configuration.
      
      For more examples see Documentation.
      Reviewed-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
      Reviewed-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
      Signed-off-by: default avatarIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      57d90148
    • Ivan Khoronzhuk's avatar
      net: ethernet: ti: cpsw: add MQPRIO Qdisc offload · 7929a668
      Ivan Khoronzhuk authored
      That's possible to offload vlan to tc priority mapping with
      assumption sk_prio == L2 prio.
      
      Example:
      $ ethtool -L eth0 rx 1 tx 4
      
      $ qdisc replace dev eth0 handle 100: parent root mqprio num_tc 3 \
      map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@1 2@2 hw 1
      
      $ tc -g class show dev eth0
      +---(100:ffe2) mqprio
      |    +---(100:3) mqprio
      |    +---(100:4) mqprio
      |    
      +---(100:ffe1) mqprio
      |    +---(100:2) mqprio
      |    
      +---(100:ffe0) mqprio
           +---(100:1) mqprio
      
      Here, 100:1 is txq0, 100:2 is txq1, 100:3 is txq2, 100:4 is txq3
      txq0 belongs to tc0, txq1 to tc1, txq2 and txq3 to tc2
      The offload part only maps L2 prio to classes of traffic, but not
      to transmit queues, so to direct traffic to traffic class vlan has
      to be created with appropriate egress map.
      Reviewed-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
      Reviewed-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
      Signed-off-by: default avatarIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7929a668
    • Ivan Khoronzhuk's avatar
      net: ethernet: ti: cpdma: fit rated channels in backward order · 4bb6c356
      Ivan Khoronzhuk authored
      According to TRM tx rated channels should be in 7..0 order,
      so correct it.
      Reviewed-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
      Reviewed-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
      Signed-off-by: default avatarIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4bb6c356
    • Ivan Khoronzhuk's avatar
      net: ethernet: ti: cpsw: use cpdma channels in backward order for txq · 79b3325d
      Ivan Khoronzhuk authored
      The cpdma channel highest priority is from hi to lo number.
      The driver has limited number of descriptors that are shared between
      number of cpdma channels. Number of queues can be tuned with ethtool,
      that allows to not spend descriptors on not needed cpdma channels.
      In AVB usually only 2 tx queues can be enough with rate limitation.
      The rate limitation can be used only for hi priority queues. Thus, to
      use only 2 queues the 8 has to be created. It's wasteful.
      
      So, in order to allow using only needed number of rate limited
      tx queues, save resources, and be able to set rate limitation for
      them, let assign tx cpdma channels in backward order to queues.
      Reviewed-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
      Reviewed-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
      Signed-off-by: default avatarIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      79b3325d
    • David S. Miller's avatar
      Merge tag 'mlx5e-updates-2018-07-18-v2' of... · b19c7bb1
      David S. Miller authored
      Merge tag 'mlx5e-updates-2018-07-18-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux
      
      Saeed Mahameed says:
      
      ====================
      mlx5e-updates-2018-07-18
      
      This series includes update for mlx5e net device driver.
      
      1) From Feras Daoud, Added the support for firmware log tracing,
      first by introducing the firmware API needed for the task and then
      For each PF do the following:
          1- Allocate memory for the tracer strings database and read it from the FW to the SW.
          2- Allocate and dma map tracer buffers.
      
          Traces that will be written into the buffer will be parsed as a group
          of one or more traces, referred to as trace message. The trace message
          represents a C-like printf string.
      Once a new trace is available  FW will generate an event indicates new trace/s are
      available and the driver will parse them and dump them using tracepoints
      event tracing
      
      Enable mlx5 fw tracing by:
      echo 1 > /sys/kernel/debug/tracing/events/mlx5/mlx5_fw/enable
      
      Read traces by:
      cat /sys/kernel/debug/tracing/trace
      
      2) From Roi Dayan, Remove redundant WARN when we cannot find neigh entry
      
      3) From Jianbo Liu, TC double vlan support
      - Support offloading tc double vlan headers match
      - Support offloading double vlan push/pop tc actions
      
      4) From Boris, re-visit UDP GSO, remove the splitting of UDP_GSO_L4 packets
      in the driver, and exposes UDP_GSO_L4 as a PARTIAL_GSO feature.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b19c7bb1
  2. 23 Jul, 2018 35 commits