1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3/* TODO: Update for Glinda */ 4 5#include <soc/amd/common/acpi/aoac.asl> 6#include <soc/aoac_defs.h> 7#include <soc/gpio.h> 8#include <soc/iomap.h> 9#include <amdblocks/acpimmio_map.h> 10 11Device (AAHB) 12{ 13 Name (_HID, "AAHB0000") 14 Name (_UID, 0x0) 15 Name (_CRS, ResourceTemplate() 16 { 17 Memory32Fixed (ReadWrite, ALINK_AHB_ADDRESS, 0x2000) 18 }) 19 Method (_STA, 0x0, NotSerialized) 20 { 21 Return (0x0b) 22 } 23} 24 25Device (GPIO) 26{ 27 Name (_HID, GPIO_DEVICE_NAME) 28 Name (_CID, GPIO_DEVICE_NAME) 29 Name (_UID, 0) 30 Name (_DDN, GPIO_DEVICE_DESC) 31 32 Method (_CRS, 0) { 33 Local0 = ResourceTemplate() { 34 Interrupt ( 35 ResourceConsumer, 36 Level, 37 ActiveLow, 38 Shared, , , IRQR) 39 { 0 } 40 Memory32Fixed (ReadWrite, ACPIMMIO_GPIO0_BASE, 0x400) 41 } 42 CreateDWordField (Local0, IRQR._INT, IRQN) 43 If (PICM) { 44 IRQN = IGPI 45 } Else { 46 IRQN = PGPI 47 } 48 If (IRQN == 0x1f) { 49 Return (ResourceTemplate() { 50 Memory32Fixed (ReadWrite, ACPIMMIO_GPIO0_BASE, 0x400) 51 }) 52 } Else { 53 Return (Local0) 54 } 55 } 56 57 Method (_STA, 0x0, NotSerialized) 58 { 59 Return (0x0F) 60 } 61} 62 63Device (FUR0) 64{ 65 Name (_HID, "AMDI0020") 66 Name (_UID, 0x0) 67 Method (_CRS, 0) { 68 Local0 = ResourceTemplate() { 69 Interrupt ( 70 ResourceConsumer, 71 Edge, 72 ActiveHigh, 73 Exclusive, , , IRQR) 74 { 0 } 75 Memory32Fixed (ReadWrite, APU_UART0_BASE, 0x1000) 76 } 77 CreateDWordField (Local0, IRQR._INT, IRQN) 78 If (PICM) { 79 IRQN = IUA0 80 } Else { 81 IRQN = PUA0 82 } 83 If (IRQN == 0x1f) { 84 Return (ResourceTemplate() { 85 Memory32Fixed (ReadWrite, APU_UART0_BASE, 0x1000) 86 }) 87 } Else { 88 Return (Local0) 89 } 90 } 91 92 Name (STAT, 0x0) 93 Method (_STA, 0x0, NotSerialized) 94 { 95 Return (STAT) 96 } 97 98 AOAC_DEVICE(FCH_AOAC_DEV_UART0, 0) 99} 100 101Device (FUR1) { 102 Name (_HID, "AMDI0020") 103 Name (_UID, 0x1) 104 Method (_CRS, 0) { 105 Local0 = ResourceTemplate() { 106 Interrupt ( 107 ResourceConsumer, 108 Edge, 109 ActiveHigh, 110 Exclusive, , , IRQR) 111 { 0 } 112 Memory32Fixed (ReadWrite, APU_UART1_BASE, 0x1000) 113 } 114 CreateDWordField (Local0, IRQR._INT, IRQN) 115 If (PICM) { 116 IRQN = IUA1 117 } Else { 118 IRQN = PUA1 119 } 120 If (IRQN == 0x1f) { 121 Return (ResourceTemplate() { 122 Memory32Fixed (ReadWrite, APU_UART1_BASE, 0x1000) 123 }) 124 } Else { 125 Return (Local0) 126 } 127 } 128 129 Name (STAT, 0x0) 130 Method (_STA, 0x0, NotSerialized) 131 { 132 Return (STAT) 133 } 134 135 AOAC_DEVICE(FCH_AOAC_DEV_UART1, 0) 136} 137 138Device (FUR2) { 139 Name (_HID, "AMDI0020") 140 Name (_UID, 0x2) 141 Method (_CRS, 0) { 142 Local0 = ResourceTemplate() { 143 Interrupt ( 144 ResourceConsumer, 145 Edge, 146 ActiveHigh, 147 Exclusive, , , IRQR) 148 { 0 } 149 Memory32Fixed (ReadWrite, APU_UART2_BASE, 0x1000) 150 } 151 CreateDWordField (Local0, IRQR._INT, IRQN) 152 If (PICM) { 153 IRQN = IUA2 154 } Else { 155 IRQN = PUA2 156 } 157 If (IRQN == 0x1f) { 158 Return (ResourceTemplate() { 159 Memory32Fixed (ReadWrite, APU_UART2_BASE, 0x1000) 160 }) 161 } Else { 162 Return (Local0) 163 } 164 } 165 166 Name (STAT, 0x0) 167 Method (_STA, 0x0, NotSerialized) 168 { 169 Return (STAT) 170 } 171 172 AOAC_DEVICE(FCH_AOAC_DEV_UART2, 0) 173} 174 175Device (FUR3) { 176 Name (_HID, "AMDI0020") 177 Name (_UID, 0x3) 178 Method (_CRS, 0) { 179 Local0 = ResourceTemplate() { 180 Interrupt ( 181 ResourceConsumer, 182 Edge, 183 ActiveHigh, 184 Exclusive, , , IRQR) 185 { 0 } 186 Memory32Fixed (ReadWrite, APU_UART3_BASE, 0x1000) 187 } 188 CreateDWordField (Local0, IRQR._INT, IRQN) 189 If (PICM) { 190 IRQN = IUA3 191 } Else { 192 IRQN = PUA3 193 } 194 If (IRQN == 0x1f) { 195 Return (ResourceTemplate() { 196 Memory32Fixed (ReadWrite, APU_UART3_BASE, 0x1000) 197 }) 198 } Else { 199 Return (Local0) 200 } 201 } 202 203 Name (STAT, 0x0) 204 Method (_STA, 0x0, NotSerialized) 205 { 206 Return (STAT) 207 } 208 209 AOAC_DEVICE(FCH_AOAC_DEV_UART3, 0) 210} 211 212Device (FUR4) { 213 Name (_HID, "AMDI0020") 214 Name (_UID, 0x4) 215 Method (_CRS, 0) { 216 Local0 = ResourceTemplate() { 217 Interrupt ( 218 ResourceConsumer, 219 Edge, 220 ActiveHigh, 221 Exclusive, , , IRQR) 222 { 0 } 223 Memory32Fixed (ReadWrite, APU_UART4_BASE, 0x1000) 224 } 225 CreateDWordField (Local0, IRQR._INT, IRQN) 226 If (PICM) { 227 IRQN = IUA4 228 } Else { 229 IRQN = PUA4 230 } 231 If (IRQN == 0x1f) { 232 Return (ResourceTemplate() { 233 Memory32Fixed (ReadWrite, APU_UART4_BASE, 0x1000) 234 }) 235 } Else { 236 Return (Local0) 237 } 238 } 239 240 Name (STAT, 0x0) 241 Method (_STA, 0x0, NotSerialized) 242 { 243 Return (STAT) 244 } 245 246 AOAC_DEVICE(FCH_AOAC_DEV_UART4, 0) 247} 248 249Device (I2C0) { 250 Name (_HID, "AMDI0010") 251 Name (_UID, 0x0) 252 Method (_CRS, 0) { 253 Local0 = ResourceTemplate() { 254 Interrupt ( 255 ResourceConsumer, 256 Edge, 257 ActiveHigh, 258 Exclusive, , , IRQR) 259 { 0 } 260 Memory32Fixed (ReadWrite, APU_I2C0_BASE, 0x1000) 261 } 262 CreateDWordField (Local0, IRQR._INT, IRQN) 263 If (PICM) { 264 IRQN = II20 265 } Else { 266 IRQN = PI20 267 } 268 If (IRQN == 0x1f) { 269 Return (ResourceTemplate() { 270 Memory32Fixed (ReadWrite, APU_I2C0_BASE, 0x1000) 271 }) 272 } Else { 273 Return (Local0) 274 } 275 } 276 277 Name (STAT, 0x0) 278 Method (_STA, 0x0, NotSerialized) 279 { 280 Return (STAT) 281 } 282 283 AOAC_DEVICE(FCH_AOAC_DEV_I2C0, 0) 284} 285 286Device (I2C1) { 287 Name (_HID, "AMDI0010") 288 Name (_UID, 0x1) 289 Method (_CRS, 0) { 290 Local0 = ResourceTemplate() { 291 Interrupt ( 292 ResourceConsumer, 293 Edge, 294 ActiveHigh, 295 Exclusive, , , IRQR) 296 { 0 } 297 Memory32Fixed (ReadWrite, APU_I2C1_BASE, 0x1000) 298 } 299 CreateDWordField (Local0, IRQR._INT, IRQN) 300 If (PICM) { 301 IRQN = II21 302 } Else { 303 IRQN = PI21 304 } 305 If (IRQN == 0x1f) { 306 Return (ResourceTemplate() { 307 Memory32Fixed (ReadWrite, APU_I2C1_BASE, 0x1000) 308 }) 309 } Else { 310 Return (Local0) 311 } 312 } 313 314 Name (STAT, 0x0) 315 Method (_STA, 0x0, NotSerialized) 316 { 317 Return (STAT) 318 } 319 320 AOAC_DEVICE(FCH_AOAC_DEV_I2C1, 0) 321} 322 323Device (I2C2) { 324 Name (_HID, "AMDI0010") 325 Name (_UID, 0x2) 326 Method (_CRS, 0) { 327 Local0 = ResourceTemplate() { 328 Interrupt ( 329 ResourceConsumer, 330 Edge, 331 ActiveHigh, 332 Exclusive, , , IRQR) 333 { 0 } 334 Memory32Fixed (ReadWrite, APU_I2C2_BASE, 0x1000) 335 } 336 CreateDWordField (Local0, IRQR._INT, IRQN) 337 If (PICM) { 338 IRQN = II22 339 } Else { 340 IRQN = PI22 341 } 342 If (IRQN == 0x1f) { 343 Return (ResourceTemplate() { 344 Memory32Fixed (ReadWrite, APU_I2C2_BASE, 0x1000) 345 }) 346 } Else { 347 Return (Local0) 348 } 349 } 350 351 Name (STAT, 0x0) 352 Method (_STA, 0x0, NotSerialized) 353 { 354 Return (STAT) 355 } 356 357 AOAC_DEVICE(FCH_AOAC_DEV_I2C2, 0) 358} 359 360Device (I2C3) 361{ 362#if CONFIG(SOC_AMD_COMMON_BLOCK_I2C3_TPM_SHARED_WITH_PSP) 363 Name (_HID, "AMDI0019") 364#else 365 Name (_HID, "AMDI0010") 366#endif 367 Name (_UID, 0x3) 368 Method (_CRS, 0) { 369 Local0 = ResourceTemplate() { 370 Interrupt ( 371 ResourceConsumer, 372 Edge, 373 ActiveHigh, 374 Exclusive, , , IRQR) 375 { 0 } 376 Memory32Fixed (ReadWrite, APU_I2C3_BASE, 0x1000) 377 } 378 CreateDWordField (Local0, IRQR._INT, IRQN) 379 If (PICM) { 380 IRQN = II23 381 } Else { 382 IRQN = PI23 383 } 384 If (IRQN == 0x1f) { 385 Return (ResourceTemplate() { 386 Memory32Fixed (ReadWrite, APU_I2C3_BASE, 0x1000) 387 }) 388 } Else { 389 Return (Local0) 390 } 391 } 392 Name (STAT, 0x0) 393 Method (_STA, 0x0, NotSerialized) 394 { 395 Return (STAT) 396 } 397 398/* If this device is shared with PSP, then PSP takes care of power management */ 399#if !CONFIG(SOC_AMD_COMMON_BLOCK_I2C3_TPM_SHARED_WITH_PSP) 400 AOAC_DEVICE(FCH_AOAC_DEV_I2C3, 0) 401#endif 402} 403 404Device (MISC) 405{ 406 Name (_HID, "AMD0040") 407 Name (_UID, 0x3) 408 Name (_CRS, ResourceTemplate() { 409 Memory32Fixed (ReadWrite, ACPIMMIO_MISC_BASE, 0x100) 410 }) 411 Name (_DSD, Package () 412 { 413 ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 414 Package () 415 { 416 Package () { "is-rv", 1 }, 417 }, 418 }) 419 Method (_STA, 0x0, NotSerialized) 420 { 421 Return (0x0b) 422 } 423} 424