asus/p2b-ls: Transform into variant

Boot tested on hardware.

Change-Id: I24afd67dada135a8c2597f5ac1c7e91ce43897c9
Signed-off-by: Keith Hui <buurin@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/39901
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/mainboard/asus/p2b-ls/Kconfig b/src/mainboard/asus/p2b-ls/Kconfig
deleted file mode 100644
index 2d12c86..0000000
--- a/src/mainboard/asus/p2b-ls/Kconfig
+++ /dev/null
@@ -1,39 +0,0 @@
-##
-## This file is part of the coreboot project.
-##
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; version 2 of the License.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-if BOARD_ASUS_P2B_LS
-
-config BOARD_SPECIFIC_OPTIONS
-	def_bool y
-	select CPU_INTEL_SLOT_1
-	select NORTHBRIDGE_INTEL_I440BX
-	select SOUTHBRIDGE_INTEL_I82371EB
-	select SUPERIO_WINBOND_W83977TF
-	select HAVE_PIRQ_TABLE
-	select BOARD_ROMSIZE_KB_256
-	select SDRAMPWR_4DIMM
-	select HAVE_ACPI_TABLES
-
-config MAINBOARD_DIR
-	string
-	default "asus/p2b-ls"
-
-config MAINBOARD_PART_NUMBER
-	string
-	default "P2B-LS"
-
-config IRQ_SLOT_COUNT
-	int
-	default 8
-
-endif # BOARD_ASUS_P2B_LS
diff --git a/src/mainboard/asus/p2b-ls/Kconfig.name b/src/mainboard/asus/p2b-ls/Kconfig.name
deleted file mode 100644
index 0ad0f47..0000000
--- a/src/mainboard/asus/p2b-ls/Kconfig.name
+++ /dev/null
@@ -1,2 +0,0 @@
-config BOARD_ASUS_P2B_LS
-	bool "P2B-LS"
diff --git a/src/mainboard/asus/p2b-ls/acpi_tables.c b/src/mainboard/asus/p2b-ls/acpi_tables.c
deleted file mode 100644
index 9f18039..0000000
--- a/src/mainboard/asus/p2b-ls/acpi_tables.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/* This file is part of the coreboot project. */
-
-#include <arch/acpi.h>
-
-unsigned long acpi_fill_madt(unsigned long current)
-{
-	/* mainboard has no ioapic */
-	return current;
-}
diff --git a/src/mainboard/asus/p2b-ls/dsdt.asl b/src/mainboard/asus/p2b-ls/dsdt.asl
deleted file mode 100644
index b49e0a1..0000000
--- a/src/mainboard/asus/p2b-ls/dsdt.asl
+++ /dev/null
@@ -1,258 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/* This file is part of the coreboot project. */
-
-#include <southbridge/intel/i82371eb/i82371eb.h>
-
-#define SUPERIO_PNP_BASE 0x3F0
-#define SUPERIO_SHOW_UARTA
-#define SUPERIO_SHOW_UARTB
-#define SUPERIO_SHOW_FDC
-#define SUPERIO_SHOW_LPT
-
-#include <arch/acpi.h>
-DefinitionBlock ("DSDT.aml", "DSDT", 2, OEM_ID, ACPI_TABLE_CREATOR, 1)
-{
-	/* \_SB scope defining the main processor is generated in SSDT. */
-
-	OperationRegion(X80, SystemIO, 0x80, 1)
-	Field(X80, ByteAcc, NoLock, Preserve)
-	{
-		P80, 8
-	}
-
-	/*
-	 * For now only define 2 power states:
-	 *  - S0 which is fully on
-	 *  - S5 which is soft off
-	 * Any others would involve declaring the wake up methods.
-	 */
-
-	/*
-	 * Intel 82371EB (PIIX4E) datasheet, section 7.2.3, page 142
-	 *
-	 * 0: soft off/suspend to disk					S5
-	 * 1: suspend to ram						S3
-	 * 2: powered on suspend, context lost				S2
-	 *    Note: 'context lost' means the CPU restarts at the reset
-	 *          vector
-	 * 3: powered on suspend, CPU context lost			S1
-	 *    Note: Looks like 'CPU context lost' does _not_ mean the
-	 *          CPU restarts at the reset vector. Most likely only
-	 *          caches are lost, so both 0x3 and 0x4 map to ACPI S1
-	 * 4: powered on suspend, context maintained			S1
-	 * 5: working (clock control)					S0
-	 * 6: reserved
-	 * 7: reserved
-	 */
-	Name (\_S0, Package () { 0x05, 0x05, 0x00, 0x00 })
-	/*
-	 * Kept as a memo of the value needed, but blocked out until
-	 * suspend/resume support is implemented.
-	 */
-	/*Name (\_S1, Package () { 0x04, 0x07, 0x00, 0x00 })*/
-	/*Name (\_S4, Package () { 0x01, 0x06, 0x00, 0x00 })*/
-	Name (\_S5, Package () { 0x00, 0x06, 0x00, 0x00 })
-
-	OperationRegion (GPOB, SystemIO, DEFAULT_PMBASE+DEVCTL, 0x10)
-	Field (GPOB, ByteAcc, NoLock, Preserve)
-	{
-		Offset (0x03),
-		TO12,   1, /* Device trap 12 */
-		Offset (0x08),
-		FANM,   1, /* GPO0, meant for fan */
-		Offset (0x09),
-		PLED,   1, /* GPO8, meant for power LED. Per PIIX4 datasheet */
-		    ,   3, /* this goes low when power is cut from its core. */
-		    ,   2,
-		    ,   16,
-		MSG0,   1 /* GPO30, message LED */
-	}
-
-	/* Prepare To Sleep, Arg0 is target S-state */
-	Method (\_PTS, 1, NotSerialized)
-	{
-		/* Disable fan, blink power LED, if not turning off */
-		If (LNotEqual (Arg0, 0x05))
-		{
-		    Store (Zero, FANM)
-		    Store (Zero, PLED)
-		}
-
-		/* Arms SMI for device 12 */
-		Store (One, TO12)
-		/* Put out a POST code */
-		Or (Arg0, 0xF0, P80)
-	}
-
-	Method (\_WAK, 1, NotSerialized)
-	{
-		/* Re-enable fan, stop power led blinking */
-		Store (One, FANM)
-		Store (One, PLED)
-		/* wake OK */
-		Return(Package(0x02){0x00, 0x00})
-	}
-
-	/* Root of the bus hierarchy */
-	Scope (\_SB)
-	{
-		Device (PWRB)
-		{
-			/* Power Button Device */
-			Name (_HID, EisaId ("PNP0C0C"))
-			Method (_STA, 0, NotSerialized)
-			{
-				Return (0x0B)
-			}
-		}
-		#include <southbridge/intel/i82371eb/acpi/intx.asl>
-
-		PCI_INTX_DEV(LNKA, \_SB.PCI0.PX40.PIRA, 1)
-		PCI_INTX_DEV(LNKB, \_SB.PCI0.PX40.PIRB, 2)
-		PCI_INTX_DEV(LNKC, \_SB.PCI0.PX40.PIRC, 3)
-		PCI_INTX_DEV(LNKD, \_SB.PCI0.PX40.PIRD, 4)
-
-		/* Top PCI device */
-		Device (PCI0)
-		{
-			Name (_HID, EisaId ("PNP0A03"))
-			Name (_UID, 0x00)
-			Name (_BBN, 0x00)
-
-			/* PCI Routing Table */
-			Name (_PRT, Package () {
-				Package (0x04) { 0x0001FFFF, 0, LNKA, 0 },
-				Package (0x04) { 0x0001FFFF, 1, LNKB, 0 },
-				Package (0x04) { 0x0001FFFF, 2, LNKC, 0 },
-				Package (0x04) { 0x0001FFFF, 3, LNKD, 0 },
-
-				Package (0x04) { 0x0004FFFF, 0, LNKA, 0 },
-				Package (0x04) { 0x0004FFFF, 1, LNKB, 0 },
-				Package (0x04) { 0x0004FFFF, 2, LNKC, 0 },
-				Package (0x04) { 0x0004FFFF, 3, LNKD, 0 },
-
-				Package (0x04) { 0x0006FFFF, 0, LNKD, 0 },
-				Package (0x04) { 0x0006FFFF, 1, LNKA, 0 },
-				Package (0x04) { 0x0006FFFF, 2, LNKB, 0 },
-				Package (0x04) { 0x0006FFFF, 3, LNKC, 0 },
-
-				Package (0x04) { 0x0009FFFF, 0, LNKD, 0 },
-				Package (0x04) { 0x0009FFFF, 1, LNKA, 0 },
-				Package (0x04) { 0x0009FFFF, 2, LNKB, 0 },
-				Package (0x04) { 0x0009FFFF, 3, LNKC, 0 },
-
-				Package (0x04) { 0x000AFFFF, 0, LNKC, 0 },
-				Package (0x04) { 0x000AFFFF, 1, LNKD, 0 },
-				Package (0x04) { 0x000AFFFF, 2, LNKA, 0 },
-				Package (0x04) { 0x000AFFFF, 3, LNKB, 0 },
-
-				Package (0x04) { 0x0007FFFF, 0, LNKC, 0 },
-				Package (0x04) { 0x0007FFFF, 1, LNKD, 0 },
-				Package (0x04) { 0x0007FFFF, 2, LNKA, 0 },
-				Package (0x04) { 0x0007FFFF, 3, LNKB, 0 },
-
-				Package (0x04) { 0x000BFFFF, 0, LNKB, 0 },
-				Package (0x04) { 0x000BFFFF, 1, LNKC, 0 },
-				Package (0x04) { 0x000BFFFF, 2, LNKD, 0 },
-				Package (0x04) { 0x000BFFFF, 3, LNKA, 0 },
-
-				Package (0x04) { 0x000CFFFF, 0, LNKA, 0 },
-				Package (0x04) { 0x000CFFFF, 1, LNKB, 0 },
-				Package (0x04) { 0x000CFFFF, 2, LNKC, 0 },
-				Package (0x04) { 0x000CFFFF, 3, LNKD, 0 },
-
-			})
-			#include <northbridge/intel/i440bx/acpi/sb_pci0_crs.asl>
-
-			/* Begin southbridge block */
-			Device (PX40)
-			{
-				Name(_ADR, 0x00040000)
-				OperationRegion (PIRQ, PCI_Config, 0x60, 0x04)
-				Field (PIRQ, ByteAcc, NoLock, Preserve)
-				{
-					PIRA,   8,
-					PIRB,   8,
-					PIRC,   8,
-					PIRD,   8
-				}
-
-				/* PNP Motherboard Resources */
-				Device (SYSR)
-				{
-					Name (_HID, EisaId ("PNP0C02"))
-					Method (_CRS, 0, NotSerialized)
-					{
-					Name (BUF1, ResourceTemplate ()
-					{
-						/* PM register ports */
-						IO (Decode16, 0x0000, 0x0000, 0x01, 0x40, _Y06)
-						/* SMBus register ports */
-						IO (Decode16, 0x0000, 0x0000, 0x01, 0x10, _Y07)
-						/* PIIX4E ports */
-						/* Aliased DMA ports */
-						IO (Decode16, 0x0010, 0x0010, 0x01, 0x10, )
-						/* Aliased PIC ports */
-						IO (Decode16, 0x0022, 0x0022, 0x01, 0x1E, )
-						/* Aliased timer ports */
-						IO (Decode16, 0x0050, 0x0050, 0x01, 0x04, )
-						IO (Decode16, 0x0062, 0x0062, 0x01, 0x02, )
-						IO (Decode16, 0x0065, 0x0065, 0x01, 0x0B, )
-						IO (Decode16, 0x0074, 0x0074, 0x01, 0x0C, )
-						IO (Decode16, 0x0091, 0x0091, 0x01, 0x03, )
-						IO (Decode16, 0x00A2, 0x00A2, 0x01, 0x1E, )
-						IO (Decode16, 0x00E0, 0x00E0, 0x01, 0x10, )
-						IO (Decode16, 0x0294, 0x0294, 0x01, 0x04, )
-						IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x02, )
-						IO (Decode16, 0x04D0, 0x04D0, 0x01, 0x02, )
-					})
-					CreateWordField (BUF1, _Y06._MIN, PMLO)
-					CreateWordField (BUF1, _Y06._MAX, PMRL)
-					CreateWordField (BUF1, _Y07._MIN, SBLO)
-					CreateWordField (BUF1, _Y07._MAX, SBRL)
-
-					And (\_SB.PCI0.PX43.PM00, 0xFFFE, PMLO)
-					And (\_SB.PCI0.PX43.SB00, 0xFFFE, SBLO)
-					Store (PMLO, PMRL)
-					Store (SBLO, SBRL)
-					Return (BUF1)
-					}
-				}
-				#include <southbridge/intel/i82371eb/acpi/i82371eb.asl>
-			}
-			Device (PX43)
-			{
-				Name (_ADR, 0x00040003)  // _ADR: Address
-				OperationRegion (IPMU, PCI_Config, PMBA, 0x02)
-				Field (IPMU, ByteAcc, NoLock, Preserve)
-				{
-				    PM00,   16
-				}
-
-				OperationRegion (ISMB, PCI_Config, SMBBA, 0x02)
-				Field (ISMB, ByteAcc, NoLock, Preserve)
-				{
-				    SB00,   16
-				}
-			}
-
-			#include <superio/winbond/w83977tf/acpi/superio.asl>
-		}
-	}
-
-	/* ACPI Message */
-	Scope (\_SI)
-	{
-		Method (_MSG, 1, NotSerialized)
-		{
-			If (LEqual (Arg0, Zero))
-			{
-				Store (One, MSG0)
-			}
-			Else
-			{
-				Store (Zero, MSG0)
-			}
-		}
-	}
-}
diff --git a/src/mainboard/asus/p2b-ls/romstage.c b/src/mainboard/asus/p2b-ls/romstage.c
deleted file mode 100644
index 546d9ed..0000000
--- a/src/mainboard/asus/p2b-ls/romstage.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#include <northbridge/intel/i440bx/raminit.h>
-#include <superio/winbond/common/winbond.h>
-/* FIXME: The ASUS P2B-LS has a Winbond W83977EF, actually. */
-#include <superio/winbond/w83977tf/w83977tf.h>
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-void mainboard_enable_serial(void)
-{
-	winbond_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-}
diff --git a/src/mainboard/asus/p2b/Kconfig b/src/mainboard/asus/p2b/Kconfig
index 503e662..694469d 100644
--- a/src/mainboard/asus/p2b/Kconfig
+++ b/src/mainboard/asus/p2b/Kconfig
@@ -11,7 +11,7 @@
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ## GNU General Public License for more details.
 ##
