aboutsummaryrefslogtreecommitdiff
path: root/src/ec/google/wilco/acpi
diff options
context:
space:
mode:
Diffstat (limited to 'src/ec/google/wilco/acpi')
-rw-r--r--src/ec/google/wilco/acpi/ec.asl4
-rw-r--r--src/ec/google/wilco/acpi/ec_ram.asl51
-rw-r--r--src/ec/google/wilco/acpi/event.asl7
-rw-r--r--src/ec/google/wilco/acpi/ucsi.asl157
4 files changed, 219 insertions, 0 deletions
diff --git a/src/ec/google/wilco/acpi/ec.asl b/src/ec/google/wilco/acpi/ec.asl
index 675ee3778e..4fa887b1b4 100644
--- a/src/ec/google/wilco/acpi/ec.asl
+++ b/src/ec/google/wilco/acpi/ec.asl
@@ -57,6 +57,9 @@ Device (EC0)
If (\DPTE == One) {
W (DWST, Arg1)
}
+
+ /* Initialize UCSI */
+ ^UCSI.INIT ()
}
/*
@@ -165,6 +168,7 @@ Device (EC0)
#include "lid.asl"
#include "platform.asl"
#include "vbtn.asl"
+ #include "ucsi.asl"
#ifdef EC_ENABLE_DPTF
#include "dptf.asl"
#endif
diff --git a/src/ec/google/wilco/acpi/ec_ram.asl b/src/ec/google/wilco/acpi/ec_ram.asl
index 0de39475bc..47e9072dcb 100644
--- a/src/ec/google/wilco/acpi/ec_ram.asl
+++ b/src/ec/google/wilco/acpi/ec_ram.asl
@@ -143,3 +143,54 @@ Name (DWHY, Package () { 0x37, 0xff, WR }) /* DPTF: Write Hysteresis */
Name (DWTQ, Package () { 0x38, 0xff, WR }) /* DPTF: Write Trip Query */
Name (CSOS, Package () { 0xb8, 0xff, WR }) /* OS support for S0ix */
Name (CSEX, Package () { 0xb9, 0xff, WR }) /* OS enter(1)/exit(0) S0ix */
+
+/*
+ * EC UCSI
+ */
+Name (UVR0, Package () { 0x80, 0xff, RD }) /* UCSI Version */
+Name (UVR1, Package () { 0x81, 0xff, RD }) /* UCSI Version */
+Name (UCI0, Package () { 0x84, 0xff, RD }) /* UCSI Change Indicator */
+Name (UCI1, Package () { 0x85, 0xff, RD }) /* UCSI Change Indicator */
+Name (UCI2, Package () { 0x86, 0xff, RD }) /* UCSI Change Indicator */
+Name (UCI3, Package () { 0x87, 0xff, RD }) /* UCSI Change Indicator */
+Name (UCL0, Package () { 0x88, 0xff, WR }) /* UCSI Control */
+Name (UCL1, Package () { 0x89, 0xff, WR }) /* UCSI Control */
+Name (UCL2, Package () { 0x8a, 0xff, WR }) /* UCSI Control */
+Name (UCL3, Package () { 0x8b, 0xff, WR }) /* UCSI Control */
+Name (UCL4, Package () { 0x8c, 0xff, WR }) /* UCSI Control */
+Name (UCL5, Package () { 0x8d, 0xff, WR }) /* UCSI Control */
+Name (UCL6, Package () { 0x8e, 0xff, WR }) /* UCSI Control */
+Name (UCL7, Package () { 0x8f, 0xff, WR }) /* UCSI Control */
+Name (UMI0, Package () { 0x90, 0xff, RD }) /* UCSI Message In */
+Name (UMI1, Package () { 0x91, 0xff, RD }) /* UCSI Message In */
+Name (UMI2, Package () { 0x92, 0xff, RD }) /* UCSI Message In */
+Name (UMI3, Package () { 0x93, 0xff, RD }) /* UCSI Message In */
+Name (UMI4, Package () { 0x94, 0xff, RD }) /* UCSI Message In */
+Name (UMI5, Package () { 0x95, 0xff, RD }) /* UCSI Message In */
+Name (UMI6, Package () { 0x96, 0xff, RD }) /* UCSI Message In */
+Name (UMI7, Package () { 0x97, 0xff, RD }) /* UCSI Message In */
+Name (UMI8, Package () { 0x98, 0xff, RD }) /* UCSI Message In */
+Name (UMI9, Package () { 0x99, 0xff, RD }) /* UCSI Message In */
+Name (UMIA, Package () { 0x9a, 0xff, RD }) /* UCSI Message In */
+Name (UMIB, Package () { 0x9b, 0xff, RD }) /* UCSI Message In */
+Name (UMIC, Package () { 0x9c, 0xff, RD }) /* UCSI Message In */
+Name (UMID, Package () { 0x9d, 0xff, RD }) /* UCSI Message In */
+Name (UMIE, Package () { 0x9e, 0xff, RD }) /* UCSI Message In */
+Name (UMIF, Package () { 0x9f, 0xff, RD }) /* UCSI Message In */
+Name (UMO0, Package () { 0xa0, 0xff, WR }) /* UCSI Message Out */
+Name (UMO1, Package () { 0xa1, 0xff, WR }) /* UCSI Message Out */
+Name (UMO2, Package () { 0xa2, 0xff, WR }) /* UCSI Message Out */
+Name (UMO3, Package () { 0xa3, 0xff, WR }) /* UCSI Message Out */
+Name (UMO4, Package () { 0xa4, 0xff, WR }) /* UCSI Message Out */
+Name (UMO5, Package () { 0xa5, 0xff, WR }) /* UCSI Message Out */
+Name (UMO6, Package () { 0xa6, 0xff, WR }) /* UCSI Message Out */
+Name (UMO7, Package () { 0xa7, 0xff, WR }) /* UCSI Message Out */
+Name (UMO8, Package () { 0xa8, 0xff, WR }) /* UCSI Message Out */
+Name (UMO9, Package () { 0xa9, 0xff, WR }) /* UCSI Message Out */
+Name (UMOA, Package () { 0xaa, 0xff, WR }) /* UCSI Message Out */
+Name (UMOB, Package () { 0xab, 0xff, WR }) /* UCSI Message Out */
+Name (UMOC, Package () { 0xac, 0xff, WR }) /* UCSI Message Out */
+Name (UMOD, Package () { 0xad, 0xff, WR }) /* UCSI Message Out */
+Name (UMOE, Package () { 0xae, 0xff, WR }) /* UCSI Message Out */
+Name (UMOF, Package () { 0xaf, 0xff, WR }) /* UCSI Message Out */
+Name (UCTL, Package () { 0xb0, 0xff, WR }) /* UCSI Control Register */
diff --git a/src/ec/google/wilco/acpi/event.asl b/src/ec/google/wilco/acpi/event.asl
index fab4fc46c3..f6534d3773 100644
--- a/src/ec/google/wilco/acpi/event.asl
+++ b/src/ec/google/wilco/acpi/event.asl
@@ -145,3 +145,10 @@ Method (_Q66, 0, Serialized)
ECQ4 (Local0)
}
}
+
+/* UCSI SCI uses a unique event code */
+Method (_Q79, 0, Serialized)
+{
+ Printf ("EC _Q79 UCSI Event")
+ Notify (^UCSI, 0x80)
+}
diff --git a/src/ec/google/wilco/acpi/ucsi.asl b/src/ec/google/wilco/acpi/ucsi.asl
new file mode 100644
index 0000000000..f69e5924e7
--- /dev/null
+++ b/src/ec/google/wilco/acpi/ucsi.asl
@@ -0,0 +1,157 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2019 Google LLC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+Device (UCSI)
+{
+ Name (_HID, "GOOG000E")
+ Name (_CID, EisaId ("PNP0CA0"))
+ Name (_DDN, "Wilco EC UCSI")
+ Name (_UID, One)
+ Name (_ADR, Zero)
+ Name (_STA, 0xf)
+
+ /* Value written to EC control register to start UCSI command */
+ Name (UCMD, 0xE0)
+
+ /* Shared memory fields are defined in the SSDT */
+ External (VER0, FieldUnitObj)
+ External (VER1, FieldUnitObj)
+ External (CCI0, FieldUnitObj)
+ External (CCI1, FieldUnitObj)
+ External (CCI2, FieldUnitObj)
+ External (CCI3, FieldUnitObj)
+ External (CTL0, FieldUnitObj)
+ External (CTL1, FieldUnitObj)
+ External (CTL2, FieldUnitObj)
+ External (CTL3, FieldUnitObj)
+ External (CTL4, FieldUnitObj)
+ External (CTL5, FieldUnitObj)
+ External (CTL6, FieldUnitObj)
+ External (CTL7, FieldUnitObj)
+ External (MGI0, FieldUnitObj)
+ External (MGI1, FieldUnitObj)
+ External (MGI2, FieldUnitObj)
+ External (MGI3, FieldUnitObj)
+ External (MGI4, FieldUnitObj)
+ External (MGI5, FieldUnitObj)
+ External (MGI6, FieldUnitObj)
+ External (MGI7, FieldUnitObj)
+ External (MGI8, FieldUnitObj)
+ External (MGI9, FieldUnitObj)
+ External (MGIA, FieldUnitObj)
+ External (MGIB, FieldUnitObj)
+ External (MGIC, FieldUnitObj)
+ External (MGID, FieldUnitObj)
+ External (MGIE, FieldUnitObj)
+ External (MGIF, FieldUnitObj)
+ External (MGO0, FieldUnitObj)
+ External (MGO1, FieldUnitObj)
+ External (MGO2, FieldUnitObj)
+ External (MGO3, FieldUnitObj)
+ External (MGO4, FieldUnitObj)
+ External (MGO5, FieldUnitObj)
+ External (MGO6, FieldUnitObj)
+ External (MGO7, FieldUnitObj)
+ External (MGO8, FieldUnitObj)
+ External (MGO9, FieldUnitObj)
+ External (MGOA, FieldUnitObj)
+ External (MGOB, FieldUnitObj)
+ External (MGOC, FieldUnitObj)
+ External (MGOD, FieldUnitObj)
+ External (MGOE, FieldUnitObj)
+ External (MGOF, FieldUnitObj)
+
+ Method (INIT)
+ {
+ /* Read UCSI version from EC into shared memory */
+ ^VER0 = R (^^UVR0)
+ ^VER1 = R (^^UVR1)
+ }
+
+ Method (_DSM, 4, Serialized)
+ {
+ If (Arg0 != ToUUID ("6f8398c2-7ca4-11e4-ad36-631042b5008f")) {
+ Return (Buffer (One) { Zero })
+ }
+
+ Switch (ToInteger (Arg2))
+ {
+ Case (Zero)
+ {
+ Return (Buffer (One) { 0x07 })
+ }
+ Case (One)
+ {
+ /* Write Message Out */
+ W (^^UMO0, ^MGO0)
+ W (^^UMO1, ^MGO1)
+ W (^^UMO2, ^MGO2)
+ W (^^UMO3, ^MGO3)
+ W (^^UMO4, ^MGO4)
+ W (^^UMO5, ^MGO5)
+ W (^^UMO6, ^MGO6)
+ W (^^UMO7, ^MGO7)
+ W (^^UMO8, ^MGO8)
+ W (^^UMO9, ^MGO9)
+ W (^^UMOA, ^MGOA)
+ W (^^UMOB, ^MGOB)
+ W (^^UMOC, ^MGOC)
+ W (^^UMOD, ^MGOD)
+ W (^^UMOE, ^MGOE)
+ W (^^UMOF, ^MGOF)
+
+ /* Write Control */
+ W (^^UCL0, ^CTL0)
+ W (^^UCL1, ^CTL1)
+ W (^^UCL2, ^CTL2)
+ W (^^UCL3, ^CTL3)
+ W (^^UCL4, ^CTL4)
+ W (^^UCL5, ^CTL5)
+ W (^^UCL6, ^CTL6)
+ W (^^UCL7, ^CTL7)
+
+ /* Start EC Command */
+ W (^^UCTL, ^UCMD)
+ }
+ Case (2)
+ {
+ /* Read Message In */
+ ^MGI0 = R (^^UMI0)
+ ^MGI1 = R (^^UMI1)
+ ^MGI2 = R (^^UMI2)
+ ^MGI3 = R (^^UMI3)
+ ^MGI4 = R (^^UMI4)
+ ^MGI5 = R (^^UMI5)
+ ^MGI6 = R (^^UMI6)
+ ^MGI7 = R (^^UMI7)
+ ^MGI8 = R (^^UMI8)
+ ^MGI9 = R (^^UMI9)
+ ^MGIA = R (^^UMIA)
+ ^MGIB = R (^^UMIB)
+ ^MGIC = R (^^UMIC)
+ ^MGID = R (^^UMID)
+ ^MGIE = R (^^UMIE)
+ ^MGIF = R (^^UMIF)
+
+ /* Read Status */
+ ^CCI0 = R (^^UCI0)
+ ^CCI1 = R (^^UCI1)
+ ^CCI2 = R (^^UCI2)
+ ^CCI3 = R (^^UCI3)
+ }
+ }
+ Return (Buffer (One) { Zero })
+ }
+}