mb/prodrive/hermes: Hook up wake on USB option

Hook up the `wake_on_usb` EEPROM setting so that it works as intended.

TEST=Keysmash on a USB keyboard, verify Hermes does not wake from S3.

Change-Id: I81531b90abae6a62754ea66c47e934e1f440bda2
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/72906
Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/mainboard/prodrive/hermes/mainboard.c b/src/mainboard/prodrive/hermes/mainboard.c
index 0b0eb88..18bd8a4 100644
--- a/src/mainboard/prodrive/hermes/mainboard.c
+++ b/src/mainboard/prodrive/hermes/mainboard.c
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 
+#include <acpi/acpi.h>
 #include <acpi/acpigen.h>
 #include <bootstate.h>
 #include <cbmem.h>
@@ -217,6 +218,18 @@
 				acpigen_write_soc_gpio_op(usb_power_gpios[i]);
 		}
 		acpigen_pop_len();
+
+		if (!board_cfg->wake_on_usb) {
+			acpigen_write_if();
+			acpigen_emit_byte(LNOT_OP);
+			acpigen_emit_byte(LLESS_OP);
+			acpigen_emit_byte(ARG0_OP);
+			acpigen_write_integer(ACPI_S3);
+			{
+				acpigen_write_store_int_to_namestr(0, "\\_SB.PCI0.XHCI.PMEE");
+			}
+			acpigen_pop_len();
+		}
 	}
 	acpigen_pop_len();
 }
diff --git a/src/soc/intel/cannonlake/acpi/xhci.asl b/src/soc/intel/cannonlake/acpi/xhci.asl
index fbe811e..bc4574d 100644
--- a/src/soc/intel/cannonlake/acpi/xhci.asl
+++ b/src/soc/intel/cannonlake/acpi/xhci.asl
@@ -87,6 +87,12 @@
 		Offset (0x10),
 		, 16,
 		XMEM, 16,	/* MEM_BASE */
+		Offset (0x74),
+		D0D3, 2,	/* POWERSTATE */
+		, 6,
+		PMEE, 1,	/* PME_EN */
+		, 6,
+		PMES, 1,	/* PME_STS */
 	}
 
 	Method (_PS0, 0, Serialized)