# 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_STM32F3X || SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32L0X  || SOC_SERIES_STM32L1X || SOC_SERIES_STM32L4X || SOC_SERIES_STM32WBX || 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_STM32F4X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32F7X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32L4X
	select FLASH_PAGE_LAYOUT if SOC_SERIES_STM32WBX
	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_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_STM32WBX
	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, STM32F3x, STM32F4x, STM32F7x, STM32L0x,
	  STM32L1x, STM32L4x, STM32WBx, 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.
