mb/siemens/mc_apl1: Deduplicate wait_for_legacy_dev()

There's one copy of this function for all variants except mc_apl4. Move
one copy into common mainboard.c and exit early if running on mc_apl4.

Change-Id: I4e35b58adc074831ccec433b8e014db0695b955e
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/47402
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
diff --git a/src/mainboard/siemens/mc_apl1/mainboard.c b/src/mainboard/siemens/mc_apl1/mainboard.c
index 9540d6d..b2cd449 100644
--- a/src/mainboard/siemens/mc_apl1/mainboard.c
+++ b/src/mainboard/siemens/mc_apl1/mainboard.c
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 
+#include <bootstate.h>
 #include <console/console.h>
 #include <device/mmio.h>
 #include <device/device.h>
@@ -13,6 +14,7 @@
 #include <soc/pci_devs.h>
 #include <string.h>
 #include <timer.h>
+#include <timestamp.h>
 #include <baseboard/variants.h>
 #include <types.h>
 
@@ -222,3 +224,33 @@
 	.init = mainboard_init,
 	.final = mainboard_final,
 };
+
+static void wait_for_legacy_dev(void *unused)
+{
+	uint32_t legacy_delay, us_since_boot;
+	struct stopwatch sw;
+
+	if (CONFIG(BOARD_SIEMENS_MC_APL4))
+		return;
+
+	/* Open main hwinfo block. */
+	if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)
+		return;
+
+	/* Get legacy delay parameter from hwinfo. */
+	if (hwilib_get_field(LegacyDelay, (uint8_t *) &legacy_delay,
+			      sizeof(legacy_delay)) != sizeof(legacy_delay))
+		return;
+
+	us_since_boot = get_us_since_boot();
+	/* No need to wait if the time since boot is already long enough.*/
+	if (us_since_boot > legacy_delay)
+		return;
+	stopwatch_init_msecs_expire(&sw, (legacy_delay - us_since_boot) / 1000);
+	printk(BIOS_NOTICE, "Wait remaining %d of %d us for legacy devices...",
+			legacy_delay - us_since_boot, legacy_delay);
+	stopwatch_wait_until_expired(&sw);
+	printk(BIOS_NOTICE, "done!\n");
+}
+
+BOOT_STATE_INIT_ENTRY(BS_DEV_ENUMERATE, BS_ON_ENTRY, wait_for_legacy_dev, NULL);
diff --git a/src/mainboard/siemens/mc_apl1/variants/mc_apl1/mainboard.c b/src/mainboard/siemens/mc_apl1/variants/mc_apl1/mainboard.c
index e60ea64..5dbc4b9 100644
--- a/src/mainboard/siemens/mc_apl1/variants/mc_apl1/mainboard.c
+++ b/src/mainboard/siemens/mc_apl1/variants/mc_apl1/mainboard.c
@@ -9,8 +9,6 @@
 #include <intelblocks/lpc_lib.h>
 #include <intelblocks/pcr.h>
 #include <soc/pcr_ids.h>
-#include <timer.h>
-#include <timestamp.h>
 #include <baseboard/variants.h>
 #include <types.h>
 
@@ -51,36 +49,10 @@
 	pcr_rmw32(PID_MODPHY, TX_DWORD3, (0x00 << 16), (0x4a << 16));
 }
 
-static void wait_for_legacy_dev(void *unused)
-{
-	uint32_t legacy_delay, us_since_boot;
-	struct stopwatch sw;
-
-	/* Open main hwinfo block. */
-	if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)
-		return;
-
-	/* Get legacy delay parameter from hwinfo. */
-	if (hwilib_get_field(LegacyDelay, (uint8_t *) &legacy_delay,
-			      sizeof(legacy_delay)) != sizeof(legacy_delay))
-		return;
-
-	us_since_boot = get_us_since_boot();
-	/* No need to wait if the time since boot is already long enough.*/
-	if (us_since_boot > legacy_delay)
-		return;
-	stopwatch_init_msecs_expire(&sw, (legacy_delay - us_since_boot) / 1000);
-	printk(BIOS_NOTICE, "Wait remaining %d of %d us for legacy devices...",
-			legacy_delay - us_since_boot, legacy_delay);
-	stopwatch_wait_until_expired(&sw);
-	printk(BIOS_NOTICE, "done!\n");
-}
-
 static void finalize_boot(void *unused)
 {
 	/* Set coreboot ready LED. */
 	gpio_output(CNV_RGI_DT, 1);
 }
 
