# i.MX RT5XX Series

# Copyright (c) 2022, NXP
# SPDX-License-Identifier: Apache-2.0

choice
	prompt "i.MX RT5XX Series MCU Selection"
	depends on SOC_SERIES_IMX_RT5XX

config SOC_MIMXRT595S_CM33
	bool "SOC_MIMXRT595S M33"
	select CPU_HAS_ARM_SAU
	select CPU_HAS_ARM_MPU
	select CPU_HAS_FPU
	select PLATFORM_SPECIFIC_INIT
	select ARMV8_M_DSP
	select ARM_TRUSTZONE_M
	select CPU_CORTEX_M_HAS_SYSTICK
	select HAS_MCUX
	select HAS_MCUX_SYSCON
	select HAS_MCUX_FLEXCOMM
	select HAS_MCUX_FLEXSPI
	select HAS_MCUX_CACHE
	select HAS_MCUX_LPC_DMA
	select HAS_MCUX_LPADC
	select HAS_MCUX_OS_TIMER
	select HAS_MCUX_LPC_RTC
	select HAS_MCUX_TRNG
	select HAS_MCUX_SCTIMER
	select HAS_MCUX_USDHC1
	select HAS_MCUX_USDHC2
	select HAS_MCUX_USB_LPCIP3511
	select USB_DEDICATED_MEMORY if USB_DEVICE_DRIVER
	select HAS_MCUX_CTIMER
endchoice

if SOC_SERIES_IMX_RT5XX

config SOC_PART_NUMBER_MIMXRT533SFFOC
	bool

config SOC_PART_NUMBER_MIMXRT555SFFOC
	bool

config SOC_PART_NUMBER_MIMXRT595SFFOC
	bool

config SOC_PART_NUMBER_MIMXRT533SFAWCR
	bool

config SOC_PART_NUMBER_MIMXRT555SFAWCR
	bool

config SOC_PART_NUMBER_MIMXRT595SFAWCR
	bool

config SOC_PART_NUMBER_IMX_RT5XX
	string
	default "MIMXRT533SFAWCR" if SOC_PART_NUMBER_MIMXRT533SFAWCR
	default "MIMXRT555SFAWCR" if SOC_PART_NUMBER_MIMXRT555SFAWCR
	default "MIMXRT595SFAWCR" if SOC_PART_NUMBER_MIMXRT595SFAWCR
	default "MIMXRT533SFFOC" if SOC_PART_NUMBER_MIMXRT533SFFOC
	default "MIMXRT555SFFOC" if SOC_PART_NUMBER_MIMXRT555SFFOC
	default "MIMXRT595SFFOC" if SOC_PART_NUMBER_MIMXRT595SFFOC

	help
	  This string holds the full part number of the SoC. It is a hidden
	  option that you should not set directly. The part number selection
	  choice defines the default value for this string.

menuconfig NXP_IMX_RT5XX_BOOT_HEADER
	bool "The boot header"
	depends on !BOOTLOADER_MCUBOOT
	help
	  Enable data structures required by the boot ROM to boot the
	  application from an external flash device.

if NXP_IMX_RT5XX_BOOT_HEADER

choice BOOT_DEVICE
	prompt "Boot device selection"
	default BOOT_FLEXSPI_NOR

config BOOT_FLEXSPI_NOR
	bool "FlexSPI serial NOR"

endchoice

config FLASH_CONFIG_OFFSET
	hex "Flash config data offset"
	default 0x400
	help
	  The flash config offset provides the boot ROM with the on-board
	  flash type and parameters. The boot ROM requires a fixed flash config
	  offset for FlexSPI device.

config IMAGE_VECTOR_TABLE_OFFSET
	hex "Image vector table offset"
	default 0x1000
	help
	  The Image Vector Table (IVT) provides the boot ROM with pointers to
	  the application entry point and device configuration data. The boot
	  ROM requires a fixed IVT offset for each type of boot device.

endif # NXP_IMX_RT5XX_BOOT_HEADER

endif # SOC_SERIES_IMX_RT5XX
