ec/google/wilco: Correct scope of UCSI ACPI device

Set the USCI device scope to _SB and set HID to USBC000 so Windows
driver attaches. This matches the ACPI used by the non-Chromebook
version of the Dell Latittude 7410 (which uses the same EC).

TEST=build/boot Win11 on google/drallion

Change-Id: If482fa4a4856c7bc085795bc72b35ebefe2f15c4
Signed-off-by: Matt DeVillier <matt.devillier@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/77281
Reviewed-by: Subrata Banik <subratabanik@google.com>
Reviewed-by: CoolStar <coolstarorganization@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
CoolStar 2023-03-26 03:52:54 -07:00 committed by Martin L Roth
parent 23c718c93a
commit 4a587b8e96
5 changed files with 205 additions and 187 deletions

View File

@ -50,7 +50,7 @@ Device (EC0)
}
/* Initialize UCSI */
^UCSI.INIT ()
\_SB.UCSI.INIT ()
// Initialize LID switch state
\LIDS = R (P1LC)

View File

@ -131,53 +131,59 @@ 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 */
Scope (\_SB)
{
Name (RD, 0)
Name (WR, 1)
/*
* 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 */
}

View File

@ -141,7 +141,7 @@ Method (_Q79, 0, Serialized)
{
If (ISSX == 0) {
Printf ("EC _Q79 UCSI Event")
Notify (^UCSI, 0x80)
Notify (\_SB.UCSI, 0x80)
^UCEP = 0
} Else {
Printf ("EC _Q79 UCSI Event Masked in S0ix")

View File

@ -1,143 +1,155 @@
/* SPDX-License-Identifier: GPL-2.0-only */
Device (UCSI)
Scope (\_SB)
{
Name (_HID, "GOOG000E")
Name (_CID, EisaId ("PNP0CA0"))
Name (_DDN, "Wilco EC UCSI")
Name (_UID, 1)
Name (_STA, 0xb)
/* 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)
Device (UCSI)
{
/* Read UCSI version from EC into shared memory */
^VER0 = R (^^UVR0)
^VER1 = R (^^UVR1)
}
Name (_HID, EisaId("USBC000"))
Name (_CID, Package { "GOOG000E", EisaId ("PNP0CA0") })
Name (_DDN, "Wilco EC UCSI")
Name (_UID, 1)
Name (_STA, 0xf)
Method (_DSM, 4, Serialized)
{
If (Arg0 != ToUUID ("6f8398c2-7ca4-11e4-ad36-631042b5008f")) {
/* 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 (R, 1, Serialized, 2){
Local0 = \_SB.PCI0.LPCB.EC0.R(Arg0)
Return (Local0)
}
Method (W, 2, Serialized, 2){
\_SB.PCI0.LPCB.EC0.W(Arg0, Arg1)
}
Method (_DSM, 4, Serialized)
{
If (Arg0 != ToUUID ("6f8398c2-7ca4-11e4-ad36-631042b5008f")) {
Return (Buffer (1) { 0 })
}
Switch (ToInteger (Arg2))
{
Case (0)
{
Return (Buffer (1) { 0x07 })
}
Case (1)
{
/* 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 (1) { 0 })
}
Switch (ToInteger (Arg2))
{
Case (0)
{
Return (Buffer (1) { 0x07 })
}
Case (1)
{
/* 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 (1) { 0 })
}
}

View File

@ -196,7 +196,7 @@ static void wilco_ec_fill_ssdt_generator(const struct device *dev)
opreg.regionoffset = (uintptr_t)region_ptr;
opreg.regionlen = ucsi_alloc_region_len;
acpigen_write_scope(acpi_device_path_join(dev, "UCSI"));
acpigen_write_scope("\\_SB.UCSI");
acpigen_write_name("_CRS");
acpigen_write_resourcetemplate_header();
acpigen_write_mem32fixed(1, (uintptr_t)region_ptr, ucsi_region_len);