-if BOARD_ASUS_P2B || BOARD_ASUS_P2B_F
+if BOARD_ASUS_P2B || BOARD_ASUS_P2B_F || BOARD_ASUS_P2B_LS
 
 config BOARD_SPECIFIC_OPTIONS
 	def_bool y
@@ -21,7 +21,8 @@
 	select SUPERIO_WINBOND_W83977TF
 	select HAVE_PIRQ_TABLE
 	select BOARD_ROMSIZE_KB_256
-	select HAVE_ACPI_TABLES if BOARD_ASUS_P2B
+	select SDRAMPWR_4DIMM if BOARD_ASUS_P2B_LS
+	select HAVE_ACPI_TABLES if BOARD_ASUS_P2B || BOARD_ASUS_P2B_LS
 
 config MAINBOARD_DIR
 	string
@@ -31,11 +32,13 @@
 	string
 	default "P2B" if BOARD_ASUS_P2B
 	default "P2B-F" if BOARD_ASUS_P2B_F
+	default "P2B-LS" if BOARD_ASUS_P2B_LS
 
 config VARIANT_DIR
 	string
 	default "p2b" if BOARD_ASUS_P2B
 	default "p2b-f" if BOARD_ASUS_P2B_F
+	default "p2b-ls" if BOARD_ASUS_P2B_LS
 
 config DEVICETREE
 	string
