drivers: ethernet: stm32: fix multicast filter configuration
With CONFIG_ETH_STM32_MULTICAST_FILTER=n, MACFFR was being set to 0 instead
of ETH_MULTICASTFRAMESFILTER_NONE, blocking all multicast traffic.
Instead, reset all the relevant bits first, then set either
ETH_MULTICASTFRAMESFILTER_HASHTABLE or ETH_MULTICASTFRAMESFILTER_NONE
depending on Kconfig.
This issue was introduced in #53850, `git diff a5f9fc2~2 a5f9fc2` (the
total diff of that PR) shows what happened - the
`tmp |= ETH_MULTICASTFRAMESFILTER_NONE;` line was removed completely
instead of being gated by `!defined(CONFIG_ETH_STM32_MULTICAST_FILTER)`.
Signed-off-by: Armin Brauns <armin.brauns@embedded-solutions.at>
diff --git a/drivers/ethernet/eth_stm32_hal.c b/drivers/ethernet/eth_stm32_hal.c
index 75b48da..8cbea80 100644
--- a/drivers/ethernet/eth_stm32_hal.c
+++ b/drivers/ethernet/eth_stm32_hal.c
@@ -254,17 +254,19 @@
#else
uint32_t tmp = heth->Instance->MACFFR;
- /* disable multicast perfect filtering */
+ /* clear all multicast filter bits, resulting in perfect filtering */
tmp &= ~(ETH_MULTICASTFRAMESFILTER_PERFECTHASHTABLE |
-#if !defined(CONFIG_ETH_STM32_MULTICAST_FILTER)
ETH_MULTICASTFRAMESFILTER_HASHTABLE |
-#endif /* CONFIG_ETH_STM32_MULTICAST_FILTER */
- ETH_MULTICASTFRAMESFILTER_PERFECT);
+ ETH_MULTICASTFRAMESFILTER_PERFECT |
+ ETH_MULTICASTFRAMESFILTER_NONE);
-#if defined(CONFIG_ETH_STM32_MULTICAST_FILTER)
- /* enable multicast hash receive filter */
- tmp |= ETH_MULTICASTFRAMESFILTER_HASHTABLE;
-#endif /* CONFIG_ETH_STM32_MULTICAST_FILTER */
+ if (IS_ENABLED(CONFIG_ETH_STM32_MULTICAST_FILTER)) {
+ /* enable multicast hash receive filter */
+ tmp |= ETH_MULTICASTFRAMESFILTER_HASHTABLE;
+ } else {
+ /* enable receiving all multicast frames */
+ tmp |= ETH_MULTICASTFRAMESFILTER_NONE;
+ }
heth->Instance->MACFFR = tmp;