@@ -62,44 +62,55 @@ struct flash_stm32_sector_t {
6262 volatile uint32_t * sr ;
6363};
6464
65- #if defined(CONFIG_FLASH_STM32_READOUT_PROTECTION )
66- uint8_t flash_stm32_get_rdp_level (const struct device * dev )
67- {
68- FLASH_TypeDef * regs = FLASH_STM32_REGS (dev );
69-
70- return (regs -> OPTSR_CUR & FLASH_OPTSR_RDP_Msk ) >> FLASH_OPTSR_RDP_Pos ;
71- }
72-
73- void flash_stm32_set_rdp_level (const struct device * dev , uint8_t level )
65+ static __unused int write_optb (const struct device * dev , uint32_t mask ,
66+ uint32_t value )
7467{
7568 FLASH_TypeDef * regs = FLASH_STM32_REGS (dev );
76- uint32_t value = ( uint32_t ) level << FLASH_OPTSR_RDP_Pos ;
69+ int rc ;
7770
7871 if (regs -> OPTCR & FLASH_OPTCR_OPTLOCK ) {
7972 LOG_ERR ("Option bytes locked" );
80- return ;
73+ return - EIO ;
8174 }
8275
83- if ((regs -> OPTCR & FLASH_OPTSR_RDP_Msk ) == value ) {
76+ if ((regs -> OPTCR & mask ) == value ) {
8477 /* Done already */
85- return ;
78+ return 0 ;
8679 }
8780
88- if (flash_stm32_wait_flash_idle (dev ) != 0 ) {
81+ rc = flash_stm32_wait_flash_idle (dev );
82+ if (rc < 0 ) {
8983 LOG_ERR ("Err flash no idle" );
90- return ;
84+ return rc ;
9185 }
9286
93- regs -> OPTCR = (regs -> OPTCR & ~FLASH_OPTSR_RDP_Msk ) | value ;
87+ regs -> OPTCR = (regs -> OPTCR & ~mask ) | value ;
9488 regs -> OPTCR |= FLASH_OPTCR_OPTSTART ;
9589
9690 /* Make sure previous write is completed. */
9791 barrier_dsync_fence_full ();
9892
99- if (flash_stm32_wait_flash_idle (dev ) != 0 ) {
93+ rc = flash_stm32_wait_flash_idle (dev );
94+ if (rc < 0 ) {
10095 LOG_ERR ("Err flash no idle" );
101- return ;
96+ return rc ;
10297 }
98+
99+ return 0 ;
100+ }
101+
102+ #if defined(CONFIG_FLASH_STM32_READOUT_PROTECTION )
103+ uint8_t flash_stm32_get_rdp_level (const struct device * dev )
104+ {
105+ FLASH_TypeDef * regs = FLASH_STM32_REGS (dev );
106+
107+ return (regs -> OPTSR_CUR & FLASH_OPTSR_RDP_Msk ) >> FLASH_OPTSR_RDP_Pos ;
108+ }
109+
110+ void flash_stm32_set_rdp_level (const struct device * dev , uint8_t level )
111+ {
112+ write_optb (dev , FLASH_OPTSR_RDP_Msk ,
113+ (uint32_t )level << FLASH_OPTSR_RDP_Pos );
103114}
104115#endif /* CONFIG_FLASH_STM32_READOUT_PROTECTION */
105116
0 commit comments