arm: mx6: Make all i.MX6 SoCs user-selectable

We have a number of platforms that are a combination of a carrier board
and System-on-Module (SoM) that in turn allows for the board to have
different SoCs on it.  In some cases, this is handled via board-specific
Kconfig options.  In other cases we make use of
CONFIG_SYS_EXTRA_OPTIONS.  This latter case however can lead to invalid
configurations as we will not in turn get options that in Kconfig are
selected by or depend on that setting.

To resolve this, make the SoC option a choice in Kconfig and make boards
depend on what they can support.  This change opens us up for further
clean-ups in the cases where a single CONFIG_TARGET_xxx can support
different SoCs and today they do not, or do not cleanly do so.

Reported-by: Matt Porter <mporter@konsulko.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: "NXP i.MX U-Boot Team" <uboot-imx@nxp.com>
Cc: Soeren Moch <smoch@web.de>
Cc: Markus Niebel <Markus.Niebel@tq-group.com>
Cc: Igor Opaniuk <igor.opaniuk@toradex.com>
Cc: Heiko Schocher <hs@denx.de>
Cc: Hannes Schmelzer <hannes.schmelzer@br-automation.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Andreas Geisreiter <ageisreiter@dh-electronics.de>
Cc: Ludwig Zenz <lzenz@dh-electronics.de>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Akshay Bhat <akshaybhat@timesys.com>
Cc: Ken Lin <Ken.Lin@advantech.com.tw>
Cc: Ian Ray <ian.ray@ge.com>
Cc: Tim Harvey <tharvey@gateworks.com>
Cc: Jagan Teki <jagan@amarulasolutions.com>
Cc: Raffaele RECALCATI <raffaele.recalcati@bticino.it>
Cc: Simone CIANNI <simone.cianni@bticino.it>
Cc: Adam Ford <aford173@gmail.com>
Cc: Marcin Niestroj <m.niestroj@grinn-global.com>
Cc: "Eric Bénard" <eric@eukrea.com>
Cc: Baruch Siach <baruch@tkos.co.il>
Cc: Jason Liu <jason.hui.liu@nxp.com>
Cc: Ye Li <ye.li@nxp.com>
Cc: Eric Nelson <eric@nelint.com>
Cc: Troy Kisky <troy.kisky@boundarydevices.com>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Parthiban Nallathambi <parthiban@linumiz.com>
Cc: Marek Vasut <marex@denx.de>
Cc: "Sébastien Szymanski" <sebastien.szymanski@armadeus.com>
Cc: Christian Gmeiner <christian.gmeiner@gmail.com>
Cc: Niel Fourie <lusus@denx.de>
Cc: Martyn Welch <martyn.welch@collabora.com>
Cc: Richard Hu <richard.hu@technexion.com>
Cc: Stefan Roese <sr@denx.de>
Cc: Boris Brezillon <bbrezillon@kernel.org>
Cc: Arkadiusz Karas <arkadiusz.karas@somlabs.com>
Cc: Breno Lima <breno.lima@nxp.com>
Cc: Francesco Montefoschi <francesco.montefoschi@udoo.org>
Cc: Silvio Fricke <open-source@softing.de>
Tested-by: Matt Porter <mporter@konsulko.com> [colibri_imx6]
Signed-off-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Marcin Niestroj <m.niestroj@grinn-global.com>
diff --git a/arch/arm/mach-imx/mx6/Kconfig b/arch/arm/mach-imx/mx6/Kconfig
index 17173f9..3d72517 100644
--- a/arch/arm/mach-imx/mx6/Kconfig
+++ b/arch/arm/mach-imx/mx6/Kconfig
@@ -15,54 +15,64 @@
 	select GPT_TIMER if !MX6UL && !MX6ULL
 	imply CMD_FUSE
 
+choice
+	prompt "i.MX6 SoC select"
+
 config MX6D
-	bool
+	bool "i.MX 6Dual SoC support"
 	select HAS_CAAM
 	select MX6_SMP
 
 config MX6DL
-	bool
+	bool "i.MX 6DualLite SoC support"
 	select HAS_CAAM
 	select MX6_SMP
 
 config MX6Q
-	bool
+	bool "i.MX 6Quad SoC support"
 	select HAS_CAAM
 	select MX6_SMP
 
 config MX6QDL
-	bool
+	bool "i.MX 6Dual and 6Quad SoC support"
 	select HAS_CAAM
 	select MX6_SMP
 
 config MX6S
-	bool
+	bool "i.MX 6Solo SoC support"
 	select HAS_CAAM
 
 config MX6SL
-	bool
+	bool "i.MX 6SoloLite SoC support"
 
 config MX6SX
-	bool
+	bool "i.MX 6SoloX SoC support"
 	select HAS_CAAM
 	select ROM_UNIFIED_SECTIONS
 
 config MX6SLL
