mb/lenovo/x230: Turn X230 into a variant

Other variants would be added later.

Change-Id: Ic6af14f0aa7a6f7378048f3c38d5713c18950366
Signed-off-by: Bill XIE <persmule@hardenedlinux.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/41509
Reviewed-by: Alexander Couzens <lynxis@fe80.eu>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/mainboard/lenovo/x230/Kconfig b/src/mainboard/lenovo/x230/Kconfig
index 7d563ef..37b264d 100644
--- a/src/mainboard/lenovo/x230/Kconfig
+++ b/src/mainboard/lenovo/x230/Kconfig
@@ -50,11 +50,19 @@
 	string
 	default "lenovo/x230"
 
+config VARIANT_DIR
+	string
+	default "x230" if BOARD_LENOVO_X230 || BOARD_LENOVO_X230T
+
 config MAINBOARD_PART_NUMBER
 	string
 	default "ThinkPad X230" if BOARD_LENOVO_X230
 	default "ThinkPad X230t" if BOARD_LENOVO_X230T
 
+config OVERRIDE_DEVICETREE
+	string
+	default "variants/$(CONFIG_VARIANT_DIR)/overridetree.cb"
+
 config MAX_CPUS
 	int
 	default 8
diff --git a/src/mainboard/lenovo/x230/Makefile.inc b/src/mainboard/lenovo/x230/Makefile.inc
index 991eadb..5316d24 100644
--- a/src/mainboard/lenovo/x230/Makefile.inc
+++ b/src/mainboard/lenovo/x230/Makefile.inc
@@ -1,9 +1,9 @@
 ## SPDX-License-Identifier: GPL-2.0-only
 
 smm-y += smihandler.c
-bootblock-y += gpio.c
-romstage-y += gpio.c
-
-ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads
-bootblock-y += early_init.c
-romstage-y += early_init.c
+bootblock-y += variants/$(VARIANT_DIR)/early_init.c
+bootblock-y += variants/$(VARIANT_DIR)/gpio.c
+romstage-y += variants/$(VARIANT_DIR)/early_init.c
+romstage-y += variants/$(VARIANT_DIR)/gpio.c
+ramstage-y += variants/$(VARIANT_DIR)/hda_verb.c
+ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += variants/$(VARIANT_DIR)/gma-mainboard.ads
diff --git a/src/mainboard/lenovo/x230/board_info.txt b/src/mainboard/lenovo/x230/board_info.txt
index 09ddde1..505c59a 100644
--- a/src/mainboard/lenovo/x230/board_info.txt
+++ b/src/mainboard/lenovo/x230/board_info.txt
@@ -1,4 +1,5 @@
 Category: laptop
+Board name: ThinkPad X230 baseboard
 ROM package: SOIC-8
 ROM protocol: SPI
 ROM socketed: n
diff --git a/src/mainboard/lenovo/x230/devicetree.cb b/src/mainboard/lenovo/x230/devicetree.cb
index e34734c..3a8e5fe8 100644
--- a/src/mainboard/lenovo/x230/devicetree.cb
+++ b/src/mainboard/lenovo/x230/devicetree.cb
@@ -58,8 +58,6 @@
 			register "gen2_dec" = "0x0c15e1"
 			register "gen4_dec" = "0x0c06a1"
 
-			register "pcie_hotplug_map" = "{ 0, 0, 1, 0, 0, 0, 0, 0 }"
-
 			register "xhci_switchable_ports" = "0xf"
 			register "superspeed_capable_ports" = "0xf"
 			register "xhci_overcurrent_mapping" = "0x4000201"
@@ -89,9 +87,7 @@
 				end
 			end # PCIe Port #1
 			device pci 1c.1 on end # PCIe Port #2
-			device pci 1c.2 on
-				smbios_slot_desc "7" "3" "ExpressCard Slot" "8"
-			end # PCIe Port #3 (expresscard)
+			device pci 1c.2 off end # PCIe Port #3
 			device pci 1c.3 off end # PCIe Port #4
 			device pci 1c.4 off end # PCIe Port #5
 			device pci 1c.5 off end # PCIe Port #6
@@ -136,7 +132,6 @@
 					register "event7_enable" = "0x01"
 					register "event8_enable" = "0x7b"
 					register "event9_enable" = "0xff"
-					register "eventa_enable" = "0x01"
 					register "eventb_enable" = "0x00"
 					register "eventc_enable" = "0xff"
 					register "eventd_enable" = "0xff"
