GpuDevs.asl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. /** @file
  2. *
  3. * [DSDT] Devices behind the GPU.
  4. *
  5. * Copyright (c) 2018-2020, Andrey Warkentin <andrey.warkentin@gmail.com>
  6. * Copyright (c) Microsoft Corporation. All rights reserved.
  7. *
  8. * SPDX-License-Identifier: BSD-2-Clause-Patent
  9. *
  10. **/
  11. // DWC OTG Controller
  12. Device (USB0)
  13. {
  14. Name (_HID, "BCM2848")
  15. #if (RPI_MODEL == 3)
  16. Name (_CID, "DWC_OTG")
  17. #elif (RPI_MODEL == 4)
  18. Name (_CID, "BCM2848")
  19. #endif
  20. Name (_UID, 0x0)
  21. Name (_CCA, 0x0)
  22. Method (_STA)
  23. {
  24. Return (0xf)
  25. }
  26. Name (RBUF, ResourceTemplate ()
  27. {
  28. MEMORY32FIXED (ReadWrite, 0, BCM2836_USB_LENGTH, RMEM)
  29. Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_USB_INTERRUPT }
  30. })
  31. Method (_CRS, 0x0, Serialized)
  32. {
  33. MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_USB_OFFSET)
  34. Return (^RBUF)
  35. }
  36. }
  37. // Video Core 4 GPU
  38. Device (GPU0)
  39. {
  40. Name (_HID, "BCM2850")
  41. Name (_CID, "BCM2850")
  42. Name (_UID, 0x0)
  43. Name (_CCA, 0x0)
  44. Method (_STA)
  45. {
  46. Return (0xf)
  47. }
  48. Name (RBUF, ResourceTemplate ()
  49. {
  50. // Memory and interrupt for the GPU
  51. MEMORY32FIXED (ReadWrite, 0, BCM2836_V3D_BUS_LENGTH, RM01)
  52. Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_V3D_BUS_INTERRUPT }
  53. // HVS - Hardware Video Scalar
  54. MEMORY32FIXED (ReadWrite, 0, BCM2836_HVS_LENGTH, RM02)
  55. // The HVS interrupt is reserved by the VPU
  56. // Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_HVS_INTERRUPT }
  57. // PixelValve0 - DSI0 or DPI
  58. // MEMORY32FIXED (ReadWrite, BCM2836_PV0_BASE_ADDRESS, BCM2836_PV0_LENGTH, RM03)
  59. // Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_PV0_INTERRUPT }
  60. // PixelValve1 - DS1 or SMI
  61. // MEMORY32FIXED (ReadWrite, BCM2836_PV1_BASE_ADDRESS, BCM2836_PV1_LENGTH, RM04)
  62. // Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_PV1_INTERRUPT }
  63. // PixelValve2 - HDMI output - connected to HVS display FIFO 1
  64. MEMORY32FIXED (ReadWrite, 0, BCM2836_PV2_LENGTH, RM05)
  65. Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_PV2_INTERRUPT }
  66. // HDMI registers
  67. MEMORY32FIXED (ReadWrite, 0, BCM2836_HDMI0_LENGTH, RM06)
  68. MEMORY32FIXED (ReadWrite, 0, BCM2836_HDMI1_LENGTH, RM07)
  69. // hdmi_int[0]
  70. // Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_HDMI0_INTERRUPT }
  71. // hdmi_int[1]
  72. // Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_HDMI1_INTERRUPT }
  73. // HDMI DDC connection
  74. I2CSerialBus (0x50,, 100000,, "\\_SB.GDV0.I2C2",,,,) // EDID
  75. I2CSerialBus (0x30,, 100000,, "\\_SB.GDV0.I2C2",,,,) // E-DDC Segment Pointer
  76. })
  77. Method (_CRS, 0x0, Serialized)
  78. {
  79. MEMORY32SETBASE (RBUF, RM01, RB01, BCM2836_V3D_BUS_OFFSET)
  80. MEMORY32SETBASE (RBUF, RM02, RB02, BCM2836_HVS_OFFSET)
  81. MEMORY32SETBASE (RBUF, RM05, RB05, BCM2836_PV2_OFFSET)
  82. MEMORY32SETBASE (RBUF, RM06, RB06, BCM2836_HDMI0_OFFSET)
  83. MEMORY32SETBASE (RBUF, RM07, RB07, BCM2836_HDMI1_OFFSET)
  84. Return (^RBUF)
  85. }
  86. // GPU Power Management Component Data
  87. // Reference : https://github.com/Microsoft/graphics-driver-samples/wiki/Install-Driver-in-a-Windows-VM
  88. Method (PMCD, 0, Serialized)
  89. {
  90. Name (RBUF, Package ()
  91. {
  92. 1, // Version
  93. 1, // Number of graphics power components
  94. Package () // Power components package
  95. {
  96. Package () // GPU component package
  97. {
  98. 0, // Component Index
  99. 0, // DXGK_POWER_COMPONENT_MAPPING.ComponentType (0 = DXGK_POWER_COMPONENT_ENGINE)
  100. 0, // DXGK_POWER_COMPONENT_MAPPING.NodeIndex
  101. Buffer () // DXGK_POWER_RUNTIME_COMPONENT.ComponentGuid
  102. { // 9B2D1E26-1575-4747-8FC0-B9EB4BAA2D2B
  103. 0x26, 0x1E, 0x2D, 0x9B, 0x75, 0x15, 0x47, 0x47,
  104. 0x8f, 0xc0, 0xb9, 0xeb, 0x4b, 0xaa, 0x2d, 0x2b
  105. },
  106. "VC4_Engine_00",// DXGK_POWER_RUNTIME_COMPONENT.ComponentName
  107. 2, // DXGK_POWER_RUNTIME_COMPONENT.StateCount
  108. Package () // DXGK_POWER_RUNTIME_COMPONENT.States[] package
  109. {
  110. Package () // F0
  111. {
  112. 0, // DXGK_POWER_RUNTIME_STATE.TransitionLatency
  113. 0, // DXGK_POWER_RUNTIME_STATE.ResidencyRequirement
  114. 1210000, // DXGK_POWER_RUNTIME_STATE.NominalPower (microwatt)
  115. },
  116. Package () // F1 - Placeholder
  117. {
  118. 10000, // DXGK_POWER_RUNTIME_STATE.TransitionLatency
  119. 10000, // DXGK_POWER_RUNTIME_STATE.ResidencyRequirement
  120. 4, // DXGK_POWER_RUNTIME_STATE.NominalPower
  121. },
  122. }
  123. }
  124. }
  125. })
  126. Return (RBUF)
  127. }
  128. }
  129. // PiQ Mailbox Driver
  130. Device (RPIQ)
  131. {
  132. Name (_HID, "BCM2849")
  133. Name (_CID, "BCM2849")
  134. Name (_UID, 0)
  135. Name (_CCA, 0x0)
  136. Method (_STA)
  137. {
  138. Return (0xf)
  139. }
  140. Name (RBUF, ResourceTemplate ()
  141. {
  142. MEMORY32FIXED (ReadWrite, 0, BCM2836_MBOX_LENGTH, RMEM)
  143. Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_MBOX_INTERRUPT }
  144. })
  145. Method (_CRS, 0x0, Serialized)
  146. {
  147. MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_MBOX_OFFSET)
  148. Return (^RBUF)
  149. }
  150. }
  151. // VCHIQ Driver
  152. Device (VCIQ)
  153. {
  154. Name (_HID, "BCM2835")
  155. Name (_CID, "BCM2835")
  156. Name (_UID, 0)
  157. Name (_CCA, 0x0)
  158. Name (_DEP, Package() { \_SB.GDV0.RPIQ })
  159. Method (_STA)
  160. {
  161. Return (0xf)
  162. }
  163. Name (RBUF, ResourceTemplate ()
  164. {
  165. MEMORY32FIXED (ReadWrite, 0, BCM2836_VCHIQ_LENGTH, RMEM)
  166. Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_VCHIQ_INTERRUPT }
  167. })
  168. Method (_CRS, 0x0, Serialized)
  169. {
  170. MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_VCHIQ_OFFSET)
  171. Return (^RBUF)
  172. }
  173. }
  174. // VC Shared Memory Driver
  175. Device (VCSM)
  176. {
  177. Name (_HID, "BCM2856")
  178. Name (_CID, "BCM2856")
  179. Name (_UID, 0)
  180. Name (_CCA, 0x0)
  181. Name (_DEP, Package() { \_SB.GDV0.VCIQ })
  182. Method (_STA)
  183. {
  184. Return (0xf)
  185. }
  186. }
  187. // Description: GPIO
  188. Device (GPI0)
  189. {
  190. Name (_HID, "BCM2845")
  191. Name (_CID, "BCM2845")
  192. Name (_UID, 0x0)
  193. Name (_CCA, 0x0)
  194. Method (_STA)
  195. {
  196. Return(0xf)
  197. }
  198. Name (RBUF, ResourceTemplate ()
  199. {
  200. MEMORY32FIXED (ReadWrite, 0, GPIO_LENGTH, RMEM)
  201. Interrupt (ResourceConsumer, Level, ActiveHigh, Shared)
  202. {
  203. BCM2386_GPIO_INTERRUPT0, BCM2386_GPIO_INTERRUPT1,
  204. BCM2386_GPIO_INTERRUPT2, BCM2386_GPIO_INTERRUPT3
  205. }
  206. })
  207. Method (_CRS, 0x0, Serialized)
  208. {
  209. MEMORY32SETBASE (RBUF, RMEM, RBAS, GPIO_OFFSET)
  210. Return (^RBUF)
  211. }
  212. }
  213. // Description: I2C
  214. Device (I2C1)
  215. {
  216. Name (_HID, "BCM2841")
  217. Name (_CID, "BCM2841")
  218. Name (_UID, 0x1)
  219. Name (_CCA, 0x0)
  220. Method (_STA)
  221. {
  222. Return(0xf)
  223. }
  224. Name (RBUF, ResourceTemplate ()
  225. {
  226. MEMORY32FIXED (ReadWrite, 0, BCM2836_I2C1_LENGTH, RMEM)
  227. Interrupt (ResourceConsumer, Level, ActiveHigh, Shared) { BCM2836_I2C1_INTERRUPT }
  228. PinFunction (Exclusive, PullUp, BCM_ALT0, "\\_SB.GDV0.GPI0", 0, ResourceConsumer, , ) { 2, 3 }
  229. })
  230. Method (_CRS, 0x0, Serialized)
  231. {
  232. MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_I2C1_OFFSET)
  233. Return (^RBUF)
  234. }
  235. }
  236. // I2C2 is the HDMI DDC connection
  237. Device (I2C2)
  238. {
  239. Name (_HID, "BCM2841")
  240. Name (_CID, "BCM2841")
  241. Name (_UID, 0x2)
  242. Name (_CCA, 0x0)
  243. Method (_STA)
  244. {
  245. Return (0xf)
  246. }
  247. Name (RBUF, ResourceTemplate()
  248. {
  249. MEMORY32FIXED (ReadWrite, 0, BCM2836_I2C2_LENGTH, RMEM)
  250. Interrupt (ResourceConsumer, Level, ActiveHigh, Shared) { BCM2836_I2C2_INTERRUPT }
  251. })
  252. Method (_CRS, 0x0, Serialized)
  253. {
  254. MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_I2C2_OFFSET)
  255. Return (^RBUF)
  256. }
  257. }
  258. // SPI
  259. Device (SPI0)
  260. {
  261. Name (_HID, "BCM2838")
  262. Name (_CID, "BCM2838")
  263. Name (_UID, 0x0)
  264. Name (_CCA, 0x0)
  265. Method (_STA)
  266. {
  267. Return (0xf)
  268. }
  269. Name (RBUF, ResourceTemplate ()
  270. {
  271. MEMORY32FIXED (ReadWrite, 0, BCM2836_SPI0_LENGTH, RMEM)
  272. Interrupt (ResourceConsumer, Level, ActiveHigh, Shared) { BCM2836_SPI0_INTERRUPT }
  273. PinFunction (Exclusive, PullDown, BCM_ALT0, "\\_SB.GDV0.GPI0", 0, ResourceConsumer, , ) { 9, 10, 11 } // MISO, MOSI, SCLK
  274. PinFunction (Exclusive, PullUp, BCM_ALT0, "\\_SB.GDV0.GPI0", 0, ResourceConsumer, , ) { 8 } // CE0
  275. PinFunction (Exclusive, PullUp, BCM_ALT0, "\\_SB.GDV0.GPI0", 0, ResourceConsumer, , ) { 7 } // CE1
  276. })
  277. Method (_CRS, 0x0, Serialized)
  278. {
  279. MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_SPI0_OFFSET)
  280. Return (^RBUF)
  281. }
  282. }
  283. Device (SPI1)
  284. {
  285. Name (_HID, "BCM2839")
  286. Name (_CID, "BCM2839")
  287. Name (_UID, 0x1)
  288. Name (_CCA, 0x0)
  289. Name (_DEP, Package() { \_SB.GDV0.RPIQ })
  290. Method (_STA)
  291. {
  292. Return (0xf)
  293. }
  294. Name (RBUF, ResourceTemplate ()
  295. {
  296. MEMORY32FIXED (ReadWrite, 0, BCM2836_SPI1_LENGTH, RMEM)
  297. Interrupt (ResourceConsumer, Level, ActiveHigh, Shared,) { BCM2836_SPI1_INTERRUPT }
  298. PinFunction (Exclusive, PullDown, BCM_ALT4, "\\_SB.GDV0.GPI0", 0, ResourceConsumer, , ) { 19, 20, 21 } // MISO, MOSI, SCLK
  299. PinFunction (Exclusive, PullDown, BCM_ALT4, "\\_SB.GDV0.GPI0", 0, ResourceConsumer, , ) { 16 } // CE2
  300. })
  301. Method (_CRS, 0x0, Serialized)
  302. {
  303. MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_SPI1_OFFSET)
  304. Return (^RBUF)
  305. }
  306. }
  307. // SPI2 has no pins on GPIO header
  308. // Device (SPI2)
  309. // {
  310. // Name (_HID, "BCM2839")
  311. // Name (_CID, "BCM2839")
  312. // Name (_UID, 0x2)
  313. // Name (_CCA, 0x0)
  314. // Name (_DEP, Package() { \_SB.GDV0.RPIQ })
  315. // Method (_STA)
  316. // {
  317. // Return (0xf) // Disabled
  318. // }
  319. // Method (_CRS, 0x0, Serialized)
  320. // {
  321. // Name (RBUF, ResourceTemplate ()
  322. // {
  323. // MEMORY32FIXED (ReadWrite, BCM2836_SPI2_BASE_ADDRESS, BCM2836_SPI2_LENGTH, RMEM)
  324. // Interrupt (ResourceConsumer, Level, ActiveHigh, Shared,) { BCM2836_SPI2_INTERRUPT }
  325. // })
  326. // Return (RBUF)
  327. // }
  328. // }
  329. // PWM Driver
  330. Device (PWM0)
  331. {
  332. Name (_HID, "BCM2844")
  333. Name (_CID, "BCM2844")
  334. Name (_UID, 0)
  335. Name (_CCA, 0x0)
  336. Method (_STA)
  337. {
  338. Return (0xf)
  339. }
  340. Name (RBUF, ResourceTemplate ()
  341. {
  342. // DMA channel 11 control
  343. MEMORY32FIXED (ReadWrite, 0, BCM2836_PWM_DMA_LENGTH, RM01)
  344. // PWM control
  345. MEMORY32FIXED (ReadWrite, 0, BCM2836_PWM_CTRL_LENGTH, RM02)
  346. // PWM control bus
  347. MEMORY32FIXED (ReadWrite, BCM2836_PWM_BUS_BASE_ADDRESS, BCM2836_PWM_BUS_LENGTH, )
  348. // PWM control uncached
  349. MEMORY32FIXED (ReadWrite, BCM2836_PWM_CTRL_UNCACHED_BASE_ADDRESS, BCM2836_PWM_CTRL_UNCACHED_LENGTH, )
  350. // PWM clock control
  351. MEMORY32FIXED (ReadWrite, 0, BCM2836_PWM_CLK_LENGTH, RM03)
  352. // Interrupt DMA channel 11
  353. Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_DMA_INTERRUPT }
  354. // DMA channel 11, DREQ 5 for PWM
  355. FixedDMA (5, 11, Width32Bit, )
  356. })
  357. Method (_CRS, 0x0, Serialized)
  358. {
  359. MEMORY32SETBASE (RBUF, RM01, RB01, BCM2836_PWM_DMA_OFFSET)
  360. MEMORY32SETBASE (RBUF, RM02, RB02, BCM2836_PWM_CTRL_OFFSET)
  361. MEMORY32SETBASE (RBUF, RM03, RB03, BCM2836_PWM_CLK_OFFSET)
  362. Return (^RBUF)
  363. }
  364. }
  365. include ("Uart.asl")
  366. include ("Rhpx.asl")
  367. include ("Sdhc.asl")