| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| /* Intel Cougar Point USB support */ |
| |
| // EHCI Controller 0:1d.0 |
| |
| Device (EHC1) |
| { |
| Name(_ADR, 0x001d0000) |
| |
| Name (_PRW, Package(){ 13, 4 }) // Power Resources for Wake |
| |
| // Leave USB ports on for to allow Wake from USB |
| |
| Method(_S3D,0) // Highest D State in S3 State |
| { |
| Return (2) |
| } |
| |
| Method(_S4D,0) // Highest D State in S4 State |
| { |
| Return (2) |
| } |
| |
| Device (HUB7) |
| { |
| Name (_ADR, 0x00000000) |
| |
| |
| // GPLD: Generate Port Location Data (PLD) |
| Method (GPLD, 1, Serialized) |
| { |
| |
| Name (PCKG, Package (0x01) |
| { |
| Buffer (0x10) {} |
| }) |
| |
| // REV: Revision 0x02 for ACPI 5.0 |
| CreateField (DerefOf (PCKG [0]), 0, 0x07, REV) |
| REV = 0x02 |
| |
| // VISI: Port visibility to user per port |
| CreateField (DerefOf (PCKG [0]), 0x40, 1, VISI) |
| VISI = Arg0 |
| |
| Return (PCKG) |
| } |
| |
| // How many are there? |
| Device (PRT1) { Name (_ADR, 1) } // USB Port 0 |
| Device (PRT2) { Name (_ADR, 2) } // USB Port 1 |
| Device (PRT3) { Name (_ADR, 3) } // USB Port 2 |
| Device (PRT4) { Name (_ADR, 4) } // USB Port 3 |
| Device (PRT5) { Name (_ADR, 5) } // USB Port 4 |
| Device (PRT6) { Name (_ADR, 6) } // USB Port 5 |
| } |
| } |
| |
| // EHCI #2 Controller 0:1a.0 |
| |
| Device (EHC2) |
| { |
| Name(_ADR, 0x001a0000) |
| |
| Name (_PRW, Package(){ 13, 4 }) // Power Resources for Wake |
| |
| // Leave USB ports on for to allow Wake from USB |
| |
| Method(_S3D,0) // Highest D State in S3 State |
| { |
| Return (2) |
| } |
| |
| Method(_S4D,0) // Highest D State in S4 State |
| { |
| Return (2) |
| } |
| |
| Device (HUB7) |
| { |
| Name (_ADR, 0x00000000) |
| |
| // GPLD: Generate Port Location Data (PLD) |
| Method (GPLD, 1, Serialized) |
| { |
| Name (PCKG, Package (0x01) |
| { |
| Buffer (0x10) {} |
| }) |
| |
| // REV: Revision 0x02 for ACPI 5.0 |
| CreateField (DerefOf (PCKG [0]), 0, 0x07, REV) |
| REV = 0x02 |
| |
| // VISI: Port visibility to user per port |
| CreateField (DerefOf (PCKG [0]), 0x40, 1, VISI) |
| VISI = Arg0 |
| |
| Return (PCKG) |
| } |
| |
| // How many are there? |
| Device (PRT1) { Name (_ADR, 1) } // USB Port 0 |
| Device (PRT2) { Name (_ADR, 2) } // USB Port 1 |
| Device (PRT3) { Name (_ADR, 3) } // USB Port 2 |
| Device (PRT4) { Name (_ADR, 4) } // USB Port 3 |
| Device (PRT5) { Name (_ADR, 5) } // USB Port 4 |
| Device (PRT6) { Name (_ADR, 6) } // USB Port 5 |
| } |
| } |
| |
| Device (XHC) |
| { |
| Name(_ADR, 0x00140000) |
| OperationRegion(XDEV, PCI_Config, 0, 256) |
| Field(XDEV, DWordAcc, NoLock, Preserve) |
| { |
| Offset(0xD0), |
| X2PR, 32, // XUSB2PR |
| PRM2, 32, // XUSB2PRM |
| SSEN, 32, // USB3_PSSEN |
| RPM3, 32, // USB3PRM |
| XPRT, 32, // XHCI Ports |
| } |
| |
| Name (_PRW, Package(){ 13, 4 }) // Power Resources for Wake |
| |
| Method(POSC,2,Serialized) |
| { |
| /* |
| * Arg0 - An Integer containing a count of entries in Arg3 |
| * Arg1 - A Buffer containing a list of DWORD capabilities |
| */ |
| |
| // Create DWord field from the Capabilities Buffer |
| CreateDWordField(Arg1,0,CDW1) |
| |
| // Check revision |
| If(Arg0 != 1) { |
| // Set unknown revision bit |
| CDW1 |= 8 |
| } |
| |
| // Set failure if xHCI is disabled by coreboot |
| If(XHCI == 0) { |
| CDW1 |= 2 |
| } |
| |
| // Query flag clear and xHCI in auto mode |
| If(!(CDW1 & 0x1) && (XHCI == 2 || XHCI == 3)) { |
| Printf ("XHCI Switch") |
| Local0 = 0 |
| Local0 = XPRT & 0x03 |
| If(Local0 == 0 || Local0 == 1) { |
| Local1 = 0x0f |
| } |
| ElseIf(Local0 == 2) { |
| Local1 = 3 |
| } |
| ElseIf(Local0 == 3) { |
| Local1 = 0 |
| } |
| Local0 = RPM3 & 0xfffffff0 |
| RPM3 = Local0 | Local1 |
| Local0 = PRM2 & 0xfffffff0 |
| PRM2 = Local0 | Local1 |
| Local0 = SSEN & 0xfffffff0 |
| SSEN = Local0 | Local1 |
| Local0 = X2PR & 0xfffffff0 |
| X2PR = Local0 | Local1 |
| } |
| Return(Arg1) |
| } |
| |
| // Leave USB ports on for to allow Wake from USB |
| Method(_S3D,0) // Highest D State in S3 State |
| { |
| Return (2) |
| } |
| |
| Method(_S4D,0) // Highest D State in S4 State |
| { |
| Return (2) |
| } |
| } |