# i.MX RT6XX Series

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

choice
	prompt "i.MX RT6XX Series MCU Selection"
	depends on SOC_SERIES_IMX_RT6XX

config SOC_MIMXRT685S_CM33
	bool "SOC_MIMXRT685S M33"
	select CPU_HAS_ARM_SAU
	select CPU_HAS_ARM_MPU
	select CPU_HAS_FPU
	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 INIT_SYS_PLL
	select HAS_MCUX_USB_LPCIP3511
	select HAS_MCUX_CTIMER
endchoice

if SOC_SERIES_IMX_RT6XX

config SOC_PART_NUMBER_MIMXRT685SFVKB
	bool

config SOC_PART_NUMBER_MIMXRT685SFFOB
	bool

config SOC_PART_NUMBER_MIMXRT685SFAWBR
	bool

config SOC_PART_NUMBER_IMX_RT6XX
	string
	default "MIMXRT685SFVKB" if SOC_PART_NUMBER_MIMXRT685SFVKB
	default "MIMXRT685SFFOB" if SOC_PART_NUMBER_MIMXRT685SFFOB
	default "MIMXRT685SFAWBR" if SOC_PART_NUMBER_MIMXRT685SFAWBR

	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.

config INIT_SYS_PLL
	bool "Initialize SYS PLL"

config INIT_AUDIO_PLL
	bool "Initialize Audio PLL"

config XTAL_SYS_CLK_HZ
	int "External oscillator frequency"
	help
	  Set the external oscillator frequency in Hz. This should be set by the
	  board's defconfig.

config SYSOSC_SETTLING_US
	int "System oscillator settling time"
	help
	  Set the board system oscillator settling time in us. This should be set by the
	  board's defconfig.

menuconfig NXP_IMX_RT6XX_BOOT_HEADER
	bool "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_RT6XX_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_RT6XX_BOOT_HEADER

choice CODE_LOCATION
	prompt "Code location selection"
	default CODE_FLEXSPI
config CODE_FLEXSPI
	bool "Link code into external FlexSPI-controlled memory"
endchoice

endif # SOC_SERIES_IMX_RT6XX
