~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/admin-guide/acpi/initrd_table_override.rst

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 .. SPDX-License-Identifier: GPL-2.0
  2 
  3 ================================
  4 Upgrading ACPI tables via initrd
  5 ================================
  6 
  7 What is this about
  8 ==================
  9 
 10 If the ACPI_TABLE_UPGRADE compile option is true, it is possible to
 11 upgrade the ACPI execution environment that is defined by the ACPI tables
 12 via upgrading the ACPI tables provided by the BIOS with an instrumented,
 13 modified, more recent version one, or installing brand new ACPI tables.
 14 
 15 When building initrd with kernel in a single image, option
 16 ACPI_TABLE_OVERRIDE_VIA_BUILTIN_INITRD should also be true for this
 17 feature to work.
 18 
 19 For a full list of ACPI tables that can be upgraded/installed, take a look
 20 at the char `*table_sigs[MAX_ACPI_SIGNATURE];` definition in
 21 drivers/acpi/tables.c.
 22 
 23 All ACPI tables iasl (Intel's ACPI compiler and disassembler) knows should
 24 be overridable, except:
 25 
 26   - ACPI_SIG_RSDP (has a signature of 6 bytes)
 27   - ACPI_SIG_FACS (does not have an ordinary ACPI table header)
 28 
 29 Both could get implemented as well.
 30 
 31 
 32 What is this for
 33 ================
 34 
 35 Complain to your platform/BIOS vendor if you find a bug which is so severe
 36 that a workaround is not accepted in the Linux kernel. And this facility
 37 allows you to upgrade the buggy tables before your platform/BIOS vendor
 38 releases an upgraded BIOS binary.
 39 
 40 This facility can be used by platform/BIOS vendors to provide a Linux
 41 compatible environment without modifying the underlying platform firmware.
 42 
 43 This facility also provides a powerful feature to easily debug and test
 44 ACPI BIOS table compatibility with the Linux kernel by modifying old
 45 platform provided ACPI tables or inserting new ACPI tables.
 46 
 47 It can and should be enabled in any kernel because there is no functional
 48 change with not instrumented initrds.
 49 
 50 
 51 How does it work
 52 ================
 53 ::
 54 
 55   # Extract the machine's ACPI tables:
 56   cd /tmp
 57   acpidump >acpidump
 58   acpixtract -a acpidump
 59   # Disassemble, modify and recompile them:
 60   iasl -d *.dat
 61   # For example add this statement into a _PRT (PCI Routing Table) function
 62   # of the DSDT:
 63   Store("HELLO WORLD", debug)
 64   # And increase the OEM Revision. For example, before modification:
 65   DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000)
 66   # After modification:
 67   DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001)
 68   iasl -sa dsdt.dsl
 69   # Add the raw ACPI tables to an uncompressed cpio archive.
 70   # They must be put into a /kernel/firmware/acpi directory inside the cpio
 71   # archive. Note that if the table put here matches a platform table
 72   # (similar Table Signature, and similar OEMID, and similar OEM Table ID)
 73   # with a more recent OEM Revision, the platform table will be upgraded by
 74   # this table. If the table put here doesn't match a platform table
 75   # (dissimilar Table Signature, or dissimilar OEMID, or dissimilar OEM Table
 76   # ID), this table will be appended.
 77   mkdir -p kernel/firmware/acpi
 78   cp dsdt.aml kernel/firmware/acpi
 79   # A maximum of "NR_ACPI_INITRD_TABLES (64)" tables are currently allowed
 80   # (see osl.c):
 81   iasl -sa facp.dsl
 82   iasl -sa ssdt1.dsl
 83   cp facp.aml kernel/firmware/acpi
 84   cp ssdt1.aml kernel/firmware/acpi
 85   # The uncompressed cpio archive must be the first. Other, typically
 86   # compressed cpio archives, must be concatenated on top of the uncompressed
 87   # one. Following command creates the uncompressed cpio archive and
 88   # concatenates the original initrd on top:
 89   find kernel | cpio -H newc --create > /boot/instrumented_initrd
 90   cat /boot/initrd >>/boot/instrumented_initrd
 91   # reboot with increased acpi debug level, e.g. boot params:
 92   acpi.debug_level=0x2 acpi.debug_layer=0xFFFFFFFF
 93   # and check your syslog:
 94   [    1.268089] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
 95   [    1.272091] [ACPI Debug]  String [0x0B] "HELLO WORLD"
 96 
 97 iasl is able to disassemble and recompile quite a lot different,
 98 also static ACPI tables.
 99 
100 
101 Where to retrieve userspace tools
102 =================================
103 
104 iasl and acpixtract are part of Intel's ACPICA project:
105 https://acpica.org/
106 
107 and should be packaged by distributions (for example in the acpica package
108 on SUSE).
109 
110 acpidump can be found in Len Browns pmtools:
111 ftp://kernel.org/pub/linux/kernel/people/lenb/acpi/utils/pmtools/acpidump
112 
113 This tool is also part of the acpica package on SUSE.
114 Alternatively, used ACPI tables can be retrieved via sysfs in latest kernels:
115 /sys/firmware/acpi/tables

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php