| /**************************************************************************; | |
| ;* *; | |
| ;* *; | |
| ;* 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) | |