From ed1771c7cca37db8cedbed7e03aae39db55a5ac0 Mon Sep 17 00:00:00 2001 From: morris Date: Wed, 5 Sep 2018 21:43:03 +0800 Subject: [PATCH] ethernet: enlarge ethernet task stack size 1. In original driver, the stack size for emac driver task "emacT" is only 2048 Bytes, which also can not be changed by user. 2. Each time when invoking "emac_start" function, it will reset emac registers, the driver should reconfig some important registers again. Closes https://github.com/espressif/esp-idf/issues/3025 --- components/ethernet/Kconfig | 7 +++++++ components/ethernet/emac_common.h | 1 + components/ethernet/emac_main.c | 4 +++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/components/ethernet/Kconfig b/components/ethernet/Kconfig index f7281bc4c..dab89ff10 100644 --- a/components/ethernet/Kconfig +++ b/components/ethernet/Kconfig @@ -42,4 +42,11 @@ config EMAC_TASK_PRIORITY help Ethernet MAC task priority. +config EMAC_TASK_STACK_SIZE + int "Stack Size of EMAC Task" + default 3072 + range 2000 8000 + help + Stack Size of Ethernet MAC task. + endmenu diff --git a/components/ethernet/emac_common.h b/components/ethernet/emac_common.h index 4b20c6aca..c86277383 100644 --- a/components/ethernet/emac_common.h +++ b/components/ethernet/emac_common.h @@ -106,6 +106,7 @@ struct emac_close_cmd { #define DMA_RX_BUF_NUM CONFIG_DMA_RX_BUF_NUM #define DMA_TX_BUF_NUM CONFIG_DMA_TX_BUF_NUM #define EMAC_TASK_PRIORITY CONFIG_EMAC_TASK_PRIORITY +#define EMAC_TASK_STACK_SIZE CONFIG_EMAC_TASK_STACK_SIZE #define DMA_RX_BUF_SIZE 1600 #define DMA_TX_BUF_SIZE 1600 diff --git a/components/ethernet/emac_main.c b/components/ethernet/emac_main.c index f89c56952..208a83e39 100644 --- a/components/ethernet/emac_main.c +++ b/components/ethernet/emac_main.c @@ -769,6 +769,7 @@ static void emac_start(void *param) emac_enable_clk(true); emac_reset(); + emac_dma_init(); emac_set_macaddr_reg(); @@ -1101,7 +1102,8 @@ esp_err_t esp_eth_init_internal(eth_config_t *config) emac_rx_xMutex = xSemaphoreCreateRecursiveMutex(); emac_tx_xMutex = xSemaphoreCreateRecursiveMutex(); emac_xqueue = xQueueCreate(EMAC_EVT_QNUM, sizeof(emac_event_t)); - xTaskCreate(emac_task, "emacT", 2048, NULL, EMAC_TASK_PRIORITY, &emac_task_hdl); + xTaskCreate(emac_task, "emacT", EMAC_TASK_STACK_SIZE, NULL, + EMAC_TASK_PRIORITY, &emac_task_hdl); emac_enable_clk(false); esp_intr_alloc(ETS_ETH_MAC_INTR_SOURCE, 0, emac_process_intr, NULL, NULL);