diff --git a/src/mainboard/lenovo/x230/hda_verb.c b/src/mainboard/lenovo/x230/hda_verb.c
index 05fb3fd..2997587 100644
--- a/src/mainboard/lenovo/x230/hda_verb.c
+++ b/src/mainboard/lenovo/x230/hda_verb.c
@@ -1,82 +1 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-/* Bits 31:28 - Codec Address */
-/* Bits 27:20 - NID */
-/* Bits 19:8 - Verb ID */
-/* Bits 7:0  - Payload */
-
-#include <device/azalia_device.h>
-
-const u32 cim_verb_data[] = {
-	/* --- Codec #0 --- */
-	0x10ec0269,	/* Codec Vendor / Device ID: Realtek ALC269VC */
-	0x17aa21fa,	/* Subsystem ID */
-	19,		/* Number of 4 dword sets */
-	AZALIA_SUBVENDOR(0, 0x17aa21fa),
-
-	/* Ext. Microphone Connector:	External,Right; MicIn,3.5mm; Black,JD; DA,Seq */
-	AZALIA_PIN_CFG(0, 0x0a, 0x04a11020),
-
-	/* Headphones Connector:	External,Right; HP,3.5mm; Black,JD; DA,Seq */
-	AZALIA_PIN_CFG(0, 0x0b, 0x0421101f),
-
-	/* Not connected:		N/A,N/A; Other,Unknown; Unknown,JD; DA,Seq */
-	AZALIA_PIN_CFG(0, 0x0c, 0x40f000f0),
-
-	/* Internal Speakers		Fixed,Int; Speaker,Other Analog; Unknown,nJD; DA,Seq */
-	AZALIA_PIN_CFG(0, 0x0d, 0x90170110),
-
-	/* Not connected */
-	AZALIA_PIN_CFG(0, 0x0f, 0x40f000f0),
-
-	/* Internal Microphone:		Fixed,Int,Top; Mic In,ATIPI; Unknown,nJD; DA,Seq */
-	AZALIA_PIN_CFG(0, 0x11, 0xd5a30140),
-	AZALIA_PIN_CFG(0, 0x12, 0x90a60140),
-	AZALIA_PIN_CFG(0, 0x14, 0x90170110),
-	AZALIA_PIN_CFG(0, 0x15, 0x03211020),
-	AZALIA_PIN_CFG(0, 0x18, 0x03a11830),
-	AZALIA_PIN_CFG(0, 0x19, 0x411111f0),
-	AZALIA_PIN_CFG(0, 0x1a, 0x411111f0),
-	AZALIA_PIN_CFG(0, 0x1d, 0x40138205),
-	AZALIA_PIN_CFG(0, 0x1e, 0x411111f0),
-
-	/* Misc entries */
-	0x01970804,
-	0x01870803,
-	0x01470740,
-	0x00970640,
-
-	0x00370680,
-	0x00270680,
-	0x01470c02,
-	0x01570c02,
-
-	/* ALC coefficients. */
-	/* 08 */
-	0x02050008,
-	0x02040700,
-	/* 18 */
-	0x02050018,
-	0x02045184,
-	/* 1c */
-	0x0205001c,
-	0x02042800,
-
-	0x01870724, /* Enable Vrefout for mic */
-	0x00170500, /* Set power state to D0 */
-
-	/* --- Codec #3 --- */
-	0x80862806,	/* Codec Vendor / Device ID: Intel PantherPoint HDMI */
-	0x80860101,	/* Subsystem ID */
-	4,		/* Number of 4 dword sets */
-	AZALIA_SUBVENDOR(3, 0x80860101),
-	AZALIA_PIN_CFG(3, 0x05, 0x18560010),
-	AZALIA_PIN_CFG(3, 0x06, 0x18560020),
-	AZALIA_PIN_CFG(3, 0x07, 0x18560030),
-};
-
-const u32 pc_beep_verbs[] = {
-	0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
-};
-
-AZALIA_ARRAY_SIZES;
+/* dummy */
diff --git a/src/mainboard/lenovo/x230/variants/x230/board_info.txt b/src/mainboard/lenovo/x230/variants/x230/board_info.txt
new file mode 100644
index 0000000..22281e6
--- /dev/null
+++ b/src/mainboard/lenovo/x230/variants/x230/board_info.txt
@@ -0,0 +1,7 @@
+Category: laptop
+Board name: ThinkPad X230
+ROM package: SOIC-8
+ROM protocol: SPI
+ROM socketed: n
+Flashrom support: n
+Release year: 2012
diff --git a/src/mainboard/lenovo/x230/data.vbt b/src/mainboard/lenovo/x230/variants/x230/data.vbt
similarity index 100%
rename from src/mainboard/lenovo/x230/data.vbt
rename to src/mainboard/lenovo/x230/variants/x230/data.vbt
Binary files differ
diff --git a/src/mainboard/lenovo/x230/early_init.c b/src/mainboard/lenovo/x230/variants/x230/early_init.c
similarity index 100%
rename from src/mainboard/lenovo/x230/early_init.c
rename to src/mainboard/lenovo/x230/variants/x230/early_init.c
diff --git a/src/mainboard/lenovo/x230/gma-mainboard.ads b/src/mainboard/lenovo/x230/variants/x230/gma-mainboard.ads
similarity index 100%
rename from src/mainboard/lenovo/x230/gma-mainboard.ads
rename to src/mainboard/lenovo/x230/variants/x230/gma-mainboard.ads
diff --git a/src/mainboard/lenovo/x230/gpio.c b/src/mainboard/lenovo/x230/variants/x230/gpio.c
similarity index 100%
rename from src/mainboard/lenovo/x230/gpio.c
rename to src/mainboard/lenovo/x230/variants/x230/gpio.c
diff --git a/src/mainboard/lenovo/x230/variants/x230/hda_verb.c b/src/mainboard/lenovo/x230/variants/x230/hda_verb.c
new file mode 100644
index 0000000..05fb3fd
--- /dev/null
+++ b/src/mainboard/lenovo/x230/variants/x230/hda_verb.c
@@ -0,0 +1,82 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+/* Bits 31:28 - Codec Address */
+/* Bits 27:20 - NID */
+/* Bits 19:8 - Verb ID */
+/* Bits 7:0  - Payload */
+
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
+	/* --- Codec #0 --- */
+	0x10ec0269,	/* Codec Vendor / Device ID: Realtek ALC269VC */
+	0x17aa21fa,	/* Subsystem ID */
+	19,		/* Number of 4 dword sets */
+	AZALIA_SUBVENDOR(0, 0x17aa21fa),
+
+	/* Ext. Microphone Connector:	External,Right; MicIn,3.5mm; Black,JD; DA,Seq */
+	AZALIA_PIN_CFG(0, 0x0a, 0x04a11020),
+
+	/* Headphones Connector:	External,Right; HP,3.5mm; Black,JD; DA,Seq */
+	AZALIA_PIN_CFG(0, 0x0b, 0x0421101f),
+
+	/* Not connected:		N/A,N/A; Other,Unknown; Unknown,JD; DA,Seq */
+	AZALIA_PIN_CFG(0, 0x0c, 0x40f000f0),
+
+	/* Internal Speakers		Fixed,Int; Speaker,Other Analog; Unknown,nJD; DA,Seq */
+	AZALIA_PIN_CFG(0, 0x0d, 0x90170110),
+
+	/* Not connected */
+	AZALIA_PIN_CFG(0, 0x0f, 0x40f000f0),
+
+	/* Internal Microphone:		Fixed,Int,Top; Mic In,ATIPI; Unknown,nJD; DA,Seq */
+	AZALIA_PIN_CFG(0, 0x11, 0xd5a30140),
+	AZALIA_PIN_CFG(0, 0x12, 0x90a60140),
+	AZALIA_PIN_CFG(0, 0x14, 0x90170110),
+	AZALIA_PIN_CFG(0, 0x15, 0x03211020),
+	AZALIA_PIN_CFG(0, 0x18, 0x03a11830),
+	AZALIA_PIN_CFG(0, 0x19, 0x411111f0),
+	AZALIA_PIN_CFG(0, 0x1a, 0x411111f0),
+	AZALIA_PIN_CFG(0, 0x1d, 0x40138205),
+	AZALIA_PIN_CFG(0, 0x1e, 0x411111f0),
+
+	/* Misc entries */
+	0x01970804,
+	0x01870803,
+	0x01470740,
+	0x00970640,
+
+	0x00370680,
+	0x00270680,
+	0x01470c02,
+	0x01570c02,
+
+	/* ALC coefficients. */
+	/* 08 */
+	0x02050008,
+	0x02040700,
+	/* 18 */
+	0x02050018,
+	0x02045184,
+	/* 1c */
+	0x0205001c,
+	0x02042800,
+
+	0x01870724, /* Enable Vrefout for mic */
+	0x00170500, /* Set power state to D0 */
+
+	/* --- Codec #3 --- */
+	0x80862806,	/* Codec Vendor / Device ID: Intel PantherPoint HDMI */
+	0x80860101,	/* Subsystem ID */
+	4,		/* Number of 4 dword sets */
+	AZALIA_SUBVENDOR(3, 0x80860101),
+	AZALIA_PIN_CFG(3, 0x05, 0x18560010),
+	AZALIA_PIN_CFG(3, 0x06, 0x18560020),
+	AZALIA_PIN_CFG(3, 0x07, 0x18560030),
+};
+
+const u32 pc_beep_verbs[] = {
+	0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
+};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/lenovo/x230/variants/x230/overridetree.cb b/src/mainboard/lenovo/x230/variants/x230/overridetree.cb
new file mode 100644
index 0000000..5f2f3a5
--- /dev/null
+++ b/src/mainboard/lenovo/x230/variants/x230/overridetree.cb
@@ -0,0 +1,15 @@
+chip northbridge/intel/sandybridge
+	device domain 0 on
+		chip southbridge/intel/bd82x6x # Intel Series 7 Panther Point PCH
+			register "pcie_hotplug_map" = "{ 0, 0, 1, 0, 0, 0, 0, 0 }"
+			device pci 1c.2 on
+				smbios_slot_desc "7" "3" "ExpressCard Slot" "8"
+			end # PCIe Port #3 (expresscard)
+			device pci 1f.0 on # LPC bridge
+				chip ec/lenovo/h8
+					register "eventa_enable" = "0x01"
+				end
+			end # LPC Controller
+		end
+	end
+end