SlideShare a Scribd company logo
1 of 63
Download to read offline
ACPI Debugging
from Linux Kernel
October, 2019, openSUSE.Asia Summit, Udayana University
Joey Lee
SUSE Labs Taipei
jlee@suse.com
2
Agenda
• ACPI subsystem in Linux Kernel
• ACPI debug log
• Override ACPI Definition Blocks Tables
• Case: Tracing ACPI temperature
• Q&A
ACPI subsystem in Linux Kernel
4
ACPI
• Advanced Configuration and Power Interface (ACPI)
is a method for describing hardware interfaces in
terms abstract enough to allow flexible and
innovative hardware implementations and concrete
enough to allow shrink-wrap OS code to use such
hardware interfaces. [1]
• The ACPI subsystem in Linux kenrel maintains ACPI
bus, ACPI device drivers , event handlers and
opregion handlers...
5
ACPICA
• The ACPI Component Architecture (CA) is the core of
Advanced Configuration and Power Interface (ACPI)
subsystem in Linux kernel.
• The ACPICA provides the fundamental ACPI services
that are independent of any operating system. [1]
• ACPICA’s services include an AML parser/interpreter,
ACPI namespace management, ACPI table
management and event handling [1].
‒ Mainly maintained by Intel: https://github.com/acpica/acpica.git
• The OS Services Layer (OSL) is a conversion layer
between the OS-independent ACPICA to a particular
host operating system. [1]
6
Platform
Kernel
ACPI Subsystem
Firmware ACPI Tables
RSDP XSDT
Hardware
ACPI
ACPICA
root
bus
driver device
Namespace
AML
Interpreter
Tables
node node
Event
FADT DSDT
SSDT2SSDT1
Resource
Hardware
mm
OSL
resource printkEFIIRQqueue
PCI
CPU
Memory
pm
AcpiOs*
Acpi*
Acpi*
7
ACPICA components
• ACPI fundamental: Namespace Management, Table
Management, Event Handling, Resource Manager,
Hardware Management, Utilities
• AML interpreter: Dispatcher, Executer, Parser,
Disassembler, Debugger
• OS Services Layer (OSL)
‒ ACPICA implements OSL for user space of Unix, Linux,
Windows and BSD.
‒ Linux Kernel’s ACPI subsystem maintains a OSL
(drivers/acpi/osl.c) to adapt ACPICA.
8
Kernel or Userland
ACPICA Core Components
ACPICA
root
Namespace AML Interpreter
Tables
node node
Events
OSL
Parser
Resources
Hardware
Utilities
Disassembler
Dispatcher
Executer
Debuggernode node node
AcpiOs*
Acpi*Acpi*
Acpi*
Acpi*
Acpi*
Acpi*
9
ACPICA tools
• iasl: ASL compiler / AML decompiler
• Tools: acpidump, acpixtract, acpinames, acpiexec...
• Tests: ASL grammar validation Test Suite (ASLTS),
ASL test cases
• Generate: generation tools, release tools
10
ACPICA and Tools
Components
Namespace
AML Interpreter
Tables
Events
OSL
Parser
Resources
Hardware
Utilities
Disassembler
Dispatcher
Executer
Debugger
Tools
acpidump acpiexec
Compiler
TestsGenerate
release
linux
msvc
unix
msvc9
efi
acpixtract
root
node node
node node
node
iasl
osunix* oslinux* oswin* osbsd* efi*
aslts
Acpi*Acpi*
AcpiOs*
11
ACPI Namespace and Event handing
• ACPI Namespace
‒ A static tree structure reflects to AML definition blocks
which is an abstract layer of hardware devices in platform.
• ACPI Event handing
‒ ACPICA provides event mechanisms to define and to
handle the dynamic behavior at runtime.
12
ACPI Namespace
• The ACPI Namespace is a large data structure that
is constructed and maintained by the ACPICA
Subsystem component. [1]
• Constructed primarily from the AML defined within
an ACPI Differentiated System Description Table
(DSDT), the namespace contains a hierarchy of
named ACPI objects. [1]
root
Namespace
node node
13
Namespace Initialization
• Firmware puts definition blocks tables (DSDT and
SSDT*) to memory.
• Table Management component loads DSDT and
SSDT.
‒ OSL helps to get RSDP for loading ACPI tables
• Table Management component forwards DSDT/SSDT
points to Namespace Management component.
• Namespace Management component requests AML
interpreter to parse tables.
• Base on parsing result, Namespace Management
component creates ACPI namespace.
14
Definition blocks, Namespace and
ACPI devices
[1]Load
[2]
[3] Parse
PCI
CPU
Memory
Companion
Companion
Companion
PCI
CPU
Memory
[4] handle
15
The relation between layers
16
Event types in ACPICA
• ACPI Fixed Events and General Purpose Events
(GPEs)
‒ System Control Interrupts (SCIs) be generated
• Event types in control method
‒ Notify events that are generated via the execution of the
ASL Notify keyword in a control method. [1]
‒ e.g. Notify (^^PCI0.XHC1, 0x02) // Device Wake
‒ Events that are caused by accesses to an address space
or operation region during the execution of a control
method. [1]
17
System Control Interrupts (SCIs)
• SCI
‒ IRQ9 on x86. (otherwise checking SCI_INT in FADT)
• SCI handlers
‒ in ACPICA: AcpiEvGpeXruptHandler,
AcpiEvSciXruptHandler
‒ in Linux Kernel: acpi_global_event_handler
18
Fixed Events
• Fixed Events
‒ ACPI events that have a predefined meaning in the ACPI
specification. e.g. power button, timer overflows.
‒ These events are handled directly by the OS handlers. [2]
‒ ACPI register: PM1 = PM1a | PM1b
‒ PM1x_STS.8: PWRBTN_STS
‒ PM1x_STS.9: SLPBTN_STS
‒ PM1x_STS.10: RTC_STS
….
19
ACPI Events (Fixed Event)
[1]Set
[2]SCI[2]SCI
[3]
[3]Read
Clear
[4] Button
Input [5] input
[5]Keycode
20
GPEs
• GPEs
‒ GPEs are ACPI events that are not predefined by the ACPI
specification.
‒ These events are usually handled by evaluating control
methods, which are objects in the namespace and can
access system hardware.
‒ ACPI registers: GPE0_BLK, GPE1_BLK
‒ Control Methods: _GPE._Lxx, _GPE._Exx
‒ X86: reference GPE0_STS register in the Intel I/O Controller Hub
(ICH) datasheet.
‒ watch -n 1 cat /sys/firmware/acpi/interrupts/gpe[012]
[0123456789ABCDEF]
21
ACPI Events (GPE)
[1]Set
[2]SCI[2]SCI
[3]
[3]Read
Clear
[4]
_Exx _Lxx
_GPE
[5]
[6]Access
Address space
[6] NotifyPCI
CPU
Memory
PCI
CPU
Memory
Interactive
Interactive
interactive
ACPI debug log
23
ACPI Debug Log
• CONFIG_ACPI_DEBUG
• Kernel parameter
‒ acpi.debug_layer
‒ acpi.debug_level
• sysfs
/sys/module/acpi/parameters/debug_layer
/sys/module/acpi/parameters/debug_level
• ACPI_DEBUG_PRINT() in kernel codes [6]
‒ debug_layer: per-component level
‒ debug_level: per-type level
‒ e.g. drivers/acpi/ac.c
#define _COMPONENT ACPI_AC_COMPONENT
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Unsupported event [0x%x]n", event));
24
acpi.debug_layer
• ACPICA (drivers/acpi/acpica/)
‒ ACPI_UTILITIES 0x00000001 : ut*.c (except uthex.c, utuuid.c)
‒ ACPI_HARDWARE 0x00000002 : hw*.c (except hwpci.c)
‒ ACPI_EVENTS 0x00000004 : ev*.c
‒ ACPI_TABLES 0x00000008 : tb*.c
‒ ACPI_NAMESPACE 0x00000010 : ns*.c, hwpci.c
‒ ACPI_PARSER 0x00000020 : ps*.c
‒ ACPI_DISPATCHER 0x00000040 : ds*.c
‒ ACPI_EXECUTER 0x00000080 : ex*.c
‒ ACPI_RESOURCES 0x00000100 : rs*.c
‒ ACPI_CA_DEBUGGER 0x00000200 : db*.c
• OSL
‒ ACPI_OS_SERVICES 0x00000400 : drivers/acpi/osl.c
• ACPICA (drivers/acpi/acpica/)
‒ ACPI_CA_DISASSEMBLER 0x00000800 : No code uses it
‒ ACPI_COMPILER 0x00001000 : uthex.c, utuuid.c
• acpidump tool
‒ ACPI_TOOLS 0x00002000 : tools/power/acpi/common/cmfsize.c
25
acpi.debug_layer (cont.)
• ACPI Drivers (drivers/acpi/)
‒ ACPI_BUS_COMPONENT 0x00010000 : bus.c, scan.c, utils.c
‒ ACPI_AC_COMPONENT 0x00020000 : ac.c
‒ ACPI_BATTERY_COMPONENT 0x00040000 : battery.c
‒ ACPI_BUTTON_COMPONENT 0x00080000 : button.c
‒ ACPI_SBS_COMPONENT 0x00100000 : cm_sbs.c
‒ ACPI_FAN_COMPONENT 0x00200000 : fan.c (did not use ACPI_DEBUG_PRINT() yet)
‒ ACPI_PCI_COMPONENT 0x00400000 : pci_*.c (irq, link, root, slot)
‒ ACPI_POWER_COMPONENT 0x00800000 : power.c, device_pm.c
‒ ACPI_CONTAINER_COMPONENT 0x01000000 : container.c
‒ ACPI_SYSTEM_COMPONENT 0x02000000: events.c, proc.c, wakeup.c,
customer_method.c, debugfs.c, sysfs.c
‒ ACPI_THERMAL_COMPONENT 0x04000000 : thermal.c
‒ ACPI_MEMORY_DEVICE_COMPONENT 0x08000000 : acpi_memhotplug.c
‒ ACPI_VIDEO_COMPONENT 0x10000000 : video_detect.c, acpi_video.c
‒ ACPI_PROCESSOR_COMPONENT 0x20000000 : acpi_processor.c, processor_*.c
(idle, core, perflib, thermal, throttling, driver, pdc)
‒ ACPI_ALL_DRIVERS 0xFFFF0000
26
Platform
Kernel
ACPI Subsystem and acpi.debug_layer
Firmware ACPI Tables
RSDP XSDT
Hardware
ACPI
ACPICA
root
bus
driver device
Namespace
AML
Interpreter
Tables
node node
Event
FADT DSDT
SSDT2SSDT1
Resource
Hardware
mm
OSL
resource printkEFIIRQqueue
PCI
CPU
Memory
pm
AcpiOs*
Acpi*
Acpi*
0xFFFF0000
0x0000011F
0x00001AE0
0x00004000
27
acpi.debug_level
• Raw debug output levels
‒ Do not use these in the ACPI_DEBUG_PRINT macros
‒ ACPI_LV_INIT 0x00000001
‒ Object initialization in acpica components
‒ ACPI_LV_DEBUG_OBJECT 0x00000002
‒ Print debug object in AML code, e.g. Store(INT1, Debug)
‒ ACPI_LV_INFO 0x00000004
‒ General information level, drivers/acpi/*, drivers/acpi/acpica/*
‒ ACPI_LV_REPAIR 0x00000008
‒ Repair functions in acpica namespace component
‒ ACPI_LV_TRACE_POINT 0x00000010
‒ For debugging method and opcode in acpica
28
acpi.debug_level (cont.)
• Trace verbosity level 1 [Standard Trace Level]
‒ ACPI_LV_INIT_NAMES 0x00000020
‒ Display object's full pathname in acpica components
‒ ACPI_LV_PARSE 0x00000040
‒ Debug log for parsing AML, drivers/acpi/acpica/ps*.c
‒ ACPI_LV_LOAD 0x00000080
‒ Print name string for loading objects, creating region, matching gpe
‒ ACPI_LV_DISPATCH 0x00000100
‒ Log for dispatcher in AML interpreter
‒ ACPI_LV_EXEC 0x00000200
‒ Log for execution of control methods or a job be execution in host OS
‒ ACPI_LV_NAMES 0x00000400
‒ Log for Namespace component in ACPICA, drivers/acpi/acpica/ns*
‒ ACPI_LV_OPREGION 0x00000800
‒ Log for Operation Region, PCI config region, Memory address space
29
acpi.debug_level (cont.)
• Trace verbosity level 1 [Standard Trace Level] (cont.)
‒ ACPI_LV_BFIELD 0x00001000
‒ Print value when reading/writing field unit in operation region
‒ ACPI_LV_TABLES 0x00002000
‒ Print what tables be found, dump namespace or device after tables be loaded
‒ ACPI_LV_VALUES 0x00004000
‒ Dump the entry/device value in namespace, print the value when read/write IO port, print the value for
table id or method owner id
‒ ACPI_LV_OBJECTS 0x00008000
‒ Dump members of namespace node or members of the acpi operand object descriptor
‒ ACPI_LV_RESOURCES 0x00010000
‒ Dump resource objects, print IRQ routing table, drivers/acpi/acpica/rs*
‒ ACPI_LV_USER_REQUESTS 0x00020000
‒ Reserved, Not used yet
‒ ACPI_LV_PACKAGE 0x00040000
‒ Reserved, Not used yet
30
acpi.debug_level (cont.)
• Trace verbosity level 2 [Function tracing and memory allocation]
‒ ACPI_LV_ALLOCATIONS 0x00100000
‒ Log for allocate and free object
‒ ACPI_LV_FUNCTIONS 0x00200000
‒ Log for function entry/exit trace
‒ ACPI_LV_OPTIMIZATIONS 0x00400000
‒ Not used in kernel. It be used in iasl, source/compiler/aslopt.c
• Trace verbosity level 3 [Threading, I/O, and Interrupts]
‒ ACPI_LV_MUTEX 0x01000000
‒ For debugging mutex and semaphore in drivers/acpi/acpica/utmutex.c, drivers/acpi/osl.c
‒ ACPI_LV_THREADS 0x02000000
‒ Print thread id in debug message in all components
‒ ACPI_LV_IO 0x04000000
‒ For read/write memory or io space, read/write ACPI registers (PM1/PM2…) in acpica/hw*.c
‒ ACPI_LV_INTERRUPTS 0x08000000
‒ Log for for fixed event, GPE in acpica/evevent.c and acpica/evgpe.c
31
acpi.debug_level (cont.)
• Exceptionally verbose output -- also used in the
global "DebugLevel"
‒ ACPI_LV_AML_DISASSEMBLE 0x10000000
‒ Reserved, Not used yet
‒ ACPI_LV_VERBOSE_INFO 0x20000000
‒ Reserved, Not used yet
‒ ACPI_LV_FULL_TABLES 0x40000000
‒ Reserved, Not used yet
‒ ACPI_LV_EVENTS 0x80000000
‒ Reserved, Not used yet
32
ACPICA Log reducer
• when the particular layer/level is applied to the control
method evaluations, the quantity of the debugging outputs
may still be too large to be put into the kernel log buffer. [6]
• The idea thus is worked out to only enable the particular
debug layer/level (normally more detailed) logs when the
control method evaluation is started, and disable the
detailed logging when the control method evaluation is
stopped. [6]
• cd /sys/module/acpi/parameters
‒ echo "0xXXXXXXXX" > trace_debug_layer
‒ echo "0xYYYYYYYY" > trace_debug_level
‒ echo "enable" > trace_state
Override ACPI definition blocks tables
34
ACPI Tables
• Definition blocks tables
‒ AML (ACPI Machine Language) format
‒ DSDT (differentiated system description table), SSDT
(secondary system description tables)
• Data tables
‒ TDL (Table Definition Language)
‒ FADT, MADT, ECDT, SRAT, etc. - essentially any table
other than a DSDT or SSDT. [2]
• The iasl tool supports AML and TDL
35
Definition blocks, Namespace and
ACPI devices
[1]Load
[2]
[3] Parse
[4] handle
Override tables by initrd
36
Upgrading ACPI tables via initrd
• CONFIG_ACPI_TABLE_UPGRADE=y
‒ Leap 15.1, Tumbleweed
‒ x86_64, arm64
• This facility also provides a powerful feature to
easily debug and test ACPI BIOS table compatibility
with the Linux kernel by modifying old platform
provided ACPI tables or inserting new ACPI tables.
[4]
• All ACPI tables iasl knows should be overridable,
except RSDP and FACS.
37
Override DSDT table
• Extract DSDT
‒ acpidump >acpidump
‒ acpixtract acpidump
• Disassemble to ASL
‒ iasl -d dsdt.dat # dsdt.dsl be created
38
Override DSDT table (cont.)
• Modify DSDT
‒ vi dsdt.dsl
‒ e.g. Add debug log to _PRT
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
Store("HELLO WORLD", debug)
….
‒ Increase the OEM Revision
< DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x01072009)
> DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x0107200a)
‒ DefinitionBlock (AMLFileName, TableSignature, ComplianceRevision,
OEMID, TableID, OEMRevision) [2]
39
Override DSDT table (cont.)
• Recompile to AML
‒ iasl -sa dsdt.dsl #dsdt.aml be created
• Add the dsdt.aml to initrd
‒ /kernel/firmware/acpi in an uncompressed cpio archive.
‒ The table put here matches a platform table (similar Table Signature,
and similar OEMID, and similar OEM Table ID) with a more recent
OEM Revision, the platform table will be upgraded by this table. [4]
‒ mkdir -p kernel/firmware/acpi
cp dsdt.aml kernel/firmware/acpi
find kernel | cpio -H newc --create > /boot/instrumented_initrd-
4.12.14-94.41-default
cat /boot/initrd-4.12.14-94.41-default >>/boot/instrumented_initrd-
4.12.14-94.41-default
40
Override DSDT table (cont.)
• Modify /boot/grub2/grub.cfg
‒ Put following kernel parameters to increase acpi debug
level:
acpi.debug_level=0x2 acpi.debug_layer=0xFFFFFFFF
‒ Change the booting initrd:
< initrdefi /boot/initrd-4.12.14-94.41-default
> initrdefi /boot/instrumented_initrd-4.12.14-94.41-default
• Reboot
41
Override DSDT table (cont.)
• dmesg after reboot
[ 0.000000] ACPI: DSDT ACPI table found in initrd
[kernel/firmware/acpi/dsdt.aml][0x16087]
...
[ 0.000000] ACPI: Table Upgrade: override [DSDT-ALASKA- A M I ]
[ 0.000000] ACPI: DSDT 0x000000005B1601F8 Physical table override,
new table: 0x000000005AEF5000
…
[ 0.264865] pci 0000:00:01.0: Activating ISA DMA hang workarounds
[ 0.265814] [ACPI Debug] "HELLO WORLD"
[ 0.287271] PCI Interrupt Link [LNKC] enabled at IRQ 10
Case: Tracing ACPI temperature
43
UP Board
• up-board.org
• X86_64 development board
• UEFI firmware
• AAEON Technology
44
UP Board responses zero degree
45
loglevel and dmesg
• Kernel parameters:
‒ loglevel=9 or debug
‒ log_buf_len=5M or more
• rsyslog config (/etc/rsyslog.conf)
‒ $klogConsoleLogLevel 8
• dmesg
‒ Set console level: dmesg -n 8
‒ Clear ring buffer: sudo dmesg -C
‒ Wait for new messages: dmesg -w
46
Using debug_layer and debug_level
• # echo "0x04000000" > /sys/module/acpi/parameters/debug_layer
ACPI_THERMAL_COMPONENT 0x04000000 [*]
• # echo "0x00000004" > /sys/module/acpi/parameters/debug_level
ACPI_LV_INFO 0x00000004 [*]
• dmesg -C; 
echo 0x04000000 > /sys/module/acpi/parameters/debug_layer; 
echo 0x00000004 > /sys/module/acpi/parameters/debug_level; 
sensors; 
echo 0x00000000 > /sys/module/acpi/parameters/debug_layer; 
echo 0x00000000 > /sys/module/acpi/parameters/debug_level;
47
Thermal component log
48
More debug_layer and debug_level
• # echo "0x04010010" > /sys/module/acpi/parameters/debug_layer
ACPI_NAMESPACE 0x00000010 [*]
ACPI_BUS_COMPONENT 0x00010000 [*]
ACPI_THERMAL_COMPONENT 0x04000000 [*]
• # echo "0x000fffff" > /sys/module/acpi/parameters/debug_level
‒ Enable all log in Trace verbosity level 1 [Standard Trace Level]
• dmesg -C; 
echo 0x04010010 > /sys/module/acpi/parameters/debug_layer; 
echo 0x000fffff > /sys/module/acpi/parameters/debug_level; 
sensors; 
echo 0x00000000 > /sys/module/acpi/parameters/debug_layer; 
echo 0x00000000 > /sys/module/acpi/parameters/debug_level;
49
Log from control method
50
Tracing _TZ.TZ00._TMP in DSDT
51
The default return value from _TMP
0xAAC = 2732
match with dmesg
absolute zero, degrees Kelvin
52
Add debug log in _TMP in DSDT
53
Override DSDT for debugging
• # iasl -sa dsdt.dsl
# mkdir -p kernel/firmware/acpi; cp dsdt.aml
kernel/firmware/acpi
# find kernel | cpio -H newc --create >
/boot/instrumented_initrd-4.12.14-lp151.28.10-default
# cat /boot/initrd-4.12.14-lp151.28.10-default
>>/boot/instrumented_initrd-4.12.14-lp151.28.10-
default
• /boot/grub2/grub.cfg
‒ initrdefi /boot/instrumented_initrd-4.12.14-lp151.28.10-default
54
The PMIC type in DSDT debug log
55
Found _HID for TI PMIC
56
TI Dollar Cover PMIC driver –
temperature support is not ready yet
• ACPI / PMIC: Add opregion driver for Intel Dollar
Cove TI PMIC
‒ 313749723 commit in v4.15-rc1
6bac0606f commit in v4.15-rc1
‒ Takashi Iwai <tiwai@suse.de>
• Bug 193891 - TI Dollar Cove PMIC support for
Cherrytrail platform
‒ https://bugzilla.kernel.org/show_bug.cgi?id=193891
57
Summary
• Using debug_layer and debug_level to grab more
information
‒ debug_layer:
‒ ACPI drivers first
‒ then ACPI fundamental components in ACPICA
‒ then AML Interpreter components
‒ debug_level:
‒ ACPI_LV_DEBUG_OBJECT and ACPI_LV_INFO first
‒ Then open Trace verbosity level 1 [Standard Trace Level]
• Override DSDT or SSDT
‒ Add debug log to DSDT or SSDT
Q&A
59
Reference
• [1] ACPI Component Architecture User Guide and
Programmer Reference Revision 6.2, May 31, 2017
• [2] Advanced Configuration and Power Interface (ACPI)
Specification Version 6.3, January 2019
• [3] Linux Kernel, Documentation/firmware-
guide/acpi/debug.rst
• [4] Linux Kernel, Documentation/admin-
guide/acpi/initrd_table_override.rst
• [5] Documentation/firmware-guide/acpi/aml-debugger.rst
• [6] Documentation/firmware-guide/acpi/method-
tracing.rst
Thank you.
60
Feedback to
jlee@suse.com
Corporate Headquarters
Maxfeldstrasse 5
90409 Nuremberg
Germany
+49 911 740 53 0 (Worldwide)
www.suse.com
Join us on:
www.opensuse.org
62
Unpublished Work of SUSE. All Rights Reserved.
This work is an unpublished work and contains confidential, proprietary and trade secret information of SUSE.
Access to this work is restricted to SUSE employees who have a need to know to perform tasks within the scope of
their assignments. No part of this work may be practiced, performed, copied, distributed, revised, modified, translated,
abridged, condensed, expanded, collected, or adapted without the prior written consent of SUSE.
Any use or exploitation of this work without authorization could subject the perpetrator to criminal and civil liability.
General Disclaimer
This document is not to be construed as a promise by any participating company to develop, deliver, or market a
product. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making
purchasing decisions. SUSE makes no representations or warranties with respect to the contents of this document,
and specifically disclaims any express or implied warranties of merchantability or fitness for any particular purpose.
The development, release, and timing of features or functionality described for SUSE products remains at the sole
discretion of SUSE. Further, SUSE reserves the right to revise this document and to make changes to its content, at
any time, without obligation to notify any person or entity of such revisions or changes. All SUSE marks referenced in
this presentation are trademarks or registered trademarks of Novell, Inc. in the United States and other countries. All
third-party trademarks are the property of their respective owners.

More Related Content

What's hot

03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_FinalGopi Krishnamurthy
 
Profiling the ACPICA Namespace and Event Handing
Profiling the ACPICA Namespace and Event HandingProfiling the ACPICA Namespace and Event Handing
Profiling the ACPICA Namespace and Event HandingSUSE Labs Taipei
 
The Linux Block Layer - Built for Fast Storage
The Linux Block Layer - Built for Fast StorageThe Linux Block Layer - Built for Fast Storage
The Linux Block Layer - Built for Fast StorageKernel TLV
 
Signature verification of kernel module and kexec
Signature verification of kernel module and kexecSignature verification of kernel module and kexec
Signature verification of kernel module and kexecjoeylikernel
 
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...The Linux Foundation
 
Qemu device prototyping
Qemu device prototypingQemu device prototyping
Qemu device prototypingYan Vugenfirer
 
Linux Crash Dump Capture and Analysis
Linux Crash Dump Capture and AnalysisLinux Crash Dump Capture and Analysis
Linux Crash Dump Capture and AnalysisPaul V. Novarese
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal BootloaderSatpal Parmar
 
Continguous Memory Allocator in the Linux Kernel
Continguous Memory Allocator in the Linux KernelContinguous Memory Allocator in the Linux Kernel
Continguous Memory Allocator in the Linux KernelKernel TLV
 
/proc/irq/&lt;irq>/smp_affinity
/proc/irq/&lt;irq>/smp_affinity/proc/irq/&lt;irq>/smp_affinity
/proc/irq/&lt;irq>/smp_affinityTakuya ASADA
 
Arm device tree and linux device drivers
Arm device tree and linux device driversArm device tree and linux device drivers
Arm device tree and linux device driversHoucheng Lin
 
HKG15-107: ACPI Power Management on ARM64 Servers (v2)
HKG15-107: ACPI Power Management on ARM64 Servers (v2)HKG15-107: ACPI Power Management on ARM64 Servers (v2)
HKG15-107: ACPI Power Management on ARM64 Servers (v2)Linaro
 
Kdump and the kernel crash dump analysis
Kdump and the kernel crash dump analysisKdump and the kernel crash dump analysis
Kdump and the kernel crash dump analysisBuland Singh
 
IntelON 2021 Processor Benchmarking
IntelON 2021 Processor BenchmarkingIntelON 2021 Processor Benchmarking
IntelON 2021 Processor BenchmarkingBrendan Gregg
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsBrendan Gregg
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!Mr. Vengineer
 

What's hot (20)

03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
 
Profiling the ACPICA Namespace and Event Handing
Profiling the ACPICA Namespace and Event HandingProfiling the ACPICA Namespace and Event Handing
Profiling the ACPICA Namespace and Event Handing
 
DPDK KNI interface
DPDK KNI interfaceDPDK KNI interface
DPDK KNI interface
 
Dpdk applications
Dpdk applicationsDpdk applications
Dpdk applications
 
The Linux Block Layer - Built for Fast Storage
The Linux Block Layer - Built for Fast StorageThe Linux Block Layer - Built for Fast Storage
The Linux Block Layer - Built for Fast Storage
 
Signature verification of kernel module and kexec
Signature verification of kernel module and kexecSignature verification of kernel module and kexec
Signature verification of kernel module and kexec
 
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
 
Qemu device prototyping
Qemu device prototypingQemu device prototyping
Qemu device prototyping
 
Linux Network Stack
Linux Network StackLinux Network Stack
Linux Network Stack
 
Linux Crash Dump Capture and Analysis
Linux Crash Dump Capture and AnalysisLinux Crash Dump Capture and Analysis
Linux Crash Dump Capture and Analysis
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal Bootloader
 
Continguous Memory Allocator in the Linux Kernel
Continguous Memory Allocator in the Linux KernelContinguous Memory Allocator in the Linux Kernel
Continguous Memory Allocator in the Linux Kernel
 
/proc/irq/&lt;irq>/smp_affinity
/proc/irq/&lt;irq>/smp_affinity/proc/irq/&lt;irq>/smp_affinity
/proc/irq/&lt;irq>/smp_affinity
 
Arm device tree and linux device drivers
Arm device tree and linux device driversArm device tree and linux device drivers
Arm device tree and linux device drivers
 
HKG15-107: ACPI Power Management on ARM64 Servers (v2)
HKG15-107: ACPI Power Management on ARM64 Servers (v2)HKG15-107: ACPI Power Management on ARM64 Servers (v2)
HKG15-107: ACPI Power Management on ARM64 Servers (v2)
 
Kdump and the kernel crash dump analysis
Kdump and the kernel crash dump analysisKdump and the kernel crash dump analysis
Kdump and the kernel crash dump analysis
 
IntelON 2021 Processor Benchmarking
IntelON 2021 Processor BenchmarkingIntelON 2021 Processor Benchmarking
IntelON 2021 Processor Benchmarking
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old Secrets
 
Qemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System EmulationQemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System Emulation
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
 

Similar to ACPI Debugging from Linux Kernel

My First 100 days with an Exadata (PPT)
My First 100 days with an Exadata (PPT)My First 100 days with an Exadata (PPT)
My First 100 days with an Exadata (PPT)Gustavo Rene Antunez
 
Hardware Probing in the Linux Kernel
Hardware Probing in the Linux KernelHardware Probing in the Linux Kernel
Hardware Probing in the Linux KernelKernel TLV
 
Developing a Windows CE OAL.ppt
Developing a Windows CE OAL.pptDeveloping a Windows CE OAL.ppt
Developing a Windows CE OAL.pptKundanSingh887495
 
Kernel Recipes 2015 - Porting Linux to a new processor architecture
Kernel Recipes 2015 - Porting Linux to a new processor architectureKernel Recipes 2015 - Porting Linux to a new processor architecture
Kernel Recipes 2015 - Porting Linux to a new processor architectureAnne Nicolas
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time OptimizationKan-Ru Chen
 
Virtualization Support in ARMv8+
Virtualization Support in ARMv8+Virtualization Support in ARMv8+
Virtualization Support in ARMv8+Aananth C N
 
intel_x86_pm.pptx
intel_x86_pm.pptxintel_x86_pm.pptx
intel_x86_pm.pptxAtul Vaish
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoCMacpaul Lin
 
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systemsClaudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systemslinuxlab_conf
 
Project ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN
 
ACPI In Windows Vista
ACPI In Windows VistaACPI In Windows Vista
ACPI In Windows Vistaspot2
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAAiman Hud
 
Identifying and Supporting 'X-compatible' Hardware Blocks
Identifying and Supporting 'X-compatible' Hardware BlocksIdentifying and Supporting 'X-compatible' Hardware Blocks
Identifying and Supporting 'X-compatible' Hardware BlocksChen-Yu Tsai
 
SHARE 2014, Pittsburgh CICS scalability
SHARE 2014, Pittsburgh CICS scalabilitySHARE 2014, Pittsburgh CICS scalability
SHARE 2014, Pittsburgh CICS scalabilitynick_garrod
 
SHARE 2014, Pittsburgh CICS scalability
SHARE 2014, Pittsburgh CICS scalabilitySHARE 2014, Pittsburgh CICS scalability
SHARE 2014, Pittsburgh CICS scalabilitynick_garrod
 
2010 03 papi_indiana
2010 03 papi_indiana2010 03 papi_indiana
2010 03 papi_indianaPTIHPA
 
VMworld 2013: ESXi Native Networking Driver Model - Delivering on Simplicity ...
VMworld 2013: ESXi Native Networking Driver Model - Delivering on Simplicity ...VMworld 2013: ESXi Native Networking Driver Model - Delivering on Simplicity ...
VMworld 2013: ESXi Native Networking Driver Model - Delivering on Simplicity ...VMworld
 
Ch2 v70 config_overview_en
Ch2 v70 config_overview_enCh2 v70 config_overview_en
Ch2 v70 config_overview_enconfidencial
 
Dan Norris: Exadata security
Dan Norris: Exadata securityDan Norris: Exadata security
Dan Norris: Exadata securityKyle Hailey
 

Similar to ACPI Debugging from Linux Kernel (20)

My First 100 days with an Exadata (PPT)
My First 100 days with an Exadata (PPT)My First 100 days with an Exadata (PPT)
My First 100 days with an Exadata (PPT)
 
Hardware Probing in the Linux Kernel
Hardware Probing in the Linux KernelHardware Probing in the Linux Kernel
Hardware Probing in the Linux Kernel
 
Developing a Windows CE OAL.ppt
Developing a Windows CE OAL.pptDeveloping a Windows CE OAL.ppt
Developing a Windows CE OAL.ppt
 
Kernel Recipes 2015 - Porting Linux to a new processor architecture
Kernel Recipes 2015 - Porting Linux to a new processor architectureKernel Recipes 2015 - Porting Linux to a new processor architecture
Kernel Recipes 2015 - Porting Linux to a new processor architecture
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time Optimization
 
UNIT-III ES.ppt
UNIT-III ES.pptUNIT-III ES.ppt
UNIT-III ES.ppt
 
Virtualization Support in ARMv8+
Virtualization Support in ARMv8+Virtualization Support in ARMv8+
Virtualization Support in ARMv8+
 
intel_x86_pm.pptx
intel_x86_pm.pptxintel_x86_pm.pptx
intel_x86_pm.pptx
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoC
 
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systemsClaudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
 
Project ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOS
 
ACPI In Windows Vista
ACPI In Windows VistaACPI In Windows Vista
ACPI In Windows Vista
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIA
 
Identifying and Supporting 'X-compatible' Hardware Blocks
Identifying and Supporting 'X-compatible' Hardware BlocksIdentifying and Supporting 'X-compatible' Hardware Blocks
Identifying and Supporting 'X-compatible' Hardware Blocks
 
SHARE 2014, Pittsburgh CICS scalability
SHARE 2014, Pittsburgh CICS scalabilitySHARE 2014, Pittsburgh CICS scalability
SHARE 2014, Pittsburgh CICS scalability
 
SHARE 2014, Pittsburgh CICS scalability
SHARE 2014, Pittsburgh CICS scalabilitySHARE 2014, Pittsburgh CICS scalability
SHARE 2014, Pittsburgh CICS scalability
 
2010 03 papi_indiana
2010 03 papi_indiana2010 03 papi_indiana
2010 03 papi_indiana
 
VMworld 2013: ESXi Native Networking Driver Model - Delivering on Simplicity ...
VMworld 2013: ESXi Native Networking Driver Model - Delivering on Simplicity ...VMworld 2013: ESXi Native Networking Driver Model - Delivering on Simplicity ...
VMworld 2013: ESXi Native Networking Driver Model - Delivering on Simplicity ...
 
Ch2 v70 config_overview_en
Ch2 v70 config_overview_enCh2 v70 config_overview_en
Ch2 v70 config_overview_en
 
Dan Norris: Exadata security
Dan Norris: Exadata securityDan Norris: Exadata security
Dan Norris: Exadata security
 

More from SUSE Labs Taipei

Locked down openSUSE Tumbleweed kernel
Locked down openSUSE Tumbleweed kernelLocked down openSUSE Tumbleweed kernel
Locked down openSUSE Tumbleweed kernelSUSE Labs Taipei
 
SUSE shim and things related to it
SUSE shim and things related to itSUSE shim and things related to it
SUSE shim and things related to itSUSE Labs Taipei
 
Multi-signed Kernel Module
Multi-signed Kernel ModuleMulti-signed Kernel Module
Multi-signed Kernel ModuleSUSE Labs Taipei
 
The bright future of SUSE and openSUSE
The bright future of SUSE and openSUSEThe bright future of SUSE and openSUSE
The bright future of SUSE and openSUSESUSE Labs Taipei
 
Convert your package to multibuild on Open Build Service
Convert your package to multibuild on Open Build ServiceConvert your package to multibuild on Open Build Service
Convert your package to multibuild on Open Build ServiceSUSE Labs Taipei
 
Linux Linux Traffic Control
Linux Linux Traffic ControlLinux Linux Traffic Control
Linux Linux Traffic ControlSUSE Labs Taipei
 
Looking into trusted and encrypted keys
Looking into trusted and encrypted keysLooking into trusted and encrypted keys
Looking into trusted and encrypted keysSUSE Labs Taipei
 
Use bonding driver with ethernet
Use bonding driver with ethernetUse bonding driver with ethernet
Use bonding driver with ethernetSUSE Labs Taipei
 
Use build service API in your program
Use build service API in your programUse build service API in your program
Use build service API in your programSUSE Labs Taipei
 
eBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceeBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceSUSE Labs Taipei
 
Develop and Maintain a Distro with Open Build Service
Develop and Maintain a Distro with Open Build ServiceDevelop and Maintain a Distro with Open Build Service
Develop and Maintain a Distro with Open Build ServiceSUSE Labs Taipei
 

More from SUSE Labs Taipei (19)

Locked down openSUSE Tumbleweed kernel
Locked down openSUSE Tumbleweed kernelLocked down openSUSE Tumbleweed kernel
Locked down openSUSE Tumbleweed kernel
 
SUSE shim and things related to it
SUSE shim and things related to itSUSE shim and things related to it
SUSE shim and things related to it
 
Multi-signed Kernel Module
Multi-signed Kernel ModuleMulti-signed Kernel Module
Multi-signed Kernel Module
 
The bright future of SUSE and openSUSE
The bright future of SUSE and openSUSEThe bright future of SUSE and openSUSE
The bright future of SUSE and openSUSE
 
EFI Secure Key
EFI Secure KeyEFI Secure Key
EFI Secure Key
 
eBPF maps 101
eBPF maps 101eBPF maps 101
eBPF maps 101
 
Convert your package to multibuild on Open Build Service
Convert your package to multibuild on Open Build ServiceConvert your package to multibuild on Open Build Service
Convert your package to multibuild on Open Build Service
 
Ixgbe internals
Ixgbe internalsIxgbe internals
Ixgbe internals
 
Linux Linux Traffic Control
Linux Linux Traffic ControlLinux Linux Traffic Control
Linux Linux Traffic Control
 
Looking into trusted and encrypted keys
Looking into trusted and encrypted keysLooking into trusted and encrypted keys
Looking into trusted and encrypted keys
 
Use bonding driver with ethernet
Use bonding driver with ethernetUse bonding driver with ethernet
Use bonding driver with ethernet
 
Use build service API in your program
Use build service API in your programUse build service API in your program
Use build service API in your program
 
Hands-on ethernet driver
Hands-on ethernet driverHands-on ethernet driver
Hands-on ethernet driver
 
eBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceeBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to Userspace
 
S4 sig-check-lpc-20130918
S4 sig-check-lpc-20130918S4 sig-check-lpc-20130918
S4 sig-check-lpc-20130918
 
openSUSE12.2 Review
openSUSE12.2 ReviewopenSUSE12.2 Review
openSUSE12.2 Review
 
oS KDE Repos & MM
oS KDE Repos & MMoS KDE Repos & MM
oS KDE Repos & MM
 
Develop and Maintain a Distro with Open Build Service
Develop and Maintain a Distro with Open Build ServiceDevelop and Maintain a Distro with Open Build Service
Develop and Maintain a Distro with Open Build Service
 
Coscup 2012-urfkill
Coscup 2012-urfkillCoscup 2012-urfkill
Coscup 2012-urfkill
 

Recently uploaded

buds n tech IT solutions
buds n  tech IT                solutionsbuds n  tech IT                solutions
buds n tech IT solutionsmonugehlot87
 
What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?Watsoo Telematics
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 

Recently uploaded (20)

buds n tech IT solutions
buds n  tech IT                solutionsbuds n  tech IT                solutions
buds n tech IT solutions
 
What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 

ACPI Debugging from Linux Kernel

  • 1. ACPI Debugging from Linux Kernel October, 2019, openSUSE.Asia Summit, Udayana University Joey Lee SUSE Labs Taipei jlee@suse.com
  • 2. 2 Agenda • ACPI subsystem in Linux Kernel • ACPI debug log • Override ACPI Definition Blocks Tables • Case: Tracing ACPI temperature • Q&A
  • 3. ACPI subsystem in Linux Kernel
  • 4. 4 ACPI • Advanced Configuration and Power Interface (ACPI) is a method for describing hardware interfaces in terms abstract enough to allow flexible and innovative hardware implementations and concrete enough to allow shrink-wrap OS code to use such hardware interfaces. [1] • The ACPI subsystem in Linux kenrel maintains ACPI bus, ACPI device drivers , event handlers and opregion handlers...
  • 5. 5 ACPICA • The ACPI Component Architecture (CA) is the core of Advanced Configuration and Power Interface (ACPI) subsystem in Linux kernel. • The ACPICA provides the fundamental ACPI services that are independent of any operating system. [1] • ACPICA’s services include an AML parser/interpreter, ACPI namespace management, ACPI table management and event handling [1]. ‒ Mainly maintained by Intel: https://github.com/acpica/acpica.git • The OS Services Layer (OSL) is a conversion layer between the OS-independent ACPICA to a particular host operating system. [1]
  • 6. 6 Platform Kernel ACPI Subsystem Firmware ACPI Tables RSDP XSDT Hardware ACPI ACPICA root bus driver device Namespace AML Interpreter Tables node node Event FADT DSDT SSDT2SSDT1 Resource Hardware mm OSL resource printkEFIIRQqueue PCI CPU Memory pm AcpiOs* Acpi* Acpi*
  • 7. 7 ACPICA components • ACPI fundamental: Namespace Management, Table Management, Event Handling, Resource Manager, Hardware Management, Utilities • AML interpreter: Dispatcher, Executer, Parser, Disassembler, Debugger • OS Services Layer (OSL) ‒ ACPICA implements OSL for user space of Unix, Linux, Windows and BSD. ‒ Linux Kernel’s ACPI subsystem maintains a OSL (drivers/acpi/osl.c) to adapt ACPICA.
  • 8. 8 Kernel or Userland ACPICA Core Components ACPICA root Namespace AML Interpreter Tables node node Events OSL Parser Resources Hardware Utilities Disassembler Dispatcher Executer Debuggernode node node AcpiOs* Acpi*Acpi* Acpi* Acpi* Acpi* Acpi*
  • 9. 9 ACPICA tools • iasl: ASL compiler / AML decompiler • Tools: acpidump, acpixtract, acpinames, acpiexec... • Tests: ASL grammar validation Test Suite (ASLTS), ASL test cases • Generate: generation tools, release tools
  • 10. 10 ACPICA and Tools Components Namespace AML Interpreter Tables Events OSL Parser Resources Hardware Utilities Disassembler Dispatcher Executer Debugger Tools acpidump acpiexec Compiler TestsGenerate release linux msvc unix msvc9 efi acpixtract root node node node node node iasl osunix* oslinux* oswin* osbsd* efi* aslts Acpi*Acpi* AcpiOs*
  • 11. 11 ACPI Namespace and Event handing • ACPI Namespace ‒ A static tree structure reflects to AML definition blocks which is an abstract layer of hardware devices in platform. • ACPI Event handing ‒ ACPICA provides event mechanisms to define and to handle the dynamic behavior at runtime.
  • 12. 12 ACPI Namespace • The ACPI Namespace is a large data structure that is constructed and maintained by the ACPICA Subsystem component. [1] • Constructed primarily from the AML defined within an ACPI Differentiated System Description Table (DSDT), the namespace contains a hierarchy of named ACPI objects. [1] root Namespace node node
  • 13. 13 Namespace Initialization • Firmware puts definition blocks tables (DSDT and SSDT*) to memory. • Table Management component loads DSDT and SSDT. ‒ OSL helps to get RSDP for loading ACPI tables • Table Management component forwards DSDT/SSDT points to Namespace Management component. • Namespace Management component requests AML interpreter to parse tables. • Base on parsing result, Namespace Management component creates ACPI namespace.
  • 14. 14 Definition blocks, Namespace and ACPI devices [1]Load [2] [3] Parse PCI CPU Memory Companion Companion Companion PCI CPU Memory [4] handle
  • 16. 16 Event types in ACPICA • ACPI Fixed Events and General Purpose Events (GPEs) ‒ System Control Interrupts (SCIs) be generated • Event types in control method ‒ Notify events that are generated via the execution of the ASL Notify keyword in a control method. [1] ‒ e.g. Notify (^^PCI0.XHC1, 0x02) // Device Wake ‒ Events that are caused by accesses to an address space or operation region during the execution of a control method. [1]
  • 17. 17 System Control Interrupts (SCIs) • SCI ‒ IRQ9 on x86. (otherwise checking SCI_INT in FADT) • SCI handlers ‒ in ACPICA: AcpiEvGpeXruptHandler, AcpiEvSciXruptHandler ‒ in Linux Kernel: acpi_global_event_handler
  • 18. 18 Fixed Events • Fixed Events ‒ ACPI events that have a predefined meaning in the ACPI specification. e.g. power button, timer overflows. ‒ These events are handled directly by the OS handlers. [2] ‒ ACPI register: PM1 = PM1a | PM1b ‒ PM1x_STS.8: PWRBTN_STS ‒ PM1x_STS.9: SLPBTN_STS ‒ PM1x_STS.10: RTC_STS ….
  • 19. 19 ACPI Events (Fixed Event) [1]Set [2]SCI[2]SCI [3] [3]Read Clear [4] Button Input [5] input [5]Keycode
  • 20. 20 GPEs • GPEs ‒ GPEs are ACPI events that are not predefined by the ACPI specification. ‒ These events are usually handled by evaluating control methods, which are objects in the namespace and can access system hardware. ‒ ACPI registers: GPE0_BLK, GPE1_BLK ‒ Control Methods: _GPE._Lxx, _GPE._Exx ‒ X86: reference GPE0_STS register in the Intel I/O Controller Hub (ICH) datasheet. ‒ watch -n 1 cat /sys/firmware/acpi/interrupts/gpe[012] [0123456789ABCDEF]
  • 21. 21 ACPI Events (GPE) [1]Set [2]SCI[2]SCI [3] [3]Read Clear [4] _Exx _Lxx _GPE [5] [6]Access Address space [6] NotifyPCI CPU Memory PCI CPU Memory Interactive Interactive interactive
  • 23. 23 ACPI Debug Log • CONFIG_ACPI_DEBUG • Kernel parameter ‒ acpi.debug_layer ‒ acpi.debug_level • sysfs /sys/module/acpi/parameters/debug_layer /sys/module/acpi/parameters/debug_level • ACPI_DEBUG_PRINT() in kernel codes [6] ‒ debug_layer: per-component level ‒ debug_level: per-type level ‒ e.g. drivers/acpi/ac.c #define _COMPONENT ACPI_AC_COMPONENT ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Unsupported event [0x%x]n", event));
  • 24. 24 acpi.debug_layer • ACPICA (drivers/acpi/acpica/) ‒ ACPI_UTILITIES 0x00000001 : ut*.c (except uthex.c, utuuid.c) ‒ ACPI_HARDWARE 0x00000002 : hw*.c (except hwpci.c) ‒ ACPI_EVENTS 0x00000004 : ev*.c ‒ ACPI_TABLES 0x00000008 : tb*.c ‒ ACPI_NAMESPACE 0x00000010 : ns*.c, hwpci.c ‒ ACPI_PARSER 0x00000020 : ps*.c ‒ ACPI_DISPATCHER 0x00000040 : ds*.c ‒ ACPI_EXECUTER 0x00000080 : ex*.c ‒ ACPI_RESOURCES 0x00000100 : rs*.c ‒ ACPI_CA_DEBUGGER 0x00000200 : db*.c • OSL ‒ ACPI_OS_SERVICES 0x00000400 : drivers/acpi/osl.c • ACPICA (drivers/acpi/acpica/) ‒ ACPI_CA_DISASSEMBLER 0x00000800 : No code uses it ‒ ACPI_COMPILER 0x00001000 : uthex.c, utuuid.c • acpidump tool ‒ ACPI_TOOLS 0x00002000 : tools/power/acpi/common/cmfsize.c
  • 25. 25 acpi.debug_layer (cont.) • ACPI Drivers (drivers/acpi/) ‒ ACPI_BUS_COMPONENT 0x00010000 : bus.c, scan.c, utils.c ‒ ACPI_AC_COMPONENT 0x00020000 : ac.c ‒ ACPI_BATTERY_COMPONENT 0x00040000 : battery.c ‒ ACPI_BUTTON_COMPONENT 0x00080000 : button.c ‒ ACPI_SBS_COMPONENT 0x00100000 : cm_sbs.c ‒ ACPI_FAN_COMPONENT 0x00200000 : fan.c (did not use ACPI_DEBUG_PRINT() yet) ‒ ACPI_PCI_COMPONENT 0x00400000 : pci_*.c (irq, link, root, slot) ‒ ACPI_POWER_COMPONENT 0x00800000 : power.c, device_pm.c ‒ ACPI_CONTAINER_COMPONENT 0x01000000 : container.c ‒ ACPI_SYSTEM_COMPONENT 0x02000000: events.c, proc.c, wakeup.c, customer_method.c, debugfs.c, sysfs.c ‒ ACPI_THERMAL_COMPONENT 0x04000000 : thermal.c ‒ ACPI_MEMORY_DEVICE_COMPONENT 0x08000000 : acpi_memhotplug.c ‒ ACPI_VIDEO_COMPONENT 0x10000000 : video_detect.c, acpi_video.c ‒ ACPI_PROCESSOR_COMPONENT 0x20000000 : acpi_processor.c, processor_*.c (idle, core, perflib, thermal, throttling, driver, pdc) ‒ ACPI_ALL_DRIVERS 0xFFFF0000
  • 26. 26 Platform Kernel ACPI Subsystem and acpi.debug_layer Firmware ACPI Tables RSDP XSDT Hardware ACPI ACPICA root bus driver device Namespace AML Interpreter Tables node node Event FADT DSDT SSDT2SSDT1 Resource Hardware mm OSL resource printkEFIIRQqueue PCI CPU Memory pm AcpiOs* Acpi* Acpi* 0xFFFF0000 0x0000011F 0x00001AE0 0x00004000
  • 27. 27 acpi.debug_level • Raw debug output levels ‒ Do not use these in the ACPI_DEBUG_PRINT macros ‒ ACPI_LV_INIT 0x00000001 ‒ Object initialization in acpica components ‒ ACPI_LV_DEBUG_OBJECT 0x00000002 ‒ Print debug object in AML code, e.g. Store(INT1, Debug) ‒ ACPI_LV_INFO 0x00000004 ‒ General information level, drivers/acpi/*, drivers/acpi/acpica/* ‒ ACPI_LV_REPAIR 0x00000008 ‒ Repair functions in acpica namespace component ‒ ACPI_LV_TRACE_POINT 0x00000010 ‒ For debugging method and opcode in acpica
  • 28. 28 acpi.debug_level (cont.) • Trace verbosity level 1 [Standard Trace Level] ‒ ACPI_LV_INIT_NAMES 0x00000020 ‒ Display object's full pathname in acpica components ‒ ACPI_LV_PARSE 0x00000040 ‒ Debug log for parsing AML, drivers/acpi/acpica/ps*.c ‒ ACPI_LV_LOAD 0x00000080 ‒ Print name string for loading objects, creating region, matching gpe ‒ ACPI_LV_DISPATCH 0x00000100 ‒ Log for dispatcher in AML interpreter ‒ ACPI_LV_EXEC 0x00000200 ‒ Log for execution of control methods or a job be execution in host OS ‒ ACPI_LV_NAMES 0x00000400 ‒ Log for Namespace component in ACPICA, drivers/acpi/acpica/ns* ‒ ACPI_LV_OPREGION 0x00000800 ‒ Log for Operation Region, PCI config region, Memory address space
  • 29. 29 acpi.debug_level (cont.) • Trace verbosity level 1 [Standard Trace Level] (cont.) ‒ ACPI_LV_BFIELD 0x00001000 ‒ Print value when reading/writing field unit in operation region ‒ ACPI_LV_TABLES 0x00002000 ‒ Print what tables be found, dump namespace or device after tables be loaded ‒ ACPI_LV_VALUES 0x00004000 ‒ Dump the entry/device value in namespace, print the value when read/write IO port, print the value for table id or method owner id ‒ ACPI_LV_OBJECTS 0x00008000 ‒ Dump members of namespace node or members of the acpi operand object descriptor ‒ ACPI_LV_RESOURCES 0x00010000 ‒ Dump resource objects, print IRQ routing table, drivers/acpi/acpica/rs* ‒ ACPI_LV_USER_REQUESTS 0x00020000 ‒ Reserved, Not used yet ‒ ACPI_LV_PACKAGE 0x00040000 ‒ Reserved, Not used yet
  • 30. 30 acpi.debug_level (cont.) • Trace verbosity level 2 [Function tracing and memory allocation] ‒ ACPI_LV_ALLOCATIONS 0x00100000 ‒ Log for allocate and free object ‒ ACPI_LV_FUNCTIONS 0x00200000 ‒ Log for function entry/exit trace ‒ ACPI_LV_OPTIMIZATIONS 0x00400000 ‒ Not used in kernel. It be used in iasl, source/compiler/aslopt.c • Trace verbosity level 3 [Threading, I/O, and Interrupts] ‒ ACPI_LV_MUTEX 0x01000000 ‒ For debugging mutex and semaphore in drivers/acpi/acpica/utmutex.c, drivers/acpi/osl.c ‒ ACPI_LV_THREADS 0x02000000 ‒ Print thread id in debug message in all components ‒ ACPI_LV_IO 0x04000000 ‒ For read/write memory or io space, read/write ACPI registers (PM1/PM2…) in acpica/hw*.c ‒ ACPI_LV_INTERRUPTS 0x08000000 ‒ Log for for fixed event, GPE in acpica/evevent.c and acpica/evgpe.c
  • 31. 31 acpi.debug_level (cont.) • Exceptionally verbose output -- also used in the global "DebugLevel" ‒ ACPI_LV_AML_DISASSEMBLE 0x10000000 ‒ Reserved, Not used yet ‒ ACPI_LV_VERBOSE_INFO 0x20000000 ‒ Reserved, Not used yet ‒ ACPI_LV_FULL_TABLES 0x40000000 ‒ Reserved, Not used yet ‒ ACPI_LV_EVENTS 0x80000000 ‒ Reserved, Not used yet
  • 32. 32 ACPICA Log reducer • when the particular layer/level is applied to the control method evaluations, the quantity of the debugging outputs may still be too large to be put into the kernel log buffer. [6] • The idea thus is worked out to only enable the particular debug layer/level (normally more detailed) logs when the control method evaluation is started, and disable the detailed logging when the control method evaluation is stopped. [6] • cd /sys/module/acpi/parameters ‒ echo "0xXXXXXXXX" > trace_debug_layer ‒ echo "0xYYYYYYYY" > trace_debug_level ‒ echo "enable" > trace_state
  • 33. Override ACPI definition blocks tables
  • 34. 34 ACPI Tables • Definition blocks tables ‒ AML (ACPI Machine Language) format ‒ DSDT (differentiated system description table), SSDT (secondary system description tables) • Data tables ‒ TDL (Table Definition Language) ‒ FADT, MADT, ECDT, SRAT, etc. - essentially any table other than a DSDT or SSDT. [2] • The iasl tool supports AML and TDL
  • 35. 35 Definition blocks, Namespace and ACPI devices [1]Load [2] [3] Parse [4] handle Override tables by initrd
  • 36. 36 Upgrading ACPI tables via initrd • CONFIG_ACPI_TABLE_UPGRADE=y ‒ Leap 15.1, Tumbleweed ‒ x86_64, arm64 • This facility also provides a powerful feature to easily debug and test ACPI BIOS table compatibility with the Linux kernel by modifying old platform provided ACPI tables or inserting new ACPI tables. [4] • All ACPI tables iasl knows should be overridable, except RSDP and FACS.
  • 37. 37 Override DSDT table • Extract DSDT ‒ acpidump >acpidump ‒ acpixtract acpidump • Disassemble to ASL ‒ iasl -d dsdt.dat # dsdt.dsl be created
  • 38. 38 Override DSDT table (cont.) • Modify DSDT ‒ vi dsdt.dsl ‒ e.g. Add debug log to _PRT Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { Store("HELLO WORLD", debug) …. ‒ Increase the OEM Revision < DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x01072009) > DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x0107200a) ‒ DefinitionBlock (AMLFileName, TableSignature, ComplianceRevision, OEMID, TableID, OEMRevision) [2]
  • 39. 39 Override DSDT table (cont.) • Recompile to AML ‒ iasl -sa dsdt.dsl #dsdt.aml be created • Add the dsdt.aml to initrd ‒ /kernel/firmware/acpi in an uncompressed cpio archive. ‒ The table put here matches a platform table (similar Table Signature, and similar OEMID, and similar OEM Table ID) with a more recent OEM Revision, the platform table will be upgraded by this table. [4] ‒ mkdir -p kernel/firmware/acpi cp dsdt.aml kernel/firmware/acpi find kernel | cpio -H newc --create > /boot/instrumented_initrd- 4.12.14-94.41-default cat /boot/initrd-4.12.14-94.41-default >>/boot/instrumented_initrd- 4.12.14-94.41-default
  • 40. 40 Override DSDT table (cont.) • Modify /boot/grub2/grub.cfg ‒ Put following kernel parameters to increase acpi debug level: acpi.debug_level=0x2 acpi.debug_layer=0xFFFFFFFF ‒ Change the booting initrd: < initrdefi /boot/initrd-4.12.14-94.41-default > initrdefi /boot/instrumented_initrd-4.12.14-94.41-default • Reboot
  • 41. 41 Override DSDT table (cont.) • dmesg after reboot [ 0.000000] ACPI: DSDT ACPI table found in initrd [kernel/firmware/acpi/dsdt.aml][0x16087] ... [ 0.000000] ACPI: Table Upgrade: override [DSDT-ALASKA- A M I ] [ 0.000000] ACPI: DSDT 0x000000005B1601F8 Physical table override, new table: 0x000000005AEF5000 … [ 0.264865] pci 0000:00:01.0: Activating ISA DMA hang workarounds [ 0.265814] [ACPI Debug] "HELLO WORLD" [ 0.287271] PCI Interrupt Link [LNKC] enabled at IRQ 10
  • 42. Case: Tracing ACPI temperature
  • 43. 43 UP Board • up-board.org • X86_64 development board • UEFI firmware • AAEON Technology
  • 44. 44 UP Board responses zero degree
  • 45. 45 loglevel and dmesg • Kernel parameters: ‒ loglevel=9 or debug ‒ log_buf_len=5M or more • rsyslog config (/etc/rsyslog.conf) ‒ $klogConsoleLogLevel 8 • dmesg ‒ Set console level: dmesg -n 8 ‒ Clear ring buffer: sudo dmesg -C ‒ Wait for new messages: dmesg -w
  • 46. 46 Using debug_layer and debug_level • # echo "0x04000000" > /sys/module/acpi/parameters/debug_layer ACPI_THERMAL_COMPONENT 0x04000000 [*] • # echo "0x00000004" > /sys/module/acpi/parameters/debug_level ACPI_LV_INFO 0x00000004 [*] • dmesg -C; echo 0x04000000 > /sys/module/acpi/parameters/debug_layer; echo 0x00000004 > /sys/module/acpi/parameters/debug_level; sensors; echo 0x00000000 > /sys/module/acpi/parameters/debug_layer; echo 0x00000000 > /sys/module/acpi/parameters/debug_level;
  • 48. 48 More debug_layer and debug_level • # echo "0x04010010" > /sys/module/acpi/parameters/debug_layer ACPI_NAMESPACE 0x00000010 [*] ACPI_BUS_COMPONENT 0x00010000 [*] ACPI_THERMAL_COMPONENT 0x04000000 [*] • # echo "0x000fffff" > /sys/module/acpi/parameters/debug_level ‒ Enable all log in Trace verbosity level 1 [Standard Trace Level] • dmesg -C; echo 0x04010010 > /sys/module/acpi/parameters/debug_layer; echo 0x000fffff > /sys/module/acpi/parameters/debug_level; sensors; echo 0x00000000 > /sys/module/acpi/parameters/debug_layer; echo 0x00000000 > /sys/module/acpi/parameters/debug_level;
  • 51. 51 The default return value from _TMP 0xAAC = 2732 match with dmesg absolute zero, degrees Kelvin
  • 52. 52 Add debug log in _TMP in DSDT
  • 53. 53 Override DSDT for debugging • # iasl -sa dsdt.dsl # mkdir -p kernel/firmware/acpi; cp dsdt.aml kernel/firmware/acpi # find kernel | cpio -H newc --create > /boot/instrumented_initrd-4.12.14-lp151.28.10-default # cat /boot/initrd-4.12.14-lp151.28.10-default >>/boot/instrumented_initrd-4.12.14-lp151.28.10- default • /boot/grub2/grub.cfg ‒ initrdefi /boot/instrumented_initrd-4.12.14-lp151.28.10-default
  • 54. 54 The PMIC type in DSDT debug log
  • 55. 55 Found _HID for TI PMIC
  • 56. 56 TI Dollar Cover PMIC driver – temperature support is not ready yet • ACPI / PMIC: Add opregion driver for Intel Dollar Cove TI PMIC ‒ 313749723 commit in v4.15-rc1 6bac0606f commit in v4.15-rc1 ‒ Takashi Iwai <tiwai@suse.de> • Bug 193891 - TI Dollar Cove PMIC support for Cherrytrail platform ‒ https://bugzilla.kernel.org/show_bug.cgi?id=193891
  • 57. 57 Summary • Using debug_layer and debug_level to grab more information ‒ debug_layer: ‒ ACPI drivers first ‒ then ACPI fundamental components in ACPICA ‒ then AML Interpreter components ‒ debug_level: ‒ ACPI_LV_DEBUG_OBJECT and ACPI_LV_INFO first ‒ Then open Trace verbosity level 1 [Standard Trace Level] • Override DSDT or SSDT ‒ Add debug log to DSDT or SSDT
  • 58. Q&A
  • 59. 59 Reference • [1] ACPI Component Architecture User Guide and Programmer Reference Revision 6.2, May 31, 2017 • [2] Advanced Configuration and Power Interface (ACPI) Specification Version 6.3, January 2019 • [3] Linux Kernel, Documentation/firmware- guide/acpi/debug.rst • [4] Linux Kernel, Documentation/admin- guide/acpi/initrd_table_override.rst • [5] Documentation/firmware-guide/acpi/aml-debugger.rst • [6] Documentation/firmware-guide/acpi/method- tracing.rst
  • 61.
  • 62. Corporate Headquarters Maxfeldstrasse 5 90409 Nuremberg Germany +49 911 740 53 0 (Worldwide) www.suse.com Join us on: www.opensuse.org 62
  • 63. Unpublished Work of SUSE. All Rights Reserved. This work is an unpublished work and contains confidential, proprietary and trade secret information of SUSE. Access to this work is restricted to SUSE employees who have a need to know to perform tasks within the scope of their assignments. No part of this work may be practiced, performed, copied, distributed, revised, modified, translated, abridged, condensed, expanded, collected, or adapted without the prior written consent of SUSE. Any use or exploitation of this work without authorization could subject the perpetrator to criminal and civil liability. General Disclaimer This document is not to be construed as a promise by any participating company to develop, deliver, or market a product. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. SUSE makes no representations or warranties with respect to the contents of this document, and specifically disclaims any express or implied warranties of merchantability or fitness for any particular purpose. The development, release, and timing of features or functionality described for SUSE products remains at the sole discretion of SUSE. Further, SUSE reserves the right to revise this document and to make changes to its content, at any time, without obligation to notify any person or entity of such revisions or changes. All SUSE marks referenced in this presentation are trademarks or registered trademarks of Novell, Inc. in the United States and other countries. All third-party trademarks are the property of their respective owners.