€•=?Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ:/translations/zh_CN/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/zh_TW/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/it_IT/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/ja_JP/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/ko_KR/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/pt_BR/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/sp_SP/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/admin-guide/acpi/initrd_table_override.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ Upgrading ACPI tables via initrd”h]”hŒ Upgrading ACPI tables via initrd”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒWhat is this about”h]”hŒWhat is this about”…””}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´KubhŒ paragraph”“”)”}”(hXIf the ACPI_TABLE_UPGRADE compile option is true, it is possible to upgrade the ACPI execution environment that is defined by the ACPI tables via upgrading the ACPI tables provided by the BIOS with an instrumented, modified, more recent version one, or installing brand new ACPI tables.”h]”hXIf the ACPI_TABLE_UPGRADE compile option is true, it is possible to upgrade the ACPI execution environment that is defined by the ACPI tables via upgrading the ACPI tables provided by the BIOS with an instrumented, modified, more recent version one, or installing brand new ACPI tables.”…””}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhï)”}”(hŒWhen building initrd with kernel in a single image, option ACPI_TABLE_OVERRIDE_VIA_BUILTIN_INITRD should also be true for this feature to work.”h]”hŒWhen building initrd with kernel in a single image, option ACPI_TABLE_OVERRIDE_VIA_BUILTIN_INITRD should also be true for this feature to work.”…””}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)”}”(hŒžFor a full list of ACPI tables that can be upgraded/installed, take a look at the char `*table_sigs[MAX_ACPI_SIGNATURE];` definition in drivers/acpi/tables.c.”h]”(hŒWFor a full list of ACPI tables that can be upgraded/installed, take a look at the char ”…””}”(hj h²hh³Nh´NubhŒtitle_reference”“”)”}”(hŒ"`*table_sigs[MAX_ACPI_SIGNATURE];`”h]”hŒ *table_sigs[MAX_ACPI_SIGNATURE];”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ% definition in drivers/acpi/tables.c.”…””}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)”}”(hŒbAll ACPI tables iasl (Intel's ACPI compiler and disassembler) knows should be overridable, except:”h]”hŒdAll ACPI tables iasl (Intel’s ACPI compiler and disassembler) knows should be overridable, except:”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhŒ block_quote”“”)”}”(hŒk- ACPI_SIG_RSDP (has a signature of 6 bytes) - ACPI_SIG_FACS (does not have an ordinary ACPI table header) ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ*ACPI_SIG_RSDP (has a signature of 6 bytes)”h]”hï)”}”(hjKh]”hŒ*ACPI_SIG_RSDP (has a signature of 6 bytes)”…””}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjDubjH)”}”(hŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j<h³hÇh´KhhÝh²hubhï)”}”(hŒ#Both could get implemented as well.”h]”hŒ#Both could get implemented as well.”…””}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubeh}”(h]”Œwhat-is-this-about”ah ]”h"]”Œwhat is this about”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒWhat is this for”h]”hŒWhat is this for”…””}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjœh²hh³hÇh´K!ubhï)”}”(hŒýComplain to your platform/BIOS vendor if you find a bug which is so severe that a workaround is not accepted in the Linux kernel. And this facility allows you to upgrade the buggy tables before your platform/BIOS vendor releases an upgraded BIOS binary.”h]”hŒýComplain to your platform/BIOS vendor if you find a bug which is so severe that a workaround is not accepted in the Linux kernel. And this facility allows you to upgrade the buggy tables before your platform/BIOS vendor releases an upgraded BIOS binary.”…””}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K#hjœh²hubhï)”}”(hŒThis facility can be used by platform/BIOS vendors to provide a Linux compatible environment without modifying the underlying platform firmware.”h]”hŒThis facility can be used by platform/BIOS vendors to provide a Linux compatible environment without modifying the underlying platform firmware.”…””}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K(hjœh²hubhï)”}”(hŒÈ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.”h]”hŒÈ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.”…””}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K+hjœh²hubhï)”}”(hŒoIt can and should be enabled in any kernel because there is no functional change with not instrumented initrds.”h]”hŒoIt can and should be enabled in any kernel because there is no functional change with not instrumented initrds.”…””}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K/hjœh²hubeh}”(h]”Œwhat-is-this-for”ah ]”h"]”Œwhat is this for”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K!ubhÉ)”}”(hhh]”(hÎ)”}”(hŒHow does it work”h]”hŒHow does it work”…””}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjíh²hh³hÇh´K4ubhŒ literal_block”“”)”}”(hX}# Extract the machine's ACPI tables: cd /tmp acpidump >acpidump acpixtract -a acpidump # Disassemble, modify and recompile them: iasl -d *.dat # For example add this statement into a _PRT (PCI Routing Table) function # of the DSDT: Store("HELLO WORLD", debug) # And increase the OEM Revision. For example, before modification: DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000) # After modification: DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001) iasl -sa dsdt.dsl # Add the raw ACPI tables to an uncompressed cpio archive. # They must be put into a /kernel/firmware/acpi directory inside the cpio # archive. Note that if 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. If the table put here doesn't match a platform table # (dissimilar Table Signature, or dissimilar OEMID, or dissimilar OEM Table # ID), this table will be appended. mkdir -p kernel/firmware/acpi cp dsdt.aml kernel/firmware/acpi # A maximum of "NR_ACPI_INITRD_TABLES (64)" tables are currently allowed # (see osl.c): iasl -sa facp.dsl iasl -sa ssdt1.dsl cp facp.aml kernel/firmware/acpi cp ssdt1.aml kernel/firmware/acpi # The uncompressed cpio archive must be the first. Other, typically # compressed cpio archives, must be concatenated on top of the uncompressed # one. Following command creates the uncompressed cpio archive and # concatenates the original initrd on top: find kernel | cpio -H newc --create > /boot/instrumented_initrd cat /boot/initrd >>/boot/instrumented_initrd # reboot with increased acpi debug level, e.g. boot params: acpi.debug_level=0x2 acpi.debug_layer=0xFFFFFFFF # and check your syslog: [ 1.268089] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.272091] [ACPI Debug] String [0x0B] "HELLO WORLD"”h]”hX}# Extract the machine's ACPI tables: cd /tmp acpidump >acpidump acpixtract -a acpidump # Disassemble, modify and recompile them: iasl -d *.dat # For example add this statement into a _PRT (PCI Routing Table) function # of the DSDT: Store("HELLO WORLD", debug) # And increase the OEM Revision. For example, before modification: DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000) # After modification: DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001) iasl -sa dsdt.dsl # Add the raw ACPI tables to an uncompressed cpio archive. # They must be put into a /kernel/firmware/acpi directory inside the cpio # archive. Note that if 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. If the table put here doesn't match a platform table # (dissimilar Table Signature, or dissimilar OEMID, or dissimilar OEM Table # ID), this table will be appended. mkdir -p kernel/firmware/acpi cp dsdt.aml kernel/firmware/acpi # A maximum of "NR_ACPI_INITRD_TABLES (64)" tables are currently allowed # (see osl.c): iasl -sa facp.dsl iasl -sa ssdt1.dsl cp facp.aml kernel/firmware/acpi cp ssdt1.aml kernel/firmware/acpi # The uncompressed cpio archive must be the first. Other, typically # compressed cpio archives, must be concatenated on top of the uncompressed # one. Following command creates the uncompressed cpio archive and # concatenates the original initrd on top: find kernel | cpio -H newc --create > /boot/instrumented_initrd cat /boot/initrd >>/boot/instrumented_initrd # reboot with increased acpi debug level, e.g. boot params: acpi.debug_level=0x2 acpi.debug_layer=0xFFFFFFFF # and check your syslog: [ 1.268089] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.272091] [ACPI Debug] String [0x0B] "HELLO WORLD"”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jþh³hÇh´K7hjíh²hubhï)”}”(hŒYiasl is able to disassemble and recompile quite a lot different, also static ACPI tables.”h]”hŒYiasl is able to disassemble and recompile quite a lot different, also static ACPI tables.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kahjíh²hubeh}”(h]”Œhow-does-it-work”ah ]”h"]”Œhow does it work”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K4ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ!Where to retrieve userspace tools”h]”hŒ!Where to retrieve userspace tools”…””}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj$h²hh³hÇh´Kfubhï)”}”(hŒKiasl and acpixtract are part of Intel's ACPICA project: https://acpica.org/”h]”(hŒ:iasl and acpixtract are part of Intel’s ACPICA project: ”…””}”(hj5h²hh³Nh´NubhŒ reference”“”)”}”(hŒhttps://acpica.org/”h]”hŒhttps://acpica.org/”…””}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jAuh1j=hj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khhj$h²hubhï)”}”(hŒTand should be packaged by distributions (for example in the acpica package on SUSE).”h]”hŒTand should be packaged by distributions (for example in the acpica package on SUSE).”…””}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kkhj$h²hubhï)”}”(hŒvacpidump can be found in Len Browns pmtools: ftp://kernel.org/pub/linux/kernel/people/lenb/acpi/utils/pmtools/acpidump”h]”(hŒ-acpidump can be found in Len Browns pmtools: ”…””}”(hjbh²hh³Nh´Nubj>)”}”(hŒIftp://kernel.org/pub/linux/kernel/people/lenb/acpi/utils/pmtools/acpidump”h]”hŒIftp://kernel.org/pub/linux/kernel/people/lenb/acpi/utils/pmtools/acpidump”…””}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jluh1j=hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Knhj$h²hubhï)”}”(hŒThis tool is also part of the acpica package on SUSE. Alternatively, used ACPI tables can be retrieved via sysfs in latest kernels: /sys/firmware/acpi/tables”h]”hŒThis tool is also part of the acpica package on SUSE. Alternatively, used ACPI tables can be retrieved via sysfs in latest kernels: /sys/firmware/acpi/tables”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kqhj$h²hubeh}”(h]”Œ!where-to-retrieve-userspace-tools”ah ]”h"]”Œ!where to retrieve userspace tools”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kfubeh}”(h]”Œ upgrading-acpi-tables-via-initrd”ah ]”h"]”Œ upgrading acpi tables via initrd”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÀŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jšj—j™j–jêjçj!jj’juŒ nametypes”}”(jš‰j™‰jê‰j!‰j’‰uh}”(j—hÊj–hÝjçjœjjíjj$uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.