€•Œ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/arch/x86/amd-debugging”Œ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/arch/x86/amd-debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/it_IT/arch/x86/amd-debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ja_JP/arch/x86/amd-debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ko_KR/arch/x86/amd-debugging”Œ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/arch/x86/amd-debugging”Œ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/arch/x86/amd-debugging”Œ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³ŒD/var/lib/git/docbuild/linux/Documentation/arch/x86/amd-debugging.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒDebugging AMD Zen systems”h]”hŒDebugging AMD Zen systems”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒ¼This document describes techniques that are useful for debugging issues with AMD Zen systems. It is intended for use by developers and technical users to help identify and resolve issues.”h]”hŒ¼This document describes techniques that are useful for debugging issues with AMD Zen systems. It is intended for use by developers and technical users to help identify and resolve issues.”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ S3 vs s2idle”h]”hŒ S3 vs s2idle”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´Kubhï)�”}”(hX4On AMD systems, it's not possible to simultaneously support suspend-to-RAM (S3) and suspend-to-idle (s2idle). To confirm which mode your system supports you can look at ``cat /sys/power/mem_sleep``. If it shows ``s2idle [deep]`` then *S3* is supported. If it shows ``[s2idle]`` then *s2idle* is supported.”h]”(hŒ¬On AMD systems, it’s not possible to simultaneously support suspend-to-RAM (S3) and suspend-to-idle (s2idle). To confirm which mode your system supports you can look at ”…”�”}”(hjh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``cat /sys/power/mem_sleep``”h]”hŒcat /sys/power/mem_sleep”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ. If it shows ”…”�”}”(hjh²hh³Nh´Nubj )�”}”(hŒ``s2idle [deep]``”h]”hŒ s2idle [deep]”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ then ”…”�”}”(hjh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*S3*”h]”hŒS3”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubhŒ is supported. If it shows ”…”�”}”(hjh²hh³Nh´Nubj )�”}”(hŒ ``[s2idle]``”h]”hŒ[s2idle]”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ then ”…”�”}”(hjh²hh³Nh´NubjF)�”}”(hŒ*s2idle*”h]”hŒs2idle”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubhŒ is supported.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjh²hubhï)�”}”(hŒuOn systems that support *S3*, the firmware will be utilized to put all hardware into the appropriate low power state.”h]”(hŒOn systems that support ”…”�”}”(hjƒh²hh³Nh´NubjF)�”}”(hŒ*S3*”h]”hŒS3”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjƒubhŒY, the firmware will be utilized to put all hardware into the appropriate low power state.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjh²hubhï)�”}”(hŒóOn systems that support *s2idle*, the kernel will be responsible for transitioning devices into the appropriate low power state. When all devices are in the appropriate low power state, the hardware will transition into a hardware sleep state.”h]”(hŒOn systems that support ”…”�”}”(hj£h²hh³Nh´NubjF)�”}”(hŒ*s2idle*”h]”hŒs2idle”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj£ubhŒÓ, the kernel will be responsible for transitioning devices into the appropriate low power state. When all devices are in the appropriate low power state, the hardware will transition into a hardware sleep state.”…”�”}”(hj£h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjh²hubhï)�”}”(hŒ’After a suspend cycle you can tell how much time was spent in a hardware sleep state by looking at ``cat /sys/power/suspend_stats/last_hw_sleep``.”h]”(hŒcAfter a suspend cycle you can tell how much time was spent in a hardware sleep state by looking at ”…”�”}”(hjÃh²hh³Nh´Nubj )�”}”(hŒ.``cat /sys/power/suspend_stats/last_hw_sleep``”h]”hŒ*cat /sys/power/suspend_stats/last_hw_sleep”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃubhŒ.”…”�”}”(hjÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjh²hubhï)�”}”(hŒ>This flowchart explains how the AMD s2idle suspend flow works.”h]”hŒ>This flowchart explains how the AMD s2idle suspend flow works.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hjh²hubŒkfigure”Œ kernel_figure”“”)�”}”(hhh]”hŒfigure”“”)�”}”(hhh]”hŒimage”“”)�”}”(hŒ.. kernel-figure:: suspend.svg ”h]”h}”(h]”h ]”h"]”h$]”h&]”Œuri”Œarch/x86/suspend.svg”Œ candidates”}”Œ*”j suh1jühjùh³hÇh´Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjh²hh³hÇh´K#ubhï)�”}”(hŒ=This flowchart explains how the amd s2idle resume flow works.”h]”hŒ=This flowchart explains how the amd s2idle resume flow works.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K$hjh²hubjó)�”}”(hhh]”jø)�”}”(hhh]”jý)�”}”(hŒ.. kernel-figure:: resume.svg ”h]”h}”(h]”h ]”h"]”h$]”h&]”Œuri”Œarch/x86/resume.svg”j }”j j8suh1jühj*h³hÇh´Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjh²hh³hÇh´K'ubeh}”(h]”Œ s3-vs-s2idle”ah ]”h"]”Œ s3 vs s2idle”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒs2idle debugging tool”h]”hŒs2idle debugging tool”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjNh²hh³hÇh´K)ubhï)�”}”(hXAs there are a lot of places that problems can occur, a debugging tool has been created at `amd-debug-tools `_ that can help test for common problems and offer suggestions.”h]”(hŒ[As there are a lot of places that problems can occur, a debugging tool has been created at ”…”�”}”(hj_h²hh³Nh´NubhŒ reference”“”)�”}”(hŒg`amd-debug-tools `_”h]”hŒamd-debug-tools”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œamd-debug-tools”Œrefuri”ŒRhttps://git.kernel.org/pub/scm/linux/kernel/git/superm1/amd-debug-tools.git/about/”uh1jghj_ubhŒtarget”“”)�”}”(hŒU ”h]”h}”(h]”Œamd-debug-tools”ah ]”h"]”Œamd-debug-tools”ah$]”h&]”Œrefuri”jzuh1j{Œ referenced”Khj_ubhŒ> that can help test for common problems and offer suggestions.”…”�”}”(hj_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K+hjNh²hubhï)�”}”(hX0If you have an s2idle issue, it's best to start with this and follow instructions from its findings. If you continue to have an issue, raise a bug with the report generated from this script to `drm/amd gitlab `_.”h]”(hŒÄIf you have an s2idle issue, it’s best to start with this and follow instructions from its findings. If you continue to have an issue, raise a bug with the report generated from this script to ”…”�”}”(hj•h²hh³Nh´Nubjh)�”}”(hŒm`drm/amd gitlab `_”h]”hŒdrm/amd gitlab”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œdrm/amd gitlab”jyŒYhttps://gitlab.freedesktop.org/drm/amd/-/issues/new?issuable_template=s2idle_BUG_TEMPLATE”uh1jghj•ubj|)�”}”(hŒ\ ”h]”h}”(h]”Œdrm-amd-gitlab”ah ]”h"]”Œdrm/amd gitlab”ah$]”h&]”Œrefuri”j­uh1j{jŠKhj•ubhŒ.”…”�”}”(hj•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K0hjNh²hubeh}”(h]”Œs2idle-debugging-tool”ah ]”h"]”Œs2idle debugging tool”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K)ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ#Spurious s2idle wakeups from an IRQ”h]”hŒ#Spurious s2idle wakeups from an IRQ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÍh²hh³hÇh´K6ubhï)�”}”(hŒ¦Spurious wakeups will generally have an IRQ set to ``/sys/power/pm_wakeup_irq``. This can be matched to ``/proc/interrupts`` to determine what device woke the system.”h]”(hŒ3Spurious wakeups will generally have an IRQ set to ”…”�”}”(hjÞh²hh³Nh´Nubj )�”}”(hŒ``/sys/power/pm_wakeup_irq``”h]”hŒ/sys/power/pm_wakeup_irq”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞubhŒ. This can be matched to ”…”�”}”(hjÞh²hh³Nh´Nubj )�”}”(hŒ``/proc/interrupts``”h]”hŒ/proc/interrupts”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞubhŒ* to determine what device woke the system.”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K8hjÍh²hubhï)�”}”(hŒ„If this isn't enough to debug the problem, then the following sysfs files can be set to add more verbosity to the wakeup process: ::”h]”hŒƒIf this isn’t enough to debug the problem, then the following sysfs files can be set to add more verbosity to the wakeup process:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K;hjÍh²hubhŒ literal_block”“”)�”}”(hŒ^# echo 1 | sudo tee /sys/power/pm_debug_messages # echo 1 | sudo tee /sys/power/pm_print_times”h]”hŒ^# echo 1 | sudo tee /sys/power/pm_debug_messages # echo 1 | sudo tee /sys/power/pm_print_times”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´K>hjÍh²hubhï)�”}”(hŒ«After making those changes, the kernel will display messages that can be traced back to kernel s2idle loop code as well as display any active GPIO sources while waking up.”h]”hŒ«After making those changes, the kernel will display messages that can be traced back to kernel s2idle loop code as well as display any active GPIO sources while waking up.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KAhjÍh²hubhï)�”}”(hŒ†If the wakeup is caused by the ACPI SCI, additional ACPI debugging may be needed. These commands can enable additional trace data: ::”h]”hŒƒIf the wakeup is caused by the ACPI SCI, additional ACPI debugging may be needed. These commands can enable additional trace data:”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KEhjÍh²hubj)�”}”(hX # echo enable | sudo tee /sys/module/acpi/parameters/trace_state # echo 1 | sudo tee /sys/module/acpi/parameters/aml_debug_output # echo 0x0800000f | sudo tee /sys/module/acpi/parameters/debug_level # echo 0xffff0000 | sudo tee /sys/module/acpi/parameters/debug_layer”h]”hX # echo enable | sudo tee /sys/module/acpi/parameters/trace_state # echo 1 | sudo tee /sys/module/acpi/parameters/aml_debug_output # echo 0x0800000f | sudo tee /sys/module/acpi/parameters/debug_level # echo 0xffff0000 | sudo tee /sys/module/acpi/parameters/debug_layer”…”�”}”hjJsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´KHhjÍh²hubeh}”(h]”Œ#spurious-s2idle-wakeups-from-an-irq”ah ]”h"]”Œ#spurious s2idle wakeups from an irq”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K6ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ#Spurious s2idle wakeups from a GPIO”h]”hŒ#Spurious s2idle wakeups from a GPIO”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj`h²hh³hÇh´KNubhï)�”}”(hXIf a GPIO is active when waking up the system ideally you would look at the schematic to determine what device it is associated with. If the schematic is not available, another tactic is to look at the ACPI _EVT() entry to determine what device is notified when that GPIO is active.”h]”hXIf a GPIO is active when waking up the system ideally you would look at the schematic to determine what device it is associated with. If the schematic is not available, another tactic is to look at the ACPI _EVT() entry to determine what device is notified when that GPIO is active.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KPhj`h²hubhï)�”}”(hŒ—For a hypothetical example, say that GPIO 59 woke up the system. You can look at the SSDT to determine what device is notified when GPIO 59 is active.”h]”hŒ—For a hypothetical example, say that GPIO 59 woke up the system. You can look at the SSDT to determine what device is notified when GPIO 59 is active.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KUhj`h²hubhï)�”}”(hŒ*First convert the GPIO number into hex. ::”h]”hŒ'First convert the GPIO number into hex.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KXhj`h²hubj)�”}”(hŒ"$ python3 -c "print(hex(59))" 0x3b”h]”hŒ"$ python3 -c "print(hex(59))" 0x3b”…”�”}”hj›sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´KZhj`h²hubhï)�”}”(hŒGNext determine which ACPI table has the ``_EVT`` entry. For example: ::”h]”(hŒ(Next determine which ACPI table has the ”…”�”}”(hj©h²hh³Nh´Nubj )�”}”(hŒ``_EVT``”h]”hŒ_EVT”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©ubhŒ entry. For example:”…”�”}”(hj©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K]hj`h²hubj)�”}”(hŒk$ sudo grep EVT /sys/firmware/acpi/tables/SSDT* grep: /sys/firmware/acpi/tables/SSDT27: binary file matches”h]”hŒk$ sudo grep EVT /sys/firmware/acpi/tables/SSDT* grep: /sys/firmware/acpi/tables/SSDT27: binary file matches”…”�”}”hjÉsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´K_hj`h²hubhï)�”}”(hŒDecode this table::”h]”hŒDecode this table:”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kbhj`h²hubj)�”}”(hŒB$ sudo cp /sys/firmware/acpi/tables/SSDT27 . $ sudo iasl -d SSDT27”h]”hŒB$ sudo cp /sys/firmware/acpi/tables/SSDT27 . $ sudo iasl -d SSDT27”…”�”}”hjåsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´Kdhj`h²hubhï)�”}”(hŒDThen look at the table and find the matching entry for GPIO 0x3b. ::”h]”hŒAThen look at the table and find the matching entry for GPIO 0x3b.”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kghj`h²hubj)�”}”(hŒ²Case (0x3B) { M000 (0x393B) M460 (" Notify (\\_SB.PCI0.GP17.XHC1, 0x02)\n", Zero, Zero, Zero, Zero, Zero, Zero) Notify (\_SB.PCI0.GP17.XHC1, 0x02) // Device Wake }”h]”hŒ²Case (0x3B) { M000 (0x393B) M460 (" Notify (\\_SB.PCI0.GP17.XHC1, 0x02)\n", Zero, Zero, Zero, Zero, Zero, Zero) Notify (\_SB.PCI0.GP17.XHC1, 0x02) // Device Wake }”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´Kihj`h²hubhï)�”}”(hŒïYou can see in this case that the device ``\_SB.PCI0.GP17.XHC1`` is notified when GPIO 59 is active. It's obvious this is an XHCI controller, but to go a step further you can figure out which XHCI controller it is by matching it to ACPI.::”h]”(hŒ)You can see in this case that the device ”…”�”}”(hjh²hh³Nh´Nubj )�”}”(hŒ``\_SB.PCI0.GP17.XHC1``”h]”hŒ\_SB.PCI0.GP17.XHC1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ° is notified when GPIO 59 is active. It’s obvious this is an XHCI controller, but to go a step further you can figure out which XHCI controller it is by matching it to ACPI.:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kphj`h²hubj)�”}”(hX$ grep "PCI0.GP17.XHC1" /sys/bus/acpi/devices/*/path /sys/bus/acpi/devices/device:2d/path:\_SB_.PCI0.GP17.XHC1 /sys/bus/acpi/devices/device:2e/path:\_SB_.PCI0.GP17.XHC1.RHUB /sys/bus/acpi/devices/device:2f/path:\_SB_.PCI0.GP17.XHC1.RHUB.PRT1 /sys/bus/acpi/devices/device:30/path:\_SB_.PCI0.GP17.XHC1.RHUB.PRT1.CAM0 /sys/bus/acpi/devices/device:31/path:\_SB_.PCI0.GP17.XHC1.RHUB.PRT1.CAM1 /sys/bus/acpi/devices/device:32/path:\_SB_.PCI0.GP17.XHC1.RHUB.PRT2 /sys/bus/acpi/devices/LNXPOWER:0d/path:\_SB_.PCI0.GP17.XHC1.PWRS”h]”hX$ grep "PCI0.GP17.XHC1" /sys/bus/acpi/devices/*/path /sys/bus/acpi/devices/device:2d/path:\_SB_.PCI0.GP17.XHC1 /sys/bus/acpi/devices/device:2e/path:\_SB_.PCI0.GP17.XHC1.RHUB /sys/bus/acpi/devices/device:2f/path:\_SB_.PCI0.GP17.XHC1.RHUB.PRT1 /sys/bus/acpi/devices/device:30/path:\_SB_.PCI0.GP17.XHC1.RHUB.PRT1.CAM0 /sys/bus/acpi/devices/device:31/path:\_SB_.PCI0.GP17.XHC1.RHUB.PRT1.CAM1 /sys/bus/acpi/devices/device:32/path:\_SB_.PCI0.GP17.XHC1.RHUB.PRT2 /sys/bus/acpi/devices/LNXPOWER:0d/path:\_SB_.PCI0.GP17.XHC1.PWRS”…”�”}”hj/sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´Kuhj`h²hubhï)�”}”(hŒ}Here you can see it matches to ``device:2d``. Look at the ``physical_node`` to determine what PCI device that actually is. ::”h]”(hŒHere you can see it matches to ”…”�”}”(hj=h²hh³Nh´Nubj )�”}”(hŒ ``device:2d``”h]”hŒ device:2d”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubhŒ. Look at the ”…”�”}”(hj=h²hh³Nh´Nubj )�”}”(hŒ``physical_node``”h]”hŒ physical_node”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubhŒ/ to determine what PCI device that actually is.”…”�”}”(hj=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K~hj`h²hubj)�”}”(hŒÀ$ ls -l /sys/bus/acpi/devices/device:2d/physical_node lrwxrwxrwx 1 root root 0 Feb 12 13:22 /sys/bus/acpi/devices/device:2d/physical_node -> ../../../../../pci0000:00/0000:00:08.1/0000:c2:00.4”h]”hŒÀ$ ls -l /sys/bus/acpi/devices/device:2d/physical_node lrwxrwxrwx 1 root root 0 Feb 12 13:22 /sys/bus/acpi/devices/device:2d/physical_node -> ../../../../../pci0000:00/0000:00:08.1/0000:c2:00.4”…”�”}”hjosbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´K�hj`h²hubhï)�”}”(hŒ[So there you have it: the PCI device associated with this GPIO wakeup was ``0000:c2:00.4``.”h]”(hŒJSo there you have it: the PCI device associated with this GPIO wakeup was ”…”�”}”(hj}h²hh³Nh´Nubj )�”}”(hŒ``0000:c2:00.4``”h]”hŒ 0000:c2:00.4”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}ubhŒ.”…”�”}”(hj}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K„hj`h²hubhï)�”}”(hŒJThe ``amd_s2idle.py`` script will capture most of these artifacts for you.”h]”(hŒThe ”…”�”}”(hj�h²hh³Nh´Nubj )�”}”(hŒ``amd_s2idle.py``”h]”hŒ amd_s2idle.py”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubhŒ5 script will capture most of these artifacts for you.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K†hj`h²hubeh}”(h]”Œ#spurious-s2idle-wakeups-from-a-gpio”ah ]”h"]”Œ#spurious s2idle wakeups from a gpio”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KNubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒs2idle PM debug messages”h]”hŒs2idle PM debug messages”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÅh²hh³hÇh´K‰ubhï)�”}”(hX-During the s2idle flow on AMD systems, the ACPI LPS0 driver is responsible to check all uPEP constraints. Failing uPEP constraints does not prevent s0i3 entry. This means that if some constraints are not met, it is possible the kernel may attempt to enter s2idle even if there are some known issues.”h]”hX-During the s2idle flow on AMD systems, the ACPI LPS0 driver is responsible to check all uPEP constraints. Failing uPEP constraints does not prevent s0i3 entry. This means that if some constraints are not met, it is possible the kernel may attempt to enter s2idle even if there are some known issues.”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K‹hjÅh²hubhï)�”}”(hX,To activate PM debugging, either specify ``pm_debug_messagess`` kernel command-line option at boot or write to ``/sys/power/pm_debug_messages``. Unmet constraints will be displayed in the kernel log and can be viewed by logging tools that process kernel ring buffer like ``dmesg`` or ``journalctl``."”h]”(hŒ)To activate PM debugging, either specify ”…”�”}”(hjäh²hh³Nh´Nubj )�”}”(hŒ``pm_debug_messagess``”h]”hŒpm_debug_messagess”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubhŒ0 kernel command-line option at boot or write to ”…”�”}”(hjäh²hh³Nh´Nubj )�”}”(hŒ ``/sys/power/pm_debug_messages``”h]”hŒ/sys/power/pm_debug_messages”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubhŒ€. Unmet constraints will be displayed in the kernel log and can be viewed by logging tools that process kernel ring buffer like ”…”�”}”(hjäh²hh³Nh´Nubj )�”}”(hŒ ``dmesg``”h]”hŒdmesg”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubhŒ or ”…”�”}”(hjäh²hh³Nh´Nubj )�”}”(hŒ``journalctl``”h]”hŒ journalctl”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubhŒ.â€�”…”�”}”(hjäh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K�hjÅh²hubhï)�”}”(hX+If the system freezes on entry/exit before these messages are flushed, a useful debugging tactic is to unbind the ``amd_pmc`` driver to prevent notification to the platform to start s0i3 entry. This will stop the system from freezing on entry or exit and let you view all the failed constraints. ::”h]”(hŒrIf the system freezes on entry/exit before these messages are flushed, a useful debugging tactic is to unbind the ”…”�”}”(hj:h²hh³Nh´Nubj )�”}”(hŒ ``amd_pmc``”h]”hŒamd_pmc”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:ubhŒ« driver to prevent notification to the platform to start s0i3 entry. This will stop the system from freezing on entry or exit and let you view all the failed constraints.”…”�”}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K–hjÅh²hubj)�”}”(hŒDcd /sys/bus/platform/drivers/amd_pmc ls | grep AMD | sudo tee unbind”h]”hŒDcd /sys/bus/platform/drivers/amd_pmc ls | grep AMD | sudo tee unbind”…”�”}”hjZsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´KœhjÅh²hubhï)�”}”(hŒSAfter doing this, run the suspend cycle and look specifically for errors around: ::”h]”hŒPAfter doing this, run the suspend cycle and look specifically for errors around:”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KŸhjÅh²hubj)�”}”(hŒHACPI: LPI: Constraint not met; min power state:%s current power state:%s”h]”hŒHACPI: LPI: Constraint not met; min power state:%s current power state:%s”…”�”}”hjvsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´K¡hjÅh²hubeh}”(h]”Œs2idle-pm-debug-messages”ah ]”h"]”Œs2idle pm debug messages”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K‰ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ$Historical examples of s2idle issues”h]”hŒ$Historical examples of s2idle issues”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjŒh²hh³hÇh´K¤ubhï)�”}”(hŒ˜To help understand the types of issues that can occur and how to debug them, here are some historical examples of s2idle issues that have been resolved.”h]”hŒ˜To help understand the types of issues that can occur and how to debug them, here are some historical examples of s2idle issues that have been resolved.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¦hjŒh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒCore offlining”h]”hŒCore offlining”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj«h²hh³hÇh´Kªubhï)�”}”(hXõAn end user had reported that taking a core offline would prevent the system from properly entering s0i3. This was debugged using internal AMD tools to capture and display a stream of metrics from the hardware showing what changed when a core was offlined. It was determined that the hardware didn't get notification the offline cores were in the deepest state, and so it prevented CPU from going into the deepest state. The issue was debugged to a missing command to put cores into C3 upon offline.”h]”hX÷An end user had reported that taking a core offline would prevent the system from properly entering s0i3. This was debugged using internal AMD tools to capture and display a stream of metrics from the hardware showing what changed when a core was offlined. It was determined that the hardware didn’t get notification the offline cores were in the deepest state, and so it prevented CPU from going into the deepest state. The issue was debugged to a missing command to put cores into C3 upon offline.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K«hj«h²hubhï)�”}”(hŒ‚`commit d6b88ce2eb9d2 ("ACPI: processor idle: Allow playing dead in C3 state") `_”h]”(jh)�”}”(hjÌh]”hŒQcommit d6b88ce2eb9d2 (“ACPI: processor idle: Allow playing dead in C3 stateâ€�)”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒMcommit d6b88ce2eb9d2 ("ACPI: processor idle: Allow playing dead in C3 state")”jyŒ/https://git.kernel.org/torvalds/c/d6b88ce2eb9d2”uh1jghjÊubj|)�”}”(hŒ2 ”h]”h}”(h]”ŒGcommit-d6b88ce2eb9d2-acpi-processor-idle-allow-playing-dead-in-c3-state”ah ]”h"]”ŒMcommit d6b88ce2eb9d2 ("acpi: processor idle: allow playing dead in c3 state")”ah$]”h&]”Œrefuri”jÝuh1j{jŠKhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K³hj«h²hubeh}”(h]”Œcore-offlining”ah ]”h"]”Œcore offlining”ah$]”h&]”uh1hÈhjŒh²hh³hÇh´KªubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒCorruption after resume”h]”hŒCorruption after resume”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjùh²hh³hÇh´K¶ubhï)�”}”(hX`A big problem that occurred with Rembrandt was that there was graphical corruption after resume. This happened because of a misalignment of PSP and driver responsibility. The PSP will save and restore DMCUB, but the driver assumed it needed to reset DMCUB on resume. This actually was a misalignment for earlier silicon as well, but was not observed.”h]”hX`A big problem that occurred with Rembrandt was that there was graphical corruption after resume. This happened because of a misalignment of PSP and driver responsibility. The PSP will save and restore DMCUB, but the driver assumed it needed to reset DMCUB on resume. This actually was a misalignment for earlier silicon as well, but was not observed.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K·hjùh²hubhï)�”}”(hŒ†`commit 79d6b9351f086 ("drm/amd/display: Don't reinitialize DMCUB on s0ix resume") `_”h]”(jh)�”}”(hjh]”hŒWcommit 79d6b9351f086 (“drm/amd/display: Don’t reinitialize DMCUB on s0ix resumeâ€�)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒQcommit 79d6b9351f086 ("drm/amd/display: Don't reinitialize DMCUB on s0ix resume")”jyŒ/https://git.kernel.org/torvalds/c/79d6b9351f086”uh1jghjubj|)�”}”(hŒ2 ”h]”h}”(h]”ŒLcommit-79d6b9351f086-drm-amd-display-don-t-reinitialize-dmcub-on-s0ix-resume”ah ]”h"]”ŒQcommit 79d6b9351f086 ("drm/amd/display: don't reinitialize dmcub on s0ix resume")”ah$]”h&]”Œrefuri”j+uh1j{jŠKhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¾hjùh²hubeh}”(h]”Œcorruption-after-resume”ah ]”h"]”Œcorruption after resume”ah$]”h&]”uh1hÈhjŒh²hh³hÇh´K¶ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒBack to Back suspends fail”h]”hŒBack to Back suspends fail”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjGh²hh³hÇh´KÁubhï)�”}”(hŒ·When using a wakeup source that triggers the IRQ to wakeup, a bug in the pinctrl-amd driver may capture the wrong state of the IRQ and prevent the system going back to sleep properly.”h]”hŒ·When using a wakeup source that triggers the IRQ to wakeup, a bug in the pinctrl-amd driver may capture the wrong state of the IRQ and prevent the system going back to sleep properly.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÂhjGh²hubhï)�”}”(hŒ”`commit b8c824a869f22 ("pinctrl: amd: Don't save/restore interrupt status and wake status bits") `_”h]”(jh)�”}”(hjhh]”hŒecommit b8c824a869f22 (“pinctrl: amd: Don’t save/restore interrupt status and wake status bitsâ€�)”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ_commit b8c824a869f22 ("pinctrl: amd: Don't save/restore interrupt status and wake status bits")”jyŒ/https://git.kernel.org/torvalds/c/b8c824a869f22”uh1jghjfubj|)�”}”(hŒ2 ”h]”h}”(h]”ŒYcommit-b8c824a869f22-pinctrl-amd-don-t-save-restore-interrupt-status-and-wake-status-bits”ah ]”h"]”Œ_commit b8c824a869f22 ("pinctrl: amd: don't save/restore interrupt status and wake status bits")”ah$]”h&]”Œrefuri”jyuh1j{jŠKhjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÆhjGh²hubeh}”(h]”Œback-to-back-suspends-fail”ah ]”h"]”Œback to back suspends fail”ah$]”h&]”uh1hÈhjŒh²hh³hÇh´KÁubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ+Spurious timer based wakeup after 5 minutes”h]”hŒ+Spurious timer based wakeup after 5 minutes”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj•h²hh³hÇh´KÉubhï)�”}”(hŒ®The HPET was being used to program the wakeup source for the system, however this was causing a spurious wakeup after 5 minutes. The correct alarm to use was the ACPI alarm.”h]”hŒ®The HPET was being used to program the wakeup source for the system, however this was causing a spurious wakeup after 5 minutes. The correct alarm to use was the ACPI alarm.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÊhj•h²hubhï)�”}”(hŒ…`commit 3d762e21d5637 ("rtc: cmos: Use ACPI alarm for non-Intel x86 systems too") `_”h]”(jh)�”}”(hj¶h]”hŒTcommit 3d762e21d5637 (“rtc: cmos: Use ACPI alarm for non-Intel x86 systems tooâ€�)”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒPcommit 3d762e21d5637 ("rtc: cmos: Use ACPI alarm for non-Intel x86 systems too")”jyŒ/https://git.kernel.org/torvalds/c/3d762e21d5637”uh1jghj´ubj|)�”}”(hŒ2 ”h]”h}”(h]”ŒJcommit-3d762e21d5637-rtc-cmos-use-acpi-alarm-for-non-intel-x86-systems-too”ah ]”h"]”ŒPcommit 3d762e21d5637 ("rtc: cmos: use acpi alarm for non-intel x86 systems too")”ah$]”h&]”Œrefuri”jÇuh1j{jŠKhj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÎhj•h²hubeh}”(h]”Œ+spurious-timer-based-wakeup-after-5-minutes”ah ]”h"]”Œ+spurious timer based wakeup after 5 minutes”ah$]”h&]”uh1hÈhjŒh²hh³hÇh´KÉubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒDisk disappears after resume”h]”hŒDisk disappears after resume”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjãh²hh³hÇh´KÑubhï)�”}”(hŒñAfter resuming from s2idle, the NVME disk would disappear. This was due to the BIOS not specifying the _DSD StorageD3Enable property. This caused the NVME driver not to put the disk into the expected state at suspend and to fail on resume.”h]”hŒñAfter resuming from s2idle, the NVME disk would disappear. This was due to the BIOS not specifying the _DSD StorageD3Enable property. This caused the NVME driver not to put the disk into the expected state at suspend and to fail on resume.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÒhjãh²hubhï)�”}”(hŒ`commit e79a10652bbd3 ("ACPI: x86: Force StorageD3Enable on more products") `_”h]”(jh)�”}”(hjh]”hŒNcommit e79a10652bbd3 (“ACPI: x86: Force StorageD3Enable on more productsâ€�)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒJcommit e79a10652bbd3 ("ACPI: x86: Force StorageD3Enable on more products")”jyŒ/https://git.kernel.org/torvalds/c/e79a10652bbd3”uh1jghjubj|)�”}”(hŒ2 ”h]”h}”(h]”ŒDcommit-e79a10652bbd3-acpi-x86-force-storaged3enable-on-more-products”ah ]”h"]”ŒJcommit e79a10652bbd3 ("acpi: x86: force storaged3enable on more products")”ah$]”h&]”Œrefuri”juh1j{jŠKhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K×hjãh²hubeh}”(h]”Œdisk-disappears-after-resume”ah ]”h"]”Œdisk disappears after resume”ah$]”h&]”uh1hÈhjŒh²hh³hÇh´KÑubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Spurious IRQ1”h]”hŒ Spurious IRQ1”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj1h²hh³hÇh´KÚubhï)�”}”(hŒƒA number of Renoir, Lucienne, Cezanne, & Barcelo platforms have a platform firmware bug where IRQ1 is triggered during s0i3 resume.”h]”hŒƒA number of Renoir, Lucienne, Cezanne, & Barcelo platforms have a platform firmware bug where IRQ1 is triggered during s0i3 resume.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÛhj1h²hubhï)�”}”(hŒsThis was fixed in the platform firmware, but a number of systems didn't receive any more platform firmware updates.”h]”hŒuThis was fixed in the platform firmware, but a number of systems didn’t receive any more platform firmware updates.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÞhj1h²hubhï)�”}”(hŒƒ`commit 8e60615e89321 ("platform/x86/amd: pmc: Disable IRQ1 wakeup for RN/CZN") `_”h]”(jh)�”}”(hj`h]”hŒRcommit 8e60615e89321 (“platform/x86/amd: pmc: Disable IRQ1 wakeup for RN/CZNâ€�)”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒNcommit 8e60615e89321 ("platform/x86/amd: pmc: Disable IRQ1 wakeup for RN/CZN")”jyŒ/https://git.kernel.org/torvalds/c/8e60615e89321”uh1jghj^ubj|)�”}”(hŒ2 ”h]”h}”(h]”ŒHcommit-8e60615e89321-platform-x86-amd-pmc-disable-irq1-wakeup-for-rn-czn”ah ]”h"]”ŒNcommit 8e60615e89321 ("platform/x86/amd: pmc: disable irq1 wakeup for rn/czn")”ah$]”h&]”Œrefuri”jquh1j{jŠKhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Káhj1h²hubeh}”(h]”Œ spurious-irq1”ah ]”h"]”Œ spurious irq1”ah$]”h&]”uh1hÈhjŒh²hh³hÇh´KÚubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒHardware timeout”h]”hŒHardware timeout”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj�h²hh³hÇh´Käubhï)�”}”(hŒùThe hardware performs many actions besides accepting the values from amd-pmc driver. As the communication path with the hardware is a mailbox, it's possible that it might not respond quickly enough. This issue manifested as a failure to suspend: ::”h]”hŒøThe hardware performs many actions besides accepting the values from amd-pmc driver. As the communication path with the hardware is a mailbox, it’s possible that it might not respond quickly enough. This issue manifested as a failure to suspend:”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kåhj�h²hubj)�”}”(hŒ„PM: dpm_run_callback(): acpi_subsys_suspend_noirq+0x0/0x50 returns -110 amd_pmc AMDI0005:00: PM: failed to suspend noirq: error -110”h]”hŒ„PM: dpm_run_callback(): acpi_subsys_suspend_noirq+0x0/0x50 returns -110 amd_pmc AMDI0005:00: PM: failed to suspend noirq: error -110”…”�”}”hj¬sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´Kêhj�h²hubhï)�”}”(hŒKThe timing problem was identified by comparing the values of the idle mask.”h]”hŒKThe timing problem was identified by comparing the values of the idle mask.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kíhj�h²hubhï)�”}”(hŒ‹`commit 3c3c8e88c8712 ("platform/x86: amd-pmc: Increase the response register timeout") `_”h]”(jh)�”}”(hjÊh]”hŒZcommit 3c3c8e88c8712 (“platform/x86: amd-pmc: Increase the response register timeoutâ€�)”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒVcommit 3c3c8e88c8712 ("platform/x86: amd-pmc: Increase the response register timeout")”jyŒ/https://git.kernel.org/torvalds/c/3c3c8e88c8712”uh1jghjÈubj|)�”}”(hŒ2 ”h]”h}”(h]”ŒPcommit-3c3c8e88c8712-platform-x86-amd-pmc-increase-the-response-register-timeout”ah ]”h"]”ŒVcommit 3c3c8e88c8712 ("platform/x86: amd-pmc: increase the response register timeout")”ah$]”h&]”Œrefuri”jÛuh1j{jŠKhjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kïhj�h²hubeh}”(h]”Œhardware-timeout”ah ]”h"]”Œhardware timeout”ah$]”h&]”uh1hÈhjŒh²hh³hÇh´KäubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ2Failed to reach hardware sleep state with panel on”h]”hŒ2Failed to reach hardware sleep state with panel on”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj÷h²hh³hÇh´Kòubhï)�”}”(hŒ�On some Strix systems certain panels were observed to block the system from entering a hardware sleep state if the internal panel was on during the sequence.”h]”hŒ�On some Strix systems certain panels were observed to block the system from entering a hardware sleep state if the internal panel was on during the sequence.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kóhj÷h²hubhï)�”}”(hŒªEven though the panel got turned off during suspend it exposed a timing problem where an interrupt caused the display hardware to wake up and block low power state entry.”h]”hŒªEven though the panel got turned off during suspend it exposed a timing problem where an interrupt caused the display hardware to wake up and block low power state entry.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Köhj÷h²hubhï)�”}”(hŒ�`commit 40b8c14936bd2 ("drm/amd/display: Disable unneeded hpd interrupts during dm_init") `_”h]”(jh)�”}”(hj&h]”hŒ\commit 40b8c14936bd2 (“drm/amd/display: Disable unneeded hpd interrupts during dm_initâ€�)”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒXcommit 40b8c14936bd2 ("drm/amd/display: Disable unneeded hpd interrupts during dm_init")”jyŒ/https://git.kernel.org/torvalds/c/40b8c14936bd2”uh1jghj$ubj|)�”}”(hŒ2 ”h]”h}”(h]”ŒScommit-40b8c14936bd2-drm-amd-display-disable-unneeded-hpd-interrupts-during-dm-init”ah ]”h"]”ŒXcommit 40b8c14936bd2 ("drm/amd/display: disable unneeded hpd interrupts during dm_init")”ah$]”h&]”Œrefuri”j7uh1j{jŠKhj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kúhj÷h²hubeh}”(h]”Œ2failed-to-reach-hardware-sleep-state-with-panel-on”ah ]”h"]”Œ2failed to reach hardware sleep state with panel on”ah$]”h&]”uh1hÈhjŒh²hh³hÇh´Kòubeh}”(h]”Œ$historical-examples-of-s2idle-issues”ah ]”h"]”Œ$historical examples of s2idle issues”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K¤ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Runtime power consumption issues”h]”hŒ Runtime power consumption issues”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj[h²hh³hÇh´Kýubhï)�”}”(hŒõRuntime power consumption is influenced by many factors, including but not limited to the configuration of the PCIe Active State Power Management (ASPM), the display brightness, the EPP policy of the CPU, and the power management of the devices.”h]”hŒõRuntime power consumption is influenced by many factors, including but not limited to the configuration of the PCIe Active State Power Management (ASPM), the display brightness, the EPP policy of the CPU, and the power management of the devices.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kÿhj[h²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒASPM”h]”hŒASPM”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjzh²hh³hÇh´Mubhï)�”}”(hX0For the best runtime power consumption, ASPM should be programmed as intended by the BIOS from the hardware vendor. To accomplish this the Linux kernel should be compiled with ``CONFIG_PCIEASPM_DEFAULT`` set to ``y`` and the sysfs file ``/sys/module/pcie_aspm/parameters/policy`` should not be modified.”h]”(hŒ±For the best runtime power consumption, ASPM should be programmed as intended by the BIOS from the hardware vendor. To accomplish this the Linux kernel should be compiled with ”…”�”}”(hj‹h²hh³Nh´Nubj )�”}”(hŒ``CONFIG_PCIEASPM_DEFAULT``”h]”hŒCONFIG_PCIEASPM_DEFAULT”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubhŒ set to ”…”�”}”(hj‹h²hh³Nh´Nubj )�”}”(hŒ``y``”h]”hŒy”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubhŒ and the sysfs file ”…”�”}”(hj‹h²hh³Nh´Nubj )�”}”(hŒ+``/sys/module/pcie_aspm/parameters/policy``”h]”hŒ'/sys/module/pcie_aspm/parameters/policy”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubhŒ should not be modified.”…”�”}”(hj‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mhjzh²hubhï)�”}”(hŒ{Most notably, if L1.2 is not configured properly for any devices, the SoC will not be able to enter the deepest idle state.”h]”hŒ{Most notably, if L1.2 is not configured properly for any devices, the SoC will not be able to enter the deepest idle state.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M hjzh²hubeh}”(h]”Œaspm”ah ]”h"]”Œaspm”ah$]”h&]”uh1hÈhj[h²hh³hÇh´MubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ EPP Policy”h]”hŒ EPP Policy”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjåh²hh³hÇh´Mubhï)�”}”(hŒÔThe ``energy_performance_preference`` sysfs file can be used to set a bias of efficiency or performance for a CPU. This has a direct relationship on the battery life when more heavily biased towards performance.”h]”(hŒThe ”…”�”}”(hjöh²hh³Nh´Nubj )�”}”(hŒ!``energy_performance_preference``”h]”hŒenergy_performance_preference”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöubhŒ¯ sysfs file can be used to set a bias of efficiency or performance for a CPU. This has a direct relationship on the battery life when more heavily biased towards performance.”…”�”}”(hjöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mhjåh²hubeh}”(h]”Œ epp-policy”ah ]”h"]”Œ epp policy”ah$]”h&]”uh1hÈhj[h²hh³hÇh´Mubeh}”(h]”Œ runtime-power-consumption-issues”ah ]”h"]”Œ runtime power consumption issues”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KýubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒBIOS debug messages”h]”hŒBIOS debug messages”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj& h²hh³hÇh´Mubhï)�”}”(hŒÛMost OEM machines don't have a serial UART for outputting kernel or BIOS debug messages. However BIOS debug messages are useful for understanding both BIOS bugs and bugs with the Linux kernel drivers that call BIOS AML.”h]”hŒÝMost OEM machines don’t have a serial UART for outputting kernel or BIOS debug messages. However BIOS debug messages are useful for understanding both BIOS bugs and bugs with the Linux kernel drivers that call BIOS AML.”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mhj& h²hubhï)�”}”(hŒªAs the BIOS on most OEM AMD systems are based off an AMD reference BIOS, the infrastructure used for exporting debugging messages is often the same as AMD reference BIOS.”h]”hŒªAs the BIOS on most OEM AMD systems are based off an AMD reference BIOS, the infrastructure used for exporting debugging messages is often the same as AMD reference BIOS.”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mhj& h²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒManually Parsing”h]”hŒManually Parsing”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjS h²hh³hÇh´M!ubhï)�”}”(hŒãThere is generally an ACPI method ``\M460`` that different paths of the AML will call to emit a message to the BIOS serial log. This method takes 7 arguments, with the first being a string and the rest being optional integers::”h]”(hŒ"There is generally an ACPI method ”…”�”}”(hjd h²hh³Nh´Nubj )�”}”(hŒ ``\M460``”h]”hŒ\M460”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd ubhŒ· that different paths of the AML will call to emit a message to the BIOS serial log. This method takes 7 arguments, with the first being a string and the rest being optional integers:”…”�”}”(hjd h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M"hjS h²hubj)�”}”(hŒMethod (M460, 7, Serialized)”h]”hŒMethod (M460, 7, Serialized)”…”�”}”hj„ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´M'hjS h²hubhï)�”}”(hŒKHere is an example of a string that BIOS AML may call out using ``\M460``::”h]”(hŒ@Here is an example of a string that BIOS AML may call out using ”…”�”}”(hj’ h²hh³Nh´Nubj )�”}”(hŒ ``\M460``”h]”hŒ\M460”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ ubhŒ:”…”�”}”(hj’ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M)hjS h²hubj)�”}”(hŒdM460 (" OEM-ASL-PCIe Address (0x%X)._REG (%d %d) PCSA = %d\n", DADR, Arg0, Arg1, PCSA, Zero, Zero)”h]”hŒdM460 (" OEM-ASL-PCIe Address (0x%X)._REG (%d %d) PCSA = %d\n", DADR, Arg0, Arg1, PCSA, Zero, Zero)”…”�”}”hj² sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´M+hjS h²hubhï)�”}”(hXgNormally when executed, the ``\M460`` method would populate the additional arguments into the string. In order to get these messages from the Linux kernel a hook has been added into ACPICA that can capture the *arguments* sent to ``\M460`` and print them to the kernel ring buffer. For example the following message could be emitted into kernel ring buffer::”h]”(hŒNormally when executed, the ”…”�”}”(hjÀ h²hh³Nh´Nubj )�”}”(hŒ ``\M460``”h]”hŒ\M460”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ ubhŒ® method would populate the additional arguments into the string. In order to get these messages from the Linux kernel a hook has been added into ACPICA that can capture the ”…”�”}”(hjÀ h²hh³Nh´NubjF)�”}”(hŒ *arguments*”h]”hŒ arguments”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÀ ubhŒ sent to ”…”�”}”(hjÀ h²hh³Nh´Nubj )�”}”(hŒ ``\M460``”h]”hŒ\M460”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ ubhŒv and print them to the kernel ring buffer. For example the following message could be emitted into kernel ring buffer:”…”�”}”(hjÀ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M-hjS h²hubj)�”}”(hŒxextrace-0174 ex_trace_args : " OEM-ASL-PCIe Address (0x%X)._REG (%d %d) PCSA = %d\n", ec106000, 2, 1, 1, 0, 0”h]”hŒxextrace-0174 ex_trace_args : " OEM-ASL-PCIe Address (0x%X)._REG (%d %d) PCSA = %d\n", ec106000, 2, 1, 1, 0, 0”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´M3hjS h²hubhï)�”}”(hŒÊIn order to get these messages, you need to compile with ``CONFIG_ACPI_DEBUG`` and then turn on the following ACPICA tracing parameters. This can be done either on the kernel command line or at runtime:”h]”(hŒ9In order to get these messages, you need to compile with ”…”�”}”(hj h²hh³Nh´Nubj )�”}”(hŒ``CONFIG_ACPI_DEBUG``”h]”hŒCONFIG_ACPI_DEBUG”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ| and then turn on the following ACPICA tracing parameters. This can be done either on the kernel command line or at runtime:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M5hjS h²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ ``acpi.trace_method_name=\M460``”h]”hï)�”}”(hj; h]”j )�”}”(hŒ ``acpi.trace_method_name=\M460``”h]”hŒacpi.trace_method_name=\M460”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M9hj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j7 hj4 h²hh³hÇh´Nubj8 )�”}”(hŒ``acpi.trace_state=method`` ”h]”hï)�”}”(hŒ``acpi.trace_state=method``”h]”j )�”}”(hj` h]”hŒacpi.trace_state=method”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M:hjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j7 hj4 h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”j uh1j2 h³hÇh´M9hjS h²hubhï)�”}”(hŒÖNOTE: These can be very noisy at bootup. If you turn these parameters on the kernel command, please also consider turning up ``CONFIG_LOG_BUF_SHIFT`` to a larger size such as 17 to avoid losing early boot messages.”h]”(hŒ}NOTE: These can be very noisy at bootup. If you turn these parameters on the kernel command, please also consider turning up ”…”�”}”(hj‚ h²hh³Nh´Nubj )�”}”(hŒ``CONFIG_LOG_BUF_SHIFT``”h]”hŒCONFIG_LOG_BUF_SHIFT”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚ ubhŒA to a larger size such as 17 to avoid losing early boot messages.”…”�”}”(hj‚ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´M<hjS h²hubeh}”(h]”Œmanually-parsing”ah ]”h"]”Œmanually parsing”ah$]”h&]”uh1hÈhj& h²hh³hÇh´M!ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒTool assisted Parsing”h]”hŒTool assisted Parsing”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjª h²hh³hÇh´MAubhï)�”}”(hX As mentioned above, parsing by hand can be tedious, especially with a lot of messages. To help with this, a tool has been created at `amd-debug-tools `_ to help parse the messages.”h]”(hŒ†As mentioned above, parsing by hand can be tedious, especially with a lot of messages. To help with this, a tool has been created at ”…”�”}”(hj» h²hh³Nh´Nubjh)�”}”(hŒg`amd-debug-tools `_”h]”hŒamd-debug-tools”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œamd-debug-tools”jyŒRhttps://git.kernel.org/pub/scm/linux/kernel/git/superm1/amd-debug-tools.git/about/”uh1jghj» ubj|)�”}”(hŒU ”h]”h}”(h]”Œid1”ah ]”h"]”h$]”Œamd-debug-tools”ah&]”Œrefuri”jÓ uh1j{jŠKhj» ubhŒ to help parse the messages.”…”�”}”(hj» h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MBhjª h²hubeh}”(h]”Œtool-assisted-parsing”ah ]”h"]”Œtool assisted parsing”ah$]”h&]”uh1hÈhj& h²hh³hÇh´MAubeh}”(h]”Œbios-debug-messages”ah ]”h"]”Œbios debug messages”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´MubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒRandom reboot issues”h]”hŒRandom reboot issues”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjû h²hh³hÇh´MHubhï)�”}”(hŒWhen a random reboot occurs, the high-level reason for the reboot is stored in a register that will persist onto the next boot.”h]”hŒWhen a random reboot occurs, the high-level reason for the reboot is stored in a register that will persist onto the next boot.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MJhjû h²hubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ There are 6 classes of reasons for the reboot: * Software induced * Power state transition * Pin induced * Hardware induced * Remote reset * Internal CPU event ”h]”(hŒterm”“”)�”}”(hŒ.There are 6 classes of reasons for the reboot:”h]”hŒ.There are 6 classes of reasons for the reboot:”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% h³hÇh´MShj! ubhŒ definition”“”)�”}”(hhh]”j3 )�”}”(hhh]”(j8 )�”}”(hŒSoftware induced”h]”hï)�”}”(hj? h]”hŒSoftware induced”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MNhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1j7 hj: ubj8 )�”}”(hŒPower state transition”h]”hï)�”}”(hjV h]”hŒPower state transition”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MOhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1j7 hj: ubj8 )�”}”(hŒ Pin induced”h]”hï)�”}”(hjm h]”hŒ Pin induced”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MPhjk ubah}”(h]”h ]”h"]”h$]”h&]”uh1j7 hj: ubj8 )�”}”(hŒHardware induced”h]”hï)�”}”(hj„ h]”hŒHardware induced”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MQhj‚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j7 hj: ubj8 )�”}”(hŒ Remote reset”h]”hï)�”}”(hj› h]”hŒ Remote reset”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MRhj™ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j7 hj: ubj8 )�”}”(hŒInternal CPU event ”h]”hï)�”}”(hŒInternal CPU event”h]”hŒInternal CPU event”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´MShj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1j7 hj: ubeh}”(h]”h ]”h"]”h$]”h&]”j� j uh1j2 h³hÇh´MNhj7 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j5 hj! ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´MShj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjû h²hh³Nh´NubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K!uh1jê hjç ubjë )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K!uh1jê hjç ubjë )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K!uh1jê hjç ubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hï)�”}”(hŒBit”h]”hŒBit”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubj )�”}”(hhh]”hï)�”}”(hŒType”h]”hŒType”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj- ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubj )�”}”(hhh]”hï)�”}”(hŒReason”h]”hŒReason”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjç ubhŒtbody”“”)�”}”(hhh]”(j )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ0”h]”hŒ0”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjo ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjl ubj )�”}”(hhh]”hï)�”}”(hŒPin”h]”hŒPin”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj† ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjl ubj )�”}”(hhh]”hï)�”}”(hŒ&thermal pin BP_THERMTRIP_L was tripped”h]”hŒ&thermal pin BP_THERMTRIP_L was tripped”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjl ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ1”h]”hŒ1”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjº ubj )�”}”(hhh]”hï)�”}”(hŒPin”h]”hŒPin”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjÔ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjº ubj )�”}”(hhh]”hï)�”}”(hŒ&power button was pressed for 4 seconds”h]”hŒ&power button was pressed for 4 seconds”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjº ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ2”h]”hŒ2”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubj )�”}”(hhh]”hï)�”}”(hŒPin”h]”hŒPin”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubj )�”}”(hhh]”hï)�”}”(hŒshutdown pin was tripped”h]”hŒshutdown pin was tripped”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ4”h]”hŒ4”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjY ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjV ubj )�”}”(hhh]”hï)�”}”(hŒRemote”h]”hŒRemote”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjV ubj )�”}”(hhh]”hï)�”}”(hŒ)remote ASF power off command was received”h]”hŒ)remote ASF power off command was received”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjV ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ9”h]”hŒ9”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj§ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¤ ubj )�”}”(hhh]”hï)�”}”(hŒInternal”h]”hŒInternal”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj¾ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¤ ubj )�”}”(hhh]”hï)�”}”(hŒ&internal CPU thermal limit was tripped”h]”hŒ&internal CPU thermal limit was tripped”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¤ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ16”h]”hŒ16”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjõ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjò ubj )�”}”(hhh]”hï)�”}”(hŒPin”h]”hŒPin”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjò ubj )�”}”(hhh]”hï)�”}”(hŒ)system reset pin BP_SYS_RST_L was tripped”h]”hŒ)system reset pin BP_SYS_RST_L was tripped”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjò ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ17”h]”hŒ17”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj@ubj )�”}”(hhh]”hï)�”}”(hŒSoftware”h]”hŒSoftware”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj@ubj )�”}”(hhh]”hï)�”}”(hŒsoftware issued PCI reset”h]”hŒsoftware issued PCI reset”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ18”h]”hŒ18”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŽubj )�”}”(hhh]”hï)�”}”(hŒSoftware”h]”hŒSoftware”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŽubj )�”}”(hhh]”hï)�”}”(hŒ2software wrote 0x4 to reset control register 0xCF9”h]”hŒ2software wrote 0x4 to reset control register 0xCF9”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ19”h]”hŒ19”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜubj )�”}”(hhh]”hï)�”}”(hŒSoftware”h]”hŒSoftware”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜubj )�”}”(hhh]”hï)�”}”(hŒ2software wrote 0x6 to reset control register 0xCF9”h]”hŒ2software wrote 0x6 to reset control register 0xCF9”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ20”h]”hŒ20”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj*ubj )�”}”(hhh]”hï)�”}”(hŒSoftware”h]”hŒSoftware”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj*ubj )�”}”(hhh]”hï)�”}”(hŒ2software wrote 0xE to reset control register 0xCF9”h]”hŒ2software wrote 0xE to reset control register 0xCF9”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ21”h]”hŒ21”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjxubj )�”}”(hhh]”hï)�”}”(hŒ ACPI-state”h]”hŒ ACPI-state”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjxubj )�”}”(hhh]”hï)�”}”(hŒ$ACPI power state transition occurred”h]”hŒ$ACPI power state transition occurred”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ22”h]”hŒ22”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÆubj )�”}”(hhh]”hï)�”}”(hŒPin”h]”hŒPin”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÆubj )�”}”(hhh]”hï)�”}”(hŒ'keyboard reset pin KB_RST_L was tripped”h]”hŒ'keyboard reset pin KB_RST_L was tripped”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ23”h]”hŒ23”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hhh]”hï)�”}”(hŒInternal”h]”hŒInternal”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hhh]”hï)�”}”(hŒ$internal CPU shutdown event occurred”h]”hŒ$internal CPU shutdown event occurred”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ24”h]”hŒ24”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjbubj )�”}”(hhh]”hï)�”}”(hŒHardware”h]”hŒHardware”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjbubj )�”}”(hhh]”hï)�”}”(hŒ6system failed to boot before failed boot timer expired”h]”hŒ6system failed to boot before failed boot timer expired”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ25”h]”hŒ25”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj°ubj )�”}”(hhh]”hï)�”}”(hŒHardware”h]”hŒHardware”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj°ubj )�”}”(hhh]”hï)�”}”(hŒhardware watchdog timer expired”h]”hŒhardware watchdog timer expired”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ26”h]”hŒ26”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjþubj )�”}”(hhh]”hï)�”}”(hŒRemote”h]”hŒRemote”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjþubj )�”}”(hhh]”hï)�”}”(hŒ%remote ASF reset command was received”h]”hŒ%remote ASF reset command was received”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ27”h]”hŒ27”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjLubj )�”}”(hhh]”hï)�”}”(hŒInternal”h]”hŒInternal”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjLubj )�”}”(hhh]”hï)�”}”(hŒ:an uncorrected error caused a data fabric sync flood event”h]”hŒ:an uncorrected error caused a data fabric sync flood event”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ub•j )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ29”h]”hŒ29”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjšubj )�”}”(hhh]”hï)�”}”(hŒInternal”h]”hŒInternal”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjšubj )�”}”(hhh]”hï)�”}”(hŒ'FCH and MP1 failed warm reset handshake”h]”hŒ'FCH and MP1 failed warm reset handshake”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ30”h]”hŒ30”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjèubj )�”}”(hhh]”hï)�”}”(hŒInternal”h]”hŒInternal”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjèubj )�”}”(hhh]”hï)�”}”(hŒa parity error occurred”h]”hŒa parity error occurred”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubj )�”}”(hhh]”(j )�”}”(hhh]”hï)�”}”(hŒ31”h]”hŒ31”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubj )�”}”(hhh]”hï)�”}”(hŒInternal”h]”hŒInternal”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubj )�”}”(hhh]”hï)�”}”(hŒ$a software sync flood event occurred”h]”hŒ$a software sync flood event occurred”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hji ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jg hjç ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jå hjâ ubah}”(h]”h ]”h"]”h$]”h&]”Œalign”Œleft”uh1jà hjû h²hh³hÇh´Nubhï)�”}”(hŒ¯This information is read by the kernel at bootup and printed into the syslog. When a random reboot occurs this message can be helpful to determine the next component to debug.”h]”hŒ¯This information is read by the kernel at bootup and printed into the syslog. When a random reboot occurs this message can be helpful to determine the next component to debug.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mnhjû h²hubhï)�”}”(hŒ\For example, if bit 19 was set, you will get a message like this in the log on next bootup::”h]”hŒ[For example, if bit 19 was set, you will get a message like this in the log on next bootup:”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Mrhjû h²hubj)�”}”(hŒfx86/amd: Previous system reset reason [0x00080000]: software wrote 0x6 to reset control register 0xCF9”h]”hŒfx86/amd: Previous system reset reason [0x00080000]: software wrote 0x6 to reset control register 0xCF9”…”�”}”hjµsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´Muhjû h²hubeh}”(h]”Œrandom-reboot-issues”ah ]”h"]”Œrandom reboot issues”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´MHubeh}”(h]”Œdebugging-amd-zen-systems”ah ]”h"]”Œdebugging amd zen systems”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”j Œ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ÍjjjKjHjÊjÇj†jƒj·j´j]jZjÂj¿j‰j†jXjUjöjójçjäjDjAj5j2j’j�jƒj€jàjÝjÑjÎj.j+jjjŠj‡j{jxjôjñjåjâjPjMjAj>j# j jâjßj j jø jõ j§ j¤ jð jí jÈjÅuŒ nametypes”}”(jЉj‰jK‰jʉj†ˆj·ˆj]‰j‰j‰‰jX‰jö‰jçˆjD‰j5ˆj’‰jƒˆjà‰jшj.‰jˆjЉj{ˆjô‰jåˆjP‰jAˆj# ‰jâ‰j ‰jø ‰j§ ‰jð ‰jȉuh}”(jÍhÊjhÝjHjjÇjNjƒj}j´j®jZjÍj¿j`j†jÅjUjŒjój«jäjÞjAjùj2j,j�jGj€jzjÝj•jÎjÈj+jãjjj‡j1jxjrjñj�jâjÜjMj÷j>j8j j[jßjzj jåjõ j& j¤ jS jí jª jÚ jÔ jÅjû 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”“”}”jKs…”R”Œparse_messages”]”hŒsystem_message”“”)�”}”(hhh]”hï)�”}”(hŒ2Duplicate explicit target name: "amd-debug-tools".”h]”hŒ6Duplicate explicit target name: “amd-debug-toolsâ€�.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjYubah}”(h]”h ]”h"]”h$]”h&]”jÚ aŒlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jWhjª h²hh³hÇh´MEubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.