Skip to content

Commit e663107

Browse files
committed
Merge tag 'acpi-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI updates from Rafael Wysocki: "The new feaures here are the support for ACPI overlays (allowing ACPI tables to be loaded at any time from EFI variables or via configfs) and the LPI (Low-Power Idle) support. Also notable is the ACPI-based NUMA support for ARM64. Apart from that we have two new drivers, for the DPTF (Dynamic Power and Thermal Framework) power participant device and for the Intel Broxton WhiskeyCove PMIC, some more PMIC-related changes, support for the Boot Error Record Table (BERT) in APEI and support for platform-initiated graceful shutdown. Plus two new pieces of documentation and usual assorted fixes and cleanups in quite a few places. Specifics: - Support for ACPI SSDT overlays allowing Secondary System Description Tables (SSDTs) to be loaded at any time from EFI variables or via configfs (Octavian Purdila, Mika Westerberg). - Support for the ACPI LPI (Low-Power Idle) feature introduced in ACPI 6.0 and allowing processor idle states to be represented in ACPI tables in a hierarchical way (with the help of Processor Container objects) and support for ACPI idle states management on ARM64, based on LPI (Sudeep Holla). - General improvements of ACPI support for NUMA and ARM64 support for ACPI-based NUMA (Hanjun Guo, David Daney, Robert Richter). - General improvements of the ACPI table upgrade mechanism and ARM64 support for that feature (Aleksey Makarov, Jon Masters). - Support for the Boot Error Record Table (BERT) in APEI and improvements of kernel messages printed by the error injection code (Huang Ying, Borislav Petkov). - New driver for the Intel Broxton WhiskeyCove PMIC operation region and support for the REGS operation region on Broxton, PMIC code cleanups (Bin Gao, Felipe Balbi, Paul Gortmaker). - New driver for the power participant device which is part of the Dynamic Power and Thermal Framework (DPTF) and DPTF-related code reorganization (Srinivas Pandruvada). - Support for the platform-initiated graceful shutdown feature introduced in ACPI 6.1 (Prashanth Prakash). - ACPI button driver update related to lid input events generated automatically on initialization and system resume that have been problematic for some time (Lv Zheng). - ACPI EC driver cleanups (Lv Zheng). - Documentation of the ACPICA release automation process and the in-kernel ACPI AML debugger (Lv Zheng). - New blacklist entry and two fixes for the ACPI backlight driver (Alex Hung, Arvind Yadav, Ralf Gerbig). - Cleanups of the ACPI pci_slot driver (Joe Perches, Paul Gortmaker). - ACPI CPPC code changes to make it more robust against possible defects in ACPI tables and new symbol definitions for PCC (Hoan Tran). - System reboot code modification to execute the ACPI _PTS (Prepare To Sleep) method in addition to _TTS (Ocean He). - ACPICA-related change to carry out lock ordering checks in ACPICA if ACPICA debug is enabled in the kernel (Lv Zheng). - Assorted minor fixes and cleanups (Andy Shevchenko, Baoquan He, Bhaktipriya Shridhar, Paul Gortmaker, Rafael Wysocki)" * tag 'acpi-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (71 commits) ACPI: enable ACPI_PROCESSOR_IDLE on ARM64 arm64: add support for ACPI Low Power Idle(LPI) drivers: firmware: psci: initialise idle states using ACPI LPI cpuidle: introduce CPU_PM_CPU_IDLE_ENTER macro for ARM{32, 64} arm64: cpuidle: drop __init section marker to arm_cpuidle_init ACPI / processor_idle: Add support for Low Power Idle(LPI) states ACPI / processor_idle: introduce ACPI_PROCESSOR_CSTATE ACPI / DPTF: move int340x_thermal.c to the DPTF folder ACPI / DPTF: Add DPTF power participant driver ACPI / lpat: make it explicitly non-modular ACPI / dock: make dock explicitly non-modular ACPI / PCI: make pci_slot explicitly non-modular ACPI / PMIC: remove modular references from non-modular code ACPICA: Linux: Enable ACPI_MUTEX_DEBUG for Linux kernel ACPI: Rename configfs.c to acpi_configfs.c to prevent link error ACPI / debugger: Add AML debugger documentation ACPI: Add documentation describing ACPICA release automation ACPI: add support for loading SSDTs via configfs ACPI: add support for configfs efi / ACPI: load SSTDs from EFI variables ...
2 parents 6453dbd + 54d0b14 commit e663107

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+3454
-607
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
What: /config/acpi
2+
Date: July 2016
3+
KernelVersion: 4.8
4+
Contact: linux-acpi@vger.kernel.org
5+
Description:
6+
This represents the ACPI subsystem entry point directory. It
7+
contains sub-groups corresponding to ACPI configurable options.
8+
9+
What: /config/acpi/table
10+
Date: July 2016
11+
KernelVersion: 4.8
12+
Description:
13+
14+
This group contains the configuration for user defined ACPI
15+
tables. The attributes of a user define table are:
16+
17+
aml - a binary attribute that the user can use to
18+
fill in the ACPI aml definitions. Once the aml
19+
data is written to this file and the file is
20+
closed the table will be loaded and ACPI devices
21+
will be enumerated. To check if the operation is
22+
successful the user must check the error code
23+
for close(). If the operation is successful,
24+
subsequent writes to this attribute will fail.
25+
26+
The rest of the attributes are read-only and are valid only
27+
after the table has been loaded by filling the aml entry:
28+
29+
signature - ASCII table signature
30+
length - length of table in bytes, including the header
31+
revision - ACPI Specification minor version number
32+
oem_id - ASCII OEM identification
33+
oem_table_id - ASCII OEM table identification
34+
oem_revision - OEM revision number
35+
asl_compiler_id - ASCII ASL compiler vendor ID
36+
asl_compiler_revision - ASL compiler version

