# 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

if CLOCK_CONTROL

config CLOCK_CONTROL_MCUX_CCM
	default y if HAS_MCUX_CCM

endif # CLOCK_CONTROL

if DISK_ACCESS_SDHC

config DISK_ACCESS_USDHC
	default y if (HAS_MCUX_USDHC1 || HAS_MCUX_USDHC2)

endif # DISK_ACCESS_SDHC

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 PWM

config PWM_MCUX
	default y if HAS_MCUX_PWM

endif # PWM

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 COUNTER

config COUNTER_MCUX_GPT
	default y if HAS_MCUX_GPT

config COUNTER_MCUX_GPT1
	default y if HAS_MCUX_GPT

config COUNTER_MCUX_GPT2
	default y if HAS_MCUX_GPT

endif # COUNTER

if SPI

config SPI_MCUX_LPSPI
	default y if HAS_MCUX_LPSPI

endif # SPI

if CODE_ITCM

config FLASH_SIZE
	default $(dt_node_reg_size_int,/soc/flexram@400b0000/itcm@0,0,K)

config FLASH_BASE_ADDRESS
	default $(dt_node_reg_addr_hex,/soc/flexram@400b0000/itcm@0)

endif # CODE_ITCM

if CODE_FLEXSPI

config FLASH_SIZE
	default $(dt_node_reg_size_int,/soc/spi@402a8000,1,K)

config FLASH_BASE_ADDRESS
	default $(dt_node_reg_addr_hex,/soc/spi@402a8000,1)

endif # CODE_FLEXSPI

if CODE_FLEXSPI2

config FLASH_SIZE
	default $(dt_node_reg_size_int,/soc/spi@402a4000,1,K)

config FLASH_BASE_ADDRESS
	default $(dt_node_reg_addr_hex,/soc/spi@402a4000,1)

endif # CODE_FLEXSPI2

if DATA_DTCM

config SRAM_SIZE
	default $(dt_node_reg_size_int,/soc/flexram@400b0000/dtcm@20000000,0,K)

config SRAM_BASE_ADDRESS
	default $(dt_node_reg_addr_hex,/soc/flexram@400b0000/dtcm@20000000)

endif # DATA_DTCM

if DATA_SEMC

config SRAM_SIZE
	default $(dt_node_reg_size_int,/memory@80000000,0,K)

config SRAM_BASE_ADDRESS
	default $(dt_node_reg_addr_hex,/memory@80000000)

endif # DATA_SEMC

if DATA_OCRAM

config SRAM_SIZE
	default $(dt_node_reg_size_int,/memory@20200000,0,K)

config SRAM_BASE_ADDRESS
	default $(dt_node_reg_addr_hex,/memory@20200000)

endif # DATA_OCRAM

if USB

config USB_DC_NXP_EHCI
	default y

endif # USB

if VIDEO

config VIDEO_MCUX_CSI
	default y if HAS_MCUX_CSI

endif

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

endif # SOC_SERIES_IMX_RT
