# SPDX-License-Identifier: GPL-2.0-only
config TEGRA_MC
	bool "NVIDIA Tegra Memory Controller support"
	default ARCH_TEGRA
	depends on ARCH_TEGRA || (COMPILE_TEST && COMMON_CLK)
	select INTERCONNECT
	help
	  This driver supports the Memory Controller (MC) hardware found on
	  NVIDIA Tegra SoCs.

if TEGRA_MC

config TEGRA20_EMC
	tristate "NVIDIA Tegra20 External Memory Controller driver"
	default ARCH_TEGRA_2x_SOC
	depends on ARCH_TEGRA_2x_SOC || COMPILE_TEST
	select DEVFREQ_GOV_SIMPLE_ONDEMAND
	select PM_DEVFREQ
	select DDR
	select TEGRA_EMC_COMMON
	help
	  This driver is for the External Memory Controller (EMC) found on
	  Tegra20 chips. The EMC controls the external DRAM on the board.
	  This driver is required to change memory timings / clock rate for
	  external memory.

config TEGRA30_EMC
	tristate "NVIDIA Tegra30 External Memory Controller driver"
	default ARCH_TEGRA_3x_SOC
	depends on ARCH_TEGRA_3x_SOC || COMPILE_TEST
	select PM_OPP
	select DDR
	select TEGRA_EMC_COMMON
	help
	  This driver is for the External Memory Controller (EMC) found on
	  Tegra30 chips. The EMC controls the external DRAM on the board.
	  This driver is required to change memory timings / clock rate for
	  external memory.

config TEGRA114_EMC
	tristate "NVIDIA Tegra114 External Memory Controller driver"
	default ARCH_TEGRA_114_SOC
	depends on ARCH_TEGRA_114_SOC || COMPILE_TEST
	select TEGRA124_CLK_EMC if ARCH_TEGRA
	select PM_OPP
	select TEGRA_EMC_COMMON
	help
	  This driver is for the External Memory Controller (EMC) found on
	  Tegra114 chips. The EMC controls the external DRAM on the board.
	  This driver is required to change memory timings / clock rate for
	  external memory.

config TEGRA124_EMC
	tristate "NVIDIA Tegra124 External Memory Controller driver"
	default ARCH_TEGRA_124_SOC
	depends on ARCH_TEGRA_124_SOC || COMPILE_TEST
	select TEGRA124_CLK_EMC if ARCH_TEGRA
	select PM_OPP
	select TEGRA_EMC_COMMON
	help
	  This driver is for the External Memory Controller (EMC) found on
	  Tegra124 chips. The EMC controls the external DRAM on the board.
	  This driver is required to change memory timings / clock rate for
	  external memory.

config TEGRA210_EMC_TABLE
	bool
	depends on ARCH_TEGRA_210_SOC || COMPILE_TEST

config TEGRA210_EMC
	tristate "NVIDIA Tegra210 External Memory Controller driver"
	depends on ARCH_TEGRA_210_SOC || COMPILE_TEST
	select TEGRA210_EMC_TABLE
	help
	  This driver is for the External Memory Controller (EMC) found on
	  Tegra210 chips. The EMC controls the external DRAM on the board.
	  This driver is required to change memory timings / clock rate for
	  external memory.

config TEGRA_EMC_COMMON
	tristate

endif