Documentation/acpi/aml-debugger.txt

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
The AML Debugger
2+
3+
Copyright (C) 2016, Intel Corporation
4+
Author: Lv Zheng <lv.zheng@intel.com>
5+
6+
7+
This document describes the usage of the AML debugger embedded in the Linux
8+
kernel.
9+
10+
1. Build the debugger
11+
12+
The following kernel configuration items are required to enable the AML
13+
debugger interface from the Linux kernel:
14+
15+
CONFIG_ACPI_DEBUGGER=y
16+
CONFIG_ACPI_DEBUGGER_USER=m
17+
18+
The userspace utlities can be built from the kernel source tree using
19+
the following commands:
20+
21+
$ cd tools
22+
$ make acpi
23+
24+
The resultant userspace tool binary is then located at:
25+
26+
tools/acpi/power/acpi/acpidbg/acpidbg
27+
28+
It can be installed to system directories by running "make install" (as a
29+
sufficiently privileged user).
30+
31+
2. Start the userspace debugger interface
32+
33+
After booting the kernel with the debugger built-in, the debugger can be
34+
started by using the following commands:
35+
36+
# mount -t debugfs none /sys/kernel/debug
37+
# modprobe acpi_dbg
38+
# tools/acpi/power/acpi/acpidbg/acpidbg
39+
40+
That spawns the interactive AML debugger environment where you can execute
41+
debugger commands.
42+
43+
The commands are documented in the "ACPICA Overview and Programmer Reference"
44+
that can be downloaded from
45+
46+
https://acpica.org/documentation
47+
48+
The detailed debugger commands reference is located in Chapter 12 "ACPICA
49+
Debugger Reference". The "help" command can be used for a quick reference.
50+
51+
3. Stop the userspace debugger interface
52+
53+
The interactive debugger interface can be closed by pressing Ctrl+C or using
54+
the "quit" or "exit" commands. When finished, unload the module with:
55+
56+
# rmmod acpi_dbg
57+
58+
The module unloading may fail if there is an acpidbg instance running.
59+
60+
4. Run the debugger in a script
61+
62+
It may be useful to run the AML debugger in a test script. "acpidbg" supports
63+
this in a special "batch" mode. For example, the following command outputs
64+
the entire ACPI namespace:
65+
66+
# acpidbg -b "namespace"
Lines changed: 262 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
1+
Linuxized ACPICA - Introduction to ACPICA Release Automation
2+
3+
Copyright (C) 2013-2016, Intel Corporation
4+
Author: Lv Zheng <lv.zheng@intel.com>
5+
6+
7+
Abstract:
8+
9+
This document describes the ACPICA project and the relationship between
10+
ACPICA and Linux. It also describes how ACPICA code in drivers/acpi/acpica,
11+
include/acpi and tools/power/acpi is automatically updated to follow the
12+
upstream.
13+
14+
15+
1. ACPICA Project
16+
17+
The ACPI Component Architecture (ACPICA) project provides an operating
18+
system (OS)-independent reference implementation of the Advanced
19+
Configuration and Power Interface Specification (ACPI). It has been
20+
adapted by various host OSes. By directly integrating ACPICA, Linux can
21+
also benefit from the application experiences of ACPICA from other host
22+
OSes.
23+
24+
The homepage of ACPICA project is: www.acpica.org, it is maintained and
25+
supported by Intel Corporation.
26+
27+
The following figure depicts the Linux ACPI subystem where the ACPICA
28+
adaptation is included:
29+
30+
+---------------------------------------------------------+
31+
| |
32+
| +---------------------------------------------------+ |
33+
| | +------------------+ | |
34+
| | | Table Management | | |
35+
| | +------------------+ | |
36+
| | +----------------------+ | |
37+
| | | Namespace Management | | |
38+
| | +----------------------+ | |
39+
| | +------------------+ ACPICA Components | |
40+
| | | Event Management | | |
41+
| | +------------------+ | |
42+
| | +---------------------+ | |
43+
| | | Resource Management | | |
44+
| | +---------------------+ | |
45+
| | +---------------------+ | |
46+
| | | Hardware Management | | |
47+
| | +---------------------+ | |
48+
| +---------------------------------------------------+ | |
49+
| | | +------------------+ | | |
50+
| | | | OS Service Layer | | | |
51+
| | | +------------------+ | | |
52+
| | +-------------------------------------------------|-+ |
53+
| | +--------------------+ | |
54+
| | | Device Enumeration | | |
55+
| | +--------------------+ | |
56+
| | +------------------+ | |
57+
| | | Power Management | | |
58+
| | +------------------+ Linux/ACPI Components | |
59+
| | +--------------------+ | |
60+
| | | Thermal Management | | |
61+
| | +--------------------+ | |
62+
| | +--------------------------+ | |
63+
| | | Drivers for ACPI Devices | | |
64+
| | +--------------------------+ | |
65+
| | +--------+ | |
66+
| | | ...... | | |
67+
| | +--------+ | |
68+
| +---------------------------------------------------+ |
69+
| |
70+
+---------------------------------------------------------+
71+
72+
Figure 1. Linux ACPI Software Components
73+
74+
NOTE:
75+
A. OS Service Layer - Provided by Linux to offer OS dependent
76+
implementation of the predefined ACPICA interfaces (acpi_os_*).
77+
include/acpi/acpiosxf.h
78+
drivers/acpi/osl.c
79+
include/acpi/platform
80+
include/asm/acenv.h
81+
B. ACPICA Functionality - Released from ACPICA code base to offer
82+
OS independent implementation of the ACPICA interfaces (acpi_*).
83+
drivers/acpi/acpica
84+
include/acpi/ac*.h
85+
tools/power/acpi
86+
C. Linux/ACPI Functionality - Providing Linux specific ACPI
87+
functionality to the other Linux kernel subsystems and user space
88+
programs.
89+
drivers/acpi
90+
include/linux/acpi.h
91+
include/linux/acpi*.h
92+
include/acpi
93+
tools/power/acpi
94+
D. Architecture Specific ACPICA/ACPI Functionalities - Provided by the
95+
ACPI subsystem to offer architecture specific implementation of the
96+
ACPI interfaces. They are Linux specific components and are out of
97+
the scope of this document.
98+
include/asm/acpi.h
99+
include/asm/acpi*.h
100+
arch/*/acpi
101+
102+
2. ACPICA Release
103+
104+
The ACPICA project maintains its code base at the following repository URL:
105+
https://github.com/acpica/acpica.git. As a rule, a release is made every
106+
month.
107+
108+
As the coding style adopted by the ACPICA project is not acceptable by
109+
Linux, there is a release process to convert the ACPICA git commits into
110+
Linux patches. The patches generated by this process are referred to as
111+
"linuxized ACPICA patches". The release process is carried out on a local
112+
copy the ACPICA git repository. Each commit in the monthly release is
113+
converted into a linuxized ACPICA patch. Together, they form the montly
114+
ACPICA release patchset for the Linux ACPI community. This process is
115+
illustrated in the following figure:
116+
117+
+-----------------------------+
118+
| acpica / master (-) commits |
119+
+-----------------------------+
120+
/|\ |
121+
| \|/
122+
| /---------------------\ +----------------------+
123+
| < Linuxize repo Utility >-->| old linuxized acpica |--+
124+
| \---------------------/ +----------------------+ |
125+
| |
126+
/---------\ |
127+
< git reset > \
128+
\---------/ \
129+
/|\ /+-+
130+
| / |
131+
+-----------------------------+ | |
132+
| acpica / master (+) commits | | |
133+
+-----------------------------+ | |
134+
| | |
135+
\|/ | |
136+
/-----------------------\ +----------------------+ | |
137+
< Linuxize repo Utilities >-->| new linuxized acpica |--+ |
138+
\-----------------------/ +----------------------+ |
139+
\|/
140+
+--------------------------+ /----------------------\
141+
| Linuxized ACPICA Patches |<----------------< Linuxize patch Utility >
142+
+--------------------------+ \----------------------/
143+
|
144+
\|/
145+
/---------------------------\
146+
< Linux ACPI Community Review >
147+
\---------------------------/
148+
|
149+
\|/
150+
+-----------------------+ /------------------\ +----------------+
151+
| linux-pm / linux-next |-->< Linux Merge Window >-->| linux / master |
152+
+-----------------------+ \------------------/ +----------------+
153+
154+
Figure 2. ACPICA -> Linux Upstream Process
155+
156+
NOTE:
157+
A. Linuxize Utilities - Provided by the ACPICA repository, including a
158+
utility located in source/tools/acpisrc folder and a number of
159+
scripts located in generate/linux folder.
160+
B. acpica / master - "master" branch of the git repository at
161+
<https://github.com/acpica/acpica.git>.
162+
C. linux-pm / linux-next - "linux-next" branch of the git repository at
163+
<http://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git>.
164+
D. linux / master - "master" branch of the git repository at
165+
<http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git>.
166+
167+
Before the linuxized ACPICA patches are sent to the Linux ACPI community
168+
for review, there is a quality ensurance build test process to reduce
169+
porting issues. Currently this build process only takes care of the
170+
following kernel configuration options:
171+
CONFIG_ACPI/CONFIG_ACPI_DEBUG/CONFIG_ACPI_DEBUGGER
172+
173+
3. ACPICA Divergences
174+
175+
Ideally, all of the ACPICA commits should be converted into Linux patches
176+
automatically without manual modifications, the "linux / master" tree should
177+
contain the ACPICA code that exactly corresponds to the ACPICA code
178+
contained in "new linuxized acpica" tree and it should be possible to run
179+
the release process fully automatically.
180+
181+
As a matter of fact, however, there are source code differences between
182+
the ACPICA code in Linux and the upstream ACPICA code, referred to as
183+
"ACPICA Divergences".
184+
185+
The various sources of ACPICA divergences include:
186+
1. Legacy divergences - Before the current ACPICA release process was
187+
established, there already had been divergences between Linux and
188+
ACPICA. Over the past several years those divergences have been greatly
189+
reduced, but there still are several ones and it takes time to figure
190+
out the underlying reasons for their existence.
191+
2. Manual modifications - Any manual modification (eg. coding style fixes)
192+
made directly in the Linux sources obviously hurts the ACPICA release
193+
automation. Thus it is recommended to fix such issues in the ACPICA
194+
upstream source code and generate the linuxized fix using the ACPICA
195+
release utilities (please refer to Section 4 below for the details).
196+
3. Linux specific features - Sometimes it's impossible to use the
197+
current ACPICA APIs to implement features required by the Linux kernel,
198+
so Linux developers occasionaly have to change ACPICA code directly.
199+
Those changes may not be acceptable by ACPICA upstream and in such cases
200+
they are left as committed ACPICA divergences unless the ACPICA side can
201+
implement new mechanisms as replacements for them.
202+
4. ACPICA release fixups - ACPICA only tests commits using a set of the
203+
user space simulation utilies, thus the linuxized ACPICA patches may
204+
break the Linux kernel, leaving us build/boot failures. In order to
205+
avoid breaking Linux bisection, fixes are applied directly to the
206+
linuxized ACPICA patches during the release process. When the release
207+
fixups are backported to the upstream ACPICA sources, they must follow
208+
the upstream ACPICA rules and so further modifications may appear.
209+
That may result in the appearance of new divergences.
210+
5. Fast tracking of ACPICA commits - Some ACPICA commits are regression
211+
fixes or stable-candidate material, so they are applied in advance with
212+
respect to the ACPICA release process. If such commits are reverted or
213+
rebased on the ACPICA side in order to offer better solutions, new ACPICA
214+
divergences are generated.
215+
216+
4. ACPICA Development
217+
218+
This paragraph guides Linux developers to use the ACPICA upstream release
219+
utilities to obtain Linux patches corresponding to upstream ACPICA commits
220+
before they become available from the ACPICA release process.
221+
222+
1. Cherry-pick an ACPICA commit
223+
224+
First you need to git clone the ACPICA repository and the ACPICA change
225+
you want to cherry pick must be committed into the local repository.
226+
227+
Then the gen-patch.sh command can help to cherry-pick an ACPICA commit
228+
from the ACPICA local repository:
229+
230+
$ git clone https://github.com/acpica/acpica
231+
$ cd acpica
232+
$ generate/linux/gen-patch.sh -u [commit ID]
233+
234+
Here the commit ID is the ACPICA local repository commit ID you want to
235+
cherry pick. It can be omitted if the commit is "HEAD".
236+
237+
2. Cherry-pick recent ACPICA commits
238+
239+
Sometimes you need to rebase your code on top of the most recent ACPICA
240+
changes that haven't been applied to Linux yet.
241+
242+
You can generate the ACPICA release series yourself and rebase your code on
243+
top of the generated ACPICA release patches:
244+
245+
$ git clone https://github.com/acpica/acpica
246+
$ cd acpica
247+
$ generate/linux/make-patches.sh -u [commit ID]
248+
249+
The commit ID should be the last ACPICA commit accepted by Linux. Usually,
250+
it is the commit modifying ACPI_CA_VERSION. It can be found by executing
251+
"git blame source/include/acpixf.h" and referencing the line that contains
252+
"ACPI_CA_VERSION".
253+
254+
3. Inspect the current divergences
255+
256+
If you have local copies of both Linux and upstream ACPICA, you can generate
257+
a diff file indicating the state of the current divergences:
258+
259+
# git clone https://github.com/acpica/acpica
260+
# git clone http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
261+
# cd acpica
262+
# generate/linux/divergences.sh -s ../linux

0 commit comments

Comments
 (0)