diff --git a/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c b/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c index 1a625338c..232fb0ec7 100644 --- a/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c +++ b/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c @@ -352,6 +352,11 @@ void mac_lld_start(MACDriver *macp) { ETH->MACCR = ETH_MACCR_RE | ETH_MACCR_TE; #endif + /* MMC configuration: + Disable all MMC interrupts.*/ + ETH->MMCRIMR = ETH_MMCRIMR_RFCEM | ETH_MMCRIMR_RFAEM | ETH_MMCRIMR_RGUFM; + ETH->MMCTIMR = ETH_MMCTIMR_TGFSCM | ETH_MMCTIMR_TGFMSCM | ETH_MMCTIMR_TGFM; + /* DMA configuration: Descriptor chains pointers.*/ ETH->DMARDLAR = (uint32_t)__eth_rd; diff --git a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c index 454fdb918..4336381a9 100644 --- a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c +++ b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c @@ -411,6 +411,11 @@ void mac_lld_start(MACDriver *macp) { ETH->MACCR |= ETH_MACCR_RE | ETH_MACCR_TE; #endif + /* MMC configuration: + Disable all interrupts.*/ + ETH->MMCTIMR = (1<<27) | (1<<26) | (1<<21) | (1<<15) | (1<<14); + ETH->MMCRIMR = (1<<27) | (1<<26) | (1<<17) | (1<<6) | (1<<5); + /* DMA general settings.*/ ETH->DMASBMR = ETH_DMASBMR_AAL; ETH->DMACCR = ETH_DMACCR_DSL_0BIT; diff --git a/readme.txt b/readme.txt index 330e9c03e..67dac4c18 100644 --- a/readme.txt +++ b/readme.txt @@ -151,6 +151,8 @@ (backported to 20.3.5)(backported to 21.11.2). - FIX: Fixed wrong condition in STM32 sio_lld_read() function (bug #1219) (backported to 20.3.5)(backported to 21.11.2). +- FIX: Fixed STM32 Ethernet driver causes system hang after 2^31 packets + sent/received (bug #1218)(backported to 20.3.5)(backported to 21.11.2). - FIX: Fixed clock re-initialization problem in STM32 USARTv2 and USARTv3 drivers (bug #1217)(backported to 21.11.2). - FIX: Fixed assertion on initialization of STM32H7xx (bug #1216)