UPSTREAM: ec/google/chromeec: Provide EC access for Retimer firmware update

Kernel needs to access EC RFWU entry in order to retrieve from EC about
port and mux info and set EC operations like modes change. This change
provides EC RFWU path and update for Retimer driver usage.

BUG=b:162528867
BRANCH=firmware-volteer-13672.B
TEST=Booted to kernel and verified EC RFWU path from ACPI SSDT table.

Change-Id: I8265106bf4812c28d6ff9a24ab543e76a8dba603
Signed-off-by: Patrick Georgi <pgeorgi@google.com>
Original-Commit-Id: eec3e3b3d979d56aaea1ffc04dcd6ea86b2d7b0e
Original-Signed-off-by: John Zhao <john.zhao@intel.com>
Original-Change-Id: I3817d93cfdeedf15825dab6c537b151fd063338b
Original-Reviewed-on: https://review.coreboot.org/c/coreboot/+/49257
Original-Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Original-Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/coreboot/+/2645003
Reviewed-by: Patrick Georgi <pgeorgi@chromium.org>
Tested-by: Patrick Georgi <pgeorgi@chromium.org>
Commit-Queue: Patrick Georgi <pgeorgi@chromium.org>
(cherry picked from commit 969756bb462f9d530832bd5ae1c2e55a95c419d1)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/coreboot/+/2648087
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Commit-Queue: Tim Wawrzynczak <twawrzynczak@chromium.org>
Tested-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
diff --git a/src/ec/google/chromeec/ec_acpi.c b/src/ec/google/chromeec/ec_acpi.c
index fff3954..bcecd89 100644
--- a/src/ec/google/chromeec/ec_acpi.c
+++ b/src/ec/google/chromeec/ec_acpi.c
@@ -7,6 +7,7 @@
 #include <acpi/acpigen_usb.h>
 #include <console/console.h>
 #include <drivers/usb/acpi/chip.h>
+#include <drivers/intel/usb4/retimer/retimer.h>
 #include <ec/google/common/dptf.h>
 
 #include "chip.h"
@@ -235,3 +236,30 @@
 	fill_ssdt_typec_device(dev);
 	fill_ssdt_ps2_keyboard(dev);
 }
+
+const char *ec_retimer_fw_update_path(void)
+{
+	return "\\_SB_.PCI0.LPCB.EC0_.RFWU";
+}
+
+void ec_retimer_fw_update(void *arg)
+{
+	const char *RFWU = ec_retimer_fw_update_path();
+
+	/*
+	 * Get information to set retimer info from Arg3[0]
+	 * Local0 = DeRefOf (Arg3[0])
+	 */
+	acpigen_get_package_op_element(ARG3_OP, 0, LOCAL0_OP);
+
+	/*
+	 * Write the EC RAM for Retimer Upgrade
+	 * RFWU = LOCAL0
+	 */
+	acpigen_write_store();
+	acpigen_emit_byte(LOCAL0_OP);
+	acpigen_emit_namestring(RFWU);
+
+	/* Return (Zero) */
+	acpigen_write_return_integer(0);
+}