-BOOT_STATE_INIT_ENTRY(BS_DEV_ENUMERATE, BS_ON_ENTRY, wait_for_legacy_dev, NULL);
 BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_BOOT, BS_ON_ENTRY, finalize_boot, NULL);
diff --git a/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c b/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c
index 000ee08..9cfd86f 100644
--- a/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c
+++ b/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c
@@ -7,8 +7,6 @@
 #include <device/pci_ops.h>
 #include <hwilib.h>
 #include <intelblocks/lpc_lib.h>
-#include <timer.h>
-#include <timestamp.h>
 #include <baseboard/variants.h>
 #include <soc/pci_devs.h>
 #include <types.h>
@@ -23,30 +21,3 @@
 		pci_or_config16(dev, PCI_COMMAND, PCI_COMMAND_MASTER);
 	}
 }
-
-static void wait_for_legacy_dev(void *unused)
-{
-	uint32_t legacy_delay, us_since_boot;
-	struct stopwatch sw;
-
-	/* Open main hwinfo block. */
-	if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)
-		return;
-
-	/* Get legacy delay parameter from hwinfo. */
-	if (hwilib_get_field(LegacyDelay, (uint8_t *) &legacy_delay,
-			      sizeof(legacy_delay)) != sizeof(legacy_delay))
-		return;
-
-	us_since_boot = get_us_since_boot();
-	/* No need to wait if the time since boot is already long enough.*/
-	if (us_since_boot > legacy_delay)
-		return;
-	stopwatch_init_msecs_expire(&sw, (legacy_delay - us_since_boot) / 1000);
-	printk(BIOS_NOTICE, "Wait remaining %d of %d us for legacy devices...",
-			legacy_delay - us_since_boot, legacy_delay);
-	stopwatch_wait_until_expired(&sw);
-	printk(BIOS_NOTICE, "done!\n");
-}
-
-BOOT_STATE_INIT_ENTRY(BS_DEV_ENUMERATE, BS_ON_ENTRY, wait_for_legacy_dev, NULL);
diff --git a/src/mainboard/siemens/mc_apl1/variants/mc_apl3/mainboard.c b/src/mainboard/siemens/mc_apl1/variants/mc_apl3/mainboard.c
index 8b1a0e1..22d2388 100644
--- a/src/mainboard/siemens/mc_apl1/variants/mc_apl3/mainboard.c
+++ b/src/mainboard/siemens/mc_apl1/variants/mc_apl3/mainboard.c
@@ -12,8 +12,6 @@
 #include <intelblocks/lpc_lib.h>
 #include <intelblocks/pcr.h>
 #include <soc/pcr_ids.h>
-#include <timer.h>
-#include <timestamp.h>
 #include <baseboard/variants.h>
 #include <types.h>
 
@@ -70,36 +68,10 @@
 	outb(FULL_RST, RST_CNT);
 }
 
-static void wait_for_legacy_dev(void *unused)
-{
-	uint32_t legacy_delay, us_since_boot;
-	struct stopwatch sw;
-
-	/* Open main hwinfo block. */
-	if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)
-		return;
-
-	/* Get legacy delay parameter from hwinfo. */
-	if (hwilib_get_field(LegacyDelay, (uint8_t *) &legacy_delay,
-			      sizeof(legacy_delay)) != sizeof(legacy_delay))
-		return;
-
-	us_since_boot = get_us_since_boot();
-	/* No need to wait if the time since boot is already long enough.*/
-	if (us_since_boot > legacy_delay)
-		return;
-	stopwatch_init_msecs_expire(&sw, (legacy_delay - us_since_boot) / 1000);
-	printk(BIOS_NOTICE, "Wait remaining %d of %d us for legacy devices...",
-			legacy_delay - us_since_boot, legacy_delay);
-	stopwatch_wait_until_expired(&sw);
-	printk(BIOS_NOTICE, "done!\n");
-}
-
 static void finalize_boot(void *unused)
 {
 	/* Set coreboot ready LED. */
 	gpio_output(CNV_RGI_DT, 1);
 }
 
-BOOT_STATE_INIT_ENTRY(BS_DEV_ENUMERATE, BS_ON_ENTRY, wait_for_legacy_dev, NULL);
 BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_BOOT, BS_ON_ENTRY, finalize_boot, NULL);
