# Copyright 2020-2022 NXP
# SPDX-License-Identifier: Apache-2.0

choice
prompt "NXP i.MX8M A53 Selection"
depends on SOC_SERIES_MIMX8M_A53

config SOC_MIMX8MM_A53
	bool "NXP i.MX8MM A53"
	select ARM64
	select CPU_CORTEX_A53
	select ARM_ARCH_TIMER
	select GIC_V3
	select HAS_MCUX if CLOCK_CONTROL
	select HAS_MCUX_CCM if CLOCK_CONTROL
	select HAS_MCUX_IOMUXC if PINCTRL

config SOC_MIMX8MP_A53
	bool "NXP i.MX8MP A53"
	select ARM64
	select CPU_CORTEX_A53
	select ARM_ARCH_TIMER
	select GIC_V3
	select HAS_MCUX if CLOCK_CONTROL
	select HAS_MCUX_CCM if CLOCK_CONTROL
	select HAS_MCUX_IOMUXC if PINCTRL

config SOC_MIMX8MN_A53
	bool "NXP i.MX8MN A53"
	select ARM64
	select CPU_CORTEX_A53
	select ARM_ARCH_TIMER
	select GIC_V3
	select HAS_MCUX if CLOCK_CONTROL
	select HAS_MCUX_CCM if CLOCK_CONTROL
	select HAS_MCUX_IOMUXC if PINCTRL

endchoice

config SOC_PART_NUMBER_MIMX8ML8DVNLZ
	bool

config SOC_PART_NUMBER_MIMX8MP_A53
	string
	default "MIMX8ML8DVNLZ_ca53" if  SOC_PART_NUMBER_MIMX8ML8DVNLZ
	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 SOC_PART_NUMBER_MIMX8MM6DVTLZ
	bool

config SOC_PART_NUMBER_MIMX8MM6CVTKZ
	bool

config SOC_PART_NUMBER_MIMX8MM_A53
	string
	default "MIMX8MM6DVTLZ_ca53" if  SOC_PART_NUMBER_MIMX8MM6DVTLZ
	default "MIMX8MM6CVTKZ_ca53" if  SOC_PART_NUMBER_MIMX8MM6CVTKZ
	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.

if SOC_MIMX8MN_A53

config SOC_PART_NUMBER_MIMX8MN6DVTJZ
	bool

config SOC_PART_NUMBER_MIMX8MN6DUCJZ
	bool

config SOC_PART_NUMBER_MIMX8MN6CVTIZ
	bool

config SOC_PART_NUMBER_MIMX8MN6CUCIZ
	bool

config SOC_PART_NUMBER_MIMX8MN_A53
	string
	default "MIMX8MN6DVTJZ_ca53" if  SOC_PART_NUMBER_MIMX8MN6DVTJZ
	default "MIMX8MN6DUCJZ_ca53" if  SOC_PART_NUMBER_MIMX8MN6DUCJZ
	default "MIMX8MN6CVTIZ_ca53" if  SOC_PART_NUMBER_MIMX8MN6CVTIZ
	default "MIMX8MN6CUCIZ_ca53" if  SOC_PART_NUMBER_MIMX8MN6CUCIZ
	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.

endif # SOC_MIMX8MN_A53

config SOC_PART_NUMBER
	default SOC_PART_NUMBER_MIMX8MP_A53 if SOC_MIMX8MP_A53
	default SOC_PART_NUMBER_MIMX8MM_A53 if SOC_MIMX8MM_A53
	default SOC_PART_NUMBER_MIMX8MN_A53 if SOC_MIMX8MN_A53