-	bool
+	bool "i.MX 6SLL SoC support"
 	select ROM_UNIFIED_SECTIONS
 
 config MX6UL
-	bool
+	bool "i.MX 6UltraLite SoC support"
 	select HAS_CAAM
 	select ROM_UNIFIED_SECTIONS
 	select SYSCOUNTER_TIMER
 	select SYS_L2CACHE_OFF
 
+config MX6ULL
+	bool "i.MX 6ULL SoC support"
+	select ROM_UNIFIED_SECTIONS
+	select SYSCOUNTER_TIMER
+	select SYS_L2CACHE_OFF
+
+endchoice
+
 config MX6UL_LITESOM
 	bool
 	select DM
 	select DM_THERMAL
-	select MX6UL
 	select SUPPORT_SPL
 	imply CMD_DM
 
@@ -73,7 +83,6 @@
 	select DM_GPIO
 	select DM_MMC
 	select DM_THERMAL
-	select MX6UL
 	select SPL_DM if SPL
 	select SPL_OF_CONTROL if SPL
 	select SPL_PINCTRL if SPL
@@ -81,12 +90,6 @@
 	select SUPPORT_SPL
 	imply CMD_DM
 
-config MX6ULL
-	bool
-	select ROM_UNIFIED_SECTIONS
-	select SYSCOUNTER_TIMER
-	select SYS_L2CACHE_OFF
-
 config MX6_OCRAM_256KB
 	bool "Support 256KB OCRAM"
 	depends on MX6D || MX6Q
@@ -110,14 +113,14 @@
 
 config TARGET_ADVANTECH_DMS_BA16
 	bool "Advantech dms-ba16"
+	depends on MX6Q
 	select BOARD_LATE_INIT
-	select MX6Q
 	imply CMD_SATA
 
 config TARGET_APALIS_IMX6
 	bool "Toradex Apalis iMX6 board"
+	depends on MX6Q
 	select BOARD_LATE_INIT
-	select MX6Q
 	select DM
 	select DM_SERIAL
 	select DM_THERMAL
@@ -127,8 +130,8 @@
 
 config TARGET_ARISTAINETOS2
 	bool "aristainetos2"
+	depends on MX6DL
 	select BOARD_LATE_INIT
-	select MX6DL
 	select SYS_I2C_MXC
 	select MXC_UART
 	select FEC_MXC
@@ -138,8 +141,8 @@
 
 config TARGET_ARISTAINETOS2B
 	bool "Support aristainetos2-revB"
+	depends on MX6DL
 	select BOARD_LATE_INIT
-	select MX6DL
 	select SYS_I2C_MXC
 	select MXC_UART
 	select FEC_MXC
@@ -149,8 +152,8 @@
 
 config TARGET_ARISTAINETOS2BCSL
 	bool "Support aristainetos2-revB CSL"
+	depends on MX6DL
 	select BOARD_LATE_INIT
-	select MX6DL
 	select SYS_I2C_MXC
 	select MXC_UART
 	select FEC_MXC
@@ -160,8 +163,8 @@
 
 config TARGET_ARISTAINETOS2C
 	bool "Support aristainetos2-revC"
+	depends on MX6DL
 	select BOARD_LATE_INIT
-	select MX6DL
 	select SYS_I2C_MXC
 	select MXC_UART
 	select FEC_MXC
@@ -171,20 +174,20 @@
 
 config TARGET_CGTQMX6EVAL
 	bool "cgtqmx6eval"
+	depends on MX6QDL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6QDL
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_CM_FX6
 	bool "CM-FX6"
+	depends on MX6QDL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_GPIO
 	select DM_SERIAL
-	select MX6QDL
 	select SUPPORT_SPL
 	imply CMD_DM
 
@@ -199,14 +202,14 @@
 
 config TARGET_COLIBRI_IMX6ULL
 	bool "Toradex Colibri iMX6ULL"
+	depends on MX6ULL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6ULL
 
 config TARGET_DART_6UL
 	bool "Variscite imx6ULL dart(DART-SOM-6ULL)"
-	select MX6ULL
+	depends on MX6ULL
 	select DM
 	select DM_ETH
 	select DM_GPIO
@@ -218,17 +221,18 @@
 
 config TARGET_DHCOMIMX6
 	bool "dh_imx6"
+	depends on MX6QDL
 	select BOARD_EARLY_INIT_F
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6QDL
 	select SUPPORT_SPL
 	imply CMD_DM
 	imply CMD_SPL
 
 config TARGET_DISPLAY5
 	bool "LWN DISPLAY5 board"
+	depends on MX6Q
 	select DM
 	select DM_ETH
 	select DM_I2C
