mb/msi/ms7d25: Add console die notification

Add beeps and blink SATA LED on critical errors.

Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
Change-Id: I45b8b4fda00d58a1ab1d7dfab49d6f841bc0b000
Reviewed-on: https://review.coreboot.org/c/coreboot/+/69821
Reviewed-by: Krystian Hebel <krystian.hebel@3mdeb.com>
Reviewed-by: Himanshu Sahdev <himanshu.sahdev@intel.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/mainboard/msi/ms7d25/Kconfig b/src/mainboard/msi/ms7d25/Kconfig
index b5c1a46..653d915 100644
--- a/src/mainboard/msi/ms7d25/Kconfig
+++ b/src/mainboard/msi/ms7d25/Kconfig
@@ -16,6 +16,7 @@
 	select INTEL_GMA_HAVE_VBT
 	select CRB_TPM
 	select HAVE_INTEL_PTT
+	select USE_LEGACY_8254_TIMER
 
 if BOARD_MSI_MS7D25
 
@@ -49,10 +50,6 @@
 	bool
 	default n
 
-config USE_LEGACY_8254_TIMER
-	bool
-	default n
-
 config CBFS_SIZE
 	hex
 	default 0x1000000
diff --git a/src/mainboard/msi/ms7d25/Makefile.inc b/src/mainboard/msi/ms7d25/Makefile.inc
index 2e6759f..deb5ff6 100644
--- a/src/mainboard/msi/ms7d25/Makefile.inc
+++ b/src/mainboard/msi/ms7d25/Makefile.inc
@@ -5,3 +5,6 @@
 romstage-y += romstage_fsp_params.c
 
 ramstage-y += mainboard.c
+
+all-y += die.c
+smm-y += die.c
diff --git a/src/mainboard/msi/ms7d25/die.c b/src/mainboard/msi/ms7d25/die.c
new file mode 100644
index 0000000..52b3338
--- /dev/null
+++ b/src/mainboard/msi/ms7d25/die.c
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <console/console.h>
+#include <pc80/i8254.h>
+#include <soc/gpio.h>
+#include <delay.h>
+#include <gpio.h>
+
+static void beep_and_blink(void)
+{
+	static uint8_t blink = 0;
+	static uint8_t beep_count = 0;
+
+	gpio_set(GPP_E8, blink);
+	/* Beep 12 times at most, constant beeps may be annoying */
+	if (beep_count < 12) {
+		beep(800, 300);
+		mdelay(200);
+		beep_count++;
+	} else {
+		mdelay(500);
+	}
+
+	blink ^= 1;
+}
+
+void die_notify(void)
+{
+	if (ENV_POSTCAR)
+		return;
+
+	/* Make SATA LED blink and use PC SPKR */
+	gpio_output(GPP_E8, 0);
+
+	while (1) {
+		beep_and_blink();
+		beep_and_blink();
+		beep_and_blink();
+		beep_and_blink();
+		delay(2);
+	}
+}