Browse Source

drivers: bbram: stm32: reference counter for Backup Registers accesses

Use recently added SoCs functions to request access to SoC backup
domain resources These function use a reference counter to track these
request and ensure the resources are accessible as long as at least a
consumer requires access.

Fixes issue 90942.

Signed-off-by: Etienne Carriere <etienne.carriere@foss.st.com>
pull/92218/head
Etienne Carriere 2 weeks ago committed by Benjamin Cabé
parent
commit
c99715a866
  1. 10
      drivers/bbram/bbram_stm32.c

10
drivers/bbram/bbram_stm32.c

@ -13,6 +13,8 @@ @@ -13,6 +13,8 @@
#include <zephyr/sys/util.h>
#include <stm32_ll_pwr.h>
#include <stm32_ll_rtc.h>
#include <stm32_backup_domain.h>
LOG_MODULE_REGISTER(bbram, CONFIG_BBRAM_LOG_LEVEL);
#define STM32_BKP_REG_BYTES 4
@ -66,9 +68,7 @@ static int bbram_stm32_write(const struct device *dev, size_t offset, size_t siz @@ -66,9 +68,7 @@ static int bbram_stm32_write(const struct device *dev, size_t offset, size_t siz
return -EFAULT;
}
#if defined(PWR_CR_DBP) || defined(PWR_CR1_DBP) || defined(PWR_DBPCR_DBP) || defined(PWR_DBPR_DBP)
LL_PWR_EnableBkUpAccess();
#endif /* PWR_CR_DBP || PWR_CR1_DBP || PWR_DBPCR_DBP || PWR_DBPR_DBP */
stm32_backup_domain_enable_access();
for (size_t written = 0; written < size; written += to_copy) {
reg = STM32_BKP_REG(STM32_BKP_REG_INDEX(offset + written));
@ -78,9 +78,7 @@ static int bbram_stm32_write(const struct device *dev, size_t offset, size_t siz @@ -78,9 +78,7 @@ static int bbram_stm32_write(const struct device *dev, size_t offset, size_t siz
STM32_BKP_REG(STM32_BKP_REG_INDEX(offset + written)) = reg;
}
#if defined(PWR_CR_DBP) || defined(PWR_CR1_DBP) || defined(PWR_DBPCR_DBP) || defined(PWR_DBPR_DBP)
LL_PWR_DisableBkUpAccess();
#endif /* PWR_CR_DBP || PWR_CR1_DBP || PWR_DBPCR_DBP || PWR_DBPR_DBP */
stm32_backup_domain_disable_access();
return 0;
}

Loading…
Cancel
Save