@@ -246,12 +250,12 @@
 
 config TARGET_GE_BX50V3
 	bool "General Electric Bx50v3"
+	depends on MX6Q
 	select BOARD_LATE_INIT
-	select MX6Q
 
 config TARGET_GW_VENTANA
 	bool "gw_ventana"
-	select MX6QDL
+	depends on MX6QDL
 	select SUPPORT_SPL
 	imply CMD_SATA
 	imply CMD_SPL
@@ -272,7 +276,7 @@
 
 config TARGET_MCCMON6
 	bool "mccmon6"
-	select MX6QDL
+	depends on MX6QDL
 	select SUPPORT_SPL
 	select DM
 	select DM_GPIO
@@ -284,13 +288,13 @@
 
 config TARGET_MX6CUBOXI
 	bool "Solid-run mx6 boards"
+	depends on MX6QDL
 	select BOARD_LATE_INIT
-	select MX6QDL
 	select SUPPORT_SPL
 
 config TARGET_MX6LOGICPD
 	bool "Logic PD i.MX6 SOM"
-	select MX6Q
+	depends on MX6Q
 	select SUPPORT_SPL
 	select BOARD_EARLY_INIT_F
 	select BOARD_LATE_INIT
@@ -305,6 +309,7 @@
 
 config TARGET_MX6MEMCAL
 	bool "mx6memcal"
+	depends on MX6QDL
 	select SUPPORT_SPL
 	help
 	  The mx6memcal board is a virtual board that can be used to validate
@@ -316,6 +321,7 @@
 
 config TARGET_MX6DL_MAMOJ
 	bool "Support BTicino Mamoj"
+	depends on MX6QDL
 	select DM
 	select DM_ETH
 	select DM_GPIO
@@ -324,7 +330,6 @@
 	select DM_PMIC
 	select DM_PMIC_PFUZE100
 	select DM_THERMAL
-	select MX6QDL
 	select OF_CONTROL
 	select PINCTRL
 	select SPL
@@ -348,6 +353,7 @@
 
 config TARGET_MX6Q_ENGICAM
 	bool "Support Engicam i.Core(RQS)"
+	depends on MX6QDL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_ETH
@@ -355,7 +361,6 @@
 	select DM_I2C
 	select DM_MMC
 	select DM_THERMAL
-	select MX6QDL
 	select OF_CONTROL
 	select SPL_DM if SPL
 	select SPL_OF_CONTROL if SPL
@@ -367,75 +372,76 @@
 
 config TARGET_MX6SABREAUTO
 	bool "mx6sabreauto"
+	depends on MX6QDL
 	select BOARD_EARLY_INIT_F
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6QDL
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_MX6SABRESD
 	bool "mx6sabresd"
+	depends on MX6QDL
 	select BOARD_EARLY_INIT_F
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6QDL
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_MX6SLEVK
 	bool "mx6slevk"
-	select MX6SL
+	depends on MX6SL
 	select SUPPORT_SPL
 
 config TARGET_MX6SLLEVK
 	bool "mx6sll evk"
+	depends on MX6SLL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6SLL
 	imply CMD_DM
 
 config TARGET_MX6SXSABRESD
 	bool "mx6sxsabresd"
+	depends on MX6SX
 	select BOARD_EARLY_INIT_F
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6SX
 	select SUPPORT_SPL
 
 config TARGET_MX6SXSABREAUTO
 	bool "mx6sxsabreauto"
+	depends on MX6SX
 	select BOARD_EARLY_INIT_F
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6SX
 	imply CMD_DM
 
 config TARGET_MX6UL_9X9_EVK
 	bool "mx6ul_9x9_evk"
+	depends on MX6UL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6UL
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_MX6UL_14X14_EVK
 	bool "mx6ul_14x14_evk"
+	depends on MX6UL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6UL
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_MX6UL_ENGICAM
 	bool "Support Engicam GEAM6UL/Is.IoT"
+	depends on MX6UL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_ETH
@@ -443,7 +449,6 @@
 	select DM_I2C
 	select DM_MMC
 	select DM_THERMAL
-	select MX6UL
 	select OF_CONTROL
 	select SPL_DM if SPL
 	select SPL_OF_CONTROL if SPL
@@ -454,15 +459,15 @@
 
 config TARGET_MX6ULL_14X14_EVK
 	bool "Support mx6ull_14x14_evk"
+	depends on MX6ULL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6ULL
 	imply CMD_DM
 
 config TARGET_MYS_6ULX
 	bool "MYiR MYS-6ULX"
-	select MX6ULL
+	depends on MX6ULL
 	select DM
 	select DM_ETH
 	select DM_GPIO
@@ -474,14 +479,15 @@
 
 config TARGET_NITROGEN6X
 	bool "nitrogen6x"
