/**************************************************************************; ;* *; ;* *; ;* Intel Corporation - ACPI Reference Code for the Baytrail *; ;* Family of Customer Reference Boards. *; ;* *; ;* *; ;* Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved *; ; ; This program and the accompanying materials are licensed and made available under ; the terms and conditions of the BSD License that accompanies this distribution. ; The full text of the license may be found at ; http://opensource.org/licenses/bsd-license.php. ; ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. ; ;* *; ;* *; ;**************************************************************************/ Scope(\) { // // Define VLV ABASE I/O as an ACPI operating region. The base address // can be found in Device 31, Registers 40-43h. // OperationRegion(PMIO, SystemIo, \PMBS, 0x46) Field(PMIO, ByteAcc, NoLock, Preserve) { , 8, PWBS, 1, // Power Button Status Offset(0x20), , 13, PMEB, 1, // PME_B0_STS Offset(0x42), // General Purpose Control , 1, GPEC, 1 } Field(PMIO, ByteAcc, NoLock, WriteAsZeros) { Offset(0x20), // GPE0 Status , 4, PSCI, 1, // PUNIT SCI Status SCIS, 1 // GUNIT SCI Status } // // Define a Memory Region that will allow access to the PMC // Register Block. Note that in the Intel Reference Solution, the PMC // will get fixed up dynamically during POST. // OperationRegion(PMCR, SystemMemory, \PFDR, 0x04)// PMC Function Disable Register Field(PMCR,DWordAcc,Lock,Preserve) { Offset(0x00), // Function Disable Register L10D, 1, // (0) LPIO1 DMA Disable L11D, 1, // (1) LPIO1 PWM #1 Disable L12D, 1, // (2) LPIO1 PWM #2 Disable L13D, 1, // (3) LPIO1 HS-UART #1 Disable L14D, 1, // (4) LPIO1 HS-UART #2 Disable L15D, 1, // (5) LPIO1 SPI Disable , 2, // (6:7) Reserved SD1D, 1, // (8) SCC SDIO #1 Disable SD2D, 1, // (9) SCC SDIO #2 Disable SD3D, 1, // (10) SCC SDIO #3 Disable HSID, 1, // (11) HDAD, 1, // (12) Azalia Disable LPED, 1, // (13) LPE Disable OTGD, 1, // (14) USB OTG Disable , 1, // (15) USH Disable , 1, // (16) , 1, // (17) , 1, // (18) USB Disable , 1, // (19) SEC Disable RP1D, 1, // (20) Root Port 0 Disable RP2D, 1, // (21) Root Port 1 Disable RP3D, 1, // (22) Root Port 2 Disable RP4D, 1, // (23) Root Port 3 Disable L20D, 1, // (24) LPIO2 DMA Disable L21D, 1, // (25) LPIO2 I2C #1 Disable L22D, 1, // (26) LPIO2 I2C #2 Disable L23D, 1, // (27) LPIO2 I2C #3 Disable L24D, 1, // (28) LPIO2 I2C #4 Disable L25D, 1, // (29) LPIO2 I2C #5 Disable L26D, 1, // (30) LPIO2 I2C #6 Disable L27D, 1 // (31) LPIO2 I2C #7 Disable } OperationRegion(CLKC, SystemMemory, \PCLK, 0x18)// PMC CLK CTL Registers Field(CLKC,DWordAcc,Lock,Preserve) { Offset(0x00), // PLT_CLK_CTL_0 CKC0, 2, CKF0, 1, , 29, Offset(0x04), // PLT_CLK_CTL_1 CKC1, 2, CKF1, 1, , 29, Offset(0x08), // PLT_CLK_CTL_2 CKC2, 2, CKF2, 1, , 29, Offset(0x0C), // PLT_CLK_CTL_3 CKC3, 2, CKF3, 1, , 29, Offset(0x10), // PLT_CLK_CTL_4 CKC4, 2, CKF4, 1, , 29, Offset(0x14), // PLT_CLK_CTL_5 CKC5, 2, CKF5, 1, , 29, } } //end Scope(\) scope (\_SB) { Device(LPEA) { Name (_ADR, 0) Name (_HID, "80860F28") Name (_CID, "80860F28") //Name (_CLS, Package (3) {0x04, 0x01, 0x00}) Name (_DDN, "Intel(R) Low Power Audio Controller - 80860F28") Name (_SUB, "80867270") Name (_UID, 1) Name (_DEP, Package() {\_SB.I2C2.RTEK}) Name(_PR0,Package() {PLPE}) Method (_STA, 0x0, NotSerialized) { If (LAnd(LAnd(LEqual(LPEE, 2), LEqual(LPED, 0)), LEqual(OSEL, 0))) { If(LEqual(LPAD, 1)) { Return (0xF) } } Return (0x0) } Method (_DIS, 0x0, NotSerialized) { //Add a dummy disable function } Name (RBUF, ResourceTemplate () { Memory32Fixed (ReadWrite, 0xFE400000, 0x00200000, BAR0) // MMIO 1 - LPE MMIO Memory32Fixed (ReadWrite, 0xFE830000, 0x00001000, BAR1) // MMIO 2 - Shadowed PCI Config Space Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00100000, BAR2) // LPE Memory Bar Allocate during post Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {24} Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {25} Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {26} Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {27} Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {28} Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {29} GpioInt(Edge, ActiveBoth, ExclusiveAndWake, PullNone, 0,"\\_SB.GPO2") {28} // Audio jack interrupt } ) Method (_CRS, 0x0, NotSerialized) { CreateDwordField(^RBUF, ^BAR0._BAS, B0BA) Store(LPE0, B0BA) CreateDwordField(^RBUF, ^BAR1._BAS, B1BA) Store(LPE1, B1BA) CreateDwordField(^RBUF, ^BAR2._BAS, B2BA) Store(LPE2, B2BA) Return (RBUF) } OperationRegion (KEYS, SystemMemory, LPE1, 0x100) Field (KEYS, DWordAcc, NoLock, WriteAsZeros) { Offset (0x84), PSAT, 32 } PowerResource(PLPE, 0, 0) // Power Resource for LPEA { Method (_STA) { Return (1) // Power Resource is always available. } Method (_ON) { And(PSAT, 0xfffffffC, PSAT) OR(PSAT, 0X00000000, PSAT) } Method (_OFF) { OR(PSAT, 0x00000003, PSAT) OR(PSAT, 0X00000000, PSAT) } } // End PLPE } // End "Low Power Engine Audio" Device(LPA2) { Name (_ADR, 0) Name (_HID, "LPE0F28") // _HID: Hardware ID Name (_CID, "LPE0F28") // _CID: Compatible ID Name (_DDN, "Intel(R) SST Audio - LPE0F28") // _DDN: DOS Device Name Name (_SUB, "80867270") Name (_UID, 1) Name (_DEP, Package() {\_SB.I2C2.RTEK}) Name(_PR0,Package() {PLPE}) Method (_STA, 0x0, NotSerialized) { If (LAnd(LAnd(LEqual(LPEE, 2), LEqual(LPED, 0)), LEqual(OSEL, 1))) { If(LEqual(LPAD, 1)) { Return (0xF) } } Return (0x0) } Method (_DIS, 0x0, NotSerialized) { //Add a dummy disable function } Name (RBUF, ResourceTemplate () { Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00100000, BAR2) // LPE Memory Bar Allocate during post Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00000100, SHIM) Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00001000, MBOX) Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00014000, IRAM) Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00028000, DRAM) Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {29} Memory32Fixed (ReadWrite, 0xFE830000, 0x00001000, BAR1) // MMIO 2 - Shadowed PCI Config Space } ) Method (_CRS, 0x0, NotSerialized) { CreateDwordField(^RBUF, ^SHIM._BAS, SHBA) Add(LPE0, 0x140000, SHBA) CreateDwordField(^RBUF, ^MBOX._BAS, MBBA) Add(LPE0, 0x144000, MBBA) CreateDwordField(^RBUF, ^IRAM._BAS, IRBA) Add(LPE0, 0xC0000, IRBA) CreateDwordField(^RBUF, ^DRAM._BAS, DRBA) Add(LPE0, 0x100000, DRBA) CreateDwordField(^RBUF, ^BAR1._BAS, B1BA) Store(LPE1, B1BA) CreateDwordField(^RBUF, ^BAR2._BAS, B2BA) Store(LPE2, B2BA) Return (RBUF) } OperationRegion (KEYS, SystemMemory, LPE1, 0x100) Field (KEYS, DWordAcc, NoLock, WriteAsZeros) { Offset (0x84), PSAT, 32 } PowerResource(PLPE, 0, 0) // Power Resource for LPEA { Method (_STA) { Return (1) // Power Resource is always available. } Method (_ON) { And(PSAT, 0xfffffffC, PSAT) OR(PSAT, 0X00000000, PSAT) } Method (_OFF) { OR(PSAT, 0x00000003, PSAT) OR(PSAT, 0X00000000, PSAT) } } // End PLPE Device (ADMA) { Name (_ADR, Zero) // _ADR: Address Name (_HID, "DMA0F28") // _HID: Hardware ID Name (_CID, "DMA0F28") // _CID: Compatible ID Name (_DDN, "Intel(R) Audio DMA0 - DMA0F28") // _DDN: DOS Device Name Name (_UID, One) // _UID: Unique ID Name (RBUF, ResourceTemplate () { Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00001000, DMA0) // LPE BASE + LPE DMA0 offset Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00001000, SHIM) // LPE BASE + LPE SHIM offset Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {24} }) Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings { CreateDwordField(^RBUF, ^DMA0._BAS, D0BA) Add(LPE0, 0x98000, D0BA) CreateDwordField(^RBUF, ^SHIM._BAS, SHBA) Add(LPE0, 0x140000, SHBA) Return (RBUF) } } } // End "Low Power Engine Audio" for Android } scope (\_SB.PCI0) { // // Serial ATA Host Controller - Device 19, Function 0 // Device(SATA) { Name(_ADR,0x00130000) // // SATA Methods pulled in via SSDT. // OperationRegion(SATR, PCI_Config, 0x74,0x4) Field(SATR,WordAcc,NoLock,Preserve) { Offset(0x00), // 0x74, PMCR , 8, PMEE, 1, //PME_EN , 6, PMES, 1 //PME_STS } Method (_STA, 0x0, NotSerialized) { Return(0xf) } Method(_DSW, 3) { } // End _DSW } // // For eMMC 4.41 PCI mode in order to present non-removable device under Windows environment // Device(EM41) { Name(_ADR,0x00100000) OperationRegion(SDIO, PCI_Config, 0x84,0x4) Field(SDIO,WordAcc,NoLock,Preserve) { Offset(0x00), // 0x84, PMCR , 8, PMEE, 1, //PME_EN , 6, PMES, 1 //PME_STS } Method (_STA, 0x0, NotSerialized) { If (LAnd(LEqual(PCIM, 1), LEqual(SD1D, 0))) { Return(0xF) } Else { Return(0x0) } } Method(_DSW, 3) { } // End _DSW Device (CARD) { Name (_ADR, 0x00000008) Method(_RMV, 0x0, NotSerialized) { Return (0) } // End _DSW } } // // For eMMC 4.5 PCI mode in order to present non-removable device under Windows environment // Device(EM45) { Name(_ADR,0x00170000) OperationRegion(SDIO, PCI_Config, 0x84,0x4) Field(SDIO,WordAcc,NoLock,Preserve) { Offset(0x00), // 0x84, PMCR , 8, PMEE, 1, //PME_EN , 6, PMES, 1 //PME_STS } Method (_STA, 0x0, NotSerialized) { If (LAnd(LEqual(PCIM, 1), LEqual(HSID, 0))) { Return(0xF) } Else { Return(0x0) } } Method(_DSW, 3) { } // End _DSW Device (CARD) { Name (_ADR, 0x00000008) Method(_RMV, 0x0, NotSerialized) { Return (0) } // End _DSW } } // // For SD Host Controller (Bus 0x00 : Dev 0x12 : Func 0x00) PCI mode in order to present non-removable device under Windows environment // Device(SD12) { Name(_ADR,0x00120000) Method (_STA, 0x0, NotSerialized) { // // PCIM>> 0:ACPI mode 1:PCI mode // If (LEqual(PCIM, 0)) { Return (0x0) } // // If device is disabled. // If (LEqual(SD3D, 1)) { Return (0x0) } Return (0xF) } Device (CARD) { Name (_ADR, 0x00000008) Method(_RMV, 0x0, NotSerialized) { // SDRM = 0 non-removable; If (LEqual(SDRM, 0)) { Return (0) } Return (1) } } } // xHCI Controller - Device 20, Function 0 include("PchXhci.asl") // // High Definition Audio Controller - Device 27, Function 0 // Device(HDEF) { Name(_ADR, 0x001B0000) include("PchAudio.asl") Method (_STA, 0x0, NotSerialized) { If (LEqual(HDAD, 0)) { Return(0xf) } Return(0x0) } Method(_DSW, 3) { } // End _DSW } // end "High Definition Audio Controller" // // PCIE Root Port #1 // Device(RP01) { Name(_ADR, 0x001C0000) include("PchPcie.asl") Name(_PRW, Package() {9, 4}) Method(_PRT,0) { If(PICM) { Return(AR04) }// APIC mode Return (PR04) // PIC Mode } // end _PRT } // end "PCIE Root Port #1" // // PCIE Root Port #2 // Device(RP02) { Name(_ADR, 0x001C0001) include("PchPcie.asl") Name(_PRW, Package() {9, 4}) Method(_PRT,0) { If(PICM) { Return(AR05) }// APIC mode Return (PR05) // PIC Mode } // end _PRT } // end "PCIE Root Port #2" // // PCIE Root Port #3 // Device(RP03) { Name(_ADR, 0x001C0002) include("PchPcie.asl") Name(_PRW, Package() {9, 4}) Method(_PRT,0) { If(PICM) { Return(AR06) }// APIC mode Return (PR06) // PIC Mode } // end _PRT } // end "PCIE Root Port #3" // // PCIE Root Port #4 // Device(RP04) { Name(_ADR, 0x001C0003) include("PchPcie.asl") Name(_PRW, Package() {9, 4}) Method(_PRT,0) { If(PICM) { Return(AR07) }// APIC mode Return (PR07) // PIC Mode } // end _PRT } // end "PCIE Root Port #4" Scope(\_SB) { // // Dummy power resource for USB D3 cold support // PowerResource(USBC, 0, 0) { Method(_STA) { Return (0xF) } Method(_ON) {} Method(_OFF) {} } } // // EHCI Controller - Device 29, Function 0 // Device(EHC1) { Name(_ADR, 0x001D0000) Name(_DEP, Package(0x1) { PEPD }) include("PchEhci.asl") Name(_PRW, Package() {0x0D, 4}) OperationRegion(USBR, PCI_Config, 0x54,0x4) Field(USBR,WordAcc,NoLock,Preserve) { Offset(0x00), // 0x54, PMCR , 8, PMEE, 1, //PME_EN , 6, PMES, 1 //PME_STS } Method (_STA, 0x0, NotSerialized) { If(LEqual(XHCI, 0)) //XHCI is not present. It means EHCI is there { Return (0xF) } Else { Return (0x0) } } Method (_RMV, 0, NotSerialized) { Return (0x0) } // // Create a dummy PR3 method to indicate to the PCI driver // that the device is capable of D3 cold // Method(_PR3, 0x0, NotSerialized) { return (Package() {\_SB.USBC}) } } // end "EHCI Controller" // // SMBus Controller - Device 31, Function 3 // Device(SBUS) { Name(_ADR,0x001F0003) Include("PchSmb.asl") } Device(SEC0) { Name (_ADR, 0x001a0000) // Device 0x1a, Function 0 Name(_DEP, Package(0x1) { PEPD }) OperationRegion (PMEB, PCI_Config, 0x84, 0x04) //PMECTRLSTATUS Field (PMEB, WordAcc, NoLock, Preserve) { , 8, PMEE, 1, //bit8 PMEENABLE , 6, PMES, 1 //bit15 PMESTATUS } // Arg0 -- integer that contains the device wake capability control (0-disable 1- enable) // Arg1 -- integer that contains target system state (0-4) // Arg2 -- integer that contains the target device state Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake { } Method (_CRS, 0, NotSerialized) { Name (RBUF, ResourceTemplate () { Memory32Fixed (ReadWrite, 0x1e000000, 0x2000000) }) If (LEqual(PAVP, 2)) { Return (RBUF) } Return (ResourceTemplate() {}) } Method (_STA) { If (LNotEqual(PAVP, 0)) { Return (0xF) } Return (0x0) } } // Device(SEC0) } // End scope (\_SB.PCI0)