# ST Microelectronics STM32 MCUs Flash driver config

# Copyright (c) 2016 RnDity Sp. z o.o.
# Copyright (c) 2017 BayLibre, SAS
# Copyright (c) 2022 Linaro Limited
# Copyright (c) 2023 Google Inc
# SPDX-License-Identifier: Apache-2.0

config SOC_FLASH_STM32
	bool "STM32 flash driver"
	depends on DT_HAS_ST_STM32_FLASH_CONTROLLER_ENABLED
	select FLASH_HAS_DRIVER_ENABLED
	default y
	select FLASH_HAS_PAGE_LAYOUT
	select MPU_ALLOW_FLASH_WRITE if ARM_MPU
	select USE_STM32_HAL_FLASH if BT_STM32WBA
	select USE_STM32_HAL_FLASH_EX if BT_STM32WBA
	help
	  Enable flash driver for STM32 series

if SOC_FLASH_STM32

config FLASH_STM32_WRITE_PROTECT
	bool "Extended operation for flash write protection control"
	depends on SOC_SERIES_STM32F4X
	select FLASH_HAS_EX_OP
	default n
	help
	  Enables flash extended operation for enabling/disabling flash write
	  protection.

config FLASH_STM32_WRITE_PROTECT_DISABLE_PREVENTION
	bool "Prevent from disabling flash write protection"
	depends on FLASH_STM32_WRITE_PROTECT
	default n
	help
	  If enabled, all requests to disable flash write protection will be
	  blocked.

config FLASH_STM32_READOUT_PROTECTION
	bool "Extended operation for flash readout protection control"
	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32L4X || SOC_SERIES_STM32G4X
	select FLASH_HAS_EX_OP
	default n
	help
	  Enables flash extended operation for enabling/disabling flash readout
	  protection.

config FLASH_STM32_READOUT_PROTECTION_DISABLE_ALLOW
	bool "Allow disabling readout protection"
	depends on FLASH_STM32_READOUT_PROTECTION
	default n
	help
	  With this option enabled it will be possible to disable readout
	  protection. On STM32 devices it will trigger flash mass erase!

config FLASH_STM32_READOUT_PROTECTION_PERMANENT_ALLOW
	bool "Allow enabling readout protection permanently"
	depends on FLASH_STM32_READOUT_PROTECTION
	default n
	help
	  With this option enabled it will be possible to enable readout
	  protection permanently.

config FLASH_STM32_BLOCK_REGISTERS
	bool "Extended operation for blocking option and control registers"
	default n
	help
	  Enables flash extended operations that can be used to disable access
	  to option and control registers until reset. Disabling access to these
	  registers improves system security, because flash content (or
	  protection settings) can't be changed even when exploit was found.

endif # SOC_FLASH_STM32