diff --git a/src/mainboard/siemens/mc_apl1/variants/mc_apl5/mainboard.c b/src/mainboard/siemens/mc_apl1/variants/mc_apl5/mainboard.c
index c0a7d53..5a4c01f 100644
--- a/src/mainboard/siemens/mc_apl1/variants/mc_apl5/mainboard.c
+++ b/src/mainboard/siemens/mc_apl1/variants/mc_apl5/mainboard.c
@@ -10,8 +10,6 @@
 #include <intelblocks/lpc_lib.h>
 #include <intelblocks/pcr.h>
 #include <soc/pcr_ids.h>
-#include <timer.h>
-#include <timestamp.h>
 #include <baseboard/variants.h>
 #include <types.h>
 
@@ -69,36 +67,10 @@
 	}
 }
 
-static void wait_for_legacy_dev(void *unused)
-{
-	uint32_t legacy_delay, us_since_boot;
-	struct stopwatch sw;
-
-	/* Open main hwinfo block. */
-	if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)
-		return;
-
-	/* Get legacy delay parameter from hwinfo. */
-	if (hwilib_get_field(LegacyDelay, (uint8_t *) &legacy_delay,
-			      sizeof(legacy_delay)) != sizeof(legacy_delay))
-		return;
-
-	us_since_boot = get_us_since_boot();
-	/* No need to wait if the time since boot is already long enough.*/
-	if (us_since_boot > legacy_delay)
-		return;
-	stopwatch_init_msecs_expire(&sw, (legacy_delay - us_since_boot) / 1000);
-	printk(BIOS_NOTICE, "Wait remaining %d of %d us for legacy devices...",
-			legacy_delay - us_since_boot, legacy_delay);
-	stopwatch_wait_until_expired(&sw);
-	printk(BIOS_NOTICE, "done!\n");
-}
-
 static void finalize_boot(void *unused)
 {
 	/* Set coreboot ready LED. */
 	gpio_output(CNV_RGI_DT, 1);
 }
 
-BOOT_STATE_INIT_ENTRY(BS_DEV_ENUMERATE, BS_ON_ENTRY, wait_for_legacy_dev, NULL);
 BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_BOOT, BS_ON_ENTRY, finalize_boot, NULL);
diff --git a/src/mainboard/siemens/mc_apl1/variants/mc_apl6/mainboard.c b/src/mainboard/siemens/mc_apl1/variants/mc_apl6/mainboard.c
index f9345f4..15c170b 100644
--- a/src/mainboard/siemens/mc_apl1/variants/mc_apl6/mainboard.c
+++ b/src/mainboard/siemens/mc_apl1/variants/mc_apl6/mainboard.c
@@ -12,8 +12,6 @@
 #include <intelblocks/lpc_lib.h>
 #include <intelblocks/pcr.h>
 #include <soc/pcr_ids.h>
-#include <timer.h>
-#include <timestamp.h>
 #include <baseboard/variants.h>
 #include <types.h>
 
@@ -70,36 +68,10 @@
 	outb(FULL_RST, RST_CNT);
 }
 
-static void wait_for_legacy_dev(void *unused)
-{
-	uint32_t legacy_delay, us_since_boot;
-	struct stopwatch sw;
-
-	/* Open main hwinfo block. */
-	if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)
-		return;
-
-	/* Get legacy delay parameter from hwinfo. */
-	if (hwilib_get_field(LegacyDelay, (uint8_t *) &legacy_delay,
-			      sizeof(legacy_delay)) != sizeof(legacy_delay))
-		return;
-
-	us_since_boot = get_us_since_boot();
-	/* No need to wait if the time since boot is already long enough.*/
-	if (us_since_boot > legacy_delay)
-		return;
-	stopwatch_init_msecs_expire(&sw, (legacy_delay - us_since_boot) / 1000);
-	printk(BIOS_NOTICE, "Wait remaining %d of %d us for legacy devices...",
-			legacy_delay - us_since_boot, legacy_delay);
-	stopwatch_wait_until_expired(&sw);
-	printk(BIOS_NOTICE, "done!\n");
-}
-
 static void finalize_boot(void *unused)
 {
 	/* Set coreboot ready LED. */
 	gpio_output(CNV_RGI_DT, 1);
 }
 
-BOOT_STATE_INIT_ENTRY(BS_DEV_ENUMERATE, BS_ON_ENTRY, wait_for_legacy_dev, NULL);
 BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_BOOT, BS_ON_ENTRY, finalize_boot, NULL);