# 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 SOC_FAMILY_STM32
	depends on (SOC_SERIES_STM32F0X || SOC_SERIES_STM32F1X || SOC_SERIES_STM32F2X || SOC_SERIES_STM32F3X || SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32L0X  || SOC_SERIES_STM32L1X || SOC_SERIES_STM32L4X || SOC_SERIES_STM32L5X || SOC_SERIES_STM32WBX || SOC_SERIES_STM32WLX || SOC_SERIES_STM32G0X || SOC_SERIES_STM32G4X || SOC_SERIES_STM32H7X)
	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_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_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, 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.