@@ -43,6 +46,7 @@
 
 config IRQ_SLOT_COUNT
 	int
+	default 8 if BOARD_ASUS_P2B_LS
 	default 7 if BOARD_ASUS_P2B_F
 	default 6
 
diff --git a/src/mainboard/asus/p2b/Kconfig.name b/src/mainboard/asus/p2b/Kconfig.name
index ee34b16..fd645f0 100644
--- a/src/mainboard/asus/p2b/Kconfig.name
+++ b/src/mainboard/asus/p2b/Kconfig.name
@@ -3,3 +3,6 @@
 
 config BOARD_ASUS_P2B_F
 	bool "P2B-F"
+
+config BOARD_ASUS_P2B_LS
+	bool "P2B-LS"
diff --git a/src/mainboard/asus/p2b/dsdt.asl b/src/mainboard/asus/p2b/dsdt.asl
index 4bfcc31..05af720 100644
--- a/src/mainboard/asus/p2b/dsdt.asl
+++ b/src/mainboard/asus/p2b/dsdt.asl
@@ -44,9 +44,15 @@
 	 * 6: reserved
 	 * 7: reserved
 	 */
+	/* Guard these entries for the purpose of variant validation. They will be aligned later. */
 	Name (\_S0, Package () { 0x05, 0x05, 0x00, 0x00 })
