Skip to content

Commit 75fef9a

Browse files
committed
drivers: flash: stm32 flash driver common functions
Move the flash_stm32_write_protection and flash_stm32_option_bytes_lock functions to a common file for stm32 devices including stm32h7 Signed-off-by: Francois Ramu <[email protected]>
1 parent 0717698 commit 75fef9a

File tree

4 files changed

+75
-102
lines changed

4 files changed

+75
-102
lines changed

drivers/flash/flash_stm32.c

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -288,81 +288,6 @@ static int flash_stm32_cr_lock(const struct device *dev, bool enable)
288288
return rc;
289289
}
290290

291-
int flash_stm32_option_bytes_lock(const struct device *dev, bool enable)
292-
{
293-
FLASH_TypeDef *regs = FLASH_STM32_REGS(dev);
294-
295-
#if defined(FLASH_OPTCR_OPTLOCK) /* F2, F4, F7 */
296-
if (enable) {
297-
regs->OPTCR |= FLASH_OPTCR_OPTLOCK;
298-
} else if (regs->OPTCR & FLASH_OPTCR_OPTLOCK) {
299-
regs->OPTKEYR = FLASH_OPT_KEY1;
300-
regs->OPTKEYR = FLASH_OPT_KEY2;
301-
}
302-
#else
303-
int rc;
304-
305-
/* Unlock CR/PECR/NSCR register if needed. */
306-
if (!enable) {
307-
rc = flash_stm32_cr_lock(dev, false);
308-
if (rc) {
309-
return rc;
310-
}
311-
}
312-
#if defined(FLASH_CR_OPTWRE) /* F0, F1 and F3 */
313-
if (enable) {
314-
regs->CR &= ~FLASH_CR_OPTWRE;
315-
} else if (!(regs->CR & FLASH_CR_OPTWRE)) {
316-
regs->OPTKEYR = FLASH_OPTKEY1;
317-
regs->OPTKEYR = FLASH_OPTKEY2;
318-
}
319-
#elif defined(FLASH_CR_OPTLOCK) /* G0, G4, L4, WB and WL */
320-
if (enable) {
321-
regs->CR |= FLASH_CR_OPTLOCK;
322-
} else if (regs->CR & FLASH_CR_OPTLOCK) {
323-
regs->OPTKEYR = FLASH_OPTKEY1;
324-
regs->OPTKEYR = FLASH_OPTKEY2;
325-
}
326-
#elif defined(FLASH_PECR_OPTLOCK) /* L0 and L1 */
327-
if (enable) {
328-
regs->PECR |= FLASH_PECR_OPTLOCK;
329-
} else if (regs->PECR & FLASH_PECR_OPTLOCK) {
330-
regs->OPTKEYR = FLASH_OPTKEY1;
331-
regs->OPTKEYR = FLASH_OPTKEY2;
332-
}
333-
#elif defined(FLASH_NSCR_OPTLOCK) /* L5 and U5 */
334-
if (enable) {
335-
regs->NSCR |= FLASH_NSCR_OPTLOCK;
336-
} else if (regs->NSCR & FLASH_NSCR_OPTLOCK) {
337-
regs->OPTKEYR = FLASH_OPTKEY1;
338-
regs->OPTKEYR = FLASH_OPTKEY2;
339-
}
340-
#elif defined(FLASH_NSCR1_OPTLOCK) /* WBA */
341-
if (enable) {
342-
regs->NSCR1 |= FLASH_NSCR1_OPTLOCK;
343-
} else if (regs->NSCR1 & FLASH_NSCR1_OPTLOCK) {
344-
regs->OPTKEYR = FLASH_OPTKEY1;
345-
regs->OPTKEYR = FLASH_OPTKEY2;
346-
}
347-
#endif
348-
/* Lock CR/PECR/NSCR register if needed. */
349-
if (enable) {
350-
rc = flash_stm32_cr_lock(dev, true);
351-
if (rc) {
352-
return rc;
353-
}
354-
}
355-
#endif
356-
357-
if (enable) {
358-
LOG_DBG("Option bytes locked");
359-
} else {
360-
LOG_DBG("Option bytes unlocked");
361-
}
362-
363-
return 0;
364-
}
365-
366291
#if defined(CONFIG_FLASH_EX_OP_ENABLED) && defined(CONFIG_FLASH_STM32_BLOCK_REGISTERS)
367292
int flash_stm32_control_register_disable(const struct device *dev)
368293
{

drivers/flash/flash_stm32.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,6 @@ int flash_stm32_block_erase_loop(const struct device *dev,
324324

325325
int flash_stm32_wait_flash_idle(const struct device *dev);
326326

327-
int flash_stm32_option_bytes_lock(const struct device *dev, bool enable);
328-
329327
uint32_t flash_stm32_option_bytes_read(const struct device *dev);
330328

331329
int flash_stm32_option_bytes_write(const struct device *dev, uint32_t mask,

drivers/flash/flash_stm32_ex_op.c

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,81 @@
2020

2121
LOG_MODULE_REGISTER(flash_stm32_ex_op, CONFIG_FLASH_LOG_LEVEL);
2222

23+
int flash_stm32_option_bytes_lock(const struct device *dev, bool enable)
24+
{
25+
FLASH_TypeDef *regs = FLASH_STM32_REGS(dev);
26+
27+
#if defined(FLASH_OPTCR_OPTLOCK) /* F2, F4, F7 or H7 */
28+
if (enable) {
29+
regs->OPTCR |= FLASH_OPTCR_OPTLOCK;
30+
} else if (regs->OPTCR & FLASH_OPTCR_OPTLOCK) {
31+
regs->OPTKEYR = FLASH_OPT_KEY1;
32+
regs->OPTKEYR = FLASH_OPT_KEY2;
33+
}
34+
#else
35+
int rc;
36+
37+
/* Unlock CR/PECR/NSCR register if needed. */
38+
if (!enable) {
39+
rc = flash_stm32_write_protection(dev, false);
40+
if (rc) {
41+
return rc;
42+
}
43+
}
44+
#if defined(FLASH_CR_OPTWRE) /* F0, F1 and F3 */
45+
if (enable) {
46+
regs->CR &= ~FLASH_CR_OPTWRE;
47+
} else if (!(regs->CR & FLASH_CR_OPTWRE)) {
48+
regs->OPTKEYR = FLASH_OPTKEY1;
49+
regs->OPTKEYR = FLASH_OPTKEY2;
50+
}
51+
#elif defined(FLASH_CR_OPTLOCK) /* G0, G4, L4, WB and WL */
52+
if (enable) {
53+
regs->CR |= FLASH_CR_OPTLOCK;
54+
} else if (regs->CR & FLASH_CR_OPTLOCK) {
55+
regs->OPTKEYR = FLASH_OPTKEY1;
56+
regs->OPTKEYR = FLASH_OPTKEY2;
57+
}
58+
#elif defined(FLASH_PECR_OPTLOCK) /* L0 and L1 */
59+
if (enable) {
60+
regs->PECR |= FLASH_PECR_OPTLOCK;
61+
} else if (regs->PECR & FLASH_PECR_OPTLOCK) {
62+
regs->OPTKEYR = FLASH_OPTKEY1;
63+
regs->OPTKEYR = FLASH_OPTKEY2;
64+
}
65+
#elif defined(FLASH_NSCR_OPTLOCK) /* L5 and U5 */
66+
if (enable) {
67+
regs->NSCR |= FLASH_NSCR_OPTLOCK;
68+
} else if (regs->NSCR & FLASH_NSCR_OPTLOCK) {
69+
regs->OPTKEYR = FLASH_OPTKEY1;
70+
regs->OPTKEYR = FLASH_OPTKEY2;
71+
}
72+
#elif defined(FLASH_NSCR1_OPTLOCK) /* WBA */
73+
if (enable) {
74+
regs->NSCR1 |= FLASH_NSCR1_OPTLOCK;
75+
} else if (regs->NSCR1 & FLASH_NSCR1_OPTLOCK) {
76+
regs->OPTKEYR = FLASH_OPTKEY1;
77+
regs->OPTKEYR = FLASH_OPTKEY2;
78+
}
79+
#endif
80+
/* Lock CRPECR/NSCR register if needed. */
81+
if (enable) {
82+
rc = flash_stm32_write_protection(dev, true);
83+
if (rc) {
84+
return rc;
85+
}
86+
}
87+
#endif
88+
89+
if (enable) {
90+
LOG_DBG("Option bytes locked");
91+
} else {
92+
LOG_DBG("Option bytes unlocked");
93+
}
94+
95+
return 0;
96+
}
97+
2398
#if defined(CONFIG_FLASH_STM32_WRITE_PROTECT)
2499
int flash_stm32_ex_op_sector_wp(const struct device *dev, const uintptr_t in,
25100
void *out)

drivers/flash/flash_stm32h7x.c

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -309,31 +309,6 @@ int flash_stm32_option_bytes_disable(const struct device *dev)
309309
}
310310
#endif /* CONFIG_FLASH_STM32_BLOCK_REGISTERS */
311311

312-
int flash_stm32_option_bytes_lock(const struct device *dev, bool enable)
313-
{
314-
FLASH_TypeDef *regs = FLASH_STM32_REGS(dev);
315-
316-
if (enable) {
317-
regs->OPTCR |= FLASH_OPTCR_OPTLOCK;
318-
} else if (regs->OPTCR & FLASH_OPTCR_OPTLOCK) {
319-
#ifdef CONFIG_SOC_SERIES_STM32H7RSX
320-
regs->OPTKEYR = FLASH_OPTKEY1;
321-
regs->OPTKEYR = FLASH_OPTKEY2;
322-
#else
323-
regs->OPTKEYR = FLASH_OPT_KEY1;
324-
regs->OPTKEYR = FLASH_OPT_KEY2;
325-
#endif /* CONFIG_SOC_SERIES_STM32H7RSX */
326-
}
327-
328-
if (enable) {
329-
LOG_DBG("Option bytes locked");
330-
} else {
331-
LOG_DBG("Option bytes unlocked");
332-
}
333-
334-
return 0;
335-
}
336-
337312
bool flash_stm32_valid_range(const struct device *dev, off_t offset, uint32_t len, bool write)
338313
{
339314
#if defined(DUAL_BANK)

0 commit comments

Comments
 (0)