From 58df95525a922ad8c38b719aad97488bd6308e3f Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Tue, 31 Jan 2017 10:15:02 +0000 Subject: [PATCH] Fixed bug #815. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/stable_16.1.x@10074 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/STM32/LLD/MACv1/mac_lld.c | 6 ++++++ readme.txt | 2 ++ 2 files changed, 8 insertions(+) diff --git a/os/hal/ports/STM32/LLD/MACv1/mac_lld.c b/os/hal/ports/STM32/LLD/MACv1/mac_lld.c index 0d05bd3b2..1d2c2a68a 100644 --- a/os/hal/ports/STM32/LLD/MACv1/mac_lld.c +++ b/os/hal/ports/STM32/LLD/MACv1/mac_lld.c @@ -472,6 +472,9 @@ void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp) { STM32_TDES0_IC | STM32_TDES0_LS | STM32_TDES0_FS | STM32_TDES0_TCH | STM32_TDES0_OWN; + /* Wait for the write to tdes0 to go through before resuming the DMA.*/ + __DSB(); + /* If the DMA engine is stalled then a restart request is issued.*/ if ((ETH->DMASR & ETH_DMASR_TPS) == ETH_DMASR_TPS_Suspended) { ETH->DMASR = ETH_DMASR_TBUS; @@ -550,6 +553,9 @@ void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp) { /* Give buffer back to the Ethernet DMA.*/ rdp->physdesc->rdes0 = STM32_RDES0_OWN; + /* Wait for the write to rdes0 to go through before resuming the DMA.*/ + __DSB(); + /* If the DMA engine is stalled then a restart request is issued.*/ if ((ETH->DMASR & ETH_DMASR_RPS) == ETH_DMASR_RPS_Suspended) { ETH->DMASR = ETH_DMASR_RBUS; diff --git a/readme.txt b/readme.txt index d9b781007..ef70507b7 100644 --- a/readme.txt +++ b/readme.txt @@ -75,6 +75,8 @@ *** 16.1.8 *** - HAL: Fixed STM32 OTGv1 driver not serving interrupts for endpoints > 5 (bug #816). +- HAL: Fixed STM32 MAC driver needs __DSB() for STM32F7 when operating in + SRAM1/2 (bug #815). *** 16.1.7 *** - VAR: Fixed BYTE_ORDER redefined in lwip_bindings/arch/cc.h (bug #814).