+#if CONFIG(BOARD_ASUS_P2B)
 	Name (\_S1, Package () { 0x03, 0x03, 0x00, 0x00 })
 	Name (\_S5, Package () { 0x00, 0x00, 0x00, 0x00 })
+#endif
+#if CONFIG(BOARD_ASUS_P2B_LS)
+	Name (\_S5, Package () { 0x00, 0x06, 0x00, 0x00 })
+#endif
 
 	OperationRegion (GPOB, SystemIO, DEFAULT_PMBASE+DEVCTL, 0x10)
 	Field (GPOB, ByteAcc, NoLock, Preserve)
@@ -126,6 +132,12 @@
 				Package (0x04) { 0x0004FFFF, 2, LNKC, 0 },
 				Package (0x04) { 0x0004FFFF, 3, LNKD, 0 },
 
+#if CONFIG(BOARD_ASUS_P2B_LS)
+				Package (0x04) { 0x0006FFFF, 0, LNKD, 0 },
+				Package (0x04) { 0x0006FFFF, 1, LNKA, 0 },
+				Package (0x04) { 0x0006FFFF, 2, LNKB, 0 },
+				Package (0x04) { 0x0006FFFF, 3, LNKC, 0 },
+#endif
 				Package (0x04) { 0x0009FFFF, 0, LNKD, 0 },
 				Package (0x04) { 0x0009FFFF, 1, LNKA, 0 },
 				Package (0x04) { 0x0009FFFF, 2, LNKB, 0 },
