xref: /OK3568_Linux_fs/kernel/Documentation/arm64/acpi_object_usage.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun===========
2*4882a593SmuzhiyunACPI Tables
3*4882a593Smuzhiyun===========
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunThe expectations of individual ACPI tables are discussed in the list that
6*4882a593Smuzhiyunfollows.
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunIf a section number is used, it refers to a section number in the ACPI
9*4882a593Smuzhiyunspecification where the object is defined.  If "Signature Reserved" is used,
10*4882a593Smuzhiyunthe table signature (the first four bytes of the table) is the only portion
11*4882a593Smuzhiyunof the table recognized by the specification, and the actual table is defined
12*4882a593Smuzhiyunoutside of the UEFI Forum (see Section 5.2.6 of the specification).
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunFor ACPI on arm64, tables also fall into the following categories:
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun       -  Required: DSDT, FADT, GTDT, MADT, MCFG, RSDP, SPCR, XSDT
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun       -  Recommended: BERT, EINJ, ERST, HEST, PCCT, SSDT
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun       -  Optional: BGRT, CPEP, CSRT, DBG2, DRTM, ECDT, FACS, FPDT, IORT,
21*4882a593Smuzhiyun          MCHI, MPST, MSCT, NFIT, PMTT, RASF, SBST, SLIT, SPMI, SRAT, STAO,
22*4882a593Smuzhiyun	  TCPA, TPM2, UEFI, XENV
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun       -  Not supported: BOOT, DBGP, DMAR, ETDT, HPET, IBFT, IVRS, LPIT,
25*4882a593Smuzhiyun          MSDM, OEMx, PSDT, RSDT, SLIC, WAET, WDAT, WDRT, WPBT
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun====== ========================================================================
28*4882a593SmuzhiyunTable  Usage for ARMv8 Linux
29*4882a593Smuzhiyun====== ========================================================================
30*4882a593SmuzhiyunBERT   Section 18.3 (signature == "BERT")
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun       **Boot Error Record Table**
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun       Must be supplied if RAS support is provided by the platform.  It
35*4882a593Smuzhiyun       is recommended this table be supplied.
36*4882a593Smuzhiyun
37*4882a593SmuzhiyunBOOT   Signature Reserved (signature == "BOOT")
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun       **simple BOOT flag table**
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun       Microsoft only table, will not be supported.
42*4882a593Smuzhiyun
43*4882a593SmuzhiyunBGRT   Section 5.2.22 (signature == "BGRT")
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun       **Boot Graphics Resource Table**
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun       Optional, not currently supported, with no real use-case for an
48*4882a593Smuzhiyun       ARM server.
49*4882a593Smuzhiyun
50*4882a593SmuzhiyunCPEP   Section 5.2.18 (signature == "CPEP")
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun       **Corrected Platform Error Polling table**
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun       Optional, not currently supported, and not recommended until such
55*4882a593Smuzhiyun       time as ARM-compatible hardware is available, and the specification
56*4882a593Smuzhiyun       suitably modified.
57*4882a593Smuzhiyun
58*4882a593SmuzhiyunCSRT   Signature Reserved (signature == "CSRT")
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun       **Core System Resources Table**
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun       Optional, not currently supported.
63*4882a593Smuzhiyun
64*4882a593SmuzhiyunDBG2   Signature Reserved (signature == "DBG2")
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun       **DeBuG port table 2**
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun       License has changed and should be usable.  Optional if used instead
69*4882a593Smuzhiyun       of earlycon=<device> on the command line.
70*4882a593Smuzhiyun
71*4882a593SmuzhiyunDBGP   Signature Reserved (signature == "DBGP")
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun       **DeBuG Port table**
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun       Microsoft only table, will not be supported.
76*4882a593Smuzhiyun
77*4882a593SmuzhiyunDSDT   Section 5.2.11.1 (signature == "DSDT")
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun       **Differentiated System Description Table**
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun       A DSDT is required; see also SSDT.
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun       ACPI tables contain only one DSDT but can contain one or more SSDTs,
84*4882a593Smuzhiyun       which are optional.  Each SSDT can only add to the ACPI namespace,
85*4882a593Smuzhiyun       but cannot modify or replace anything in the DSDT.
86*4882a593Smuzhiyun
87*4882a593SmuzhiyunDMAR   Signature Reserved (signature == "DMAR")
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun       **DMA Remapping table**
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun       x86 only table, will not be supported.
92*4882a593Smuzhiyun
93*4882a593SmuzhiyunDRTM   Signature Reserved (signature == "DRTM")
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun       **Dynamic Root of Trust for Measurement table**
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun       Optional, not currently supported.
98*4882a593Smuzhiyun
99*4882a593SmuzhiyunECDT   Section 5.2.16 (signature == "ECDT")
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun       **Embedded Controller Description Table**
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun       Optional, not currently supported, but could be used on ARM if and
104*4882a593Smuzhiyun       only if one uses the GPE_BIT field to represent an IRQ number, since
105*4882a593Smuzhiyun       there are no GPE blocks defined in hardware reduced mode.  This would
106*4882a593Smuzhiyun       need to be modified in the ACPI specification.
107*4882a593Smuzhiyun
108*4882a593SmuzhiyunEINJ   Section 18.6 (signature == "EINJ")
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun       **Error Injection table**
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun       This table is very useful for testing platform response to error
113*4882a593Smuzhiyun       conditions; it allows one to inject an error into the system as
114*4882a593Smuzhiyun       if it had actually occurred.  However, this table should not be
115*4882a593Smuzhiyun       shipped with a production system; it should be dynamically loaded
116*4882a593Smuzhiyun       and executed with the ACPICA tools only during testing.
117*4882a593Smuzhiyun
118*4882a593SmuzhiyunERST   Section 18.5 (signature == "ERST")
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun       **Error Record Serialization Table**
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun       On a platform supports RAS, this table must be supplied if it is not
123*4882a593Smuzhiyun       UEFI-based; if it is UEFI-based, this table may be supplied. When this
124*4882a593Smuzhiyun       table is not present, UEFI run time service will be utilized to save
125*4882a593Smuzhiyun       and retrieve hardware error information to and from a persistent store.
126*4882a593Smuzhiyun
127*4882a593SmuzhiyunETDT   Signature Reserved (signature == "ETDT")
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun       **Event Timer Description Table**
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun       Obsolete table, will not be supported.
132*4882a593Smuzhiyun
133*4882a593SmuzhiyunFACS   Section 5.2.10 (signature == "FACS")
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun       **Firmware ACPI Control Structure**
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun       It is unlikely that this table will be terribly useful.  If it is
138*4882a593Smuzhiyun       provided, the Global Lock will NOT be used since it is not part of
139*4882a593Smuzhiyun       the hardware reduced profile, and only 64-bit address fields will
140*4882a593Smuzhiyun       be considered valid.
141*4882a593Smuzhiyun
142*4882a593SmuzhiyunFADT   Section 5.2.9 (signature == "FACP")
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun       **Fixed ACPI Description Table**
145*4882a593Smuzhiyun       Required for arm64.
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun       The HW_REDUCED_ACPI flag must be set.  All of the fields that are
149*4882a593Smuzhiyun       to be ignored when HW_REDUCED_ACPI is set are expected to be set to
150*4882a593Smuzhiyun       zero.
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun       If an FACS table is provided, the X_FIRMWARE_CTRL field is to be
153*4882a593Smuzhiyun       used, not FIRMWARE_CTRL.
154*4882a593Smuzhiyun
155*4882a593Smuzhiyun       If PSCI is used (as is recommended), make sure that ARM_BOOT_ARCH is
156*4882a593Smuzhiyun       filled in properly - that the PSCI_COMPLIANT flag is set and that
157*4882a593Smuzhiyun       PSCI_USE_HVC is set or unset as needed (see table 5-37).
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun       For the DSDT that is also required, the X_DSDT field is to be used,
160*4882a593Smuzhiyun       not the DSDT field.
161*4882a593Smuzhiyun
162*4882a593SmuzhiyunFPDT   Section 5.2.23 (signature == "FPDT")
163*4882a593Smuzhiyun
164*4882a593Smuzhiyun       **Firmware Performance Data Table**
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun       Optional, not currently supported.
167*4882a593Smuzhiyun
168*4882a593SmuzhiyunGTDT   Section 5.2.24 (signature == "GTDT")
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun       **Generic Timer Description Table**
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun       Required for arm64.
173*4882a593Smuzhiyun
174*4882a593SmuzhiyunHEST   Section 18.3.2 (signature == "HEST")
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun       **Hardware Error Source Table**
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun       ARM-specific error sources have been defined; please use those or the
179*4882a593Smuzhiyun       PCI types such as type 6 (AER Root Port), 7 (AER Endpoint), or 8 (AER
180*4882a593Smuzhiyun       Bridge), or use type 9 (Generic Hardware Error Source).  Firmware first
181*4882a593Smuzhiyun       error handling is possible if and only if Trusted Firmware is being
182*4882a593Smuzhiyun       used on arm64.
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun       Must be supplied if RAS support is provided by the platform.  It
185*4882a593Smuzhiyun       is recommended this table be supplied.
186*4882a593Smuzhiyun
187*4882a593SmuzhiyunHPET   Signature Reserved (signature == "HPET")
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun       **High Precision Event timer Table**
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun       x86 only table, will not be supported.
192*4882a593Smuzhiyun
193*4882a593SmuzhiyunIBFT   Signature Reserved (signature == "IBFT")
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun       **iSCSI Boot Firmware Table**
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun       Microsoft defined table, support TBD.
198*4882a593Smuzhiyun
199*4882a593SmuzhiyunIORT   Signature Reserved (signature == "IORT")
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun       **Input Output Remapping Table**
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun       arm64 only table, required in order to describe IO topology, SMMUs,
204*4882a593Smuzhiyun       and GIC ITSs, and how those various components are connected together,
205*4882a593Smuzhiyun       such as identifying which components are behind which SMMUs/ITSs.
206*4882a593Smuzhiyun       This table will only be required on certain SBSA platforms (e.g.,
207*4882a593Smuzhiyun       when using GICv3-ITS and an SMMU); on SBSA Level 0 platforms, it
208*4882a593Smuzhiyun       remains optional.
209*4882a593Smuzhiyun
210*4882a593SmuzhiyunIVRS   Signature Reserved (signature == "IVRS")
211*4882a593Smuzhiyun
212*4882a593Smuzhiyun       **I/O Virtualization Reporting Structure**
213*4882a593Smuzhiyun
214*4882a593Smuzhiyun       x86_64 (AMD) only table, will not be supported.
215*4882a593Smuzhiyun
216*4882a593SmuzhiyunLPIT   Signature Reserved (signature == "LPIT")
217*4882a593Smuzhiyun
218*4882a593Smuzhiyun       **Low Power Idle Table**
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun       x86 only table as of ACPI 5.1; starting with ACPI 6.0, processor
221*4882a593Smuzhiyun       descriptions and power states on ARM platforms should use the DSDT
222*4882a593Smuzhiyun       and define processor container devices (_HID ACPI0010, Section 8.4,
223*4882a593Smuzhiyun       and more specifically 8.4.3 and 8.4.4).
224*4882a593Smuzhiyun
225*4882a593SmuzhiyunMADT   Section 5.2.12 (signature == "APIC")
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun       **Multiple APIC Description Table**
228*4882a593Smuzhiyun
229*4882a593Smuzhiyun       Required for arm64.  Only the GIC interrupt controller structures
230*4882a593Smuzhiyun       should be used (types 0xA - 0xF).
231*4882a593Smuzhiyun
232*4882a593SmuzhiyunMCFG   Signature Reserved (signature == "MCFG")
233*4882a593Smuzhiyun
234*4882a593Smuzhiyun       **Memory-mapped ConFiGuration space**
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun       If the platform supports PCI/PCIe, an MCFG table is required.
237*4882a593Smuzhiyun
238*4882a593SmuzhiyunMCHI   Signature Reserved (signature == "MCHI")
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun       **Management Controller Host Interface table**
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun       Optional, not currently supported.
243*4882a593Smuzhiyun
244*4882a593SmuzhiyunMPST   Section 5.2.21 (signature == "MPST")
245*4882a593Smuzhiyun
246*4882a593Smuzhiyun       **Memory Power State Table**
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun       Optional, not currently supported.
249*4882a593Smuzhiyun
250*4882a593SmuzhiyunMSCT   Section 5.2.19 (signature == "MSCT")
251*4882a593Smuzhiyun
252*4882a593Smuzhiyun       **Maximum System Characteristic Table**
253*4882a593Smuzhiyun
254*4882a593Smuzhiyun       Optional, not currently supported.
255*4882a593Smuzhiyun
256*4882a593SmuzhiyunMSDM   Signature Reserved (signature == "MSDM")
257*4882a593Smuzhiyun
258*4882a593Smuzhiyun       **Microsoft Data Management table**
259*4882a593Smuzhiyun
260*4882a593Smuzhiyun       Microsoft only table, will not be supported.
261*4882a593Smuzhiyun
262*4882a593SmuzhiyunNFIT   Section 5.2.25 (signature == "NFIT")
263*4882a593Smuzhiyun
264*4882a593Smuzhiyun       **NVDIMM Firmware Interface Table**
265*4882a593Smuzhiyun
266*4882a593Smuzhiyun       Optional, not currently supported.
267*4882a593Smuzhiyun
268*4882a593SmuzhiyunOEMx   Signature of "OEMx" only
269*4882a593Smuzhiyun
270*4882a593Smuzhiyun       **OEM Specific Tables**
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun       All tables starting with a signature of "OEM" are reserved for OEM
273*4882a593Smuzhiyun       use.  Since these are not meant to be of general use but are limited
274*4882a593Smuzhiyun       to very specific end users, they are not recommended for use and are
275*4882a593Smuzhiyun       not supported by the kernel for arm64.
276*4882a593Smuzhiyun
277*4882a593SmuzhiyunPCCT   Section 14.1 (signature == "PCCT)
278*4882a593Smuzhiyun
279*4882a593Smuzhiyun       **Platform Communications Channel Table**
280*4882a593Smuzhiyun
281*4882a593Smuzhiyun       Recommend for use on arm64; use of PCC is recommended when using CPPC
282*4882a593Smuzhiyun       to control performance and power for platform processors.
283*4882a593Smuzhiyun
284*4882a593SmuzhiyunPMTT   Section 5.2.21.12 (signature == "PMTT")
285*4882a593Smuzhiyun
286*4882a593Smuzhiyun       **Platform Memory Topology Table**
287*4882a593Smuzhiyun
288*4882a593Smuzhiyun       Optional, not currently supported.
289*4882a593Smuzhiyun
290*4882a593SmuzhiyunPSDT   Section 5.2.11.3 (signature == "PSDT")
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun       **Persistent System Description Table**
293*4882a593Smuzhiyun
294*4882a593Smuzhiyun       Obsolete table, will not be supported.
295*4882a593Smuzhiyun
296*4882a593SmuzhiyunRASF   Section 5.2.20 (signature == "RASF")
297*4882a593Smuzhiyun
298*4882a593Smuzhiyun       **RAS Feature table**
299*4882a593Smuzhiyun
300*4882a593Smuzhiyun       Optional, not currently supported.
301*4882a593Smuzhiyun
302*4882a593SmuzhiyunRSDP   Section 5.2.5 (signature == "RSD PTR")
303*4882a593Smuzhiyun
304*4882a593Smuzhiyun       **Root System Description PoinTeR**
305*4882a593Smuzhiyun
306*4882a593Smuzhiyun       Required for arm64.
307*4882a593Smuzhiyun
308*4882a593SmuzhiyunRSDT   Section 5.2.7 (signature == "RSDT")
309*4882a593Smuzhiyun
310*4882a593Smuzhiyun       **Root System Description Table**
311*4882a593Smuzhiyun
312*4882a593Smuzhiyun       Since this table can only provide 32-bit addresses, it is deprecated
313*4882a593Smuzhiyun       on arm64, and will not be used.  If provided, it will be ignored.
314*4882a593Smuzhiyun
315*4882a593SmuzhiyunSBST   Section 5.2.14 (signature == "SBST")
316*4882a593Smuzhiyun
317*4882a593Smuzhiyun       **Smart Battery Subsystem Table**
318*4882a593Smuzhiyun
319*4882a593Smuzhiyun       Optional, not currently supported.
320*4882a593Smuzhiyun
321*4882a593SmuzhiyunSLIC   Signature Reserved (signature == "SLIC")
322*4882a593Smuzhiyun
323*4882a593Smuzhiyun       **Software LIcensing table**
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun       Microsoft only table, will not be supported.
326*4882a593Smuzhiyun
327*4882a593SmuzhiyunSLIT   Section 5.2.17 (signature == "SLIT")
328*4882a593Smuzhiyun
329*4882a593Smuzhiyun       **System Locality distance Information Table**
330*4882a593Smuzhiyun
331*4882a593Smuzhiyun       Optional in general, but required for NUMA systems.
332*4882a593Smuzhiyun
333*4882a593SmuzhiyunSPCR   Signature Reserved (signature == "SPCR")
334*4882a593Smuzhiyun
335*4882a593Smuzhiyun       **Serial Port Console Redirection table**
336*4882a593Smuzhiyun
337*4882a593Smuzhiyun       Required for arm64.
338*4882a593Smuzhiyun
339*4882a593SmuzhiyunSPMI   Signature Reserved (signature == "SPMI")
340*4882a593Smuzhiyun
341*4882a593Smuzhiyun       **Server Platform Management Interface table**
342*4882a593Smuzhiyun
343*4882a593Smuzhiyun       Optional, not currently supported.
344*4882a593Smuzhiyun
345*4882a593SmuzhiyunSRAT   Section 5.2.16 (signature == "SRAT")
346*4882a593Smuzhiyun
347*4882a593Smuzhiyun       **System Resource Affinity Table**
348*4882a593Smuzhiyun
349*4882a593Smuzhiyun       Optional, but if used, only the GICC Affinity structures are read.
350*4882a593Smuzhiyun       To support arm64 NUMA, this table is required.
351*4882a593Smuzhiyun
352*4882a593SmuzhiyunSSDT   Section 5.2.11.2 (signature == "SSDT")
353*4882a593Smuzhiyun
354*4882a593Smuzhiyun       **Secondary System Description Table**
355*4882a593Smuzhiyun
356*4882a593Smuzhiyun       These tables are a continuation of the DSDT; these are recommended
357*4882a593Smuzhiyun       for use with devices that can be added to a running system, but can
358*4882a593Smuzhiyun       also serve the purpose of dividing up device descriptions into more
359*4882a593Smuzhiyun       manageable pieces.
360*4882a593Smuzhiyun
361*4882a593Smuzhiyun       An SSDT can only ADD to the ACPI namespace.  It cannot modify or
362*4882a593Smuzhiyun       replace existing device descriptions already in the namespace.
363*4882a593Smuzhiyun
364*4882a593Smuzhiyun       These tables are optional, however.  ACPI tables should contain only
365*4882a593Smuzhiyun       one DSDT but can contain many SSDTs.
366*4882a593Smuzhiyun
367*4882a593SmuzhiyunSTAO   Signature Reserved (signature == "STAO")
368*4882a593Smuzhiyun
369*4882a593Smuzhiyun       **_STA Override table**
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun       Optional, but only necessary in virtualized environments in order to
372*4882a593Smuzhiyun       hide devices from guest OSs.
373*4882a593Smuzhiyun
374*4882a593SmuzhiyunTCPA   Signature Reserved (signature == "TCPA")
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun       **Trusted Computing Platform Alliance table**
377*4882a593Smuzhiyun
378*4882a593Smuzhiyun       Optional, not currently supported, and may need changes to fully
379*4882a593Smuzhiyun       interoperate with arm64.
380*4882a593Smuzhiyun
381*4882a593SmuzhiyunTPM2   Signature Reserved (signature == "TPM2")
382*4882a593Smuzhiyun
383*4882a593Smuzhiyun       **Trusted Platform Module 2 table**
384*4882a593Smuzhiyun
385*4882a593Smuzhiyun       Optional, not currently supported, and may need changes to fully
386*4882a593Smuzhiyun       interoperate with arm64.
387*4882a593Smuzhiyun
388*4882a593SmuzhiyunUEFI   Signature Reserved (signature == "UEFI")
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun       **UEFI ACPI data table**
391*4882a593Smuzhiyun
392*4882a593Smuzhiyun       Optional, not currently supported.  No known use case for arm64,
393*4882a593Smuzhiyun       at present.
394*4882a593Smuzhiyun
395*4882a593SmuzhiyunWAET   Signature Reserved (signature == "WAET")
396*4882a593Smuzhiyun
397*4882a593Smuzhiyun       **Windows ACPI Emulated devices Table**
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun       Microsoft only table, will not be supported.
400*4882a593Smuzhiyun
401*4882a593SmuzhiyunWDAT   Signature Reserved (signature == "WDAT")
402*4882a593Smuzhiyun
403*4882a593Smuzhiyun       **Watch Dog Action Table**
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun       Microsoft only table, will not be supported.
406*4882a593Smuzhiyun
407*4882a593SmuzhiyunWDRT   Signature Reserved (signature == "WDRT")
408*4882a593Smuzhiyun
409*4882a593Smuzhiyun       **Watch Dog Resource Table**
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun       Microsoft only table, will not be supported.
412*4882a593Smuzhiyun
413*4882a593SmuzhiyunWPBT   Signature Reserved (signature == "WPBT")
414*4882a593Smuzhiyun
415*4882a593Smuzhiyun       **Windows Platform Binary Table**
416*4882a593Smuzhiyun
417*4882a593Smuzhiyun       Microsoft only table, will not be supported.
418*4882a593Smuzhiyun
419*4882a593SmuzhiyunXENV   Signature Reserved (signature == "XENV")
420*4882a593Smuzhiyun
421*4882a593Smuzhiyun       **Xen project table**
422*4882a593Smuzhiyun
423*4882a593Smuzhiyun       Optional, used only by Xen at present.
424*4882a593Smuzhiyun
425*4882a593SmuzhiyunXSDT   Section 5.2.8 (signature == "XSDT")
426*4882a593Smuzhiyun
427*4882a593Smuzhiyun       **eXtended System Description Table**
428*4882a593Smuzhiyun
429*4882a593Smuzhiyun       Required for arm64.
430*4882a593Smuzhiyun====== ========================================================================
431*4882a593Smuzhiyun
432*4882a593SmuzhiyunACPI Objects
433*4882a593Smuzhiyun------------
434*4882a593SmuzhiyunThe expectations on individual ACPI objects that are likely to be used are
435*4882a593Smuzhiyunshown in the list that follows; any object not explicitly mentioned below
436*4882a593Smuzhiyunshould be used as needed for a particular platform or particular subsystem,
437*4882a593Smuzhiyunsuch as power management or PCI.
438*4882a593Smuzhiyun
439*4882a593Smuzhiyun===== ================ ========================================================
440*4882a593SmuzhiyunName   Section         Usage for ARMv8 Linux
441*4882a593Smuzhiyun===== ================ ========================================================
442*4882a593Smuzhiyun_CCA   6.2.17          This method must be defined for all bus masters
443*4882a593Smuzhiyun                       on arm64 - there are no assumptions made about
444*4882a593Smuzhiyun                       whether such devices are cache coherent or not.
445*4882a593Smuzhiyun                       The _CCA value is inherited by all descendants of
446*4882a593Smuzhiyun                       these devices so it does not need to be repeated.
447*4882a593Smuzhiyun                       Without _CCA on arm64, the kernel does not know what
448*4882a593Smuzhiyun                       to do about setting up DMA for the device.
449*4882a593Smuzhiyun
450*4882a593Smuzhiyun                       NB: this method provides default cache coherency
451*4882a593Smuzhiyun                       attributes; the presence of an SMMU can be used to
452*4882a593Smuzhiyun                       modify that, however.  For example, a master could
453*4882a593Smuzhiyun                       default to non-coherent, but be made coherent with
454*4882a593Smuzhiyun                       the appropriate SMMU configuration (see Table 17 of
455*4882a593Smuzhiyun                       the IORT specification, ARM Document DEN 0049B).
456*4882a593Smuzhiyun
457*4882a593Smuzhiyun_CID   6.1.2           Use as needed, see also _HID.
458*4882a593Smuzhiyun
459*4882a593Smuzhiyun_CLS   6.1.3           Use as needed, see also _HID.
460*4882a593Smuzhiyun
461*4882a593Smuzhiyun_CPC   8.4.7.1         Use as needed, power management specific.  CPPC is
462*4882a593Smuzhiyun                       recommended on arm64.
463*4882a593Smuzhiyun
464*4882a593Smuzhiyun_CRS   6.2.2           Required on arm64.
465*4882a593Smuzhiyun
466*4882a593Smuzhiyun_CSD   8.4.2.2         Use as needed, used only in conjunction with _CST.
467*4882a593Smuzhiyun
468*4882a593Smuzhiyun_CST   8.4.2.1         Low power idle states (8.4.4) are recommended instead
469*4882a593Smuzhiyun                       of C-states.
470*4882a593Smuzhiyun
471*4882a593Smuzhiyun_DDN   6.1.4           This field can be used for a device name.  However,
472*4882a593Smuzhiyun                       it is meant for DOS device names (e.g., COM1), so be
473*4882a593Smuzhiyun                       careful of its use across OSes.
474*4882a593Smuzhiyun
475*4882a593Smuzhiyun_DSD   6.2.5           To be used with caution.  If this object is used, try
476*4882a593Smuzhiyun                       to use it within the constraints already defined by the
477*4882a593Smuzhiyun                       Device Properties UUID.  Only in rare circumstances
478*4882a593Smuzhiyun                       should it be necessary to create a new _DSD UUID.
479*4882a593Smuzhiyun
480*4882a593Smuzhiyun                       In either case, submit the _DSD definition along with
481*4882a593Smuzhiyun                       any driver patches for discussion, especially when
482*4882a593Smuzhiyun                       device properties are used.  A driver will not be
483*4882a593Smuzhiyun                       considered complete without a corresponding _DSD
484*4882a593Smuzhiyun                       description.  Once approved by kernel maintainers,
485*4882a593Smuzhiyun                       the UUID or device properties must then be registered
486*4882a593Smuzhiyun                       with the UEFI Forum; this may cause some iteration as
487*4882a593Smuzhiyun                       more than one OS will be registering entries.
488*4882a593Smuzhiyun
489*4882a593Smuzhiyun_DSM   9.1.1           Do not use this method.  It is not standardized, the
490*4882a593Smuzhiyun                       return values are not well documented, and it is
491*4882a593Smuzhiyun                       currently a frequent source of error.
492*4882a593Smuzhiyun
493*4882a593Smuzhiyun\_GL   5.7.1           This object is not to be used in hardware reduced
494*4882a593Smuzhiyun                       mode, and therefore should not be used on arm64.
495*4882a593Smuzhiyun
496*4882a593Smuzhiyun_GLK   6.5.7           This object requires a global lock be defined; there
497*4882a593Smuzhiyun                       is no global lock on arm64 since it runs in hardware
498*4882a593Smuzhiyun                       reduced mode.  Hence, do not use this object on arm64.
499*4882a593Smuzhiyun
500*4882a593Smuzhiyun\_GPE  5.3.1           This namespace is for x86 use only.  Do not use it
501*4882a593Smuzhiyun                       on arm64.
502*4882a593Smuzhiyun
503*4882a593Smuzhiyun_HID   6.1.5           This is the primary object to use in device probing,
504*4882a593Smuzhiyun		       though _CID and _CLS may also be used.
505*4882a593Smuzhiyun
506*4882a593Smuzhiyun_INI   6.5.1           Not required, but can be useful in setting up devices
507*4882a593Smuzhiyun                       when UEFI leaves them in a state that may not be what
508*4882a593Smuzhiyun                       the driver expects before it starts probing.
509*4882a593Smuzhiyun
510*4882a593Smuzhiyun_LPI   8.4.4.3         Recommended for use with processor definitions (_HID
511*4882a593Smuzhiyun		       ACPI0010) on arm64.  See also _RDI.
512*4882a593Smuzhiyun
513*4882a593Smuzhiyun_MLS   6.1.7           Highly recommended for use in internationalization.
514*4882a593Smuzhiyun
515*4882a593Smuzhiyun_OFF   7.2.2           It is recommended to define this method for any device
516*4882a593Smuzhiyun                       that can be turned on or off.
517*4882a593Smuzhiyun
518*4882a593Smuzhiyun_ON    7.2.3           It is recommended to define this method for any device
519*4882a593Smuzhiyun                       that can be turned on or off.
520*4882a593Smuzhiyun
521*4882a593Smuzhiyun\_OS   5.7.3           This method will return "Linux" by default (this is
522*4882a593Smuzhiyun                       the value of the macro ACPI_OS_NAME on Linux).  The
523*4882a593Smuzhiyun                       command line parameter acpi_os=<string> can be used
524*4882a593Smuzhiyun                       to set it to some other value.
525*4882a593Smuzhiyun
526*4882a593Smuzhiyun_OSC   6.2.11          This method can be a global method in ACPI (i.e.,
527*4882a593Smuzhiyun                       \_SB._OSC), or it may be associated with a specific
528*4882a593Smuzhiyun                       device (e.g., \_SB.DEV0._OSC), or both.  When used
529*4882a593Smuzhiyun                       as a global method, only capabilities published in
530*4882a593Smuzhiyun                       the ACPI specification are allowed.  When used as
531*4882a593Smuzhiyun                       a device-specific method, the process described for
532*4882a593Smuzhiyun                       using _DSD MUST be used to create an _OSC definition;
533*4882a593Smuzhiyun                       out-of-process use of _OSC is not allowed.  That is,
534*4882a593Smuzhiyun                       submit the device-specific _OSC usage description as
535*4882a593Smuzhiyun                       part of the kernel driver submission, get it approved
536*4882a593Smuzhiyun                       by the kernel community, then register it with the
537*4882a593Smuzhiyun                       UEFI Forum.
538*4882a593Smuzhiyun
539*4882a593Smuzhiyun\_OSI  5.7.2           Deprecated on ARM64.  As far as ACPI firmware is
540*4882a593Smuzhiyun		       concerned, _OSI is not to be used to determine what
541*4882a593Smuzhiyun		       sort of system is being used or what functionality
542*4882a593Smuzhiyun		       is provided.  The _OSC method is to be used instead.
543*4882a593Smuzhiyun
544*4882a593Smuzhiyun_PDC   8.4.1           Deprecated, do not use on arm64.
545*4882a593Smuzhiyun
546*4882a593Smuzhiyun\_PIC  5.8.1           The method should not be used.  On arm64, the only
547*4882a593Smuzhiyun                       interrupt model available is GIC.
548*4882a593Smuzhiyun
549*4882a593Smuzhiyun\_PR   5.3.1           This namespace is for x86 use only on legacy systems.
550*4882a593Smuzhiyun                       Do not use it on arm64.
551*4882a593Smuzhiyun
552*4882a593Smuzhiyun_PRT   6.2.13          Required as part of the definition of all PCI root
553*4882a593Smuzhiyun                       devices.
554*4882a593Smuzhiyun
555*4882a593Smuzhiyun_PRx   7.3.8-11        Use as needed; power management specific.  If _PR0 is
556*4882a593Smuzhiyun                       defined, _PR3 must also be defined.
557*4882a593Smuzhiyun
558*4882a593Smuzhiyun_PSx   7.3.2-5         Use as needed; power management specific.  If _PS0 is
559*4882a593Smuzhiyun                       defined, _PS3 must also be defined.  If clocks or
560*4882a593Smuzhiyun                       regulators need adjusting to be consistent with power
561*4882a593Smuzhiyun                       usage, change them in these methods.
562*4882a593Smuzhiyun
563*4882a593Smuzhiyun_RDI   8.4.4.4         Recommended for use with processor definitions (_HID
564*4882a593Smuzhiyun		       ACPI0010) on arm64.  This should only be used in
565*4882a593Smuzhiyun		       conjunction with _LPI.
566*4882a593Smuzhiyun
567*4882a593Smuzhiyun\_REV  5.7.4           Always returns the latest version of ACPI supported.
568*4882a593Smuzhiyun
569*4882a593Smuzhiyun\_SB   5.3.1           Required on arm64; all devices must be defined in this
570*4882a593Smuzhiyun                       namespace.
571*4882a593Smuzhiyun
572*4882a593Smuzhiyun_SLI   6.2.15          Use is recommended when SLIT table is in use.
573*4882a593Smuzhiyun
574*4882a593Smuzhiyun_STA   6.3.7,          It is recommended to define this method for any device
575*4882a593Smuzhiyun       7.2.4           that can be turned on or off.  See also the STAO table
576*4882a593Smuzhiyun                       that provides overrides to hide devices in virtualized
577*4882a593Smuzhiyun                       environments.
578*4882a593Smuzhiyun
579*4882a593Smuzhiyun_SRS   6.2.16          Use as needed; see also _PRS.
580*4882a593Smuzhiyun
581*4882a593Smuzhiyun_STR   6.1.10          Recommended for conveying device names to end users;
582*4882a593Smuzhiyun                       this is preferred over using _DDN.
583*4882a593Smuzhiyun
584*4882a593Smuzhiyun_SUB   6.1.9           Use as needed; _HID or _CID are preferred.
585*4882a593Smuzhiyun
586*4882a593Smuzhiyun_SUN   6.1.11          Use as needed, but recommended.
587*4882a593Smuzhiyun
588*4882a593Smuzhiyun_SWS   7.4.3           Use as needed; power management specific; this may
589*4882a593Smuzhiyun                       require specification changes for use on arm64.
590*4882a593Smuzhiyun
591*4882a593Smuzhiyun_UID   6.1.12          Recommended for distinguishing devices of the same
592*4882a593Smuzhiyun                       class; define it if at all possible.
593*4882a593Smuzhiyun===== ================ ========================================================
594*4882a593Smuzhiyun
595*4882a593Smuzhiyun
596*4882a593Smuzhiyun
597*4882a593Smuzhiyun
598*4882a593SmuzhiyunACPI Event Model
599*4882a593Smuzhiyun----------------
600*4882a593SmuzhiyunDo not use GPE block devices; these are not supported in the hardware reduced
601*4882a593Smuzhiyunprofile used by arm64.  Since there are no GPE blocks defined for use on ARM
602*4882a593Smuzhiyunplatforms, ACPI events must be signaled differently.
603*4882a593Smuzhiyun
604*4882a593SmuzhiyunThere are two options: GPIO-signaled interrupts (Section 5.6.5), and
605*4882a593Smuzhiyuninterrupt-signaled events (Section 5.6.9).  Interrupt-signaled events are a
606*4882a593Smuzhiyunnew feature in the ACPI 6.1 specification.  Either - or both - can be used
607*4882a593Smuzhiyunon a given platform, and which to use may be dependent of limitations in any
608*4882a593Smuzhiyungiven SoC.  If possible, interrupt-signaled events are recommended.
609*4882a593Smuzhiyun
610*4882a593Smuzhiyun
611*4882a593SmuzhiyunACPI Processor Control
612*4882a593Smuzhiyun----------------------
613*4882a593SmuzhiyunSection 8 of the ACPI specification changed significantly in version 6.0.
614*4882a593SmuzhiyunProcessors should now be defined as Device objects with _HID ACPI0007; do
615*4882a593Smuzhiyunnot use the deprecated Processor statement in ASL.  All multiprocessor systems
616*4882a593Smuzhiyunshould also define a hierarchy of processors, done with Processor Container
617*4882a593SmuzhiyunDevices (see Section 8.4.3.1, _HID ACPI0010); do not use processor aggregator
618*4882a593Smuzhiyundevices (Section 8.5) to describe processor topology.  Section 8.4 of the
619*4882a593Smuzhiyunspecification describes the semantics of these object definitions and how
620*4882a593Smuzhiyunthey interrelate.
621*4882a593Smuzhiyun
622*4882a593SmuzhiyunMost importantly, the processor hierarchy defined also defines the low power
623*4882a593Smuzhiyunidle states that are available to the platform, along with the rules for
624*4882a593Smuzhiyundetermining which processors can be turned on or off and the circumstances
625*4882a593Smuzhiyunthat control that.  Without this information, the processors will run in
626*4882a593Smuzhiyunwhatever power state they were left in by UEFI.
627*4882a593Smuzhiyun
628*4882a593SmuzhiyunNote too, that the processor Device objects defined and the entries in the
629*4882a593SmuzhiyunMADT for GICs are expected to be in synchronization.  The _UID of the Device
630*4882a593Smuzhiyunobject must correspond to processor IDs used in the MADT.
631*4882a593Smuzhiyun
632*4882a593SmuzhiyunIt is recommended that CPPC (8.4.5) be used as the primary model for processor
633*4882a593Smuzhiyunperformance control on arm64.  C-states and P-states may become available at
634*4882a593Smuzhiyunsome point in the future, but most current design work appears to favor CPPC.
635*4882a593Smuzhiyun
636*4882a593SmuzhiyunFurther, it is essential that the ARMv8 SoC provide a fully functional
637*4882a593Smuzhiyunimplementation of PSCI; this will be the only mechanism supported by ACPI
638*4882a593Smuzhiyunto control CPU power state.  Booting of secondary CPUs using the ACPI
639*4882a593Smuzhiyunparking protocol is possible, but discouraged, since only PSCI is supported
640*4882a593Smuzhiyunfor ARM servers.
641*4882a593Smuzhiyun
642*4882a593Smuzhiyun
643*4882a593SmuzhiyunACPI System Address Map Interfaces
644*4882a593Smuzhiyun----------------------------------
645*4882a593SmuzhiyunIn Section 15 of the ACPI specification, several methods are mentioned as
646*4882a593Smuzhiyunpossible mechanisms for conveying memory resource information to the kernel.
647*4882a593SmuzhiyunFor arm64, we will only support UEFI for booting with ACPI, hence the UEFI
648*4882a593SmuzhiyunGetMemoryMap() boot service is the only mechanism that will be used.
649*4882a593Smuzhiyun
650*4882a593Smuzhiyun
651*4882a593SmuzhiyunACPI Platform Error Interfaces (APEI)
652*4882a593Smuzhiyun-------------------------------------
653*4882a593SmuzhiyunThe APEI tables supported are described above.
654*4882a593Smuzhiyun
655*4882a593SmuzhiyunAPEI requires the equivalent of an SCI and an NMI on ARMv8.  The SCI is used
656*4882a593Smuzhiyunto notify the OSPM of errors that have occurred but can be corrected and the
657*4882a593Smuzhiyunsystem can continue correct operation, even if possibly degraded.  The NMI is
658*4882a593Smuzhiyunused to indicate fatal errors that cannot be corrected, and require immediate
659*4882a593Smuzhiyunattention.
660*4882a593Smuzhiyun
661*4882a593SmuzhiyunSince there is no direct equivalent of the x86 SCI or NMI, arm64 handles
662*4882a593Smuzhiyunthese slightly differently.  The SCI is handled as a high priority interrupt;
663*4882a593Smuzhiyungiven that these are corrected (or correctable) errors being reported, this
664*4882a593Smuzhiyunis sufficient.  The NMI is emulated as the highest priority interrupt
665*4882a593Smuzhiyunpossible.  This implies some caution must be used since there could be
666*4882a593Smuzhiyuninterrupts at higher privilege levels or even interrupts at the same priority
667*4882a593Smuzhiyunas the emulated NMI.  In Linux, this should not be the case but one should
668*4882a593Smuzhiyunbe aware it could happen.
669*4882a593Smuzhiyun
670*4882a593Smuzhiyun
671*4882a593SmuzhiyunACPI Objects Not Supported on ARM64
672*4882a593Smuzhiyun-----------------------------------
673*4882a593SmuzhiyunWhile this may change in the future, there are several classes of objects
674*4882a593Smuzhiyunthat can be defined, but are not currently of general interest to ARM servers.
675*4882a593SmuzhiyunSome of these objects have x86 equivalents, and may actually make sense in ARM
676*4882a593Smuzhiyunservers.  However, there is either no hardware available at present, or there
677*4882a593Smuzhiyunmay not even be a non-ARM implementation yet.  Hence, they are not currently
678*4882a593Smuzhiyunsupported.
679*4882a593Smuzhiyun
680*4882a593SmuzhiyunThe following classes of objects are not supported:
681*4882a593Smuzhiyun
682*4882a593Smuzhiyun       -  Section 9.2: ambient light sensor devices
683*4882a593Smuzhiyun
684*4882a593Smuzhiyun       -  Section 9.3: battery devices
685*4882a593Smuzhiyun
686*4882a593Smuzhiyun       -  Section 9.4: lids (e.g., laptop lids)
687*4882a593Smuzhiyun
688*4882a593Smuzhiyun       -  Section 9.8.2: IDE controllers
689*4882a593Smuzhiyun
690*4882a593Smuzhiyun       -  Section 9.9: floppy controllers
691*4882a593Smuzhiyun
692*4882a593Smuzhiyun       -  Section 9.10: GPE block devices
693*4882a593Smuzhiyun
694*4882a593Smuzhiyun       -  Section 9.15: PC/AT RTC/CMOS devices
695*4882a593Smuzhiyun
696*4882a593Smuzhiyun       -  Section 9.16: user presence detection devices
697*4882a593Smuzhiyun
698*4882a593Smuzhiyun       -  Section 9.17: I/O APIC devices; all GICs must be enumerable via MADT
699*4882a593Smuzhiyun
700*4882a593Smuzhiyun       -  Section 9.18: time and alarm devices (see 9.15)
701*4882a593Smuzhiyun
702*4882a593Smuzhiyun       -  Section 10: power source and power meter devices
703*4882a593Smuzhiyun
704*4882a593Smuzhiyun       -  Section 11: thermal management
705*4882a593Smuzhiyun
706*4882a593Smuzhiyun       -  Section 12: embedded controllers interface
707*4882a593Smuzhiyun
708*4882a593Smuzhiyun       -  Section 13: SMBus interfaces
709*4882a593Smuzhiyun
710*4882a593Smuzhiyun
711*4882a593SmuzhiyunThis also means that there is no support for the following objects:
712*4882a593Smuzhiyun
713*4882a593Smuzhiyun====   =========================== ====   ==========
714*4882a593SmuzhiyunName   Section                     Name   Section
715*4882a593Smuzhiyun====   =========================== ====   ==========
716*4882a593Smuzhiyun_ALC   9.3.4                       _FDM   9.10.3
717*4882a593Smuzhiyun_ALI   9.3.2                       _FIX   6.2.7
718*4882a593Smuzhiyun_ALP   9.3.6                       _GAI   10.4.5
719*4882a593Smuzhiyun_ALR   9.3.5                       _GHL   10.4.7
720*4882a593Smuzhiyun_ALT   9.3.3                       _GTM   9.9.2.1.1
721*4882a593Smuzhiyun_BCT   10.2.2.10                   _LID   9.5.1
722*4882a593Smuzhiyun_BDN   6.5.3                       _PAI   10.4.4
723*4882a593Smuzhiyun_BIF   10.2.2.1                    _PCL   10.3.2
724*4882a593Smuzhiyun_BIX   10.2.2.1                    _PIF   10.3.3
725*4882a593Smuzhiyun_BLT   9.2.3                       _PMC   10.4.1
726*4882a593Smuzhiyun_BMA   10.2.2.4                    _PMD   10.4.8
727*4882a593Smuzhiyun_BMC   10.2.2.12                   _PMM   10.4.3
728*4882a593Smuzhiyun_BMD   10.2.2.11                   _PRL   10.3.4
729*4882a593Smuzhiyun_BMS   10.2.2.5                    _PSR   10.3.1
730*4882a593Smuzhiyun_BST   10.2.2.6                    _PTP   10.4.2
731*4882a593Smuzhiyun_BTH   10.2.2.7                    _SBS   10.1.3
732*4882a593Smuzhiyun_BTM   10.2.2.9                    _SHL   10.4.6
733*4882a593Smuzhiyun_BTP   10.2.2.8                    _STM   9.9.2.1.1
734*4882a593Smuzhiyun_DCK   6.5.2                       _UPD   9.16.1
735*4882a593Smuzhiyun_EC    12.12                       _UPP   9.16.2
736*4882a593Smuzhiyun_FDE   9.10.1                      _WPC   10.5.2
737*4882a593Smuzhiyun_FDI   9.10.2                      _WPP   10.5.3
738*4882a593Smuzhiyun====   =========================== ====   ==========
739