Blame view

Documentation/arm64/acpi_object_usage.txt 26.4 KB
735f00bdf   Al Stone   ARM64 / ACPI: add...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  ACPI Tables
  -----------
  The expectations of individual ACPI tables are discussed in the list that
  follows.
  
  If a section number is used, it refers to a section number in the ACPI
  specification where the object is defined.  If "Signature Reserved" is used,
  the table signature (the first four bytes of the table) is the only portion
  of the table recognized by the specification, and the actual table is defined
  outside of the UEFI Forum (see Section 5.2.6 of the specification).
  
  For ACPI on arm64, tables also fall into the following categories:
  
         -- Required: DSDT, FADT, GTDT, MADT, MCFG, RSDP, SPCR, XSDT
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
15
         -- Recommended: BERT, EINJ, ERST, HEST, PCCT, SSDT
735f00bdf   Al Stone   ARM64 / ACPI: add...
16

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
17
18
19
         -- Optional: BGRT, CPEP, CSRT, DBG2, DRTM, ECDT, FACS, FPDT, IORT,
            MCHI, MPST, MSCT, NFIT, PMTT, RASF, SBST, SLIT, SPMI, SRAT, STAO,
  	  TCPA, TPM2, UEFI, XENV
735f00bdf   Al Stone   ARM64 / ACPI: add...
20

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
21
22
         -- Not supported: BOOT, DBGP, DMAR, ETDT, HPET, IBFT, IVRS, LPIT,
            MSDM, OEMx, PSDT, RSDT, SLIC, WAET, WDAT, WDRT, WPBT
735f00bdf   Al Stone   ARM64 / ACPI: add...
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  
  Table  Usage for ARMv8 Linux
  -----  ----------------------------------------------------------------
  BERT   Section 18.3 (signature == "BERT")
         == Boot Error Record Table ==
         Must be supplied if RAS support is provided by the platform.  It
         is recommended this table be supplied.
  
  BOOT   Signature Reserved (signature == "BOOT")
         == simple BOOT flag table ==
         Microsoft only table, will not be supported.
  
  BGRT   Section 5.2.22 (signature == "BGRT")
         == Boot Graphics Resource Table ==
         Optional, not currently supported, with no real use-case for an
         ARM server.
  
  CPEP   Section 5.2.18 (signature == "CPEP")
         == Corrected Platform Error Polling table ==
         Optional, not currently supported, and not recommended until such
         time as ARM-compatible hardware is available, and the specification
         suitably modified.
  
  CSRT   Signature Reserved (signature == "CSRT")
         == Core System Resources Table ==
         Optional, not currently supported.
  
  DBG2   Signature Reserved (signature == "DBG2")
         == DeBuG port table 2 ==
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
52
53
         License has changed and should be usable.  Optional if used instead
         of earlycon=<device> on the command line.
