# 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
	default 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
