# ST Microelectronics STM32 MCUs Flash driver config

# Copyright (c) 2016 RnDity Sp. z o.o.
# Copyright (c) 2017 BayLibre, SAS
# SPDX-License-Identifier: Apache-2.0

config SOC_FLASH_STM32
	bool "STM32 flash driver"
	depends on DT_HAS_ST_STM32_FLASH_CONTROLLER_ENABLED || \
		   DT_HAS_ST_STM32H7_FLASH_CONTROLLER_ENABLED
	select FLASH_HAS_DRIVER_ENABLED
	default y
	select SOC_FLASH_STM32_V1 if SOC_SERIES_STM32F0X
	select SOC_FLASH_STM32_V1 if SOC_SERIES_STM32F1X
	select SOC_FLASH_STM32_V1 if SOC_SERIES_STM32F3X
	select SOC_FLASH_STM32_V1 if SOC_SERIES_STM32L0X
	select SOC_FLASH_STM32_V1 if SOC_SERIES_STM32L1X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32G0X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32F2X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32F4X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32F7X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32L4X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32L5X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32U5X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32WBX
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32WLX
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32G4X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32H7X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32G0X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32F2X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32F4X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32F7X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32L4X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32L5X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32U5X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32WBX
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32WLX
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32G4X
	select FLASH_HAS_PAGE_LAYOUT if SOC_SERIES_STM32H7X
	select MPU_ALLOW_FLASH_WRITE if ARM_MPU
	help
	  Enable STM32F0x, STM32F1x, STM32F2x, STM32F3x, STM32F4x, STM32F7x,
	  STM32L0x, STM32L1x, STM32L4x, STM32L5x, STM32U5x, STM32WBx, STM32WLx, STM32G0x,
	  STM32G4x or STM3H7x series flash driver.

config SOC_FLASH_STM32_V1
	bool
	select FLASH_PAGE_LAYOUT
	select FLASH_HAS_PAGE_LAYOUT
	help
	  Enable the generic backend for the STM32 flash driver.