@@ -136,6 +148,12 @@
 				Package (0x04) { 0x000AFFFF, 2, LNKA, 0 },
 				Package (0x04) { 0x000AFFFF, 3, LNKB, 0 },
 
+#if CONFIG(BOARD_ASUS_P2B_LS)
+				Package (0x04) { 0x0007FFFF, 0, LNKC, 0 },
+				Package (0x04) { 0x0007FFFF, 1, LNKD, 0 },
+				Package (0x04) { 0x0007FFFF, 2, LNKA, 0 },
+				Package (0x04) { 0x0007FFFF, 3, LNKB, 0 },
+#endif
 				Package (0x04) { 0x000BFFFF, 0, LNKB, 0 },
 				Package (0x04) { 0x000BFFFF, 1, LNKC, 0 },
 				Package (0x04) { 0x000BFFFF, 2, LNKD, 0 },
diff --git a/src/mainboard/asus/p2b-ls/board_info.txt b/src/mainboard/asus/p2b/variants/p2b-ls/board_info.txt
similarity index 100%
rename from src/mainboard/asus/p2b-ls/board_info.txt
rename to src/mainboard/asus/p2b/variants/p2b-ls/board_info.txt
diff --git a/src/mainboard/asus/p2b-ls/devicetree.cb b/src/mainboard/asus/p2b/variants/p2b-ls/devicetree.cb
similarity index 100%
rename from src/mainboard/asus/p2b-ls/devicetree.cb
rename to src/mainboard/asus/p2b/variants/p2b-ls/devicetree.cb
diff --git a/src/mainboard/asus/p2b-ls/irq_tables.c b/src/mainboard/asus/p2b/variants/p2b-ls/irq_tables.c
similarity index 100%
rename from src/mainboard/asus/p2b-ls/irq_tables.c
rename to src/mainboard/asus/p2b/variants/p2b-ls/irq_tables.c