summaryrefslogtreecommitdiffstats
path: root/Documentation/arm64
diff options
context:
space:
mode:
authorAl Stone <al.stone@linaro.org>2016-06-13 17:41:55 -0400
committerCatalin Marinas <catalin.marinas@arm.com>2016-06-21 11:26:09 -0400
commit83ce0efc12811c1b11f71a8164949ff4f6117054 (patch)
tree4a981771351f7bbe86d6c9734cb205e0479648c7 /Documentation/arm64
parent5e4c7549f7082b06bbba566c68696dbb8d2e5b6b (diff)
ARM64: ACPI: Update documentation for latest specification version
The ACPI 6.1 specification was recently released at the end of January 2016, but the arm64 kernel documentation for the use of ACPI was written for the 5.1 version of the spec. There were significant additions to the spec that had not yet been mentioned -- for example, the 6.0 mechanisms added to make it easier to define processors and low power idle states, as well as the 6.1 addition allowing regular interrupts (not just from GPIO) be used to signal ACPI general purpose events. This patch reflects going back through and examining the specs in detail and updating content appropriately. Whilst there, a few odds and ends of typos were caught as well. This brings the documentation up to date with ACPI 6.1 for arm64. Signed-off-by: Al Stone <al.stone@linaro.org> Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Reviewed-by: Hanjun Guo <hanjun.guo@linaro.org> Reviewed-by: Roy Franz <roy.franz@hpe.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'Documentation/arm64')
-rw-r--r--Documentation/arm64/acpi_object_usage.txt343
-rw-r--r--Documentation/arm64/arm-acpi.txt40
2 files changed, 213 insertions, 170 deletions
diff --git a/Documentation/arm64/acpi_object_usage.txt b/Documentation/arm64/acpi_object_usage.txt
index a6e1a1805e51..c77010c5c1f0 100644
--- a/Documentation/arm64/acpi_object_usage.txt
+++ b/Documentation/arm64/acpi_object_usage.txt
@@ -13,14 +13,14 @@ For ACPI on arm64, tables also fall into the following categories:
13 13
14 -- Required: DSDT, FADT, GTDT, MADT, MCFG, RSDP, SPCR, XSDT 14 -- Required: DSDT, FADT, GTDT, MADT, MCFG, RSDP, SPCR, XSDT
15 15
16 -- Recommended: BERT, EINJ, ERST, HEST, SSDT 16 -- Recommended: BERT, EINJ, ERST, HEST, PCCT, SSDT
17 17
18 -- Optional: BGRT, CPEP, CSRT, DRTM, ECDT, FACS, FPDT, MCHI, MPST, 18 -- Optional: BGRT, CPEP, CSRT, DBG2, DRTM, ECDT, FACS, FPDT, IORT,
19 MSCT, RASF, SBST, SLIT, SPMI, SRAT, TCPA, TPM2, UEFI 19 MCHI, MPST, MSCT, NFIT, PMTT, RASF, SBST, SLIT, SPMI, SRAT, STAO,
20 20 TCPA, TPM2, UEFI, XENV
21 -- Not supported: BOOT, DBG2, DBGP, DMAR, ETDT, HPET, IBFT, IVRS,
22 LPIT, MSDM, RSDT, SLIC, WAET, WDAT, WDRT, WPBT
23 21
22 -- Not supported: BOOT, DBGP, DMAR, ETDT, HPET, IBFT, IVRS, LPIT,
23 MSDM, OEMx, PSDT, RSDT, SLIC, WAET, WDAT, WDRT, WPBT
24 24
25Table Usage for ARMv8 Linux 25Table Usage for ARMv8 Linux
26----- ---------------------------------------------------------------- 26----- ----------------------------------------------------------------
@@ -50,7 +50,8 @@ CSRT Signature Reserved (signature == "CSRT")
50 50
51DBG2 Signature Reserved (signature == "DBG2") 51DBG2 Signature Reserved (signature == "DBG2")
52 == DeBuG port table 2 == 52 == DeBuG port table 2 ==
53 Microsoft only table, will not be supported. 53 License has changed and should be usable. Optional if used instead
54 of earlycon=<device> on the command line.
54 55
55DBGP Signature Reserved (signature == "DBGP") 56DBGP Signature Reserved (signature == "DBGP")
56 == DeBuG Port table == 57 == DeBuG Port table ==
@@ -133,10 +134,11 @@ GTDT Section 5.2.24 (signature == "GTDT")
133 134
134HEST Section 18.3.2 (signature == "HEST") 135HEST Section 18.3.2 (signature == "HEST")
135 == Hardware Error Source Table == 136 == Hardware Error Source Table ==
136 Until further error source types are defined, use only types 6 (AER 137 ARM-specific error sources have been defined; please use those or the
137 Root Port), 7 (AER Endpoint), 8 (AER Bridge), or 9 (Generic Hardware 138 PCI types such as type 6 (AER Root Port), 7 (AER Endpoint), or 8 (AER
138 Error Source). Firmware first error handling is possible if and only 139 Bridge), or use type 9 (Generic Hardware Error Source). Firmware first
139 if Trusted Firmware is being used on arm64. 140 error handling is possible if and only if Trusted Firmware is being
141 used on arm64.
140 142
141 Must be supplied if RAS support is provided by the platform. It 143 Must be supplied if RAS support is provided by the platform. It
142 is recommended this table be supplied. 144 is recommended this table be supplied.
@@ -149,20 +151,30 @@ IBFT Signature Reserved (signature == "IBFT")
149 == iSCSI Boot Firmware Table == 151 == iSCSI Boot Firmware Table ==
150 Microsoft defined table, support TBD. 152 Microsoft defined table, support TBD.
151 153
154IORT Signature Reserved (signature == "IORT")
155 == Input Output Remapping Table ==
156 arm64 only table, required in order to describe IO topology, SMMUs,
157 and GIC ITSs, and how those various components are connected together,
158 such as identifying which components are behind which SMMUs/ITSs.
159 This table will only be required on certain SBSA platforms (e.g.,
160 when using GICv3-ITS and an SMMU); on SBSA Level 0 platforms, it
161 remains optional.
162
152IVRS Signature Reserved (signature == "IVRS") 163IVRS Signature Reserved (signature == "IVRS")
153 == I/O Virtualization Reporting Structure == 164 == I/O Virtualization Reporting Structure ==
154 x86_64 (AMD) only table, will not be supported. 165 x86_64 (AMD) only table, will not be supported.
155 166
156LPIT Signature Reserved (signature == "LPIT") 167LPIT Signature Reserved (signature == "LPIT")
157 == Low Power Idle Table == 168 == Low Power Idle Table ==
158 x86 only table as of ACPI 5.1; future versions have been adapted for 169 x86 only table as of ACPI 5.1; starting with ACPI 6.0, processor
159 use with ARM and will be recommended in order to support ACPI power 170 descriptions and power states on ARM platforms should use the DSDT
160 management. 171 and define processor container devices (_HID ACPI0010, Section 8.4,
172 and more specifically 8.4.3 and and 8.4.4).
161 173
162MADT Section 5.2.12 (signature == "APIC") 174MADT Section 5.2.12 (signature == "APIC")
163 == Multiple APIC Description Table == 175 == Multiple APIC Description Table ==
164 Required for arm64. Only the GIC interrupt controller structures 176 Required for arm64. Only the GIC interrupt controller structures
165 should be used (types 0xA - 0xE). 177 should be used (types 0xA - 0xF).
166 178
167MCFG Signature Reserved (signature == "MCFG") 179MCFG Signature Reserved (signature == "MCFG")
168 == Memory-mapped ConFiGuration space == 180 == Memory-mapped ConFiGuration space ==
@@ -176,14 +188,38 @@ MPST Section 5.2.21 (signature == "MPST")
176 == Memory Power State Table == 188 == Memory Power State Table ==
177 Optional, not currently supported. 189 Optional, not currently supported.
178 190
191MSCT Section 5.2.19 (signature == "MSCT")
192 == Maximum System Characteristic Table ==
193 Optional, not currently supported.
194
179MSDM Signature Reserved (signature == "MSDM") 195MSDM Signature Reserved (signature == "MSDM")
180 == Microsoft Data Management table == 196 == Microsoft Data Management table ==
181 Microsoft only table, will not be supported. 197 Microsoft only table, will not be supported.
182 198
183MSCT Section 5.2.19 (signature == "MSCT") 199NFIT Section 5.2.25 (signature == "NFIT")
184 == Maximum System Characteristic Table == 200 == NVDIMM Firmware Interface Table ==
201 Optional, not currently supported.
202
203OEMx Signature of "OEMx" only
204 == OEM Specific Tables ==
205 All tables starting with a signature of "OEM" are reserved for OEM
206 use. Since these are not meant to be of general use but are limited
207 to very specific end users, they are not recommended for use and are
208 not supported by the kernel for arm64.
209
210PCCT Section 14.1 (signature == "PCCT)
211 == Platform Communications Channel Table ==
212 Recommend for use on arm64; use of PCC is recommended when using CPPC
213 to control performance and power for platform processors.
214
215PMTT Section 5.2.21.12 (signature == "PMTT")
216 == Platform Memory Topology Table ==
185 Optional, not currently supported. 217 Optional, not currently supported.
186 218
219PSDT Section 5.2.11.3 (signature == "PSDT")
220 == Persistent System Description Table ==
221 Obsolete table, will not be supported.
222
187RASF Section 5.2.20 (signature == "RASF") 223RASF Section 5.2.20 (signature == "RASF")
188 == RAS Feature table == 224 == RAS Feature table ==
189 Optional, not currently supported. 225 Optional, not currently supported.
@@ -195,7 +231,7 @@ RSDP Section 5.2.5 (signature == "RSD PTR")
195RSDT Section 5.2.7 (signature == "RSDT") 231RSDT Section 5.2.7 (signature == "RSDT")
196 == Root System Description Table == 232 == Root System Description Table ==
197 Since this table can only provide 32-bit addresses, it is deprecated 233 Since this table can only provide 32-bit addresses, it is deprecated
198 on arm64, and will not be used. 234 on arm64, and will not be used. If provided, it will be ignored.
199 235
200SBST Section 5.2.14 (signature == "SBST") 236SBST Section 5.2.14 (signature == "SBST")
201 == Smart Battery Subsystem Table == 237 == Smart Battery Subsystem Table ==
@@ -220,7 +256,7 @@ SPMI Signature Reserved (signature == "SPMI")
220SRAT Section 5.2.16 (signature == "SRAT") 256SRAT Section 5.2.16 (signature == "SRAT")
221 == System Resource Affinity Table == 257 == System Resource Affinity Table ==
222 Optional, but if used, only the GICC Affinity structures are read. 258 Optional, but if used, only the GICC Affinity structures are read.
223 To support NUMA, this table is required. 259 To support arm64 NUMA, this table is required.
224 260
225SSDT Section 5.2.11.2 (signature == "SSDT") 261SSDT Section 5.2.11.2 (signature == "SSDT")
226 == Secondary System Description Table == 262 == Secondary System Description Table ==
@@ -235,6 +271,11 @@ SSDT Section 5.2.11.2 (signature == "SSDT")
235 These tables are optional, however. ACPI tables should contain only 271 These tables are optional, however. ACPI tables should contain only
236 one DSDT but can contain many SSDTs. 272 one DSDT but can contain many SSDTs.
237 273
274STAO Signature Reserved (signature == "STAO")
275 == _STA Override table ==
276 Optional, but only necessary in virtualized environments in order to
277 hide devices from guest OSs.
278
238TCPA Signature Reserved (signature == "TCPA") 279TCPA Signature Reserved (signature == "TCPA")
239 == Trusted Computing Platform Alliance table == 280 == Trusted Computing Platform Alliance table ==
240 Optional, not currently supported, and may need changes to fully 281 Optional, not currently supported, and may need changes to fully
@@ -266,6 +307,10 @@ WPBT Signature Reserved (signature == "WPBT")
266 == Windows Platform Binary Table == 307 == Windows Platform Binary Table ==
267 Microsoft only table, will not be supported. 308 Microsoft only table, will not be supported.
268 309
310XENV Signature Reserved (signature == "XENV")
311 == Xen project table ==
312 Optional, used only by Xen at present.
313
269XSDT Section 5.2.8 (signature == "XSDT") 314XSDT Section 5.2.8 (signature == "XSDT")
270 == eXtended System Description Table == 315 == eXtended System Description Table ==
271 Required for arm64. 316 Required for arm64.
@@ -273,44 +318,46 @@ XSDT Section 5.2.8 (signature == "XSDT")
273 318
274ACPI Objects 319ACPI Objects
275------------ 320------------
276The expectations on individual ACPI objects are discussed in the list that 321The expectations on individual ACPI objects that are likely to be used are
277follows: 322shown in the list that follows; any object not explicitly mentioned below
323should be used as needed for a particular platform or particular subsystem,
324such as power management or PCI.
278 325
279Name Section Usage for ARMv8 Linux 326Name Section Usage for ARMv8 Linux
280---- ------------ ------------------------------------------------- 327---- ------------ -------------------------------------------------
281_ADR 6.1.1 Use as needed. 328_CCA 6.2.17 This method must be defined for all bus masters
282 329 on arm64 -- there are no assumptions made about
283_BBN 6.5.5 Use as needed; PCI-specific. 330 whether such devices are cache coherent or not.
331 The _CCA value is inherited by all descendants of
332 these devices so it does not need to be repeated.
333 Without _CCA on arm64, the kernel does not know what
334 to do about setting up DMA for the device.
284 335
285_BDN 6.5.3 Optional; not likely to be used on arm64. 336 NB: this method provides default cache coherency
337 attributes; the presence of an SMMU can be used to
338 modify that, however. For example, a master could
339 default to non-coherent, but be made coherent with
340 the appropriate SMMU configuration (see Table 17 of
341 the IORT specification, ARM Document DEN 0049B).
286 342
287_CCA 6.2.17 This method should be defined for all bus masters 343_CID 6.1.2 Use as needed, see also _HID.
288 on arm64. While cache coherency is assumed, making
289 it explicit ensures the kernel will set up DMA as
290 it should.
291 344
292_CDM 6.2.1 Optional, to be used only for processor devices. 345_CLS 6.1.3 Use as needed, see also _HID.
293 346
294_CID 6.1.2 Use as needed. 347_CPC 8.4.7.1 Use as needed, power management specific. CPPC is
295 348 recommended on arm64.
296_CLS 6.1.3 Use as needed.
297 349
298_CRS 6.2.2 Required on arm64. 350_CRS 6.2.2 Required on arm64.
299 351
300_DCK 6.5.2 Optional; not likely to be used on arm64. 352_CSD 8.4.2.2 Use as needed, used only in conjunction with _CST.
353
354_CST 8.4.2.1 Low power idle states (8.4.4) are recommended instead
355 of C-states.
301 356
302_DDN 6.1.4 This field can be used for a device name. However, 357_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 358 it is meant for DOS device names (e.g., COM1), so be
304 careful of its use across OSes. 359 careful of its use across OSes.
305 360
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 361_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 362 to use it within the constraints already defined by the
316 Device Properties UUID. Only in rare circumstances 363 Device Properties UUID. Only in rare circumstances
@@ -325,20 +372,10 @@ _DSD 6.2.5 To be used with caution. If this object is used, try
325 with the UEFI Forum; this may cause some iteration as 372 with the UEFI Forum; this may cause some iteration as
326 more than one OS will be registering entries. 373 more than one OS will be registering entries.
327 374
328_DSM Do not use this method. It is not standardized, the 375_DSM 9.1.1 Do not use this method. It is not standardized, the
329 return values are not well documented, and it is 376 return values are not well documented, and it is
330 currently a frequent source of error. 377 currently a frequent source of error.
331 378
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 379\_GL 5.7.1 This object is not to be used in hardware reduced
343 mode, and therefore should not be used on arm64. 380 mode, and therefore should not be used on arm64.
344 381
@@ -349,35 +386,22 @@ _GLK 6.5.7 This object requires a global lock be defined; there
349\_GPE 5.3.1 This namespace is for x86 use only. Do not use it 386\_GPE 5.3.1 This namespace is for x86 use only. Do not use it
350 on arm64. 387 on arm64.
351 388
352_GSB 6.2.7 Optional. 389_HID 6.1.5 This is the primary object to use in device probing,
353 390 though _CID and _CLS may also be used.
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 391
364_INI 6.5.1 Not required, but can be useful in setting up devices 392_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 393 when UEFI leaves them in a state that may not be what
366 the driver expects before it starts probing. 394 the driver expects before it starts probing.
367 395
368_IRC 7.2.15 Use as needed; power management specific. 396_LPI 8.4.4.3 Recommended for use with processor definitions (_HID
369 397 ACPI0010) on arm64. See also _RDI.
370_LCK 6.3.4 Optional.
371
372_MAT 6.2.10 Optional; see also the MADT.
373 398
374_MLS 6.1.7 Optional, but highly recommended for use in 399_MLS 6.1.7 Highly recommended for use in internationalization.
375 internationalization.
376 400
377_OFF 7.1.2 It is recommended to define this method for any device 401_OFF 7.2.2 It is recommended to define this method for any device
378 that can be turned on or off. 402 that can be turned on or off.
379 403
380_ON 7.1.3 It is recommended to define this method for any device 404_ON 7.2.3 It is recommended to define this method for any device
381 that can be turned on or off. 405 that can be turned on or off.
382 406
383\_OS 5.7.3 This method will return "Linux" by default (this is 407\_OS 5.7.3 This method will return "Linux" by default (this is
@@ -398,122 +422,107 @@ _OSC 6.2.11 This method can be a global method in ACPI (i.e.,
398 by the kernel community, then register it with the 422 by the kernel community, then register it with the
399 UEFI Forum. 423 UEFI Forum.
400 424
401\_OSI 5.7.2 Deprecated on ARM64. Any invocation of this method 425\_OSI 5.7.2 Deprecated on ARM64. As far as ACPI firmware is
402 will print a warning on the console and return false. 426 concerned, _OSI is not to be used to determine what
403 That is, as far as ACPI firmware is concerned, _OSI 427 sort of system is being used or what functionality
404 cannot be used to determine what sort of system is 428 is provided. The _OSC method is to be used instead.
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 429
410_PDC 8.4.1 Deprecated, do not use on arm64. 430_PDC 8.4.1 Deprecated, do not use on arm64.
411 431
412\_PIC 5.8.1 The method should not be used. On arm64, the only 432\_PIC 5.8.1 The method should not be used. On arm64, the only
413 interrupt model available is GIC. 433 interrupt model available is GIC.
414 434
415_PLD 6.1.8 Optional.
416
417\_PR 5.3.1 This namespace is for x86 use only on legacy systems. 435\_PR 5.3.1 This namespace is for x86 use only on legacy systems.
418 Do not use it on arm64. 436 Do not use it on arm64.
419 437
420_PRS 6.2.12 Optional.
421
422_PRT 6.2.13 Required as part of the definition of all PCI root 438_PRT 6.2.13 Required as part of the definition of all PCI root
423 devices. 439 devices.
424 440
425_PRW 7.2.13 Use as needed; power management specific. 441_PRx 7.3.8-11 Use as needed; power management specific. If _PR0 is
426
427_PRx 7.2.8-11 Use as needed; power management specific. If _PR0 is
428 defined, _PR3 must also be defined. 442 defined, _PR3 must also be defined.
429 443
430_PSC 7.2.6 Use as needed; power management specific. 444_PSx 7.3.2-5 Use as needed; power management specific. If _PS0 is
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 445 defined, _PS3 must also be defined. If clocks or
438 regulators need adjusting to be consistent with power 446 regulators need adjusting to be consistent with power
439 usage, change them in these methods. 447 usage, change them in these methods.
440 448
441\_PTS 7.3.1 Use as needed; power management specific. 449_RDI 8.4.4.4 Recommended for use with processor definitions (_HID
442 450 ACPI0010) on arm64. This should only be used in
443_PXM 6.2.14 Optional. 451 conjunction with _LPI.
444
445_REG 6.5.4 Use as needed.
446 452
447\_REV 5.7.4 Always returns the latest version of ACPI supported. 453\_REV 5.7.4 Always returns the latest version of ACPI supported.
448 454
449_RMV 6.3.6 Optional.
450
451\_SB 5.3.1 Required on arm64; all devices must be defined in this 455\_SB 5.3.1 Required on arm64; all devices must be defined in this
452 namespace. 456 namespace.
453 457
454_SEG 6.5.6 Use as needed; PCI-specific. 458_SLI 6.2.15 Use is recommended when SLIT table is in use.
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 459
461_STA 6.3.7, It is recommended to define this method for any device 460_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. 461 7.2.4 that can be turned on or off. See also the STAO table
462 that provides overrides to hide devices in virtualized
463 environments.
463 464
464_SRS 6.2.16 Optional; see also _PRS. 465_SRS 6.2.16 Use as needed; see also _PRS.
465 466
466_STR 6.1.10 Recommended for conveying device names to end users; 467_STR 6.1.10 Recommended for conveying device names to end users;
467 this is preferred over using _DDN. 468 this is preferred over using _DDN.
468 469
469_SUB 6.1.9 Use as needed; _HID or _CID are preferred. 470_SUB 6.1.9 Use as needed; _HID or _CID are preferred.
470 471
471_SUN 6.1.11 Optional. 472_SUN 6.1.11 Use as needed, but recommended.
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 473
479_SWS 7.3.3 Use as needed; power management specific; this may 474_SWS 7.4.3 Use as needed; power management specific; this may
480 require specification changes for use on arm64. 475 require specification changes for use on arm64.
481 476
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 477_UID 6.1.12 Recommended for distinguishing devices of the same
487 class; define it if at all possible. 478 class; define it if at all possible.
488 479
489\_WAK 7.3.5 Use as needed; power management specific. 480
490 481
491 482
492ACPI Event Model 483ACPI Event Model
493---------------- 484----------------
494Do not use GPE block devices; these are not supported in the hardware reduced 485Do not use GPE block devices; these are not supported in the hardware reduced
495profile used by arm64. Since there are no GPE blocks defined for use on ARM 486profile used by arm64. Since there are no GPE blocks defined for use on ARM
496platforms, GPIO-signaled interrupts should be used for creating system events. 487platforms, ACPI events must be signaled differently.
488
489There are two options: GPIO-signaled interrupts (Section 5.6.5), and
490interrupt-signaled events (Section 5.6.9). Interrupt-signaled events are a
491new feature in the ACPI 6.1 specification. Either -- or both -- can be used
492on a given platform, and which to use may be dependent of limitations in any
493given SoC. If possible, interrupt-signaled events are recommended.
497 494
498 495
499ACPI Processor Control 496ACPI Processor Control
500---------------------- 497----------------------
501Section 8 of the ACPI specification is currently undergoing change that 498Section 8 of the ACPI specification changed significantly in version 6.0.
502should be completed in the 6.0 version of the specification. Processor 499Processors should now be defined as Device objects with _HID ACPI0007; do
503performance control will be handled differently for arm64 at that point 500not use the deprecated Processor statement in ASL. All multiprocessor systems
504in time. Processor aggregator devices (section 8.5) will not be used, 501should also define a hierarchy of processors, done with Processor Container
505for example, but another similar mechanism instead. 502Devices (see Section 8.4.3.1, _HID ACPI0010); do not use processor aggregator
506 503devices (Section 8.5) to describe processor topology. Section 8.4 of the
507While UEFI constrains what we can say until the release of 6.0, it is 504specification describes the semantics of these object definitions and how
508recommended that CPPC (8.4.5) be used as the primary model. This will 505they interrelate.
509still be useful into the future. C-states and P-states will still be 506
510provided, but most of the current design work appears to favor CPPC. 507Most importantly, the processor hierarchy defined also defines the low power
508idle states that are available to the platform, along with the rules for
509determining which processors can be turned on or off and the circumstances
510that control that. Without this information, the processors will run in
511whatever power state they were left in by UEFI.
512
513Note too, that the processor Device objects defined and the entries in the
514MADT for GICs are expected to be in synchronization. The _UID of the Device
515object must correspond to processor IDs used in the MADT.
516
517It is recommended that CPPC (8.4.5) be used as the primary model for processor
518performance control on arm64. C-states and P-states may become available at
519some point in the future, but most current design work appears to favor CPPC.
511 520
512Further, it is essential that the ARMv8 SoC provide a fully functional 521Further, it is essential that the ARMv8 SoC provide a fully functional
513implementation of PSCI; this will be the only mechanism supported by ACPI 522implementation of PSCI; this will be the only mechanism supported by ACPI
514to control CPU power state (including secondary CPU booting). 523to control CPU power state. Booting of secondary CPUs using the ACPI
515 524parking protocol is possible, but discouraged, since only PSCI is supported
516More details will be provided on the release of the ACPI 6.0 specification. 525for ARM servers.
517 526
518 527
519ACPI System Address Map Interfaces 528ACPI System Address Map Interfaces
@@ -535,21 +544,25 @@ used to indicate fatal errors that cannot be corrected, and require immediate
535attention. 544attention.
536 545
537Since there is no direct equivalent of the x86 SCI or NMI, arm64 handles 546Since there is no direct equivalent of the x86 SCI or NMI, arm64 handles
538these slightly differently. The SCI is handled as a normal GPIO-signaled 547these slightly differently. The SCI is handled as a high priority interrupt;
539interrupt; given that these are corrected (or correctable) errors being 548given that these are corrected (or correctable) errors being reported, this
540reported, this is sufficient. The NMI is emulated as the highest priority 549is sufficient. The NMI is emulated as the highest priority interrupt
541GPIO-signaled interrupt possible. This implies some caution must be used 550possible. This implies some caution must be used since there could be
542since there could be interrupts at higher privilege levels or even interrupts 551interrupts at higher privilege levels or even interrupts at the same priority
543at the same priority as the emulated NMI. In Linux, this should not be the 552as the emulated NMI. In Linux, this should not be the case but one should
544case but one should be aware it could happen. 553be aware it could happen.
545 554
546 555
547ACPI Objects Not Supported on ARM64 556ACPI Objects Not Supported on ARM64
548----------------------------------- 557-----------------------------------
549While this may change in the future, there are several classes of objects 558While this may change in the future, there are several classes of objects
550that can be defined, but are not currently of general interest to ARM servers. 559that can be defined, but are not currently of general interest to ARM servers.
560Some of these objects have x86 equivalents, and may actually make sense in ARM
561servers. However, there is either no hardware available at present, or there
562may not even be a non-ARM implementation yet. Hence, they are not currently
563supported.
551 564
552These are not supported: 565The following classes of objects are not supported:
553 566
554 -- Section 9.2: ambient light sensor devices 567 -- Section 9.2: ambient light sensor devices
555 568
@@ -571,16 +584,6 @@ These are not supported:
571 584
572 -- Section 9.18: time and alarm devices (see 9.15) 585 -- Section 9.18: time and alarm devices (see 9.15)
573 586
574
575ACPI Objects Not Yet Implemented
576--------------------------------
577While these objects have x86 equivalents, and they do make some sense in ARM
578servers, there is either no hardware available at present, or in some cases
579there may not yet be a non-ARM implementation. Hence, they are currently not
580implemented though that may change in the future.
581
582Not yet implemented are:
583
584 -- Section 10: power source and power meter devices 587 -- Section 10: power source and power meter devices
585 588
586 -- Section 11: thermal management 589 -- Section 11: thermal management
@@ -589,5 +592,31 @@ Not yet implemented are:
589 592
590 -- Section 13: SMBus interfaces 593 -- Section 13: SMBus interfaces
591 594
592 -- Section 17: NUMA support (prototypes have been submitted for 595
593 review) 596This also means that there is no support for the following objects:
597
598Name Section Name Section
599---- ------------ ---- ------------
600_ALC 9.3.4 _FDM 9.10.3
601_ALI 9.3.2 _FIX 6.2.7
602_ALP 9.3.6 _GAI 10.4.5
603_ALR 9.3.5 _GHL 10.4.7
604_ALT 9.3.3 _GTM 9.9.2.1.1
605_BCT 10.2.2.10 _LID 9.5.1
606_BDN 6.5.3 _PAI 10.4.4
607_BIF 10.2.2.1 _PCL 10.3.2
608_BIX 10.2.2.1 _PIF 10.3.3
609_BLT 9.2.3 _PMC 10.4.1
610_BMA 10.2.2.4 _PMD 10.4.8
611_BMC 10.2.2.12 _PMM 10.4.3
612_BMD 10.2.2.11 _PRL 10.3.4
613_BMS 10.2.2.5 _PSR 10.3.1
614_BST 10.2.2.6 _PTP 10.4.2
615_BTH 10.2.2.7 _SBS 10.1.3
616_BTM 10.2.2.9 _SHL 10.4.6
617_BTP 10.2.2.8 _STM 9.9.2.1.1
618_DCK 6.5.2 _UPD 9.16.1
619_EC 12.12 _UPP 9.16.2
620_FDE 9.10.1 _WPC 10.5.2
621_FDI 9.10.2 _WPP 10.5.3
622
diff --git a/Documentation/arm64/arm-acpi.txt b/Documentation/arm64/arm-acpi.txt
index 570a4f8e1a01..1a74a041a443 100644
--- a/Documentation/arm64/arm-acpi.txt
+++ b/Documentation/arm64/arm-acpi.txt
@@ -34,7 +34,7 @@ of the summary text almost directly, to be honest.
34 34
35The short form of the rationale for ACPI on ARM is: 35The short form of the rationale for ACPI on ARM is:
36 36
37-- ACPI’s bytecode (AML) allows the platform to encode hardware behavior, 37-- ACPI’s byte code (AML) allows the platform to encode hardware behavior,
38 while DT explicitly does not support this. For hardware vendors, being 38 while DT explicitly does not support this. For hardware vendors, being
39 able to encode behavior is a key tool used in supporting operating 39 able to encode behavior is a key tool used in supporting operating
40 system releases on new hardware. 40 system releases on new hardware.
@@ -57,11 +57,11 @@ The short form of the rationale for ACPI on ARM is:
57 57
58-- The new ACPI governance process works well and Linux is now at the same 58-- The new ACPI governance process works well and Linux is now at the same
59 table as hardware vendors and other OS vendors. In fact, there is no 59 table as hardware vendors and other OS vendors. In fact, there is no
60 longer any reason to feel that ACPI is only belongs to Windows or that 60 longer any reason to feel that ACPI only belongs to Windows or that
61 Linux is in any way secondary to Microsoft in this arena. The move of 61 Linux is in any way secondary to Microsoft in this arena. The move of
62 ACPI governance into the UEFI forum has significantly opened up the 62 ACPI governance into the UEFI forum has significantly opened up the
63 specification development process, and currently, a large portion of the 63 specification development process, and currently, a large portion of the
64 changes being made to ACPI is being driven by Linux. 64 changes being made to ACPI are being driven by Linux.
65 65
66Key to the use of ACPI is the support model. For servers in general, the 66Key to the use of ACPI is the support model. For servers in general, the
67responsibility for hardware behaviour cannot solely be the domain of the 67responsibility for hardware behaviour cannot solely be the domain of the
@@ -110,7 +110,7 @@ ACPI support in drivers and subsystems for ARMv8 should never be mutually
110exclusive with DT support at compile time. 110exclusive with DT support at compile time.
111 111
112At boot time the kernel will only use one description method depending on 112At boot time the kernel will only use one description method depending on
113parameters passed from the bootloader (including kernel bootargs). 113parameters passed from the boot loader (including kernel bootargs).
114 114
115Regardless of whether DT or ACPI is used, the kernel must always be capable 115Regardless of whether DT or ACPI is used, the kernel must always be capable
116of booting with either scheme (in kernels with both schemes enabled at compile 116of booting with either scheme (in kernels with both schemes enabled at compile
@@ -159,7 +159,7 @@ Further, the ACPI core will only use the 64-bit address fields in the FADT
159(Fixed ACPI Description Table). Any 32-bit address fields in the FADT will 159(Fixed ACPI Description Table). Any 32-bit address fields in the FADT will
160be ignored on arm64. 160be ignored on arm64.
161 161
162Hardware reduced mode (see Section 4.1 of the ACPI 5.1 specification) will 162Hardware reduced mode (see Section 4.1 of the ACPI 6.1 specification) will
163be enforced by the ACPI core on arm64. Doing so allows the ACPI core to 163be enforced by the ACPI core on arm64. Doing so allows the ACPI core to
164run less complex code since it no longer has to provide support for legacy 164run less complex code since it no longer has to provide support for legacy
165hardware from other architectures. Any fields that are not to be used for 165hardware from other architectures. Any fields that are not to be used for
@@ -167,7 +167,7 @@ hardware reduced mode must be set to zero.
167 167
168For the ACPI core to operate properly, and in turn provide the information 168For the ACPI core to operate properly, and in turn provide the information
169the kernel needs to configure devices, it expects to find the following 169the kernel needs to configure devices, it expects to find the following
170tables (all section numbers refer to the ACPI 5.1 specfication): 170tables (all section numbers refer to the ACPI 6.1 specification):
171 171
172 -- RSDP (Root System Description Pointer), section 5.2.5 172 -- RSDP (Root System Description Pointer), section 5.2.5
173 173
@@ -185,9 +185,23 @@ tables (all section numbers refer to the ACPI 5.1 specfication):
185 -- If PCI is supported, the MCFG (Memory mapped ConFiGuration 185 -- If PCI is supported, the MCFG (Memory mapped ConFiGuration
186 Table), section 5.2.6, specifically Table 5-31. 186 Table), section 5.2.6, specifically Table 5-31.
187 187
188 -- If booting without a console=<device> kernel parameter is
189 supported, the SPCR (Serial Port Console Redirection table),
190 section 5.2.6, specifically Table 5-31.
191
192 -- If necessary to describe the I/O topology, SMMUs and GIC ITSs,
193 the IORT (Input Output Remapping Table, section 5.2.6, specifically
194 Table 5-31).
195
196 -- If NUMA is supported, the SRAT (System Resource Affinity Table)
197 and SLIT (System Locality distance Information Table), sections
198 5.2.16 and 5.2.17, respectively.
199
188If the above tables are not all present, the kernel may or may not be 200If the above tables are not all present, the kernel may or may not be
189able to boot properly since it may not be able to configure all of the 201able to boot properly since it may not be able to configure all of the
190devices available. 202devices available. This list of tables is not meant to be all inclusive;
203in some environments other tables may be needed (e.g., any of the APEI
204tables from section 18) to support specific functionality.
191 205
192 206
193ACPI Detection 207ACPI Detection
@@ -198,7 +212,7 @@ the device structure. This is detailed further in the "Driver
198Recommendations" section. 212Recommendations" section.
199 213
200In non-driver code, if the presence of ACPI needs to be detected at 214In non-driver code, if the presence of ACPI needs to be detected at
201runtime, then check the value of acpi_disabled. If CONFIG_ACPI is not 215run time, then check the value of acpi_disabled. If CONFIG_ACPI is not
202set, acpi_disabled will always be 1. 216set, acpi_disabled will always be 1.
203 217
204 218
@@ -233,7 +247,7 @@ that looks like this: Name(KEY0, "value0"). An ACPI device driver would
233then retrieve the value of the property by evaluating the KEY0 object. 247then retrieve the value of the property by evaluating the KEY0 object.
234However, using Name() this way has multiple problems: (1) ACPI limits 248However, using Name() this way has multiple problems: (1) ACPI limits
235names ("KEY0") to four characters unlike DT; (2) there is no industry 249names ("KEY0") to four characters unlike DT; (2) there is no industry
236wide registry that maintains a list of names, minimzing re-use; (3) 250wide registry that maintains a list of names, minimizing re-use; (3)
237there is also no registry for the definition of property values ("value0"), 251there is also no registry for the definition of property values ("value0"),
238again making re-use difficult; and (4) how does one maintain backward 252again making re-use difficult; and (4) how does one maintain backward
239compatibility as new hardware comes out? The _DSD method was created 253compatibility as new hardware comes out? The _DSD method was created
@@ -434,7 +448,8 @@ The ACPI specification changes regularly. During the year 2014, for instance,
434version 5.1 was released and version 6.0 substantially completed, with most of 448version 5.1 was released and version 6.0 substantially completed, with most of
435the changes being driven by ARM-specific requirements. Proposed changes are 449the changes being driven by ARM-specific requirements. Proposed changes are
436presented and discussed in the ASWG (ACPI Specification Working Group) which 450presented and discussed in the ASWG (ACPI Specification Working Group) which
437is a part of the UEFI Forum. 451is a part of the UEFI Forum. The current version of the ACPI specification
452is 6.1 release in January 2016.
438 453
439Participation in this group is open to all UEFI members. Please see 454Participation in this group is open to all UEFI members. Please see
440http://www.uefi.org/workinggroup for details on group membership. 455http://www.uefi.org/workinggroup for details on group membership.
@@ -443,7 +458,7 @@ It is the intent of the ARMv8 ACPI kernel code to follow the ACPI specification
443as closely as possible, and to only implement functionality that complies with 458as closely as possible, and to only implement functionality that complies with
444the released standards from UEFI ASWG. As a practical matter, there will be 459the released standards from UEFI ASWG. As a practical matter, there will be
445vendors that provide bad ACPI tables or violate the standards in some way. 460vendors that provide bad ACPI tables or violate the standards in some way.
446If this is because of errors, quirks and fixups may be necessary, but will 461If this is because of errors, quirks and fix-ups may be necessary, but will
447be avoided if possible. If there are features missing from ACPI that preclude 462be avoided if possible. If there are features missing from ACPI that preclude
448it from being used on a platform, ECRs (Engineering Change Requests) should be 463it from being used on a platform, ECRs (Engineering Change Requests) should be
449submitted to ASWG and go through the normal approval process; for those that 464submitted to ASWG and go through the normal approval process; for those that
@@ -480,8 +495,7 @@ References
480 Software on ARM Platforms", dated 16 Aug 2014 495 Software on ARM Platforms", dated 16 Aug 2014
481 496
482[2] http://www.secretlab.ca/archives/151, 10 Jan 2015, Copyright (c) 2015, 497[2] http://www.secretlab.ca/archives/151, 10 Jan 2015, Copyright (c) 2015,
483 Linaro Ltd., written by Grant Likely. A copy of the verbatim text (apart 498 Linaro Ltd., written by Grant Likely.
484 from formatting) is also in Documentation/arm64/why_use_acpi.txt.
485 499
486[3] AMD ACPI for Seattle platform documentation: 500[3] AMD ACPI for Seattle platform documentation:
487 http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/Seattle_ACPI_Guide.pdf 501 http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/Seattle_ACPI_Guide.pdf