Lines Matching full:acpi
2 ACPI on Arm systems
5 ACPI can be used for Armv8 and Armv9 systems designed to follow
12 The Arm kernel implements the reduced hardware model of ACPI version
16 by the specification can be found via http://www.uefi.org/acpi.
19 or cannot be described using the mechanisms defined in the required ACPI
20 specifications, then ACPI may not be a good fit for the hardware.
25 ACPI and Linux only, on an Arm system -- that is, what Linux expects of
26 ACPI and what ACPI can expect of Linux.
29 Why ACPI on Arm?
31 Before examining the details of the interface between ACPI and Linux, it is
32 useful to understand why ACPI is being used. Several technologies already
35 reasoning behind ACPI on Arm systems. Actually, we snitch a good portion
38 The short form of the rationale for ACPI on Arm is:
40 - ACPI’s byte code (AML) allows the platform to encode hardware behavior,
45 - ACPI’s OSPM defines a power management model that constrains what the
49 - In the enterprise server environment, ACPI has established bindings (such
57 both DT and ACPI if they want to support multiple operating systems. And,
61 - The new ACPI governance process works well and Linux is now at the same
63 longer any reason to feel that ACPI only belongs to Windows or that
65 ACPI governance into the UEFI forum has significantly opened up the
67 changes being made to ACPI are being driven by Linux.
69 Key to the use of ACPI is the support model. For servers in general, the
72 order to allow for orderly change over time. ACPI frees the OS from needing
78 ACPI is also important because hardware and OS vendors have already worked
84 really just duplicates something that already works. ACPI already does what
92 One of the primary motivations for ACPI is standardization, and using that
94 software and hardware are often used for long periods. ACPI allows the
100 When a Linux driver or subsystem is first implemented using ACPI, it by
101 definition ends up requiring a specific version of the ACPI specification
102 -- its baseline. ACPI firmware must continue to work, even though it may
104 for that baseline version of ACPI. There may be a need for additional drivers,
106 older kernel versions. Further, ACPI firmware must also work with the most
112 ACPI support in drivers and subsystems for Arm should never be mutually
118 Regardless of whether DT or ACPI is used, the kernel must always be capable
123 Booting using ACPI tables
125 The only defined method for passing ACPI tables to the kernel on Arm
127 means that ACPI is only supported on platforms that boot via UEFI.
129 When an Arm system boots, it can either have DT information, ACPI tables,
132 present, the kernel will try to use ACPI tables, but only if they are present.
133 If neither is available, the kernel will not boot. If acpi=force is used
134 on the command line, the kernel will attempt to use ACPI tables first, but
135 fall back to DT if there are no ACPI tables present. The basic idea is that
138 Processing of ACPI tables may be disabled by passing acpi=off on the kernel
141 In order for the kernel to load and use ACPI tables, the UEFI implementation
143 the ACPI signature "RSD PTR "). If this pointer is incorrect and acpi=force
144 is used, the kernel will disable ACPI and try to use DT to boot instead; the
145 kernel has, in effect, determined that ACPI tables are not present at that
149 the kernel by the ACPI core, using the address provided by UEFI.
151 The ACPI core will then locate and map in all other ACPI tables provided by
154 ACPI tables provided by the system firmware; the ACPI core will then traverse
157 The ACPI core will ignore any provided RSDT (Root System Description Table).
161 Further, the ACPI core will only use the 64-bit address fields in the FADT
162 (Fixed ACPI Description Table). Any 32-bit address fields in the FADT will
165 Hardware reduced mode (see Section 4.1 of the ACPI 6.1 specification) will
166 be enforced by the ACPI core on arm64. Doing so allows the ACPI core to
171 For the ACPI core to operate properly, and in turn provide the information
173 tables (all section numbers refer to the ACPI 6.5 specification):
179 - FADT (Fixed ACPI Description Table), section 5.2.9
216 - If the ACPI Platform Error Interfaces are required, the following
233 - RAS2 (ACPI RAS2 feature table, section 5.2.21)
266 ACPI Detection
273 In non-driver code, if the presence of ACPI needs to be detected at
280 Device descriptions in ACPI should use standard recognized ACPI interfaces.
283 ACPI can be useful -- the driver takes into account that it may have less
289 and the drivers need to take them into account. In ACPI, the assumption
292 value, this can be done in an ACPI method; all the driver needs to do is
295 by changing what the ACPI method does, and not the driver.
298 above are known as "bindings"; in ACPI, these are known as "Device Properties"
301 ACPI tables are described with a formal language called ASL, the ACPI
305 that looks like this: Name(KEY0, "value0"). An ACPI device driver would
307 However, using Name() this way has multiple problems: (1) ACPI limits
316 The _DSM object (ACPI Section 9.14.1) could also be used for conveying
326 object is described in the ACPI specification section 6.2.5, but this only
334 that they may be used across all operating systems supporting ACPI.
341 to simply move all DT bindings into ACPI device properties, we can learn from
346 both DT bindings and ACPI device properties for device drivers have review
349 submitted at the same time. A driver that supports ACPI and uses device
364 whether DT or ACPI is being used. This API should be used [5]; it can
366 discourage divergence between DT bindings and ACPI device properties.
374 With ACPI, the kernel clock and regulator framework is not expected to be used
378 Power Resource Objects (ACPI section 7.1). The ACPI core will then handle
380 get that to work, ACPI assumes each device has defined D-states and that these
381 can be controlled through the optional ACPI methods _PS0, _PS1, _PS2, and _PS3;
382 in ACPI, _PS0 is the method to invoke to turn a device full on, and _PS3 is for
396 The kernel ACPI code will also assume that the _PSx methods follow the normal
397 ACPI rules for such methods:
413 and avoid having to read special non-standard values from ACPI tables. Further,
420 ACPI makes the assumption that clocks are initialized by the firmware --
428 process to be abstracted out into some ACPI method that can be invoked
429 (please see the ACPI specification for further recommendations on standard
431 CPPC provides a much richer interface than ACPI methods. If the clocks
435 they could do so by providing ACPI methods that could be invoked by Linux
438 standardized in the ACPI specification, and using them could tie a kernel
445 DO NOT remove any DT handling when adding ACPI support for a driver. The
452 allow most divergence between ACPI and DT functionality to be kept local to
464 /* ACPI specific functionality */
487 ACPI::
499 MODULE_DEVICE_TABLE(acpi, virtio_mmio_acpi_match);
504 The ACPI specification changes regularly. During the year 2014, for instance,
507 presented and discussed in the ASWG (ACPI Specification Working Group) which
508 is a part of the UEFI Forum. The current version of the ACPI specification
514 It is the intent of the Arm ACPI kernel code to follow the ACPI specification
517 vendors that provide bad ACPI tables or violate the standards in some way.
519 be avoided if possible. If there are features missing from ACPI that preclude
533 an ACPI method invokes the _OS method. On Arm
540 ACPI Objects
542 Detailed expectations for ACPI tables and object are listed in the file
575 - Grant Likely <[email protected]>, for the "Why ACPI on ARM?" section