From d7fb6fa9f11d14955415d701ba0ea79f7884477c Mon Sep 17 00:00:00 2001 From: Thomas Stranger Date: Tue, 27 Apr 2021 18:02:57 +0200 Subject: [PATCH] drivers/dma: stm32 dmamux: fix isActiveFlag/clearFlag function array len This commit uses dt property dma-channels instead of ll defines to make sure every soc has correct number of function pointers defined. While commit 5f6218a tried to fix this for g0 series, this caused regression for other series(e.g. stm32g431). Using UTIL_LISTIFY and dt properties this should finally be fixed and reduce boilerplate code. Signed-off-by: Thomas Stranger --- drivers/dma/dmamux_stm32.c | 15 +++++++ drivers/dma/dmamux_stm32.h | 82 -------------------------------------- 2 files changed, 15 insertions(+), 82 deletions(-) diff --git a/drivers/dma/dmamux_stm32.c b/drivers/dma/dmamux_stm32.c index 65635a76df4..c8876892b0f 100644 --- a/drivers/dma/dmamux_stm32.c +++ b/drivers/dma/dmamux_stm32.c @@ -45,6 +45,21 @@ struct dmamux_stm32_config { const struct dmamux_stm32_channel *mux_channels; }; +/* + * UTIL_LISTIFY is used to generate arrays with function pointers to check + * and clear interrupt flags using LL functions + */ +#define IS_ACTIVE_FLAG_SOX(i, _) LL_DMAMUX_IsActiveFlag_SO ## i, +#define CLEAR_FLAG_SOX(i, _) LL_DMAMUX_ClearFlag_SO ## i, + +uint32_t (*func_ll_is_active_so[])(DMAMUX_Channel_TypeDef *DMAMUXx) = { + UTIL_LISTIFY(DT_INST_PROP(0, dma_channels), IS_ACTIVE_FLAG_SOX) +}; + +void (*func_ll_clear_so[])(DMAMUX_Channel_TypeDef *DMAMUXx) = { + UTIL_LISTIFY(DT_INST_PROP(0, dma_channels), CLEAR_FLAG_SOX) +}; + int dmamux_stm32_configure(const struct device *dev, uint32_t id, struct dma_config *config) { diff --git a/drivers/dma/dmamux_stm32.h b/drivers/dma/dmamux_stm32.h index 78a4a149cef..f904e9a184d 100644 --- a/drivers/dma/dmamux_stm32.h +++ b/drivers/dma/dmamux_stm32.h @@ -54,88 +54,6 @@ uint32_t table_ll_channel[] = { #endif /* LL_DMAMUX_CHANNEL_15 */ }; -uint32_t (*func_ll_is_active_so[])(DMAMUX_Channel_TypeDef *DMAMUXx) = { - LL_DMAMUX_IsActiveFlag_SO0, - LL_DMAMUX_IsActiveFlag_SO1, - LL_DMAMUX_IsActiveFlag_SO2, - LL_DMAMUX_IsActiveFlag_SO3, - LL_DMAMUX_IsActiveFlag_SO4, -#if defined(LL_DMAMUX_CHANNEL_5) - LL_DMAMUX_IsActiveFlag_SO5, -#endif /* LL_DMAMUX_CHANNEL_5 */ -#if defined(LL_DMAMUX_CHANNEL_6) - LL_DMAMUX_IsActiveFlag_SO6, -#endif /* LL_DMAMUX_CHANNEL_6 */ -#if defined(LL_DMAMUX_CHANNEL_7) - LL_DMAMUX_IsActiveFlag_SO7, -#endif /* LL_DMAMUX_CHANNEL_7 */ -#if defined(LL_DMAMUX_CHANNEL_8) - LL_DMAMUX_IsActiveFlag_SO8, -#endif /* LL_DMAMUX_CHANNEL_8 */ -#if defined(LL_DMAMUX_CHANNEL_9) - LL_DMAMUX_IsActiveFlag_SO9, -#endif /* LL_DMAMUX_CHANNEL_9 */ -#if defined(LL_DMAMUX_CHANNEL_10) - LL_DMAMUX_IsActiveFlag_SO10, -#endif /* LL_DMAMUX_CHANNEL_10 */ -#if defined(LL_DMAMUX_CHANNEL_11) - LL_DMAMUX_IsActiveFlag_SO11, -#endif /* LL_DMAMUX_CHANNEL_11 */ -#if defined(LL_DMAMUX_CHANNEL_12) - LL_DMAMUX_IsActiveFlag_SO12, -#endif /* LL_DMAMUX_CHANNEL_12 */ -#if defined(LL_DMAMUX_CHANNEL_130) - LL_DMAMUX_IsActiveFlag_SO13, -#endif /* LL_DMAMUX_CHANNEL_130 */ -#if defined(LL_DMAMUX_CHANNEL_14) - LL_DMAMUX_IsActiveFlag_SO14, -#endif /* LL_DMAMUX_CHANNEL_14 */ -#if defined(LL_DMAMUX_CHANNEL_15) - LL_DMAMUX_IsActiveFlag_SO15, -#endif /* LL_DMAMUX_CHANNEL_15 */ -}; - -void (*func_ll_clear_so[])(DMAMUX_Channel_TypeDef *DMAMUXx) = { - LL_DMAMUX_ClearFlag_SO0, - LL_DMAMUX_ClearFlag_SO1, - LL_DMAMUX_ClearFlag_SO2, - LL_DMAMUX_ClearFlag_SO3, - LL_DMAMUX_ClearFlag_SO4, -#if defined(LL_DMAMUX_CHANNEL_5) - LL_DMAMUX_ClearFlag_SO5, -#endif /* LL_DMAMUX_CHANNEL_5 */ -#if defined(LL_DMAMUX_CHANNEL_6) - LL_DMAMUX_ClearFlag_SO6, -#endif /* LL_DMAMUX_CHANNEL_6 */ -#if defined(LL_DMAMUX_CHANNEL_7) - LL_DMAMUX_ClearFlag_SO7, -#endif /* LL_DMAMUX_CHANNEL_7 */ -#if defined(LL_DMAMUX_CHANNEL_8) - LL_DMAMUX_ClearFlag_SO8, -#endif /* LL_DMAMUX_CHANNEL_8 */ -#if defined(LL_DMAMUX_CHANNEL_9) - LL_DMAMUX_ClearFlag_SO9, -#endif /* LL_DMAMUX_CHANNEL_9 */ -#if defined(LL_DMAMUX_CHANNEL_10) - LL_DMAMUX_ClearFlag_SO10, -#endif /* LL_DMAMUX_CHANNEL_10 */ -#if defined(LL_DMAMUX_CHANNEL_11) - LL_DMAMUX_ClearFlag_SO11, -#endif /* LL_DMAMUX_CHANNEL_11 */ -#if defined(LL_DMAMUX_CHANNEL_12) - LL_DMAMUX_ClearFlag_SO12, -#endif /* LL_DMAMUX_CHANNEL_12 */ -#if defined(LL_DMAMUX_CHANNEL_13) - LL_DMAMUX_ClearFlag_SO13, -#endif /* LL_DMAMUX_CHANNEL_13 */ -#if defined(LL_DMAMUX_CHANNEL_14) - LL_DMAMUX_ClearFlag_SO14, -#endif /* LL_DMAMUX_CHANNEL_14 */ -#if defined(LL_DMAMUX_CHANNEL_15) - LL_DMAMUX_ClearFlag_SO15, -#endif /* LL_DMAMUX_CHANNEL_15 */ -}; - uint32_t (*func_ll_is_active_rgo[])(DMAMUX_Channel_TypeDef *DMAMUXx) = { LL_DMAMUX_IsActiveFlag_RGO0, LL_DMAMUX_IsActiveFlag_RGO1,