John Zhao has uploaded this change for review.

View Change

soc/intel/tigerlake: Add USB4 _DSM for retimer firmware upgrade support

There is need to upgrade retimer firmware even if USB4 link is not up.
This change adds USB4 _DSM method to support retimer firmware upgrade.
The retimer force power GPIO state is queried and set accordingly.

BUG=b:162528868
TEST=Built and booted to kernel successfully on Volteer and TGLRVP.
TBD with kernel driver update to validate retimer firmware upgrade.

Signed-off-by: John Zhao <john.zhao@intel.com>
Change-Id: I34006972124fa7b04380410669b0cb5051c4f518
---
M src/soc/intel/tigerlake/acpi/tcss_dma.asl
1 file changed, 75 insertions(+), 1 deletion(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/47/44347/1
diff --git a/src/soc/intel/tigerlake/acpi/tcss_dma.asl b/src/soc/intel/tigerlake/acpi/tcss_dma.asl
index da2e8fe..39d55e9 100644
--- a/src/soc/intel/tigerlake/acpi/tcss_dma.asl
+++ b/src/soc/intel/tigerlake/acpi/tcss_dma.asl
@@ -105,7 +105,81 @@
)
}

+/*
+ * Retimer Device Specific Method
+ *
+ * Arg0: UUID (set to 61788900-c470-42bb-80f0-23a313864593)
+ * Arg1: Revision ID (set to 1)
+ * Arg2: Function Index
+ * 0: Query command implemented
+ * 1: Query force power enable state
+ * 2: Set force power state
+ * 0x3 - 0xffff: Reserved
+ * Arg3: A package containing parameters for the function specified
+ * by the UUID, revsion ID and functon index.
+ */
Method (_DSM, 4, Serialized)
{
- Return (Buffer() { 0 })
+ Name (PWR, 0)
+ If (Arg0 == ToUUID("61788900-c470-42bb-80f0-23a313864593")) {
+ switch (ToInteger(Arg2)) {
+ /*
+ * Function Index: 0 - Standard query
+ * Return: Bitmask of supported functions
+ */
+ case (0) {
+ If (Arg1 == 1) {
+ /* Support all functions */
+ Return (Buffer() { 0x07 })
+ }
+
+ /* Only support query if unknown revision */
+ Return (Buffer() { 0x01 })
+ }
+
+ /*
+ * Function Index: 1 - Query force power state
+ * Arg3: Empty package
+ * Return: 0 - if force power is disabled
+ * 1 - if force power is enabled
+ */
+ case (1) {
+ Return (PWR)
+ }
+
+ /*
+ * Function Index: 2 - Set force power state
+ * Arg3: A package consisting a single integer
+ * 0: Turn off power
+ * 1: Turn on powe
+ * Return: 0
+ */
+ case (2) {
+ CreateDWordField (Arg3, 0, CDW1)
+ If (CDW1 == PWR) {
+ /* Already in the state */
+ Return (0)
+ }
+
+ If (CDW1 == 0) {
+ /* Turn off power to the retimer */
+ CTXS(RT_FORCE_PWR)
+ } ElseIf (CDW1 == 1) {
+ /* Turn on power to the retimer */
+ STXS(RT_FORCE_PWR)
+ } Else {
+ Return (0)
+ }
+
+ PWR = CDW1
+ Return (0)
+ }
+
+ Default {
+ Return (Buffer() { 0 })
+ }
+ }
+ } Else {
+ Return (Buffer() { 0 })
+ }
}

To view, visit change 44347. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I34006972124fa7b04380410669b0cb5051c4f518
Gerrit-Change-Number: 44347
Gerrit-PatchSet: 1
Gerrit-Owner: John Zhao <john.zhao@intel.com>
Gerrit-MessageType: newchange