diff options
Diffstat (limited to 'Documentation/arm64/acpi_object_usage.txt')
-rw-r--r-- | Documentation/arm64/acpi_object_usage.txt | 593 |
1 files changed, 593 insertions, 0 deletions
diff --git a/Documentation/arm64/acpi_object_usage.txt b/Documentation/arm64/acpi_object_usage.txt new file mode 100644 index 000000000000..a6e1a1805e51 --- /dev/null +++ b/Documentation/arm64/acpi_object_usage.txt | |||
@@ -0,0 +1,593 @@ | |||
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) | ||