735f00bdf   Al Stone   ARM64 / ACPI: add...
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
  
  DBGP   Signature Reserved (signature == "DBGP")
         == DeBuG Port table ==
         Microsoft only table, will not be supported.
  
  DSDT   Section 5.2.11.1 (signature == "DSDT")
         == Differentiated System Description Table ==
         A DSDT is required; see also SSDT.
  
         ACPI tables contain only one DSDT but can contain one or more SSDTs,
         which are optional.  Each SSDT can only add to the ACPI namespace,
         but cannot modify or replace anything in the DSDT.
  
  DMAR   Signature Reserved (signature == "DMAR")
         == DMA Remapping table ==
         x86 only table, will not be supported.
  
  DRTM   Signature Reserved (signature == "DRTM")
         == Dynamic Root of Trust for Measurement table ==
         Optional, not currently supported.
  
  ECDT   Section 5.2.16 (signature == "ECDT")
         == Embedded Controller Description Table ==
         Optional, not currently supported, but could be used on ARM if and
         only if one uses the GPE_BIT field to represent an IRQ number, since
         there are no GPE blocks defined in hardware reduced mode.  This would
         need to be modified in the ACPI specification.
  
  EINJ   Section 18.6 (signature == "EINJ")
         == Error Injection table ==
         This table is very useful for testing platform response to error
         conditions; it allows one to inject an error into the system as
         if it had actually occurred.  However, this table should not be
         shipped with a production system; it should be dynamically loaded
         and executed with the ACPICA tools only during testing.
  
  ERST   Section 18.5 (signature == "ERST")
         == Error Record Serialization Table ==
         On a platform supports RAS, this table must be supplied if it is not
         UEFI-based; if it is UEFI-based, this table may be supplied. When this
         table is not present, UEFI run time service will be utilized to save
         and retrieve hardware error information to and from a persistent store.
  
  ETDT   Signature Reserved (signature == "ETDT")
         == Event Timer Description Table ==
         Obsolete table, will not be supported.
  
  FACS   Section 5.2.10 (signature == "FACS")
         == Firmware ACPI Control Structure ==
         It is unlikely that this table will be terribly useful.  If it is
         provided, the Global Lock will NOT be used since it is not part of
         the hardware reduced profile, and only 64-bit address fields will
         be considered valid.
  
  FADT   Section 5.2.9 (signature == "FACP")
         == Fixed ACPI Description Table ==
         Required for arm64.
  
         The HW_REDUCED_ACPI flag must be set.  All of the fields that are
         to be ignored when HW_REDUCED_ACPI is set are expected to be set to
         zero.
  
         If an FACS table is provided, the X_FIRMWARE_CTRL field is to be
         used, not FIRMWARE_CTRL.
  
         If PSCI is used (as is recommended), make sure that ARM_BOOT_ARCH is
         filled in properly -- that the PSCI_COMPLIANT flag is set and that
         PSCI_USE_HVC is set or unset as needed (see table 5-37).
  
         For the DSDT that is also required, the X_DSDT field is to be used,
         not the DSDT field.
  
  FPDT   Section 5.2.23 (signature == "FPDT")
         == Firmware Performance Data Table ==
         Optional, not currently supported.
  
  GTDT   Section 5.2.24 (signature == "GTDT")
         == Generic Timer Description Table ==
         Required for arm64.
  
  HEST   Section 18.3.2 (signature == "HEST")
         == Hardware Error Source Table ==
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
136
137
138
139
140
         ARM-specific error sources have been defined; please use those or the
         PCI types such as type 6 (AER Root Port), 7 (AER Endpoint), or 8 (AER
         Bridge), or use type 9 (Generic Hardware Error Source).  Firmware first
         error handling is possible if and only if Trusted Firmware is being
         used on arm64.
735f00bdf   Al Stone   ARM64 / ACPI: add...
141
142
143
144
145
146
147
148
149
150
151
  
         Must be supplied if RAS support is provided by the platform.  It
         is recommended this table be supplied.
  
  HPET   Signature Reserved (signature == "HPET")
         == High Precision Event timer Table ==
         x86 only table, will not be supported.
  
  IBFT   Signature Reserved (signature == "IBFT")
         == iSCSI Boot Firmware Table ==
         Microsoft defined table, support TBD.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
152
153
154
155
156
157
158
159
  IORT   Signature Reserved (signature == "IORT")
         == Input Output Remapping Table ==
         arm64 only table, required in order to describe IO topology, SMMUs,
         and GIC ITSs, and how those various components are connected together,
         such as identifying which components are behind which SMMUs/ITSs.
         This table will only be required on certain SBSA platforms (e.g.,
         when using GICv3-ITS and an SMMU); on SBSA Level 0 platforms, it 
         remains optional.
735f00bdf   Al Stone   ARM64 / ACPI: add...
160
161
162
163
164
165
  IVRS   Signature Reserved (signature == "IVRS")
         == I/O Virtualization Reporting Structure ==
         x86_64 (AMD) only table, will not be supported.
  
  LPIT   Signature Reserved (signature == "LPIT")
         == Low Power Idle Table ==
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
166
167
168
169
         x86 only table as of ACPI 5.1; starting with ACPI 6.0, processor
         descriptions and power states on ARM platforms should use the DSDT
         and define processor container devices (_HID ACPI0010, Section 8.4,
         and more specifically 8.4.3 and and 8.4.4).
735f00bdf   Al Stone   ARM64 / ACPI: add...
170
171
172
173
  
  MADT   Section 5.2.12 (signature == "APIC")
         == Multiple APIC Description Table ==
         Required for arm64.  Only the GIC interrupt controller structures
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
174
         should be used (types 0xA - 0xF).
