zephyr/drivers/ethernet
Tomasz Gorochowik f6a95a02ed drivers: eth: gmac: fix qav bandwidth sharing issues
Removing the TX timeout handling in the GMAC driver (commit 18b07e09e0)
revealed some issues with the way hardware priority queues work.

For cases with both hardware priority queues enabled, with the default
recommended delta bandwidths (0% - 75%), the lower priority queue (0%)
is hardly able to send any packets. This became visible, because without
the timeout mechanism, we quickly ran out of available TX buffers if
there were multiple packets being queued to the queue.

Here is an excerpt from 802.1Q, chapter 34.3.1 which describes how Qav
bandwidth sharing SHOULD work:

  The deltaBandwidth(N) for a given N, plus the deltaBandwidth(N) values
  for any higher priority queues (larger values of N) defines the total
  percentage of the Port’s bandwidth that can be reserved for that queue
  and all higher priority queues. For the highest priority queue, this
  means that the maximum value of operIdleSlope(N) is deltaBandwidth(N)%
  of portTransmitRate. However, if operIdleSlope(N) is actually less
  than this maximum value, any lower priority queue that supports the
  credit-based shaper algorithm can make use of the reservable bandwidth
  that is unused by the higher priority queue. So, for queue N-1, the
  maximum value of (operIdleSlope(N) + operIdleSlope(N-1)) is
  (deltaBandwidth(N) + deltaBandwidth(N1))% of portTransmitRate.

However in reality, the lower priority queues (N-1) on the SAM GMAC
hardware DO NOT use the bandwidth available from the higher priority
queues (N).

This commits fixes the issue by changing the defaults. These are still
set to the recommended 75% (total), but this percentage is split between
the priority queues manually.

Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
2019-03-13 06:00:04 -05:00
..
CMakeLists.txt drivers: eth_smsc911x: Add driver for SMSC9118 aka LAN9118 chip 2019-01-19 11:59:29 -05:00
eth_dw_priv.h headers: Fix headers across the project 2018-09-17 15:49:26 -04:00
eth_dw.c eth: eth_dw: rename CONFIG_ETH_DW_0_IRQ_SHARED_NAME to DT_* 2019-03-01 09:42:56 -08:00
eth_e1000_priv.h drivers: eth: e1000: Use system log macros 2018-11-12 10:03:51 -05:00
eth_e1000.c drivers/ethernet: Use new net_pkt API for sending and receiving 2019-02-01 14:34:38 +02:00
eth_enc28j60_priv.h drivers/ethernet: Reduce runtime context size in ENC28J60 driver 2018-04-11 16:28:16 +03:00
eth_enc28j60.c drivers: eth_enc28j60: fix calculation of frame length 2019-03-07 20:26:18 -05:00
eth_mcux.c eth: eth_mcux: wait in send for the packet to be sent [REVERT ME] 2019-02-21 09:27:47 -05:00
eth_native_posix_adapt.c drivers: eth: native_posix: Null terminate interface name 2019-03-13 05:34:03 -05:00
eth_native_posix_priv.h drivers: eth: native_posix: Allow non-root access 2018-10-23 11:08:39 +03:00
eth_native_posix.c net: lldp: Move LLDP structure definition to lldp 2019-03-09 16:02:11 -05:00
eth_sam_gmac_priv.h driver: eth: gmac: remove ring_buf usage in the RX path 2019-02-14 22:15:29 -05:00
eth_sam_gmac.c drivers: eth: gmac: fix qav bandwidth sharing issues 2019-03-13 06:00:04 -05:00
eth_smsc911x_priv.h drivers: eth_smsc911x: Add driver for SMSC9118 aka LAN9118 chip 2019-01-19 11:59:29 -05:00
eth_smsc911x.c drivers/ethernet: Fix net API usage in smsc911x driver 2019-02-21 09:34:30 -05:00
eth_stellaris_priv.h drivers: ethernet: Add TI Stellaris ethernet controller driver. 2018-12-04 09:36:51 -06:00
eth_stellaris.c drivers: eth: stellaris: Properly ifdef stats handling 2019-03-01 09:44:01 -08:00
eth_stm32_hal_priv.h headers: Fix headers across the project 2018-09-17 15:49:26 -04:00
eth_stm32_hal.c drivers/ethernet: Use new net_pkt API for sending and receiving 2019-02-01 14:34:38 +02:00
Kconfig drivers: eth_smsc911x: Add driver for SMSC9118 aka LAN9118 chip 2019-01-19 11:59:29 -05:00
Kconfig.dw drivers/interrupt_controller: shared_irq: configure by device tree 2019-02-06 07:18:15 -05:00
Kconfig.e1000 kconfig: ethernet: Remove duplicated dependencies 2019-03-08 07:23:02 -05:00
Kconfig.enc28j60 drivers: eth_enc28j60: fix typo and build for half duplex 2019-03-05 13:38:43 -05:00
Kconfig.mcux kconfig: ethernet: Remove duplicated dependencies 2019-03-08 07:23:02 -05:00
Kconfig.native_posix kconfig: Refactor the dependency on 'NET_L2_ETHERNET' 2018-12-30 16:24:50 -05:00
Kconfig.sam_gmac drivers: eth: gmac: Add option to force packets to a specific queue 2019-03-13 06:00:04 -05:00
Kconfig.smsc911x kconfig: ethernet: Remove duplicated dependencies 2019-03-08 07:23:02 -05:00
Kconfig.stellaris drivers: eth: stellaris: Enable automatic Ethernet support in QEMU 2019-01-11 09:48:27 +02:00
Kconfig.stm32_hal kconfig: ethernet: Remove duplicated dependencies 2019-03-08 07:23:02 -05:00
phy_sam_gmac.c drivers: Add 'U' to unsigned variable assignments 2018-12-04 22:51:56 -05:00
phy_sam_gmac.h headers: Fix headers across the project 2018-09-17 15:49:26 -04:00