CPU.asi 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /** @file
  2. Copyright (c) 2020 - 2022, Ampere Computing LLC. All rights reserved.<BR>
  3. SPDX-License-Identifier: BSD-2-Clause-Patent
  4. **/
  5. Scope(\_SB) {
  6. Name (CPCE, 1) // CPPC Enable
  7. Name (LPIE, 0) // LPI Enable
  8. Method (_OSC, 4, Serialized) { // _OSC: Operating System Capabilities
  9. CreateDWordField (Arg3, 0x00, STS0)
  10. CreateDWordField (Arg3, 0x04, CAP0)
  11. If (LEqual(Arg0, ToUUID ("0811b06e-4a27-44f9-8d60-3cbbc22e7b48")) /* Platform-wide Capabilities */) {
  12. If (LNotEqual(Arg1, One)) {
  13. And(STS0, 0xFFFFFFE0, STS0)
  14. Or(STS0, 0x0A, STS0) // Unrecognized Revision, OSC failure
  15. } Else {
  16. If (LEqual(And(CAP0, 0x100), 0x100)) {
  17. And(CAP0, 0xFFFFFEFF, CAP0) // No support for OS Initiated LPI
  18. And(STS0, 0xFFFFFFE0, STS0)
  19. Or(STS0, 0x12, STS0)
  20. }
  21. If (LEqual(LPIE, 0x1)) {
  22. Or(CAP0, 0x80, CAP0) // Support for LPI
  23. } Else {
  24. And(CAP0, 0xFFFFFF7F, CAP0) // No support for LPI
  25. }
  26. If (LEqual(CPCE, 0x1)) {
  27. Or(CAP0, 0x40, CAP0) // Support for CPPCv2
  28. } Else {
  29. And(CAP0, 0xFFFFFFBF, CAP0) // No support for CPPCv2
  30. }
  31. }
  32. } Else {
  33. And(STS0, 0xFFFFFFE0, STS0)
  34. Or(STS0, 0x06, STS0) // Unrecognized Revision, Unrecognized UUID
  35. }
  36. Return (Arg3)
  37. }
  38. Name(CLPI, Package() {
  39. 0, // Version
  40. 1, // Level Index
  41. 1, // Count
  42. Package() {
  43. 1, // Min residency (uS)
  44. 1, // Wake latency (uS)
  45. 1, // Flags
  46. 0, // Arch Context Flags
  47. 0, // Residency Counter Frequency
  48. 1, // No parent state
  49. 0x01000000, // Integer Entry method
  50. ResourceTemplate() { // Null Residency Counter
  51. Register (SystemMemory, 0, 0, 0, 0)
  52. },
  53. ResourceTemplate() { // Null Usage Counter
  54. Register (SystemMemory, 0, 0, 0, 0)
  55. },
  56. "Standby",
  57. },
  58. })
  59. Name(PLPI, Package() {
  60. 0, // Version
  61. 2, // Level Index
  62. 2, // Count
  63. // WFI for CPU (NS-WFI)
  64. Package() {
  65. 1, // Min residency (uS)
  66. 1, // Wake latency (uS)
  67. 1, // Flags
  68. 0, // Arch Context Flags
  69. 0, // Residency Counter Frequency
  70. 0, // No parent state
  71. ResourceTemplate () {
  72. // Register Entry method
  73. Register (FFixedHW,
  74. 0x20, // Bit Width
  75. 0x00, // Bit Offset
  76. 0xFFFFFFFF, // Address
  77. 0x03, // Access Size
  78. )
  79. },
  80. ResourceTemplate() { // Null Residency Counter
  81. Register (SystemMemory, 0, 0, 0, 0)
  82. },
  83. ResourceTemplate() { // Null Usage Counter
  84. Register (SystemMemory, 0, 0, 0, 0)
  85. },
  86. "WFI",
  87. },
  88. // WFI for CPU (S-WFI)
  89. Package() {
  90. 1, // Min residency (uS)
  91. 2900, // Wake latency (uS)
  92. 1, // Flags
  93. 0, // Arch Context Flags
  94. 0, // Residency Counter Frequency
  95. 1, // No parent state
  96. ResourceTemplate () {
  97. // Register Entry method
  98. Register (FFixedHW,
  99. 0x20, // Bit Width
  100. 0x00, // Bit Offset
  101. 0x01, // Address
  102. 0x03, // Access Size
  103. )
  104. },
  105. ResourceTemplate() { // Null Residency Counter
  106. Register (SystemMemory, 0, 0, 0, 0)
  107. },
  108. ResourceTemplate() { // Null Usage Counter
  109. Register (SystemMemory, 0, 0, 0, 0)
  110. },
  111. "Standby",
  112. },
  113. })
  114. Device (SYST) { // System state
  115. Name(_HID, "ACPI0010")
  116. Name(_UID, 0)
  117. Name (_LPI, Package() {
  118. 0, // Version
  119. 0, // Level Index
  120. 1, // Count
  121. // Retention state for Cluster
  122. Package() {
  123. 100, // Min residency (uS)
  124. 99, // Wake latency (uS)
  125. 1, // Flags
  126. 0, // Arch Context Flags
  127. 100, // Residency Counter Frequency
  128. 0, // No Parent State
  129. 0x01000100, // Integer Entry method
  130. ResourceTemplate() { // Null Residency Counter
  131. Register (SystemMemory, 0, 0, 0, 0)
  132. },
  133. ResourceTemplate() { // Null Usage Counter
  134. Register (SystemMemory, 0, 0, 0, 0)
  135. },
  136. "System Standby"
  137. },
  138. })
  139. }
  140. }
  141. Include ("CPU-S0.asi")
  142. Include ("CPU-S1.asi")