From a361c45af6130b5dbbc7b197991931ab2367685f Mon Sep 17 00:00:00 2001 From: Fabio Baltieri Date: Tue, 20 May 2025 10:54:33 +0100 Subject: [PATCH] drivers: dp: use atomic APIs for pin set/reset Use LL_GPIO_SetOutputPin and LL_GPIO_ResetOutputPin for the STM32 optimized DP functions. This yelds a speedup of the bit-banged interface from about 585kHz to 640kHz on an STM32C0. Suggested-by: Mathieu Choplain Signed-off-by: Fabio Baltieri --- drivers/dp/swdp_ll_pin_stm32.h | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/drivers/dp/swdp_ll_pin_stm32.h b/drivers/dp/swdp_ll_pin_stm32.h index 5b5cd3149d5..492c5219334 100644 --- a/drivers/dp/swdp_ll_pin_stm32.h +++ b/drivers/dp/swdp_ll_pin_stm32.h @@ -35,29 +35,15 @@ static ALWAYS_INLINE void swdp_ll_pin_output(void *const base, uint8_t pin) static ALWAYS_INLINE void swdp_ll_pin_set(void *const base, uint8_t pin) { GPIO_TypeDef *gpio = base; - uint32_t val; - z_stm32_hsem_lock(CFG_HW_GPIO_SEMID, HSEM_LOCK_DEFAULT_RETRY); - - val = LL_GPIO_ReadOutputPort(gpio); - val |= BIT(pin); - LL_GPIO_WriteOutputPort(gpio, val); - - z_stm32_hsem_unlock(CFG_HW_GPIO_SEMID); + LL_GPIO_SetOutputPin(gpio, BIT(pin)); } static ALWAYS_INLINE void swdp_ll_pin_clr(void *const base, uint8_t pin) { GPIO_TypeDef *gpio = base; - uint32_t val; - z_stm32_hsem_lock(CFG_HW_GPIO_SEMID, HSEM_LOCK_DEFAULT_RETRY); - - val = LL_GPIO_ReadOutputPort(gpio); - val &= ~BIT(pin); - LL_GPIO_WriteOutputPort(gpio, val); - - z_stm32_hsem_unlock(CFG_HW_GPIO_SEMID); + LL_GPIO_ResetOutputPin(gpio, BIT(pin)); } static ALWAYS_INLINE uint32_t swdp_ll_pin_get(void *const base, uint8_t pin)