1 /**************************************************************************; 2 ;* *; 3 ;* *; 4 ;* Intel Corporation - ACPI Reference Code for the Baytrail *; 5 ;* Family of Customer Reference Boards. *; 6 ;* *; 7 ;* *; 8 ;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *; 9 ; 10 ; This program and the accompanying materials are licensed and made available under 11 ; the terms and conditions of the BSD License that accompanies this distribution. 12 ; The full text of the license may be found at 13 ; http://opensource.org/licenses/bsd-license.php. 14 ; 15 ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 16 ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 17 ; 18 ;* *; 19 ;* *; 20 ;**************************************************************************/ 21 Device (PEPD) 22 { 23 Name (_HID, "INT3396") 24 Name(_CID, 0x800dd041) 25 Name (_UID, 0x1) 26 27 // Indicates if the platform PEP has loaded 28 Name(PEPP, Zero) 29 30 // Devices score-boarded by the PEP, Rev0 format 31 Name (DEVS, Package() {0}) 32 33 // Devices score-boarded by the PEP, Rev1 format 34 Name(DEVX, Package() 35 { 36 Package () {"\\_SB.PCI0.XHC1", 0x1}, 37 Package () {"\\_SB.PCI0.EHC1", 0x1}, 38 Package () {"\\_SB.PCI0.GFX0", 0x1}, 39 Package () {"\\_SB.PCI0.GFX0.ISP0", 0x1}, 40 Package () {"\\_SB.PCI0.SEC0", 0x1}, 41 Package () {"\\_SB.I2C1", 0x1}, 42 Package () {"\\_SB.I2C2", 0x1}, 43 Package () {"\\_SB.I2C3", 0x1}, 44 Package () {"\\_SB.I2C4", 0x1}, 45 Package () {"\\_SB.I2C5", 0x1}, 46 Package () {"\\_SB.I2C6", 0x1}, 47 Package () {"\\_SB.I2C7", 0x1}, 48 Package () {"\\_SB.SDHA", 0x1}, 49 Package () {"\\_SB.SDHB", 0x1}, 50 Package () {"\\_SB.SDHC", 0x1}, 51 Package () {"\\_SB.SPI1", 0x1}, 52 Package () {"\\_SB.URT1", 0x1}, 53 Package () {"\\_SB.URT2", 0x1}, 54 }) 55 // Crashdump device package 56 Name(CDMP, Package(2) {}) 57 // Device dependency for uPEP 58 Name(DEVY, Package() 59 { 60 Package() {"\\_PR.CPU0", 0x1, Package() {Package() {0xFF, 0}}}, 61 Package() {"\\_PR.CPU1", 0x1, Package() {Package() {0xFF, 0}}}, 62 Package() {"\\_PR.CPU2", 0x1, Package() {Package() {0xFF, 0}}}, 63 Package() {"\\_PR.CPU3", 0x1, Package() {Package() {0xFF, 0}}}, 64 Package() {"\\_SB.I2C1", 0x1, Package() {Package() {0xFF,3}}}, 65 Package() {"\\_SB.I2C2", 0x1, Package() {Package() {0xFF,3}}}, 66 Package() {"\\_SB.I2C3", 0x1, Package() {Package() {0xFF,3}}}, 67 Package() {"\\_SB.I2C4", 0x1, Package() {Package() {0xFF,3}}}, 68 Package() {"\\_SB.I2C5", 0x1, Package() {Package() {0xFF,3}}}, 69 Package() {"\\_SB.I2C6", 0x1, Package() {Package() {0xFF,3}}}, 70 Package() {"\\_SB.I2C7", 0x1, Package() {Package() {0xFF,3}}}, 71 Package() {"\\_SB.PCI0.GFX0", 0x1, Package() {Package() {0xFF,3}}}, 72 Package() {"\\_SB.PCI0.SEC0", 0x1, Package() {Package() {0xFF,3}}}, 73 Package() {"\\_SB.PCI0.XHC1", 0x1, Package() {Package() {0xFF,3}}}, 74 Package() {"\\_SB.PCI0.GFX0.ISP0", 0x1, Package() {Package() {0xFF,3}}}, 75 Package() {"\\_SB.LPEA", 0x1, Package() {Package() {0x0,3}, Package() {0x1,0}, Package() {0x2,3}, Package() {0x3,3}}}, 76 Package() {"\\_SB.SDHA", 0x1, Package() {Package() {0xFF,3}}}, 77 Package() {"\\_SB.SDHB", 0x1, Package() {Package() {0xFF,3}}}, 78 Package() {"\\_SB.SDHC", 0x1, Package() {Package() {0xFF,3}}}, 79 Package() {"\\_SB.SPI1", 0x1, Package() {Package() {0xFF,3}}}, 80 Package() {"\\_SB.URT1", 0x1, Package() {Package() {0xFF,3}}}, 81 Package() {"\\_SB.URT2", 0x1, Package() {Package() {0xFF,3}}} 82 }) 83 // BCCD crashdump information 84 Name(BCCD, Package() 85 { 86 Package() 87 { 88 "\\_SB.SDHA", 89 Package() 90 { 91 Package() { Package() {0, 32, 0, 3, 0xFFFFFFFFFFFFFFFF}, Package() {0xFFFFFFFC, 0x0, 0x4}, 0} 92 } 93 } 94 }) 95 96 Method(_STA, 0x0, NotSerialized) 97 { 98 Return(0xf) 99 } 100 101 Method(_DSM, 0x4, Serialized) 102 { 103 If(LEqual(Arg0,ToUUID("B8FEBFE0-BAF8-454b-AECD-49FB91137B21"))) 104 { 105 106 // Number of fn IDs supported 107 If(LEqual(Arg2, Zero)) 108 { 109 Return(Buffer(One) 110 { 111 0xf 112 }) 113 } 114 115 // Pep presence 116 If(LEqual(Arg2, One)) 117 { 118 Store(0x1, PEPP) 119 Return(0xf) 120 } 121 122 // Mitigation devices 123 If(LEqual(Arg2, 0x2)) 124 { 125 If(LEqual(Arg1, 0x0)) 126 { 127 // Rev0 128 Return(DEVS) 129 } 130 If(LEqual(Arg1, 0x1)) 131 { 132 // Rev1 133 Return(DEVX) 134 } 135 } 136 137 // Crashdump device data 138 If(LEqual(Arg2, 0x3)) 139 { 140 Store("\\_SB.SDHA", Index(CDMP,0)) 141 Store(EM1A, Index(CDMP,1)) 142 Return(CDMP) 143 } 144 } 145 // New UUID for built-in uPEP 146 If(LEqual(Arg0,ToUUID("C4EB40A0-6CD2-11E2-BCFD-0800200C9A66"))) 147 { 148 149 // Number of fn IDs supported 150 If(LEqual(Arg2, Zero)) 151 { 152 Return(Buffer(One) 153 { 154 0x7 155 }) 156 } 157 // LPI device dependencies 158 If(LEqual(Arg2, 0x1)) 159 { 160 Return(DEVY) 161 } 162 // Crashdump device data 163 If(LEqual(Arg2, 0x2)) 164 { 165 Store(EM1A, Local0) 166 Add(Local0, 0x84, Local0) 167 Store(Local0, Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(BCCD, Zero, )), One, )), Zero, )), Zero, )), 0x4, )) 168 Return(BCCD) 169 } 170 } 171 172 Return(One) 173 } 174 } 175 176 // 177 // eMMC 4.41 178 // 179 Device(SDHA) 180 { 181 Name (_ADR, 0) 182 Name (_HID, "80860F14") 183 Name (_CID, "PNP0D40") 184 Name (_DDN, "Intel(R) eMMC Controller - 80860F14") 185 Name (_UID, 1) 186 Name(_DEP, Package(0x1) 187 { 188 PEPD 189 }) 190 191 Name (RBF1, ResourceTemplate () 192 { 193 Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0) 194 Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {45} // eMMC 4.41 IRQ 195 }) 196 197 Method (_CRS, 0x0, NotSerialized) 198 { 199 // Update the Base address for BAR0 of eMMC 4.41 200 CreateDwordField(^RBF1, ^BAR0._BAS, B0B1) 201 CreateDwordField(^RBF1, ^BAR0._LEN, B0L1) 202 Store(eM0A, B0B1) 203 Store(eM0L, B0L1) 204 Return (RBF1) 205 } 206 Method (_STA, 0x0, NotSerialized) 207 { 208 // 209 // PCIM>> 0:ACPI mode 1:PCI mode 210 // SD1D>> 0:eMMC 4.41 enable 1:eMMC 4.41 disable 211 // 212 If (LAnd(LEqual(PCIM, 0), LEqual(SD1D, 0))) 213 { 214 Return (0xF) 215 } 216 Else 217 { 218 Return (0x0) 219 } 220 } 221 222 223 Method (_PS3, 0, NotSerialized) 224 { 225 OR(PSAT, 0x00000003, PSAT) 226 OR(PSAT, 0X00000000, PSAT) 227 // 228 // If not B1, still keep 2 ms w/a 229 // 230 If(LLess(SOCS, 0x03)) 231 { 232 Sleep(2) 233 } 234 } 235 Method (_PS0, 0, NotSerialized) 236 { 237 And(PSAT, 0xfffffffC, PSAT) 238 OR(PSAT, 0X00000000, PSAT) 239 // 240 // If not B1, still keep 2 ms w/a 241 // 242 If(LLess(SOCS, 0x03)) 243 { 244 Sleep(2) 245 } 246 } 247 248 OperationRegion (KEYS, SystemMemory, eM1A, 0x100) 249 Field (KEYS, DWordAcc, NoLock, WriteAsZeros) 250 { 251 Offset (0x84), 252 PSAT, 32 253 } 254 255 Method (_DIS, 0x0, NotSerialized) 256 { 257 //Adding dummy disable methods for device EMM0 258 } 259 260 Device (EMMD) 261 { 262 Name (_ADR, 0x00000008) // Slot 0, Function 8 263 Method (_RMV, 0, NotSerialized) 264 { 265 Return (0x0) 266 } 267 } 268 } 269 270 271 // 272 // eMMC 4.5 273 // 274 Device(SDHD) 275 { 276 Name (_ADR, 0) 277 Name (_HID, "80860F14") 278 Name (_CID, "PNP0D40") 279 Name (_DDN, "Intel(R) eMMC Controller - 80860F14") 280 Name (_UID, 1) 281 Name(_DEP, Package(0x1) 282 { 283 PEPD 284 }) 285 286 Name (RBF1, ResourceTemplate () 287 { 288 Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0) 289 Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {44} // eMMC 4.5 IRQ 290 }) 291 Method (_CRS, 0x0, NotSerialized) 292 { 293 CreateDwordField(^RBF1, ^BAR0._BAS, B0B1) 294 CreateDwordField(^RBF1, ^BAR0._LEN, B0L1) 295 Store(eM0A, B0B1) 296 Store(eM0L, B0L1) 297 Return (RBF1) 298 } 299 Method (_STA, 0x0, NotSerialized) 300 { 301 // 302 // PCIM>> 0:ACPI mode 1:PCI mode 303 // HSID>> 0:eMMC 4.5 enable 1:eMMC 4.5 disable 304 // 305 If (LAnd(LEqual(PCIM, 0), LEqual(HSID, 0))) 306 { 307 Return (0xF) 308 } 309 Else 310 { 311 Return (0x0) 312 } 313 } 314 315 316 Method (_PS3, 0, NotSerialized) 317 { 318 OR(PSAT, 0x00000003, PSAT) 319 OR(PSAT, 0X00000000, PSAT) 320 // 321 // If not B1, still keep 2 ms w/a 322 // 323 If(LLess(SOCS, 0x03)) 324 { 325 Sleep(2) 326 } 327 } 328 Method (_PS0, 0, NotSerialized) 329 { 330 And(PSAT, 0xfffffffC, PSAT) 331 OR(PSAT, 0X00000000, PSAT) 332 // 333 // If not B1, still keep 2 ms w/a 334 // 335 If(LLess(SOCS, 0x03)) 336 { 337 Sleep(2) 338 } 339 } 340 341 OperationRegion (KEYS, SystemMemory, eM1A, 0x100) 342 Field (KEYS, DWordAcc, NoLock, WriteAsZeros) 343 { 344 Offset (0x84), 345 PSAT, 32 346 } 347 348 Method (_DIS, 0x0, NotSerialized) 349 { 350 //Adding dummy disable methods for device EMM0 351 } 352 353 Device (EM45) 354 { 355 Name (_ADR, 0x00000008) // Slot 0, Function 8 356 Method (_RMV, 0, NotSerialized) 357 { 358 Return (0x0) 359 } 360 } 361 } 362 363 364 // 365 // SDIO 366 // 367 Device(SDHB) 368 { 369 Name (_ADR, 0) 370 Name (_HID, "INT33BB") 371 Name (_CID, "PNP0D40") 372 Name (_DDN, "Intel(R) SDIO Controller - 80860F15") 373 Name (_UID, 2) 374 Name (_HRV, 2) 375 Name(_DEP, Package(0x01) 376 { 377 PEPD 378 }) 379 Name (PSTS, 0x0) 380 381 Name (RBUF, ResourceTemplate () 382 { 383 Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0) 384 Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {46} // SDIO IRQ 385 }) 386 387 Method (_CRS, 0x0, NotSerialized) 388 { 389 390 CreateDwordField(^RBUF, ^BAR0._BAS, B0BA) 391 CreateDwordField(^RBUF, ^BAR0._LEN, B0LN) 392 Store(SI0A, B0BA) 393 Store(SI0L, B0LN) 394 Return (RBUF) 395 } 396 Method (_STA, 0x0, NotSerialized) 397 { 398 If (LLessEqual(STEP, 0x04)) 399 { 400 //A stepping 401 Store(SDMD, _HRV) 402 } 403 404 // 405 // PCIM>> 0:ACPI mode 1:PCI mode 406 // 407 If (LEqual(PCIM, 1)) { 408 Return (0x0) 409 } 410 411 If (LOr(LEqual(SI0A, 0), LEqual(SD2D, 1))) 412 { 413 Return (0x0) 414 } 415 Return (0xF) 416 } 417 Method (_DIS, 0x0, NotSerialized) 418 { 419 //Adding dummy disable methods for device EMM0 420 } 421 422 Method (_PS3, 0, NotSerialized) 423 { 424 OR(PSAT, 0x00000003, PSAT) 425 OR(PSAT, 0X00000000, PSAT) 426 } 427 Method (_PS0, 0, NotSerialized) 428 { 429 And(PSAT, 0xfffffffC, PSAT) 430 OR(PSAT, 0X00000000, PSAT) 431 432 if(LEqual(\_SB.SDHB.PSTS,0x0)) 433 { 434 if(LEqual (\_SB.GPO2.AVBL, 1)) 435 { 436 Store( 0x01, \_SB.GPO2.WFD3 ) // WL_WIFI_REQ_ON = 1 put the device to normal state 437 Store( 0x01, \_SB.SDHB.PSTS) // indicates that the device powered ON 438 } 439 } 440 441 442 } 443 OperationRegion (KEYS, SystemMemory, SI1A, 0x100) 444 Field (KEYS, DWordAcc, NoLock, WriteAsZeros) 445 { 446 Offset (0x84), 447 PSAT, 32 448 } 449 450 451 Device (BRCM) 452 { 453 Name (_ADR, 0x01) //SlotNumber + Function 454 Name (_DEP, Package() {\_SB.GPO2}) 455 456 Method (_RMV, 0, NotSerialized) 457 { 458 Return (0x0) 459 } 460 Name (_PRW, Package() {0, 0}) 461 Name (_S4W, 2) 462 463 Method (_CRS, 0, Serialized) 464 { 465 Name (RBUF, ResourceTemplate () 466 { 467 Interrupt (ResourceConsumer, Edge, ActiveHigh, ExclusiveAndWake, , , ) {73} 468 }) 469 Return (RBUF) 470 } 471 472 Method (_PS3, 0, NotSerialized) 473 { 474 if(LEqual (\_SB.GPO2.AVBL, 1)) 475 { 476 Store( 0x00, \_SB.GPO2.WFD3 ) // WL_WIFI_REQ_ON = 0 puts the device in reset state 477 Store( 0x00, \_SB.SDHB.PSTS) //Indicates that the device is powered off 478 } 479 480 } 481 Method (_PS0, 0, NotSerialized) 482 { 483 if(LEqual(\_SB.SDHB.PSTS,0x0)) 484 { 485 if(LEqual (\_SB.GPO2.AVBL, 1)) 486 { 487 Store( 0x01, \_SB.GPO2.WFD3 ) // WL_WIFI_REQ_ON = 1 put the device to normal state 488 Store( 0x01, \_SB.SDHB.PSTS) // indicates that the device powered ON 489 } 490 } 491 } 492 } // Device (BRCM) 493 // 494 // Secondary Broadcom WIFI function 495 // 496 Device(BRC2) 497 { 498 Name(_ADR, 0x2) // function 2 499 Name(_STA, 0xf) 500 // 501 // The device is not removable. This must be a method. 502 // 503 Method(_RMV, 0x0, NotSerialized) 504 { 505 Return(0x0) 506 } 507 508 // 509 // Describe a vendor-defined connection between this device and the 510 // primary wifi device 511 // 512 513 Method(_CRS) 514 { 515 Name(NAM, Buffer() {"\\_SB.SDHB.BRCM"}) 516 Name(SPB, Buffer() 517 { 518 0x8E, // SPB Descriptor 519 0x18, 0x00, // Length including NAM above 520 0x01, // +0x00 SPB Descriptor Revision 521 0x00, // +0x01 Resource Source Index 522 0xc0, // +0x02 Bus type - vendor defined 523 0x02, // +0x03 Consumer + controller initiated 524 0x00, 0x00, // +0x04 Type specific flags 525 0x01, // +0x06 Type specific revision 526 0x00, 0x00 // +0x07 type specific data length 527 // +0x09 - 0xf bytes for NULL-terminated NAM 528 // Length = 0x18 529 }) 530 531 Name(END, Buffer() {0x79, 0x00}) 532 Concatenate(SPB, NAM, Local0) 533 Concatenate(Local0, END, Local1) 534 Return(Local1) 535 } 536 } 537 538 } 539 540 // 541 // SD Card 542 // 543 Device(SDHC) 544 { 545 Name (_ADR, 0) 546 Name (_HID, "80860F16") 547 Name (_CID, "PNP0D40") 548 Name (_DDN, "Intel(R) SD Card Controller - 80860F16") 549 Name (_UID, 3) 550 Name(_DEP, Package(0x01) 551 { 552 PEPD 553 }) 554 Name (RBUF, ResourceTemplate () 555 { 556 Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0) 557 Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {47} // SD Card IRQ 558 }) 559 Method (_CRS, 0x0, NotSerialized) 560 { 561 CreateDwordField(^RBUF, ^BAR0._BAS, B0BA) 562 CreateDwordField(^RBUF, ^BAR0._LEN, B0LN) 563 Store(SD0A, B0BA) 564 Store(SD0L, B0LN) 565 Return (RBUF) 566 } 567 Method (_STA, 0x0, NotSerialized) 568 { 569 // 570 // PCIM>> 0:ACPI mode 1:PCI mode 571 // 572 If (LEqual(PCIM, 1)) { 573 Return (0x0) 574 } 575 576 If (LOr(LEqual(SD0A, 0), LEqual(SD3D, 1))) 577 { 578 Return (0x0) 579 } 580 Return (0xF) 581 } 582 583 Method (_PS3, 0, NotSerialized) 584 { 585 OR(PSAT, 0x00000003, PSAT) 586 OR(PSAT, 0X00000000, PSAT) 587 } 588 Method (_PS0, 0, NotSerialized) 589 { 590 And(PSAT, 0xfffffffC, PSAT) 591 OR(PSAT, 0X00000000, PSAT) 592 } 593 OperationRegion (KEYS, SystemMemory, SD1A, 0x100) 594 Field (KEYS, DWordAcc, NoLock, WriteAsZeros) 595 { 596 Offset (0x84), 597 PSAT, 32 598 } 599 600 Device (CARD) 601 { 602 Name (_ADR, 0x00000008) 603 Method(_RMV, 0x0, NotSerialized) 604 { 605 // SDRM = 0 non-removable; 606 If (LEqual(SDRM, 0)) 607 { 608 Return (0) 609 } 610 611 Return (1) 612 } 613 } 614 615 } 616 617