# Kconfig - i.MX RT series
#
# Copyright (c) 2017, NXP
#
# SPDX-License-Identifier: Apache-2.0
#

if SOC_SERIES_IMX_RT

config SOC_SERIES
	default "rt"

config TEXT_SECTION_OFFSET
	default 0x2000 if BOOT_FLEXSPI_NOR || BOOT_SEMC_NOR

config INIT_ENET_PLL

if CLOCK_CONTROL

config CLOCK_CONTROL_MCUX_CCM
	default y if HAS_MCUX_CCM

endif # CLOCK_CONTROL

if DISPLAY

config DISPLAY_MCUX_ELCDIF
	default y if HAS_MCUX_ELCDIF

endif # DISPLAY

if GPIO

config GPIO_MCUX_IGPIO
	default y if HAS_MCUX_IGPIO

endif # GPIO

if ENTROPY_GENERATOR

config ENTROPY_MCUX_TRNG
	default y if HAS_MCUX_TRNG

endif # ENTROPY_GENERATOR

if I2C

config I2C_MCUX_LPI2C
	default y if HAS_MCUX_LPI2C

endif # I2C

if NET_L2_ETHERNET

config ETH_MCUX
	def_bool y if HAS_MCUX_ENET

endif # NET_L2_ETHERNET

if SERIAL

config UART_MCUX_LPUART
	default y if HAS_MCUX_LPUART

endif # SERIAL

if SPI

config SPI_MCUX_LPSPI
	default y if HAS_MCUX_LPSPI

endif # SPI

if CODE_ITCM

config FLASH_SIZE
	default $(dt_int_val,DT_NXP_IMX_ITCM_0_SIZE,K)

config FLASH_BASE_ADDRESS
	default $(dt_hex_val,DT_NXP_IMX_ITCM_0_BASE_ADDRESS)

endif # CODE_ITCM

if CODE_FLEXSPI

config FLASH_SIZE
	default $(dt_int_val,DT_NXP_IMX_FLEXSPI_402A8000_SIZE_1,K)

config FLASH_BASE_ADDRESS
	default $(dt_hex_val,DT_NXP_IMX_FLEXSPI_402A8000_BASE_ADDRESS_1)

endif # CODE_FLEXSPI

if CODE_FLEXSPI2

config FLASH_SIZE
        default $(dt_int_val,DT_NXP_IMX_FLEXSPI_402A4000_SIZE_1,K)

config FLASH_BASE_ADDRESS
        default $(dt_hex_val,DT_NXP_IMX_FLEXSPI_402A4000_BASE_ADDRESS_1)

endif # CODE_FLEXSPI2

if DATA_DTCM

config SRAM_SIZE
	default $(dt_int_val,DT_NXP_IMX_DTCM_0_SIZE,K)

config SRAM_BASE_ADDRESS
	default $(dt_hex_val,DT_NXP_IMX_DTCM_0_BASE_ADDRESS)

endif # DATA_DTCM

if DATA_SEMC

config SRAM_SIZE
	default $(dt_int_val,DT_MMIO_SRAM_80000000_SIZE,K)

config SRAM_BASE_ADDRESS
	default $(dt_hex_val,DT_MMIO_SRAM_80000000_BASE_ADDRESS)

endif # DATA_SEMC

source "soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt*"

endif # SOC_SERIES_IMX_RT
