Merge branch 'bugfix/disable_software_flow_control_with_small_buffers' into 'master'

esp_eth: added option to disable soft flow control when rx buffer is few

Closes WIFI-3362

See merge request espressif/esp-idf!12186
pull/7261/head
David Čermák 2021-02-04 20:36:04 +08:00
commit a2005adf32
5 zmienionych plików z 17 dodań i 3 usunięć

Wyświetl plik

@ -102,6 +102,18 @@ menu "Ethernet"
help
Number of DMA transmit buffers. Each buffer's size is ETH_DMA_BUFFER_SIZE.
Larger number of buffers could increase throughput somehow.
if ETH_DMA_RX_BUFFER_NUM > 15
config ETH_SOFT_FLOW_CONTROL
bool "Enable software flow control"
default n
help
Ethernet MAC engine on ESP32 doesn't feature a flow control logic.
The MAC driver can perform a software flow control if you enable this option.
Note that, if the RX buffer number is small, enabling software flow control will
cause obvious performance loss.
endif
endif # ETH_USE_ESP32_EMAC
menuconfig ETH_USE_SPI_ETHERNET

Wyświetl plik

@ -299,12 +299,14 @@ static void emac_esp32_rx_task(void *arg)
} else {
free(buffer);
}
#if CONFIG_ETH_SOFT_FLOW_CONTROL
// we need to do extra checking of remained frames in case there are no unhandled frames left, but pause frame is still undergoing
if ((emac->free_rx_descriptor < emac->flow_control_low_water_mark) && emac->do_flow_ctrl && emac->frames_remain) {
emac_hal_send_pause_frame(&emac->hal, true);
} else if ((emac->free_rx_descriptor > emac->flow_control_high_water_mark) || !emac->frames_remain) {
emac_hal_send_pause_frame(&emac->hal, false);
}
#endif
} while (emac->frames_remain);
}
vTaskDelete(NULL);

Wyświetl plik

@ -145,7 +145,7 @@ void app_main(void)
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
esp_eth_handle_t eth_handle = NULL;
ESP_ERROR_CHECK(esp_eth_driver_install(&config, &eth_handle));
#if CONFIG_ETH_USE_SPI_ETHERNET
#if !CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET
/* The SPI Ethernet module might doesn't have a burned factory MAC address, we cat to set it manually.
02:00:00 is a Locally Administered OUI range so should not be used except when testing on a LAN under your control.
*/

Wyświetl plik

@ -218,7 +218,7 @@ static void initialize_ethernet(void)
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
config.stack_input = pkt_eth2wifi;
ESP_ERROR_CHECK(esp_eth_driver_install(&config, &s_eth_handle));
#if CONFIG_ETH_USE_SPI_ETHERNET
#if !CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET
/* The SPI Ethernet module might doesn't have a burned factory MAC address, we cat to set it manually.
02:00:00 is a Locally Administered OUI range so should not be used except when testing on a LAN under your control.
*/

Wyświetl plik

@ -253,7 +253,7 @@ void register_ethernet(void)
#endif // CONFIG_ETH_USE_SPI_ETHERNET
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
ESP_ERROR_CHECK(esp_eth_driver_install(&config, &eth_handle));
#if CONFIG_ETH_USE_SPI_ETHERNET
#if !CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET
/* The SPI Ethernet module might doesn't have a burned factory MAC address, we cat to set it manually.
02:00:00 is a Locally Administered OUI range so should not be used except when testing on a LAN under your control.
*/