Kyle Swenson | 8d8f654 | 2021-03-15 11:02:55 -0600 | [diff] [blame^] | 1 | ACPI Tables |
| 2 | ----------- |
| 3 | The expectations of individual ACPI tables are discussed in the list that |
| 4 | follows. |
| 5 | |
| 6 | If a section number is used, it refers to a section number in the ACPI |
| 7 | specification where the object is defined. If "Signature Reserved" is used, |
| 8 | the table signature (the first four bytes of the table) is the only portion |
| 9 | of the table recognized by the specification, and the actual table is defined |
| 10 | outside of the UEFI Forum (see Section 5.2.6 of the specification). |
| 11 | |
| 12 | For ACPI on arm64, tables also fall into the following categories: |
| 13 | |
| 14 | -- Required: DSDT, FADT, GTDT, MADT, MCFG, RSDP, SPCR, XSDT |
| 15 | |
| 16 | -- Recommended: BERT, EINJ, ERST, HEST, SSDT |
| 17 | |
| 18 | -- Optional: BGRT, CPEP, CSRT, DRTM, ECDT, FACS, FPDT, MCHI, MPST, |
| 19 | MSCT, RASF, SBST, SLIT, SPMI, SRAT, TCPA, TPM2, UEFI |
| 20 | |
| 21 | -- Not supported: BOOT, DBG2, DBGP, DMAR, ETDT, HPET, IBFT, IVRS, |
| 22 | LPIT, MSDM, RSDT, SLIC, WAET, WDAT, WDRT, WPBT |
| 23 | |
| 24 | |
| 25 | Table Usage for ARMv8 Linux |
| 26 | ----- ---------------------------------------------------------------- |
| 27 | BERT Section 18.3 (signature == "BERT") |
| 28 | == Boot Error Record Table == |
| 29 | Must be supplied if RAS support is provided by the platform. It |
| 30 | is recommended this table be supplied. |
| 31 | |
| 32 | BOOT Signature Reserved (signature == "BOOT") |
| 33 | == simple BOOT flag table == |
| 34 | Microsoft only table, will not be supported. |
| 35 | |
| 36 | BGRT Section 5.2.22 (signature == "BGRT") |
| 37 | == Boot Graphics Resource Table == |
| 38 | Optional, not currently supported, with no real use-case for an |
| 39 | ARM server. |
| 40 | |
| 41 | CPEP Section 5.2.18 (signature == "CPEP") |
| 42 | == Corrected Platform Error Polling table == |
| 43 | Optional, not currently supported, and not recommended until such |
| 44 | time as ARM-compatible hardware is available, and the specification |
| 45 | suitably modified. |
| 46 | |
| 47 | CSRT Signature Reserved (signature == "CSRT") |
| 48 | == Core System Resources Table == |
| 49 | Optional, not currently supported. |
| 50 | |
| 51 | DBG2 Signature Reserved (signature == "DBG2") |
| 52 | == DeBuG port table 2 == |
| 53 | Microsoft only table, will not be supported. |
| 54 | |
| 55 | DBGP Signature Reserved (signature == "DBGP") |
| 56 | == DeBuG Port table == |
| 57 | Microsoft only table, will not be supported. |
| 58 | |
| 59 | DSDT Section 5.2.11.1 (signature == "DSDT") |
| 60 | == Differentiated System Description Table == |
| 61 | A DSDT is required; see also SSDT. |
| 62 | |
| 63 | ACPI tables contain only one DSDT but can contain one or more SSDTs, |
| 64 | which are optional. Each SSDT can only add to the ACPI namespace, |
| 65 | but cannot modify or replace anything in the DSDT. |
| 66 | |
| 67 | DMAR Signature Reserved (signature == "DMAR") |
| 68 | == DMA Remapping table == |
| 69 | x86 only table, will not be supported. |
| 70 | |
| 71 | DRTM Signature Reserved (signature == "DRTM") |
| 72 | == Dynamic Root of Trust for Measurement table == |
| 73 | Optional, not currently supported. |
| 74 | |
| 75 | ECDT Section 5.2.16 (signature == "ECDT") |
| 76 | == Embedded Controller Description Table == |
| 77 | Optional, not currently supported, but could be used on ARM if and |
| 78 | only if one uses the GPE_BIT field to represent an IRQ number, since |
| 79 | there are no GPE blocks defined in hardware reduced mode. This would |
| 80 | need to be modified in the ACPI specification. |
| 81 | |
| 82 | EINJ Section 18.6 (signature == "EINJ") |
| 83 | == Error Injection table == |
| 84 | This table is very useful for testing platform response to error |
| 85 | conditions; it allows one to inject an error into the system as |
| 86 | if it had actually occurred. However, this table should not be |
| 87 | shipped with a production system; it should be dynamically loaded |
| 88 | and executed with the ACPICA tools only during testing. |
| 89 | |
| 90 | ERST Section 18.5 (signature == "ERST") |
| 91 | == Error Record Serialization Table == |
| 92 | On a platform supports RAS, this table must be supplied if it is not |
| 93 | UEFI-based; if it is UEFI-based, this table may be supplied. When this |
| 94 | table is not present, UEFI run time service will be utilized to save |
| 95 | and retrieve hardware error information to and from a persistent store. |
| 96 | |
| 97 | ETDT Signature Reserved (signature == "ETDT") |
| 98 | == Event Timer Description Table == |
| 99 | Obsolete table, will not be supported. |
| 100 | |
| 101 | FACS Section 5.2.10 (signature == "FACS") |
| 102 | == Firmware ACPI Control Structure == |
| 103 | It is unlikely that this table will be terribly useful. If it is |
| 104 | provided, the Global Lock will NOT be used since it is not part of |
| 105 | the hardware reduced profile, and only 64-bit address fields will |
| 106 | be considered valid. |
| 107 | |
| 108 | FADT Section 5.2.9 (signature == "FACP") |
| 109 | == Fixed ACPI Description Table == |
| 110 | Required for arm64. |
| 111 | |
| 112 | The HW_REDUCED_ACPI flag must be set. All of the fields that are |
| 113 | to be ignored when HW_REDUCED_ACPI is set are expected to be set to |
| 114 | zero. |
| 115 | |
| 116 | If an FACS table is provided, the X_FIRMWARE_CTRL field is to be |
| 117 | used, not FIRMWARE_CTRL. |
| 118 | |
| 119 | If PSCI is used (as is recommended), make sure that ARM_BOOT_ARCH is |
| 120 | filled in properly -- that the PSCI_COMPLIANT flag is set and that |
| 121 | PSCI_USE_HVC is set or unset as needed (see table 5-37). |
| 122 | |
| 123 | For the DSDT that is also required, the X_DSDT field is to be used, |
| 124 | not the DSDT field. |
| 125 | |
| 126 | FPDT Section 5.2.23 (signature == "FPDT") |
| 127 | == Firmware Performance Data Table == |
| 128 | Optional, not currently supported. |
| 129 | |
| 130 | GTDT Section 5.2.24 (signature == "GTDT") |
| 131 | == Generic Timer Description Table == |
| 132 | Required for arm64. |
| 133 | |
| 134 | HEST Section 18.3.2 (signature == "HEST") |
| 135 | == Hardware Error Source Table == |
| 136 | Until further error source types are defined, use only types 6 (AER |
| 137 | Root Port), 7 (AER Endpoint), 8 (AER Bridge), or 9 (Generic Hardware |
| 138 | Error Source). Firmware first error handling is possible if and only |
| 139 | if Trusted Firmware is being used on arm64. |
| 140 | |
| 141 | Must be supplied if RAS support is provided by the platform. It |
| 142 | is recommended this table be supplied. |
| 143 | |
| 144 | HPET Signature Reserved (signature == "HPET") |
| 145 | == High Precision Event timer Table == |
| 146 | x86 only table, will not be supported. |
| 147 | |
| 148 | IBFT Signature Reserved (signature == "IBFT") |
| 149 | == iSCSI Boot Firmware Table == |
| 150 | Microsoft defined table, support TBD. |
| 151 | |
| 152 | IVRS Signature Reserved (signature == "IVRS") |
| 153 | == I/O Virtualization Reporting Structure == |
| 154 | x86_64 (AMD) only table, will not be supported. |
| 155 | |
| 156 | LPIT Signature Reserved (signature == "LPIT") |
| 157 | == Low Power Idle Table == |
| 158 | x86 only table as of ACPI 5.1; future versions have been adapted for |
| 159 | use with ARM and will be recommended in order to support ACPI power |
| 160 | management. |
| 161 | |
| 162 | MADT Section 5.2.12 (signature == "APIC") |
| 163 | == Multiple APIC Description Table == |
| 164 | Required for arm64. Only the GIC interrupt controller structures |
| 165 | should be used (types 0xA - 0xE). |
| 166 | |
| 167 | MCFG Signature Reserved (signature == "MCFG") |
| 168 | == Memory-mapped ConFiGuration space == |
| 169 | If the platform supports PCI/PCIe, an MCFG table is required. |
| 170 | |
| 171 | MCHI Signature Reserved (signature == "MCHI") |
| 172 | == Management Controller Host Interface table == |
| 173 | Optional, not currently supported. |
| 174 | |
| 175 | MPST Section 5.2.21 (signature == "MPST") |
| 176 | == Memory Power State Table == |
| 177 | Optional, not currently supported. |
| 178 | |
| 179 | MSDM Signature Reserved (signature == "MSDM") |
| 180 | == Microsoft Data Management table == |
| 181 | Microsoft only table, will not be supported. |
| 182 | |
| 183 | MSCT Section 5.2.19 (signature == "MSCT") |
| 184 | == Maximum System Characteristic Table == |
| 185 | Optional, not currently supported. |
| 186 | |
| 187 | RASF Section 5.2.20 (signature == "RASF") |
| 188 | == RAS Feature table == |
| 189 | Optional, not currently supported. |
| 190 | |
| 191 | RSDP Section 5.2.5 (signature == "RSD PTR") |
| 192 | == Root System Description PoinTeR == |
| 193 | Required for arm64. |
| 194 | |
| 195 | RSDT Section 5.2.7 (signature == "RSDT") |
| 196 | == Root System Description Table == |
| 197 | Since this table can only provide 32-bit addresses, it is deprecated |
| 198 | on arm64, and will not be used. |
| 199 | |
| 200 | SBST Section 5.2.14 (signature == "SBST") |
| 201 | == Smart Battery Subsystem Table == |
| 202 | Optional, not currently supported. |
| 203 | |
| 204 | SLIC Signature Reserved (signature == "SLIC") |
| 205 | == Software LIcensing table == |
| 206 | Microsoft only table, will not be supported. |
| 207 | |
| 208 | SLIT Section 5.2.17 (signature == "SLIT") |
| 209 | == System Locality distance Information Table == |
| 210 | Optional in general, but required for NUMA systems. |
| 211 | |
| 212 | SPCR Signature Reserved (signature == "SPCR") |
| 213 | == Serial Port Console Redirection table == |
| 214 | Required for arm64. |
| 215 | |
| 216 | SPMI Signature Reserved (signature == "SPMI") |
| 217 | == Server Platform Management Interface table == |
| 218 | Optional, not currently supported. |
| 219 | |
| 220 | SRAT Section 5.2.16 (signature == "SRAT") |
| 221 | == System Resource Affinity Table == |
| 222 | Optional, but if used, only the GICC Affinity structures are read. |
| 223 | To support NUMA, this table is required. |
| 224 | |
| 225 | SSDT Section 5.2.11.2 (signature == "SSDT") |
| 226 | == Secondary System Description Table == |
| 227 | These tables are a continuation of the DSDT; these are recommended |
| 228 | for use with devices that can be added to a running system, but can |
| 229 | also serve the purpose of dividing up device descriptions into more |
| 230 | manageable pieces. |
| 231 | |
| 232 | An SSDT can only ADD to the ACPI namespace. It cannot modify or |
| 233 | replace existing device descriptions already in the namespace. |
| 234 | |
| 235 | These tables are optional, however. ACPI tables should contain only |
| 236 | one DSDT but can contain many SSDTs. |
| 237 | |
| 238 | TCPA Signature Reserved (signature == "TCPA") |
| 239 | == Trusted Computing Platform Alliance table == |
| 240 | Optional, not currently supported, and may need changes to fully |
| 241 | interoperate with arm64. |
| 242 | |
| 243 | TPM2 Signature Reserved (signature == "TPM2") |
| 244 | == Trusted Platform Module 2 table == |
| 245 | Optional, not currently supported, and may need changes to fully |
| 246 | interoperate with arm64. |
| 247 | |
| 248 | UEFI Signature Reserved (signature == "UEFI") |
| 249 | == UEFI ACPI data table == |
| 250 | Optional, not currently supported. No known use case for arm64, |
| 251 | at present. |
| 252 | |
| 253 | WAET Signature Reserved (signature == "WAET") |
| 254 | == Windows ACPI Emulated devices Table == |
| 255 | Microsoft only table, will not be supported. |
| 256 | |
| 257 | WDAT Signature Reserved (signature == "WDAT") |
| 258 | == Watch Dog Action Table == |
| 259 | Microsoft only table, will not be supported. |
| 260 | |
| 261 | WDRT Signature Reserved (signature == "WDRT") |
| 262 | == Watch Dog Resource Table == |
| 263 | Microsoft only table, will not be supported. |
| 264 | |
| 265 | WPBT Signature Reserved (signature == "WPBT") |
| 266 | == Windows Platform Binary Table == |
| 267 | Microsoft only table, will not be supported. |
| 268 | |
| 269 | XSDT Section 5.2.8 (signature == "XSDT") |
| 270 | == eXtended System Description Table == |
| 271 | Required for arm64. |
| 272 | |
| 273 | |
| 274 | ACPI Objects |
| 275 | ------------ |
| 276 | The expectations on individual ACPI objects are discussed in the list that |
| 277 | follows: |
| 278 | |
| 279 | Name Section Usage for ARMv8 Linux |
| 280 | ---- ------------ ------------------------------------------------- |
| 281 | _ADR 6.1.1 Use as needed. |
| 282 | |
| 283 | _BBN 6.5.5 Use as needed; PCI-specific. |
| 284 | |
| 285 | _BDN 6.5.3 Optional; not likely to be used on arm64. |
| 286 | |
| 287 | _CCA 6.2.17 This method should be defined for all bus masters |
| 288 | on arm64. While cache coherency is assumed, making |
| 289 | it explicit ensures the kernel will set up DMA as |
| 290 | it should. |
| 291 | |
| 292 | _CDM 6.2.1 Optional, to be used only for processor devices. |
| 293 | |
| 294 | _CID 6.1.2 Use as needed. |
| 295 | |
| 296 | _CLS 6.1.3 Use as needed. |
| 297 | |
| 298 | _CRS 6.2.2 Required on arm64. |
| 299 | |
| 300 | _DCK 6.5.2 Optional; not likely to be used on arm64. |
| 301 | |
| 302 | _DDN 6.1.4 This field can be used for a device name. However, |
| 303 | it is meant for DOS device names (e.g., COM1), so be |
| 304 | careful of its use across OSes. |
| 305 | |
| 306 | _DEP 6.5.8 Use as needed. |
| 307 | |
| 308 | _DIS 6.2.3 Optional, for power management use. |
| 309 | |
| 310 | _DLM 5.7.5 Optional. |
| 311 | |
| 312 | _DMA 6.2.4 Optional. |
| 313 | |
| 314 | _DSD 6.2.5 To be used with caution. If this object is used, try |
| 315 | to use it within the constraints already defined by the |
| 316 | Device Properties UUID. Only in rare circumstances |
| 317 | should it be necessary to create a new _DSD UUID. |
| 318 | |
| 319 | In either case, submit the _DSD definition along with |
| 320 | any driver patches for discussion, especially when |
| 321 | device properties are used. A driver will not be |
| 322 | considered complete without a corresponding _DSD |
| 323 | description. Once approved by kernel maintainers, |
| 324 | the UUID or device properties must then be registered |
| 325 | with the UEFI Forum; this may cause some iteration as |
| 326 | more than one OS will be registering entries. |
| 327 | |
| 328 | _DSM Do not use this method. It is not standardized, the |
| 329 | return values are not well documented, and it is |
| 330 | currently a frequent source of error. |
| 331 | |
| 332 | _DSW 7.2.1 Use as needed; power management specific. |
| 333 | |
| 334 | _EDL 6.3.1 Optional. |
| 335 | |
| 336 | _EJD 6.3.2 Optional. |
| 337 | |
| 338 | _EJx 6.3.3 Optional. |
| 339 | |
| 340 | _FIX 6.2.7 x86 specific, not used on arm64. |
| 341 | |
| 342 | \_GL 5.7.1 This object is not to be used in hardware reduced |
| 343 | mode, and therefore should not be used on arm64. |
| 344 | |
| 345 | _GLK 6.5.7 This object requires a global lock be defined; there |
| 346 | is no global lock on arm64 since it runs in hardware |
| 347 | reduced mode. Hence, do not use this object on arm64. |
| 348 | |
| 349 | \_GPE 5.3.1 This namespace is for x86 use only. Do not use it |
| 350 | on arm64. |
| 351 | |
| 352 | _GSB 6.2.7 Optional. |
| 353 | |
| 354 | _HID 6.1.5 Use as needed. This is the primary object to use in |
| 355 | device probing, though _CID and _CLS may also be used. |
| 356 | |
| 357 | _HPP 6.2.8 Optional, PCI specific. |
| 358 | |
| 359 | _HPX 6.2.9 Optional, PCI specific. |
| 360 | |
| 361 | _HRV 6.1.6 Optional, use as needed to clarify device behavior; in |
| 362 | some cases, this may be easier to use than _DSD. |
| 363 | |
| 364 | _INI 6.5.1 Not required, but can be useful in setting up devices |
| 365 | when UEFI leaves them in a state that may not be what |
| 366 | the driver expects before it starts probing. |
| 367 | |
| 368 | _IRC 7.2.15 Use as needed; power management specific. |
| 369 | |
| 370 | _LCK 6.3.4 Optional. |
| 371 | |
| 372 | _MAT 6.2.10 Optional; see also the MADT. |
| 373 | |
| 374 | _MLS 6.1.7 Optional, but highly recommended for use in |
| 375 | internationalization. |
| 376 | |
| 377 | _OFF 7.1.2 It is recommended to define this method for any device |
| 378 | that can be turned on or off. |
| 379 | |
| 380 | _ON 7.1.3 It is recommended to define this method for any device |
| 381 | that can be turned on or off. |
| 382 | |
| 383 | \_OS 5.7.3 This method will return "Linux" by default (this is |
| 384 | the value of the macro ACPI_OS_NAME on Linux). The |
| 385 | command line parameter acpi_os=<string> can be used |
| 386 | to set it to some other value. |
| 387 | |
| 388 | _OSC 6.2.11 This method can be a global method in ACPI (i.e., |
| 389 | \_SB._OSC), or it may be associated with a specific |
| 390 | device (e.g., \_SB.DEV0._OSC), or both. When used |
| 391 | as a global method, only capabilities published in |
| 392 | the ACPI specification are allowed. When used as |
| 393 | a device-specific method, the process described for |
| 394 | using _DSD MUST be used to create an _OSC definition; |
| 395 | out-of-process use of _OSC is not allowed. That is, |
| 396 | submit the device-specific _OSC usage description as |
| 397 | part of the kernel driver submission, get it approved |
| 398 | by the kernel community, then register it with the |
| 399 | UEFI Forum. |
| 400 | |
| 401 | \_OSI 5.7.2 Deprecated on ARM64. Any invocation of this method |
| 402 | will print a warning on the console and return false. |
| 403 | That is, as far as ACPI firmware is concerned, _OSI |
| 404 | cannot be used to determine what sort of system is |
| 405 | being used or what functionality is provided. The |
| 406 | _OSC method is to be used instead. |
| 407 | |
| 408 | _OST 6.3.5 Optional. |
| 409 | |
| 410 | _PDC 8.4.1 Deprecated, do not use on arm64. |
| 411 | |
| 412 | \_PIC 5.8.1 The method should not be used. On arm64, the only |
| 413 | interrupt model available is GIC. |
| 414 | |
| 415 | _PLD 6.1.8 Optional. |
| 416 | |
| 417 | \_PR 5.3.1 This namespace is for x86 use only on legacy systems. |
| 418 | Do not use it on arm64. |
| 419 | |
| 420 | _PRS 6.2.12 Optional. |
| 421 | |
| 422 | _PRT 6.2.13 Required as part of the definition of all PCI root |
| 423 | devices. |
| 424 | |
| 425 | _PRW 7.2.13 Use as needed; power management specific. |
| 426 | |
| 427 | _PRx 7.2.8-11 Use as needed; power management specific. If _PR0 is |
| 428 | defined, _PR3 must also be defined. |
| 429 | |
| 430 | _PSC 7.2.6 Use as needed; power management specific. |
| 431 | |
| 432 | _PSE 7.2.7 Use as needed; power management specific. |
| 433 | |
| 434 | _PSW 7.2.14 Use as needed; power management specific. |
| 435 | |
| 436 | _PSx 7.2.2-5 Use as needed; power management specific. If _PS0 is |
| 437 | defined, _PS3 must also be defined. If clocks or |
| 438 | regulators need adjusting to be consistent with power |
| 439 | usage, change them in these methods. |
| 440 | |
| 441 | \_PTS 7.3.1 Use as needed; power management specific. |
| 442 | |
| 443 | _PXM 6.2.14 Optional. |
| 444 | |
| 445 | _REG 6.5.4 Use as needed. |
| 446 | |
| 447 | \_REV 5.7.4 Always returns the latest version of ACPI supported. |
| 448 | |
| 449 | _RMV 6.3.6 Optional. |
| 450 | |
| 451 | \_SB 5.3.1 Required on arm64; all devices must be defined in this |
| 452 | namespace. |
| 453 | |
| 454 | _SEG 6.5.6 Use as needed; PCI-specific. |
| 455 | |
| 456 | \_SI 5.3.1, Optional. |
| 457 | 9.1 |
| 458 | |
| 459 | _SLI 6.2.15 Optional; recommended when SLIT table is in use. |
| 460 | |
| 461 | _STA 6.3.7, It is recommended to define this method for any device |
| 462 | 7.1.4 that can be turned on or off. |
| 463 | |
| 464 | _SRS 6.2.16 Optional; see also _PRS. |
| 465 | |
| 466 | _STR 6.1.10 Recommended for conveying device names to end users; |
| 467 | this is preferred over using _DDN. |
| 468 | |
| 469 | _SUB 6.1.9 Use as needed; _HID or _CID are preferred. |
| 470 | |
| 471 | _SUN 6.1.11 Optional. |
| 472 | |
| 473 | \_Sx 7.3.2 Use as needed; power management specific. |
| 474 | |
| 475 | _SxD 7.2.16-19 Use as needed; power management specific. |
| 476 | |
| 477 | _SxW 7.2.20-24 Use as needed; power management specific. |
| 478 | |
| 479 | _SWS 7.3.3 Use as needed; power management specific; this may |
| 480 | require specification changes for use on arm64. |
| 481 | |
| 482 | \_TTS 7.3.4 Use as needed; power management specific. |
| 483 | |
| 484 | \_TZ 5.3.1 Optional. |
| 485 | |
| 486 | _UID 6.1.12 Recommended for distinguishing devices of the same |
| 487 | class; define it if at all possible. |
| 488 | |
| 489 | \_WAK 7.3.5 Use as needed; power management specific. |
| 490 | |
| 491 | |
| 492 | ACPI Event Model |
| 493 | ---------------- |
| 494 | Do not use GPE block devices; these are not supported in the hardware reduced |
| 495 | profile used by arm64. Since there are no GPE blocks defined for use on ARM |
| 496 | platforms, GPIO-signaled interrupts should be used for creating system events. |
| 497 | |
| 498 | |
| 499 | ACPI Processor Control |
| 500 | ---------------------- |
| 501 | Section 8 of the ACPI specification is currently undergoing change that |
| 502 | should be completed in the 6.0 version of the specification. Processor |
| 503 | performance control will be handled differently for arm64 at that point |
| 504 | in time. Processor aggregator devices (section 8.5) will not be used, |
| 505 | for example, but another similar mechanism instead. |
| 506 | |
| 507 | While UEFI constrains what we can say until the release of 6.0, it is |
| 508 | recommended that CPPC (8.4.5) be used as the primary model. This will |
| 509 | still be useful into the future. C-states and P-states will still be |
| 510 | provided, but most of the current design work appears to favor CPPC. |
| 511 | |
| 512 | Further, it is essential that the ARMv8 SoC provide a fully functional |
| 513 | implementation of PSCI; this will be the only mechanism supported by ACPI |
| 514 | to control CPU power state (including secondary CPU booting). |
| 515 | |
| 516 | More details will be provided on the release of the ACPI 6.0 specification. |
| 517 | |
| 518 | |
| 519 | ACPI System Address Map Interfaces |
| 520 | ---------------------------------- |
| 521 | In Section 15 of the ACPI specification, several methods are mentioned as |
| 522 | possible mechanisms for conveying memory resource information to the kernel. |
| 523 | For arm64, we will only support UEFI for booting with ACPI, hence the UEFI |
| 524 | GetMemoryMap() boot service is the only mechanism that will be used. |
| 525 | |
| 526 | |
| 527 | ACPI Platform Error Interfaces (APEI) |
| 528 | ------------------------------------- |
| 529 | The APEI tables supported are described above. |
| 530 | |
| 531 | APEI requires the equivalent of an SCI and an NMI on ARMv8. The SCI is used |
| 532 | to notify the OSPM of errors that have occurred but can be corrected and the |
| 533 | system can continue correct operation, even if possibly degraded. The NMI is |
| 534 | used to indicate fatal errors that cannot be corrected, and require immediate |
| 535 | attention. |
| 536 | |
| 537 | Since there is no direct equivalent of the x86 SCI or NMI, arm64 handles |
| 538 | these slightly differently. The SCI is handled as a normal GPIO-signaled |
| 539 | interrupt; given that these are corrected (or correctable) errors being |
| 540 | reported, this is sufficient. The NMI is emulated as the highest priority |
| 541 | GPIO-signaled interrupt possible. This implies some caution must be used |
| 542 | since there could be interrupts at higher privilege levels or even interrupts |
| 543 | at the same priority as the emulated NMI. In Linux, this should not be the |
| 544 | case but one should be aware it could happen. |
| 545 | |
| 546 | |
| 547 | ACPI Objects Not Supported on ARM64 |
| 548 | ----------------------------------- |
| 549 | While this may change in the future, there are several classes of objects |
| 550 | that can be defined, but are not currently of general interest to ARM servers. |
| 551 | |
| 552 | These are not supported: |
| 553 | |
| 554 | -- Section 9.2: ambient light sensor devices |
| 555 | |
| 556 | -- Section 9.3: battery devices |
| 557 | |
| 558 | -- Section 9.4: lids (e.g., laptop lids) |
| 559 | |
| 560 | -- Section 9.8.2: IDE controllers |
| 561 | |
| 562 | -- Section 9.9: floppy controllers |
| 563 | |
| 564 | -- Section 9.10: GPE block devices |
| 565 | |
| 566 | -- Section 9.15: PC/AT RTC/CMOS devices |
| 567 | |
| 568 | -- Section 9.16: user presence detection devices |
| 569 | |
| 570 | -- Section 9.17: I/O APIC devices; all GICs must be enumerable via MADT |
| 571 | |
| 572 | -- Section 9.18: time and alarm devices (see 9.15) |
| 573 | |
| 574 | |
| 575 | ACPI Objects Not Yet Implemented |
| 576 | -------------------------------- |
| 577 | While these objects have x86 equivalents, and they do make some sense in ARM |
| 578 | servers, there is either no hardware available at present, or in some cases |
| 579 | there may not yet be a non-ARM implementation. Hence, they are currently not |
| 580 | implemented though that may change in the future. |
| 581 | |
| 582 | Not yet implemented are: |
| 583 | |
| 584 | -- Section 10: power source and power meter devices |
| 585 | |
| 586 | -- Section 11: thermal management |
| 587 | |
| 588 | -- Section 12: embedded controllers interface |
| 589 | |
| 590 | -- Section 13: SMBus interfaces |
| 591 | |
| 592 | -- Section 17: NUMA support (prototypes have been submitted for |
| 593 | review) |