ec/google/wilco: Add support for KB_ERR_CODE to Wilco EC

Adds support for the KB_ERR_CODE command on the Wilco EC. This command
is used to drive diagnostic LEDs on the platform after a failed boot.
This change also adds the Wilco EC mailbox command support to bootblock
and verstage so that those stages can use the KB_ERR_CODE command.

BUG=b:124401932
BRANCH=sarien
TEST=build coreboot for sarien and arcada platforms

Change-Id: I96d17baf57694e4e01c676d80c606f67054cd0c3
Signed-off-by: Keith Short <keithshort@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32776
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/ec/google/wilco/Makefile.inc b/src/ec/google/wilco/Makefile.inc
index 3a7790c..f17869e 100644
--- a/src/ec/google/wilco/Makefile.inc
+++ b/src/ec/google/wilco/Makefile.inc
@@ -1,6 +1,7 @@
 ifeq ($(CONFIG_EC_GOOGLE_WILCO),y)
 
-bootblock-y += bootblock.c
+bootblock-y += bootblock.c commands.c mailbox.c
+verstage-y += commands.c mailbox.c
 romstage-y += commands.c mailbox.c romstage.c boardid.c
 ramstage-y += chip.c commands.c mailbox.c boardid.c
 smm-y += commands.c mailbox.c smihandler.c boardid.c
diff --git a/src/ec/google/wilco/commands.c b/src/ec/google/wilco/commands.c
index d0d572d..a97a28e 100644
--- a/src/ec/google/wilco/commands.c
+++ b/src/ec/google/wilco/commands.c
@@ -181,3 +181,9 @@
 		     CONFIG_EC_BASE_ACPI_DATA);
 	return !!ec_read(EC_RAM_SIGNED_FW);
 }
+
+int wilco_ec_err_code(enum ec_err_code err_code)
+{
+	return wilco_ec_mailbox(WILCO_EC_MSG_DEFAULT, KB_ERR_CODE,
+				&err_code, 1, NULL, 0);
+}
diff --git a/src/ec/google/wilco/commands.h b/src/ec/google/wilco/commands.h
index 3077eee..fafb7fd 100644
--- a/src/ec/google/wilco/commands.h
+++ b/src/ec/google/wilco/commands.h
@@ -50,6 +50,8 @@
 	KB_SLP_EN = 0x64,
 	/* Inform the EC about BIOS boot progress */
 	KB_BIOS_PROGRESS = 0xc2,
+	/* Inform the EC that a fatal error occurred */
+	KB_ERR_CODE = 0x7b,
 };
 
 enum ec_ram_addr {
@@ -86,6 +88,12 @@
 	CAMERA_OFF
 };
 
+enum ec_err_code {
+	DLED_MEMORY = 0x03,
+	DLED_PANEL = 0x10,
+	DLED_ROM = 0x19,
+};
+
 /**
  * wilco_ec_radio_control() - Control wireless radios.
  * @ec_radio: Wireless radio type.
@@ -310,4 +318,17 @@
  */
 int wilco_ec_signed_fw(void);
 
+/**
+ * wilco_ec_err_code
+ *
+ * Send an error code to the EC to indicate a failed boot.  The EC flashes the
+ * platform LED amber and white to provide user indication of the failure type.
+ *
+ * @err_code:		Error code to send to the EC
+ *
+ * Returns 0 if EC command was successful
+ * Returns -1 if EC command failed
+ */
+int wilco_ec_err_code(enum ec_err_code err_code);
+
 #endif /* EC_GOOGLE_WILCO_COMMANDS_H */