Dsdt.asl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. /** @file
  2. Differentiated System Description Table Fields (DSDT)
  3. Copyright (c) 2014-2021, ARM Ltd. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "ArmPlatform.h"
  7. DefinitionBlock("DsdtTable.aml", "DSDT", 2, "ARMLTD", "ARM-JUNO", EFI_ACPI_ARM_OEM_REVISION) {
  8. Scope(_SB) {
  9. //
  10. // A57x2-A53x4 Processor declaration
  11. //
  12. Method (_OSC, 4, Serialized) { // _OSC: Operating System Capabilities
  13. CreateDWordField (Arg3, 0x00, STS0)
  14. CreateDWordField (Arg3, 0x04, CAP0)
  15. If ((Arg0 == ToUUID ("0811b06e-4a27-44f9-8d60-3cbbc22e7b48") /* Platform-wide Capabilities */)) {
  16. If (!(Arg1 == One)) {
  17. STS0 &= ~0x1F
  18. STS0 |= 0x0A
  19. } Else {
  20. If ((CAP0 & 0x100)) {
  21. CAP0 &= ~0x100 /* No support for OS Initiated LPI */
  22. STS0 &= ~0x1F
  23. STS0 |= 0x12
  24. }
  25. }
  26. } Else {
  27. STS0 &= ~0x1F
  28. STS0 |= 0x06
  29. }
  30. Return (Arg3)
  31. }
  32. Device (CLU0) { // Cluster0 state
  33. Name(_HID, "ACPI0010")
  34. Name(_UID, 1)
  35. Name (_LPI, Package() {
  36. 0, // Version
  37. 0, // Level Index
  38. 1, // Count
  39. Package() { // Power Gating state for Cluster
  40. 2500, // Min residency (uS)
  41. 1150, // Wake latency (uS)
  42. 1, // Flags
  43. 1, // Arch Context Flags
  44. 100, //Residency Counter Frequency
  45. 0, // No Parent State
  46. 0x01000000, // Integer Entry method
  47. ResourceTemplate() { // Null Residency Counter
  48. Register (SystemMemory, 0, 0, 0, 0)
  49. },
  50. ResourceTemplate() { // Null Usage Counter
  51. Register (SystemMemory, 0, 0, 0, 0)
  52. },
  53. "CluPwrDn"
  54. },
  55. })
  56. Name(PLPI, Package() {
  57. 0, // Version
  58. 0, // Level Index
  59. 2, // Count
  60. Package() { // WFI for CPU
  61. 1, // Min residency (uS)
  62. 1, // Wake latency (uS)
  63. 1, // Flags
  64. 0, // Arch Context Flags
  65. 100, //Residency Counter Frequency
  66. 0, // No parent state
  67. ResourceTemplate () {
  68. // Register Entry method
  69. Register (FFixedHW,
  70. 0x20, // Bit Width
  71. 0x00, // Bit Offset
  72. 0xFFFFFFFF, // Address
  73. 0x03, // Access Size
  74. )
  75. },
  76. ResourceTemplate() { // Null Residency Counter
  77. Register (SystemMemory, 0, 0, 0, 0)
  78. },
  79. ResourceTemplate() { // Null Usage Counter
  80. Register (SystemMemory, 0, 0, 0, 0)
  81. },
  82. "WFI",
  83. },
  84. Package() { // Power Gating state for CPU
  85. 150, // Min residency (uS)
  86. 350, // Wake latency (uS)
  87. 1, // Flags
  88. 1, // Arch Context Flags
  89. 100, //Residency Counter Frequency
  90. 1, // Parent node can be in any state
  91. ResourceTemplate () {
  92. // Register Entry method
  93. Register (FFixedHW,
  94. 0x20, // Bit Width
  95. 0x00, // Bit Offset
  96. 0x00010000, // Address
  97. 0x03, // Access Size
  98. )
  99. },
  100. ResourceTemplate() { // Null Residency Counter
  101. Register (SystemMemory, 0, 0, 0, 0)
  102. },
  103. ResourceTemplate() { // Null Usage Counter
  104. Register (SystemMemory, 0, 0, 0, 0)
  105. },
  106. "CorePwrDn"
  107. },
  108. })
  109. Device(CPU0) { // A57-0: Cluster 0, Cpu 0
  110. Name(_HID, "ACPI0007")
  111. Name(_UID, 4)
  112. Method (_LPI, 0, NotSerialized) {
  113. return(PLPI)
  114. }
  115. }
  116. Device(CPU1) { // A57-1: Cluster 0, Cpu 1
  117. Name(_HID, "ACPI0007")
  118. Name(_UID, 5)
  119. Method (_LPI, 0, NotSerialized) {
  120. return(PLPI)
  121. }
  122. }
  123. }
  124. Device (CLU1) { // Cluster1 state
  125. Name(_HID, "ACPI0010")
  126. Name(_UID, 2)
  127. Name (_LPI, Package() {
  128. 0, // Version
  129. 0, // Level Index
  130. 1, // Count
  131. Package() { // Power Gating state for Cluster
  132. 2500, // Min residency (uS)
  133. 1150, // Wake latency (uS)
  134. 1, // Flags
  135. 1, // Arch Context Flags
  136. 100, //Residency Counter Frequency
  137. 0, // No Parent State
  138. 0x01000000, // Integer Entry method
  139. ResourceTemplate() { // Null Residency Counter
  140. Register (SystemMemory, 0, 0, 0, 0)
  141. },
  142. ResourceTemplate() { // Null Usage Counter
  143. Register (SystemMemory, 0, 0, 0, 0)
  144. },
  145. "CluPwrDn"
  146. },
  147. })
  148. Name(PLPI, Package() {
  149. 0, // Version
  150. 0, // Level Index
  151. 2, // Count
  152. Package() { // WFI for CPU
  153. 1, // Min residency (uS)
  154. 1, // Wake latency (uS)
  155. 1, // Flags
  156. 0, // Arch Context Flags
  157. 100, //Residency Counter Frequency
  158. 0, // No parent state
  159. ResourceTemplate () {
  160. // Register Entry method
  161. Register (FFixedHW,
  162. 0x20, // Bit Width
  163. 0x00, // Bit Offset
  164. 0xFFFFFFFF, // Address
  165. 0x03, // Access Size
  166. )
  167. },
  168. ResourceTemplate() { // Null Residency Counter
  169. Register (SystemMemory, 0, 0, 0, 0)
  170. },
  171. ResourceTemplate() { // Null Usage Counter
  172. Register (SystemMemory, 0, 0, 0, 0)
  173. },
  174. "WFI",
  175. },
  176. Package() { // Power Gating state for CPU
  177. 150, // Min residency (uS)
  178. 350, // Wake latency (uS)
  179. 1, // Flags
  180. 1, // Arch Context Flags
  181. 100, //Residency Counter Frequency
  182. 1, // Parent node can be in any state
  183. ResourceTemplate () {
  184. // Register Entry method
  185. Register (FFixedHW,
  186. 0x20, // Bit Width
  187. 0x00, // Bit Offset
  188. 0x00010000, // Address
  189. 0x03, // Access Size
  190. )
  191. },
  192. ResourceTemplate() { // Null Residency Counter
  193. Register (SystemMemory, 0, 0, 0, 0)
  194. },
  195. ResourceTemplate() { // Null Usage Counter
  196. Register (SystemMemory, 0, 0, 0, 0)
  197. },
  198. "CorePwrDn"
  199. },
  200. })
  201. Device(CPU2) { // A53-0: Cluster 1, Cpu 0
  202. Name(_HID, "ACPI0007")
  203. Name(_UID, 0)
  204. Method (_LPI, 0, NotSerialized) {
  205. return(PLPI)
  206. }
  207. }
  208. Device(CPU3) { // A53-1: Cluster 1, Cpu 1
  209. Name(_HID, "ACPI0007")
  210. Name(_UID, 1)
  211. Method (_LPI, 0, NotSerialized) {
  212. return(PLPI)
  213. }
  214. }
  215. Device(CPU4) { // A53-2: Cluster 1, Cpu 2
  216. Name(_HID, "ACPI0007")
  217. Name(_UID, 2)
  218. Method (_LPI, 0, NotSerialized) {
  219. return(PLPI)
  220. }
  221. }
  222. Device(CPU5) { // A53-3: Cluster 1, Cpu 3
  223. Name(_HID, "ACPI0007")
  224. Name(_UID, 3)
  225. Method (_LPI, 0, NotSerialized) {
  226. return(PLPI)
  227. }
  228. }
  229. }
  230. //
  231. // LAN9118 Ethernet
  232. //
  233. Device(ETH0) {
  234. Name(_HID, "ARMH9118")
  235. Name(_UID, Zero)
  236. Name(_CRS, ResourceTemplate() {
  237. Memory32Fixed(ReadWrite, 0x18000000, 0x1000)
  238. Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 192 }
  239. })
  240. Name(_DSD, Package() {
  241. ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
  242. Package() {
  243. Package(2) {"phy-mode", "mii"},
  244. Package(2) {"reg-io-width", 4 },
  245. Package(2) {"smsc,irq-active-high",1},
  246. Package(2) {"smsc,irq-push-pull",1}
  247. }
  248. }) // _DSD()
  249. }
  250. // UART PL011
  251. Device(COM0) {
  252. Name(_HID, "ARMH0011")
  253. Name(_UID, Zero)
  254. Name(_CRS, ResourceTemplate() {
  255. Memory32Fixed(ReadWrite, 0x7FF80000, 0x1000)
  256. Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 115 }
  257. })
  258. }
  259. //
  260. // USB EHCI Host Controller
  261. //
  262. Device(USB0){
  263. Name(_HID, "ARMH0D20")
  264. Name(_CID, "PNP0D20")
  265. Name(_UID, 2)
  266. Name(_CCA, 0) //EHCI on this platform is not coherent!
  267. Method(_CRS, 0x0, Serialized){
  268. Name(RBUF, ResourceTemplate(){
  269. Memory32Fixed(ReadWrite, 0x7FFC0000, 0x10000)
  270. Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {149} // INT ID=149 GIC IRQ ID=117 for Juno SoC USB EHCI Controller
  271. })
  272. Return(RBUF)
  273. }
  274. //
  275. // Root Hub
  276. //
  277. Device(RHUB){
  278. Name(_ADR, 0x00000000) // Address of Root Hub should be 0 as per ACPI 5.0 spec
  279. //
  280. // Ports connected to Root Hub
  281. //
  282. Device(HUB1){
  283. Name(_ADR, 0x00000001)
  284. Name(_UPC, Package(){
  285. 0x00, // Port is NOT connectable
  286. 0xFF, // Don't care
  287. 0x00000000, // Reserved 0 must be zero
  288. 0x00000000 // Reserved 1 must be zero
  289. })
  290. Device(PRT1){
  291. Name(_ADR, 0x00000001)
  292. Name(_UPC, Package(){
  293. 0xFF, // Port is connectable
  294. 0x00, // Port connector is A
  295. 0x00000000,
  296. 0x00000000
  297. })
  298. Name(_PLD, Package(){
  299. Buffer(0x10){
  300. 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  301. 0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  302. }
  303. })
  304. } // USB0_RHUB_HUB1_PRT1
  305. Device(PRT2){
  306. Name(_ADR, 0x00000002)
  307. Name(_UPC, Package(){
  308. 0xFF, // Port is connectable
  309. 0x00, // Port connector is A
  310. 0x00000000,
  311. 0x00000000
  312. })
  313. Name(_PLD, Package(){
  314. Buffer(0x10){
  315. 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  316. 0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  317. }
  318. })
  319. } // USB0_RHUB_HUB1_PRT2
  320. Device(PRT3){
  321. Name(_ADR, 0x00000003)
  322. Name(_UPC, Package(){
  323. 0xFF, // Port is connectable
  324. 0x00, // Port connector is A
  325. 0x00000000,
  326. 0x00000000
  327. })
  328. Name(_PLD, Package(){
  329. Buffer(0x10){
  330. 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  331. 0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  332. }
  333. })
  334. } // USB0_RHUB_HUB1_PRT3
  335. Device(PRT4){
  336. Name(_ADR, 0x00000004)
  337. Name(_UPC, Package(){
  338. 0xFF, // Port is connectable
  339. 0x00, // Port connector is A
  340. 0x00000000,
  341. 0x00000000
  342. })
  343. Name(_PLD, Package(){
  344. Buffer(0x10){
  345. 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  346. 0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  347. }
  348. })
  349. } // USB0_RHUB_HUB1_PRT4
  350. } // USB0_RHUB_HUB1
  351. } // USB0_RHUB
  352. } // USB0
  353. } // Scope(_SB)
  354. }