735f00bdf   Al Stone   ARM64 / ACPI: add...
175
176
177
178
179
180
181
182
183
184
185
186
  
  MCFG   Signature Reserved (signature == "MCFG")
         == Memory-mapped ConFiGuration space ==
         If the platform supports PCI/PCIe, an MCFG table is required.
  
  MCHI   Signature Reserved (signature == "MCHI")
         == Management Controller Host Interface table ==
         Optional, not currently supported.
  
  MPST   Section 5.2.21 (signature == "MPST")
         == Memory Power State Table ==
         Optional, not currently supported.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
187
188
189
  MSCT   Section 5.2.19 (signature == "MSCT")
         == Maximum System Characteristic Table ==
         Optional, not currently supported.
735f00bdf   Al Stone   ARM64 / ACPI: add...
190
191
192
  MSDM   Signature Reserved (signature == "MSDM")
         == Microsoft Data Management table ==
         Microsoft only table, will not be supported.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
  NFIT   Section 5.2.25 (signature == "NFIT")
         == NVDIMM Firmware Interface Table ==
         Optional, not currently supported.
  
  OEMx   Signature of "OEMx" only
         == OEM Specific Tables ==
         All tables starting with a signature of "OEM" are reserved for OEM
         use.  Since these are not meant to be of general use but are limited
         to very specific end users, they are not recommended for use and are
         not supported by the kernel for arm64.
  
  PCCT   Section 14.1 (signature == "PCCT)
         == Platform Communications Channel Table ==
         Recommend for use on arm64; use of PCC is recommended when using CPPC
         to control performance and power for platform processors.
  
  PMTT   Section 5.2.21.12 (signature == "PMTT")
         == Platform Memory Topology Table ==
735f00bdf   Al Stone   ARM64 / ACPI: add...
211
         Optional, not currently supported.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
212
213
214
  PSDT   Section 5.2.11.3 (signature == "PSDT")
         == Persistent System Description Table ==
         Obsolete table, will not be supported.
735f00bdf   Al Stone   ARM64 / ACPI: add...
215
216
217
218
219
220
221
222
223
224
225
  RASF   Section 5.2.20 (signature == "RASF")
         == RAS Feature table ==
         Optional, not currently supported.
  
  RSDP   Section 5.2.5 (signature == "RSD PTR")
         == Root System Description PoinTeR ==
         Required for arm64.
  
  RSDT   Section 5.2.7 (signature == "RSDT")
         == Root System Description Table ==
         Since this table can only provide 32-bit addresses, it is deprecated
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
226
         on arm64, and will not be used.  If provided, it will be ignored.
735f00bdf   Al Stone   ARM64 / ACPI: add...
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
  
  SBST   Section 5.2.14 (signature == "SBST")
         == Smart Battery Subsystem Table ==
         Optional, not currently supported.
  
  SLIC   Signature Reserved (signature == "SLIC")
         == Software LIcensing table ==
         Microsoft only table, will not be supported.
  
  SLIT   Section 5.2.17 (signature == "SLIT")
         == System Locality distance Information Table ==
         Optional in general, but required for NUMA systems.
  
  SPCR   Signature Reserved (signature == "SPCR")
         == Serial Port Console Redirection table ==
         Required for arm64.
  
  SPMI   Signature Reserved (signature == "SPMI")
         == Server Platform Management Interface table ==
         Optional, not currently supported.
  
  SRAT   Section 5.2.16 (signature == "SRAT")
         == System Resource Affinity Table ==
         Optional, but if used, only the GICC Affinity structures are read.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
251
         To support arm64 NUMA, this table is required.
735f00bdf   Al Stone   ARM64 / ACPI: add...
252
253
254
255
256
257
258
259
260
261
262
263
264
  
  SSDT   Section 5.2.11.2 (signature == "SSDT")
         == Secondary System Description Table ==
         These tables are a continuation of the DSDT; these are recommended
         for use with devices that can be added to a running system, but can
         also serve the purpose of dividing up device descriptions into more
         manageable pieces.
  
         An SSDT can only ADD to the ACPI namespace.  It cannot modify or
         replace existing device descriptions already in the namespace.
  
         These tables are optional, however.  ACPI tables should contain only
         one DSDT but can contain many SSDTs.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
265
266
267
268
  STAO   Signature Reserved (signature == "STAO")
         == _STA Override table ==
         Optional, but only necessary in virtualized environments in order to
         hide devices from guest OSs.
735f00bdf   Al Stone   ARM64 / ACPI: add...
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
  TCPA   Signature Reserved (signature == "TCPA")
         == Trusted Computing Platform Alliance table ==
         Optional, not currently supported, and may need changes to fully
         interoperate with arm64.
  
  TPM2   Signature Reserved (signature == "TPM2")
         == Trusted Platform Module 2 table ==
         Optional, not currently supported, and may need changes to fully
         interoperate with arm64.
  
  UEFI   Signature Reserved (signature == "UEFI")
         == UEFI ACPI data table ==
         Optional, not currently supported.  No known use case for arm64,
         at present.
  
  WAET   Signature Reserved (signature == "WAET")
         == Windows ACPI Emulated devices Table ==
         Microsoft only table, will not be supported.
  
  WDAT   Signature Reserved (signature == "WDAT")
         == Watch Dog Action Table ==
         Microsoft only table, will not be supported.
  
  WDRT   Signature Reserved (signature == "WDRT")
         == Watch Dog Resource Table ==
         Microsoft only table, will not be supported.
  
  WPBT   Signature Reserved (signature == "WPBT")
         == Windows Platform Binary Table ==
         Microsoft only table, will not be supported.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
299
300
301
  XENV   Signature Reserved (signature == "XENV")
         == Xen project table ==
         Optional, used only by Xen at present.
735f00bdf   Al Stone   ARM64 / ACPI: add...
302
303
304
305
306
307
308
  XSDT   Section 5.2.8 (signature == "XSDT")
         == eXtended System Description Table ==
         Required for arm64.
  
  
  ACPI Objects
  ------------
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
309
310
311
312
  The expectations on individual ACPI objects that are likely to be used are
  shown in the list that follows; any object not explicitly mentioned below
  should be used as needed for a particular platform or particular subsystem,
  such as power management or PCI.
735f00bdf   Al Stone   ARM64 / ACPI: add...
313
314
315
  
  Name   Section         Usage for ARMv8 Linux
  ----   ------------    -------------------------------------------------
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
316
317
318
319
320
321
322
  _CCA   6.2.17          This method must be defined for all bus masters
                         on arm64 -- there are no assumptions made about
                         whether such devices are cache coherent or not.
                         The _CCA value is inherited by all descendants of
                         these devices so it does not need to be repeated.
                         Without _CCA on arm64, the kernel does not know what
                         to do about setting up DMA for the device.
735f00bdf   Al Stone   ARM64 / ACPI: add...
323

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
324
325
326
327
328
329
                         NB: this method provides default cache coherency
                         attributes; the presence of an SMMU can be used to
                         modify that, however.  For example, a master could
                         default to non-coherent, but be made coherent with
                         the appropriate SMMU configuration (see Table 17 of
                         the IORT specification, ARM Document DEN 0049B).
735f00bdf   Al Stone   ARM64 / ACPI: add...
330

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
331
  _CID   6.1.2           Use as needed, see also _HID.
735f00bdf   Al Stone   ARM64 / ACPI: add...
332

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
333
  _CLS   6.1.3           Use as needed, see also _HID.
735f00bdf   Al Stone   ARM64 / ACPI: add...
334

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
335
336
  _CPC   8.4.7.1         Use as needed, power management specific.  CPPC is
                         recommended on arm64.
735f00bdf   Al Stone   ARM64 / ACPI: add...
337
338
  
  _CRS   6.2.2           Required on arm64.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
339
340
341
342
  _CSD   8.4.2.2         Use as needed, used only in conjunction with _CST.
  
  _CST   8.4.2.1         Low power idle states (8.4.4) are recommended instead
                         of C-states.
735f00bdf   Al Stone   ARM64 / ACPI: add...
343
344
345
346
  
  _DDN   6.1.4           This field can be used for a device name.  However,
                         it is meant for DOS device names (e.g., COM1), so be
                         careful of its use across OSes.
735f00bdf   Al Stone   ARM64 / ACPI: add...
347
348
349
350
351
352
353
354
355
356
357
358
359
  _DSD   6.2.5           To be used with caution.  If this object is used, try
                         to use it within the constraints already defined by the
                         Device Properties UUID.  Only in rare circumstances
                         should it be necessary to create a new _DSD UUID.
  
                         In either case, submit the _DSD definition along with
                         any driver patches for discussion, especially when
                         device properties are used.  A driver will not be
                         considered complete without a corresponding _DSD
                         description.  Once approved by kernel maintainers,
                         the UUID or device properties must then be registered
                         with the UEFI Forum; this may cause some iteration as
                         more than one OS will be registering entries.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
360
  _DSM   9.1.1           Do not use this method.  It is not standardized, the
735f00bdf   Al Stone   ARM64 / ACPI: add...
361
362
                         return values are not well documented, and it is
                         currently a frequent source of error.
735f00bdf   Al Stone   ARM64 / ACPI: add...
363
364
365
366
367
368
369
370
371
  \_GL   5.7.1           This object is not to be used in hardware reduced
                         mode, and therefore should not be used on arm64.
  
  _GLK   6.5.7           This object requires a global lock be defined; there
                         is no global lock on arm64 since it runs in hardware
                         reduced mode.  Hence, do not use this object on arm64.
  
  \_GPE  5.3.1           This namespace is for x86 use only.  Do not use it
                         on arm64.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
372
373
  _HID   6.1.5           This is the primary object to use in device probing,
  		       though _CID and _CLS may also be used.
735f00bdf   Al Stone   ARM64 / ACPI: add...
374
375
376
377
  
  _INI   6.5.1           Not required, but can be useful in setting up devices
                         when UEFI leaves them in a state that may not be what
                         the driver expects before it starts probing.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
378
379
  _LPI   8.4.4.3         Recommended for use with processor definitions (_HID
  		       ACPI0010) on arm64.  See also _RDI.
735f00bdf   Al Stone   ARM64 / ACPI: add...
380

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
381
  _MLS   6.1.7           Highly recommended for use in internationalization.
735f00bdf   Al Stone   ARM64 / ACPI: add...
382

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
383
  _OFF   7.2.2           It is recommended to define this method for any device
735f00bdf   Al Stone   ARM64 / ACPI: add...
384
                         that can be turned on or off.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
385
  _ON    7.2.3           It is recommended to define this method for any device
735f00bdf   Al Stone   ARM64 / ACPI: add...
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
                         that can be turned on or off.
  
  \_OS   5.7.3           This method will return "Linux" by default (this is
                         the value of the macro ACPI_OS_NAME on Linux).  The
                         command line parameter acpi_os=<string> can be used
                         to set it to some other value.
  
  _OSC   6.2.11          This method can be a global method in ACPI (i.e.,
                         \_SB._OSC), or it may be associated with a specific
                         device (e.g., \_SB.DEV0._OSC), or both.  When used
                         as a global method, only capabilities published in
                         the ACPI specification are allowed.  When used as
                         a device-specific method, the process described for
                         using _DSD MUST be used to create an _OSC definition;
                         out-of-process use of _OSC is not allowed.  That is,
                         submit the device-specific _OSC usage description as
                         part of the kernel driver submission, get it approved
                         by the kernel community, then register it with the
                         UEFI Forum.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
405
406
407
408
  \_OSI  5.7.2           Deprecated on ARM64.  As far as ACPI firmware is 
  		       concerned, _OSI is not to be used to determine what 
  		       sort of system is being used or what functionality
  		       is provided.  The _OSC method is to be used instead.
735f00bdf   Al Stone   ARM64 / ACPI: add...
409
410
411
412
413
  
  _PDC   8.4.1           Deprecated, do not use on arm64.
  
  \_PIC  5.8.1           The method should not be used.  On arm64, the only
                         interrupt model available is GIC.
735f00bdf   Al Stone   ARM64 / ACPI: add...
414
415
  \_PR   5.3.1           This namespace is for x86 use only on legacy systems.
                         Do not use it on arm64.
735f00bdf   Al Stone   ARM64 / ACPI: add...
416
417
  _PRT   6.2.13          Required as part of the definition of all PCI root
                         devices.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
418
  _PRx   7.3.8-11        Use as needed; power management specific.  If _PR0 is
735f00bdf   Al Stone   ARM64 / ACPI: add...
419
                         defined, _PR3 must also be defined.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
420
  _PSx   7.3.2-5         Use as needed; power management specific.  If _PS0 is
735f00bdf   Al Stone   ARM64 / ACPI: add...
421
422
423
                         defined, _PS3 must also be defined.  If clocks or
                         regulators need adjusting to be consistent with power
                         usage, change them in these methods.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
424
425
426
  _RDI   8.4.4.4         Recommended for use with processor definitions (_HID
  		       ACPI0010) on arm64.  This should only be used in 
  		       conjunction with _LPI.
735f00bdf   Al Stone   ARM64 / ACPI: add...
427
428
  
  \_REV  5.7.4           Always returns the latest version of ACPI supported.
735f00bdf   Al Stone   ARM64 / ACPI: add...
429
430
  \_SB   5.3.1           Required on arm64; all devices must be defined in this
                         namespace.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
431
  _SLI   6.2.15          Use is recommended when SLIT table is in use.
735f00bdf   Al Stone   ARM64 / ACPI: add...
432
433
  
  _STA   6.3.7,          It is recommended to define this method for any device
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
434
435
436
         7.2.4           that can be turned on or off.  See also the STAO table
                         that provides overrides to hide devices in virtualized
                         environments.
735f00bdf   Al Stone   ARM64 / ACPI: add...
437

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
438
  _SRS   6.2.16          Use as needed; see also _PRS.
735f00bdf   Al Stone   ARM64 / ACPI: add...
439
440
441
442
443
  
  _STR   6.1.10          Recommended for conveying device names to end users;
                         this is preferred over using _DDN.
  
  _SUB   6.1.9           Use as needed; _HID or _CID are preferred.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
444
  _SUN   6.1.11          Use as needed, but recommended.
735f00bdf   Al Stone   ARM64 / ACPI: add...
445

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
446
  _SWS   7.4.3           Use as needed; power management specific; this may
735f00bdf   Al Stone   ARM64 / ACPI: add...
447
                         require specification changes for use on arm64.
735f00bdf   Al Stone   ARM64 / ACPI: add...
448
449
  _UID   6.1.12          Recommended for distinguishing devices of the same
                         class; define it if at all possible.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
450

735f00bdf   Al Stone   ARM64 / ACPI: add...
451
452
453
454
455
456
  
  
  ACPI Event Model
  ----------------
  Do not use GPE block devices; these are not supported in the hardware reduced
  profile used by arm64.  Since there are no GPE blocks defined for use on ARM
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
457
458
459
460
461
462
463
  platforms, ACPI events must be signaled differently.
  
  There are two options: GPIO-signaled interrupts (Section 5.6.5), and
  interrupt-signaled events (Section 5.6.9).  Interrupt-signaled events are a
  new feature in the ACPI 6.1 specification.  Either -- or both -- can be used
  on a given platform, and which to use may be dependent of limitations in any
  given SoC.  If possible, interrupt-signaled events are recommended.
735f00bdf   Al Stone   ARM64 / ACPI: add...
464
465
466
467
  
  
  ACPI Processor Control
  ----------------------
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
  Section 8 of the ACPI specification changed significantly in version 6.0.
  Processors should now be defined as Device objects with _HID ACPI0007; do
  not use the deprecated Processor statement in ASL.  All multiprocessor systems
  should also define a hierarchy of processors, done with Processor Container
  Devices (see Section 8.4.3.1, _HID ACPI0010); do not use processor aggregator
  devices (Section 8.5) to describe processor topology.  Section 8.4 of the
  specification describes the semantics of these object definitions and how
  they interrelate.
  
  Most importantly, the processor hierarchy defined also defines the low power
  idle states that are available to the platform, along with the rules for
  determining which processors can be turned on or off and the circumstances
  that control that.  Without this information, the processors will run in
  whatever power state they were left in by UEFI.
  
  Note too, that the processor Device objects defined and the entries in the
  MADT for GICs are expected to be in synchronization.  The _UID of the Device
  object must correspond to processor IDs used in the MADT.
  
  It is recommended that CPPC (8.4.5) be used as the primary model for processor
  performance control on arm64.  C-states and P-states may become available at
  some point in the future, but most current design work appears to favor CPPC.
735f00bdf   Al Stone   ARM64 / ACPI: add...
490
491
492
  
  Further, it is essential that the ARMv8 SoC provide a fully functional
  implementation of PSCI; this will be the only mechanism supported by ACPI
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
493
494
495
  to control CPU power state.  Booting of secondary CPUs using the ACPI
  parking protocol is possible, but discouraged, since only PSCI is supported
  for ARM servers.
735f00bdf   Al Stone   ARM64 / ACPI: add...
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
  
  
  ACPI System Address Map Interfaces
  ----------------------------------
  In Section 15 of the ACPI specification, several methods are mentioned as
  possible mechanisms for conveying memory resource information to the kernel.
  For arm64, we will only support UEFI for booting with ACPI, hence the UEFI
  GetMemoryMap() boot service is the only mechanism that will be used.
  
  
  ACPI Platform Error Interfaces (APEI)
  -------------------------------------
  The APEI tables supported are described above.
  
  APEI requires the equivalent of an SCI and an NMI on ARMv8.  The SCI is used
  to notify the OSPM of errors that have occurred but can be corrected and the
  system can continue correct operation, even if possibly degraded.  The NMI is
  used to indicate fatal errors that cannot be corrected, and require immediate
  attention.
  
  Since there is no direct equivalent of the x86 SCI or NMI, arm64 handles
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
517
518
519
520
521
522
523
  these slightly differently.  The SCI is handled as a high priority interrupt;
  given that these are corrected (or correctable) errors being reported, this
  is sufficient.  The NMI is emulated as the highest priority interrupt
  possible.  This implies some caution must be used since there could be
  interrupts at higher privilege levels or even interrupts at the same priority
  as the emulated NMI.  In Linux, this should not be the case but one should
  be aware it could happen.
735f00bdf   Al Stone   ARM64 / ACPI: add...
524
525
526
527
528
529
  
  
  ACPI Objects Not Supported on ARM64
  -----------------------------------
  While this may change in the future, there are several classes of objects
  that can be defined, but are not currently of general interest to ARM servers.
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
530
531
532
533
  Some of these objects have x86 equivalents, and may actually make sense in ARM
  servers.  However, there is either no hardware available at present, or there
  may not even be a non-ARM implementation yet.  Hence, they are not currently
  supported.
735f00bdf   Al Stone   ARM64 / ACPI: add...
534

83ce0efc1   Al Stone   ARM64: ACPI: Upda...
535
  The following classes of objects are not supported:
735f00bdf   Al Stone   ARM64 / ACPI: add...
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
  
         -- Section 9.2: ambient light sensor devices
  
         -- Section 9.3: battery devices
  
         -- Section 9.4: lids (e.g., laptop lids)
  
         -- Section 9.8.2: IDE controllers
  
         -- Section 9.9: floppy controllers
  
         -- Section 9.10: GPE block devices
  
         -- Section 9.15: PC/AT RTC/CMOS devices
  
         -- Section 9.16: user presence detection devices
  
         -- Section 9.17: I/O APIC devices; all GICs must be enumerable via MADT
  
         -- Section 9.18: time and alarm devices (see 9.15)
735f00bdf   Al Stone   ARM64 / ACPI: add...
556
557
558
559
560
561
562
         -- Section 10: power source and power meter devices
  
         -- Section 11: thermal management
  
         -- Section 12: embedded controllers interface
  
         -- Section 13: SMBus interfaces
83ce0efc1   Al Stone   ARM64: ACPI: Upda...
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
  
  This also means that there is no support for the following objects:
  
  Name   Section                     Name   Section
  ----   ------------                ----   ------------
  _ALC   9.3.4                       _FDM   9.10.3
  _ALI   9.3.2                       _FIX   6.2.7
  _ALP   9.3.6                       _GAI   10.4.5
  _ALR   9.3.5                       _GHL   10.4.7
  _ALT   9.3.3                       _GTM   9.9.2.1.1
  _BCT   10.2.2.10                   _LID   9.5.1
  _BDN   6.5.3                       _PAI   10.4.4
  _BIF   10.2.2.1                    _PCL   10.3.2
  _BIX   10.2.2.1                    _PIF   10.3.3
  _BLT   9.2.3                       _PMC   10.4.1
  _BMA   10.2.2.4                    _PMD   10.4.8
  _BMC   10.2.2.12                   _PMM   10.4.3
  _BMD   10.2.2.11                   _PRL   10.3.4
  _BMS   10.2.2.5                    _PSR   10.3.1
  _BST   10.2.2.6                    _PTP   10.4.2
  _BTH   10.2.2.7                    _SBS   10.1.3
  _BTM   10.2.2.9                    _SHL   10.4.6
  _BTP   10.2.2.8                    _STM   9.9.2.1.1
  _DCK   6.5.2                       _UPD   9.16.1
  _EC    12.12                       _UPP   9.16.2
  _FDE   9.10.1                      _WPC   10.5.2
  _FDI   9.10.2                      _WPP   10.5.3