+	depends on MX6DL || MX6Q || MX6QDL || MX6S
 	imply USB_ETHER_ASIX
 	imply USB_ETHER_MCS7830
 	imply USB_ETHER_SMSC95XX
 	imply USB_HOST_ETHER
-	select MX6QDL
 
 config TARGET_OPOS6ULDEV
 	bool "Armadeus OPOS6ULDev board"
+	depends on MX6UL
 	select MX6UL_OPOS6UL
 
 config TARGET_OT1200
@@ -491,23 +497,24 @@
 
 config TARGET_PICO_IMX6
 	bool "PICO-IMX6"
+	depends on MX6QDL
 	select BOARD_EARLY_INIT_F
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6QDL
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_PICO_IMX6UL
 	bool "PICO-IMX6UL-EMMC"
-	select MX6UL
+	depends on MX6UL
 	select DM
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_LITEBOARD
 	bool "Grinn liteBoard (i.MX6UL)"
+	depends on MX6UL
 	select BOARD_LATE_INIT
 	select MX6UL_LITESOM
 
@@ -521,22 +528,22 @@
 
 config TARGET_PCM058
 	bool "Phytec PCM058 i.MX6 Quad"
+	depends on MX6Q
 	select BOARD_LATE_INIT
 	select SUPPORT_SPL
-	select MX6Q
 	select DM
 	select OF_CONTROL
 	imply CMD_DM
 
 config TARGET_PFLA02
 	bool "Phytec PFLA02 (PhyFlex) i.MX6 Quad"
+	depends on MX6QDL
 	select BOARD_LATE_INIT
-	select MX6QDL
 	select SUPPORT_SPL
 
 config TARGET_PCL063
 	bool "PHYTEC PCL063 (phyCORE-i.MX6UL)"
-	select MX6UL
+	depends on MX6UL
 	select DM
 	select DM_ETH
 	select DM_GPIO
@@ -548,7 +555,7 @@
 
 config TARGET_PCL063_ULL
 	bool "PHYTEC PCL063 (phyCORE-i.MX6ULL)"
-	select MX6ULL
+	depends on MX6ULL
 	select DM
 	select DM_ETH
 	select DM_GPIO
@@ -563,11 +570,12 @@
 
 config TARGET_SKSIMX6
 	bool "sks-imx6"
+	depends on MX6QDL
 	select SUPPORT_SPL
 
 config TARGET_SOMLABS_VISIONSOM_6ULL
 	bool "visionsom-6ull"
-	select MX6ULL
+	depends on MX6ULL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_ETH
@@ -579,12 +587,15 @@
 
 config TARGET_TBS2910
 	bool "TBS2910 Matrix ARM mini PC"
+	depends on MX6Q
 
 config TARGET_TITANIUM
 	bool "titanium"
+	depends on MX6Q
 
 config TARGET_KP_IMX6Q_TPC
 	bool "K+P KP_IMX6Q_TPC i.MX6 Quad"
+	depends on MX6QDL
 	select BOARD_EARLY_INIT_F
 	select BOARD_LATE_INIT
 	select DM
@@ -598,7 +609,6 @@
 	select DM_I2C
 	select DM_GPIO
 	select DM_USB
-	select MX6QDL
 	select SUPPORT_SPL
 	select SPL_SEPARATE_BSS if SPL
 	imply CMD_DM
@@ -621,45 +631,45 @@
 
 config TARGET_UDOO
 	bool "udoo"
+	depends on MX6QDL
 	select BOARD_LATE_INIT
-	select MX6QDL
 	select SUPPORT_SPL
 
 config TARGET_UDOO_NEO
 	bool "UDOO Neo"
+	depends on MX6SX
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6SX
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_SOFTING_VINING_2000
 	bool "Softing VIN|ING 2000"
+	depends on MX6SX
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6SX
 	select SUPPORT_SPL
 	imply CMD_DM
 
 config TARGET_WANDBOARD
 	bool "wandboard"
+	depends on MX6QDL
 	select BOARD_LATE_INIT
-	select MX6QDL
 	select SUPPORT_SPL
 
 config TARGET_WARP
 	bool "WaRP"
+	depends on MX6SL
 	select BOARD_LATE_INIT
-	select MX6SL
 
 config TARGET_XPRESS
 	bool "CCV xPress"
+	depends on MX6UL
 	select BOARD_LATE_INIT
 	select DM
 	select DM_THERMAL
-	select MX6UL
 	select SUPPORT_SPL
 	imply CMD_DM
 
@@ -681,8 +691,8 @@
 
 config TARGET_BRPPT2
 	bool "brppt2"
+	depends on MX6QDL
 	select BOARD_LATE_INIT
-	select MX6QDL
 	select OF_CONTROL
 	select SPL_OF_LIBFDT
 	select DM