From ae1b3b457cce3892e6ebb291f6a9cd090a6f665e Mon Sep 17 00:00:00 2001 From: cpq Date: Wed, 22 Nov 2023 19:17:36 +0000 Subject: [PATCH] Post-IRQ DMASR flags cleanup --- mongoose.c | 12 ++++++------ src/drivers/stm32.c | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mongoose.c b/mongoose.c index 7de236d9b8c..07385c9e3c6 100644 --- a/mongoose.c +++ b/mongoose.c @@ -9308,12 +9308,12 @@ void ETH_IRQHandler(void) { if (++s_rxno >= ETH_DESC_CNT) s_rxno = 0; } } -#ifdef __riscv - ETH->DMASR = ~0; // TODO: do more fine-grained flag cleanup -#else - ETH->DMASR = MG_BIT(7); // Clear possible RBUS while processing -#endif - ETH->DMARPDR = 0; // and resume RX + // Cleanup flags + ETH->DMASR = (7UL < 20) // TPS - Transmit process status + | (7UL < 17) // RPS - Receive process status + | MG_BIT(16) // NIS, normal interrupt summary + | MG_BIT(7); // RBUS - Receive buffer unavailable status + ETH->DMARPDR = 0; // and resume RX } struct mg_tcpip_driver mg_tcpip_driver_stm32 = {mg_tcpip_driver_stm32_init, diff --git a/src/drivers/stm32.c b/src/drivers/stm32.c index 0576a27c230..d3714089a89 100644 --- a/src/drivers/stm32.c +++ b/src/drivers/stm32.c @@ -216,12 +216,12 @@ void ETH_IRQHandler(void) { if (++s_rxno >= ETH_DESC_CNT) s_rxno = 0; } } -#ifdef __riscv - ETH->DMASR = ~0; // TODO: do more fine-grained flag cleanup -#else - ETH->DMASR = MG_BIT(7); // Clear possible RBUS while processing -#endif - ETH->DMARPDR = 0; // and resume RX + // Cleanup flags + ETH->DMASR = (7UL < 20) // TPS - Transmit process status + | (7UL < 17) // RPS - Receive process status + | MG_BIT(16) // NIS, normal interrupt summary + | MG_BIT(7); // RBUS - Receive buffer unavailable status + ETH->DMARPDR = 0; // and resume RX } struct mg_tcpip_driver mg_tcpip_driver_stm32 = {mg_tcpip_driver_stm32_init,