€•¬ßŒ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/gpu/amdgpu/display/dc-debug”Œ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/gpu/amdgpu/display/dc-debug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/it_IT/gpu/amdgpu/display/dc-debug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ja_JP/gpu/amdgpu/display/dc-debug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ko_KR/gpu/amdgpu/display/dc-debug”Œ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/gpu/amdgpu/display/dc-debug”Œ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/gpu/amdgpu/display/dc-debug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒDisplay Core Debug tools”h]”hŒDisplay Core Debug tools”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/display/dc-debug.rst”h´KubhŒ paragraph”“”)�”}”(hŒåIn this section, you will find helpful information on debugging the amdgpu driver from the display perspective. This page introduces debug mechanisms and procedures to help you identify if some issues are related to display code.”h]”hŒåIn this section, you will find helpful information on debugging the amdgpu driver from the display perspective. This page introduces debug mechanisms and procedures to help you identify if some issues are related to display code.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒNarrow down display issues”h]”hŒNarrow down display issues”…”�”}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhÛh²hh³hÊh´K ubhÌ)�”}”(hXSince the display is the driver's visual component, it is common to see users reporting issues as a display when another component causes the problem. This section equips users to determine if a specific issue was caused by the display component or another part of the driver.”h]”hXSince the display is the driver’s visual component, it is common to see users reporting issues as a display when another component causes the problem. This section equips users to determine if a specific issue was caused by the display component or another part of the driver.”…”�”}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hhÛh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒDC dmesg important messages”h]”hŒDC dmesg important messages”…”�”}”(hhýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhúh²hh³hÊh´KubhÌ)�”}”(hX¨The dmesg log is the first source of information to be checked, and amdgpu takes advantage of this feature by logging some valuable information. When looking for the issues associated with amdgpu, remember that each component of the driver (e.g., smu, PSP, dm, etc.) is loaded one by one, and this information can be found in the dmesg log. In this sense, look for the part of the log that looks like the below log snippet::”h]”hX§The dmesg log is the first source of information to be checked, and amdgpu takes advantage of this feature by logging some valuable information. When looking for the issues associated with amdgpu, remember that each component of the driver (e.g., smu, PSP, dm, etc.) is loaded one by one, and this information can be found in the dmesg log. In this sense, look for the part of the log that looks like the below log snippet:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhúh²hubhŒ literal_block”“”)�”}”(hX[ 4.254295] [drm] initializing kernel modesetting (IP DISCOVERY 0x1002:0x744C 0x1002:0x0E3B 0xC8). [ 4.254718] [drm] register mmio base: 0xFCB00000 [ 4.254918] [drm] register mmio size: 1048576 [ 4.260095] [drm] add ip block number 0 [ 4.260318] [drm] add ip block number 1 [ 4.260510] [drm] add ip block number 2 [ 4.260696] [drm] add ip block number 3 [ 4.260878] [drm] add ip block number 4 [ 4.261057] [drm] add ip block number 5 [ 4.261231] [drm] add ip block number 6 [ 4.261402] [drm] add ip block number 7 [ 4.261568] [drm] add ip block number 8 [ 4.261729] [drm] add ip block number 9 [ 4.261887] [drm] add ip block number 10 ”h]”hX[ 4.254295] [drm] initializing kernel modesetting (IP DISCOVERY 0x1002:0x744C 0x1002:0x0E3B 0xC8). [ 4.254718] [drm] register mmio base: 0xFCB00000 [ 4.254918] [drm] register mmio size: 1048576 [ 4.260095] [drm] add ip block number 0 [ 4.260318] [drm] add ip block number 1 [ 4.260510] [drm] add ip block number 2 [ 4.260696] [drm] add ip block number 3 [ 4.260878] [drm] add ip block number 4 [ 4.261057] [drm] add ip block number 5 [ 4.261231] [drm] add ip block number 6 [ 4.261402] [drm] add ip block number 7 [ 4.261568] [drm] add ip block number 8 [ 4.261729] [drm] add ip block number 9 [ 4.261887] [drm] add ip block number 10 ”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jh³hÊh´Khhúh²hubhÌ)�”}”(hX5From the above example, you can see the line that reports that ``, (**Display Manager**), was loaded, which means that display can be part of the issue. If you do not see that line, something else might have failed before amdgpu loads the display component, indicating that we don't have a display issue.”h]”(hŒ?From the above example, you can see the line that reports that ”…”�”}”(hj+h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ``”h]”hŒ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj+ubhŒ, (”…”�”}”(hj+h²hh³Nh´NubhŒstrong”“”)�”}”(hŒ**Display Manager**”h]”hŒDisplay Manager”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhj+ubhŒÜ), was loaded, which means that display can be part of the issue. If you do not see that line, something else might have failed before amdgpu loads the display component, indicating that we don’t have a display issue.”…”�”}”(hj+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hhúh²hubhÌ)�”}”(hŒ±After you identified that the DM was loaded correctly, you can check for the display version of the hardware in use, which can be retrieved from the dmesg log with the command::”h]”hŒ°After you identified that the DM was loaded correctly, you can check for the display version of the hardware in use, which can be retrieved from the dmesg log with the command:”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hhúh²hubj)�”}”(hŒdmesg | grep -i 'display core'”h]”hŒdmesg | grep -i 'display core'”…”�”}”hjosbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´K4hhúh²hubhÌ)�”}”(hŒ3This command shows a message that looks like this::”h]”hŒ2This command shows a message that looks like this:”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hhúh²hubj)�”}”(hŒA[ 4.655828] [drm] Display Core v3.2.285 initialized on DCN 3.2”h]”hŒA[ 4.655828] [drm] Display Core v3.2.285 initialized on DCN 3.2”…”�”}”hj‹sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´K8hhúh²hubhÌ)�”}”(hŒ/This message has two key pieces of information:”h]”hŒ/This message has two key pieces of information:”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K:hhúh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hXœ**The DC version (e.g., v3.2.285)**: Display developers release a new DC version every week, and this information can be advantageous in a situation where a user/developer must find a good point versus a bad point based on a tested version of the display code. Remember from page :ref:`Display Core `, that every week the new patches for display are heavily tested with IGT and manual tests.”h]”hÌ)�”}”(hXœ**The DC version (e.g., v3.2.285)**: Display developers release a new DC version every week, and this information can be advantageous in a situation where a user/developer must find a good point versus a bad point based on a tested version of the display code. Remember from page :ref:`Display Core `, that every week the new patches for display are heavily tested with IGT and manual tests.”h]”(jH)�”}”(hŒ#**The DC version (e.g., v3.2.285)**”h]”hŒThe DC version (e.g., v3.2.285)”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhj²ubhŒõ: Display developers release a new DC version every week, and this information can be advantageous in a situation where a user/developer must find a good point versus a bad point based on a tested version of the display code. Remember from page ”…”�”}”(hj²h²hh³Nh´Nubh)�”}”(hŒ):ref:`Display Core `”h]”hŒinline”“”)�”}”(hjÊh]”hŒ Display Core”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jÌhjÈubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œgpu/amdgpu/display/dc-debug”Œ refdomain”jÙŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œamdgpu-display-core”uh1hh³hÊh´K [ 4.260318] [drm] add ip block number 1 [..] [ 4.261057] [drm] add ip block number 5 ”h]”hX[ 4.254295] [drm] initializing kernel modesetting (IP DISCOVERY 0x1002:0x744C 0x1002:0x0E3B 0xC8). [..] [ 4.260095] [drm] add ip block number 0 [ 4.260318] [drm] add ip block number 1 [..] [ 4.261057] [drm] add ip block number 5 ”…”�”}”hjªsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´K_hjyh²hubhÌ)�”}”(hŒ¤Notice from the above example that the `dm` id is 5 for this specific hardware. Next, you need to run the following binary operation to identify the IP block mask::”h]”(hŒ'Notice from the above example that the ”…”�”}”(hj¸h²hh³Nh´Nubj4)�”}”(hŒ`dm`”h]”hŒdm”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¸ubhŒx id is 5 for this specific hardware. Next, you need to run the following binary operation to identify the IP block mask:”…”�”}”(hj¸h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kfhjyh²hubj)�”}”(hŒ0xffffffff & ~(1 << [DM ID])”h]”hŒ0xffffffff & ~(1 << [DM ID])”…”�”}”hjØsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´Kjhjyh²hubhÌ)�”}”(hŒ!From our example the IP mask is::”h]”hŒ From our example the IP mask is:”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Klhjyh²hubj)�”}”(hŒ#0xffffffff & ~(1 << 5) = 0xffffffdf”h]”hŒ#0xffffffff & ~(1 << 5) = 0xffffffdf”…”�”}”hjôsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´Knhjyh²hubhÌ)�”}”(hŒUFinally, to disable DC, you just need to set the below parameter in your bootloader::”h]”hŒTFinally, to disable DC, you just need to set the below parameter in your bootloader:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kphjyh²hubj)�”}”(hŒ!amdgpu.ip_block_mask = 0xffffffdf”h]”hŒ!amdgpu.ip_block_mask = 0xffffffdf”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´Kshjyh²hubhÌ)�”}”(hXƒIf you can boot your system with the DC disabled and still see the issue, it means you can rule DC out of the equation. However, if the bug disappears, you still need to consider the DC part of the problem and keep narrowing down the issue. In some scenarios, disabling DC is impossible since it might be necessary to use the display component to reproduce the issue (e.g., play a game).”h]”hXƒIf you can boot your system with the DC disabled and still see the issue, it means you can rule DC out of the equation. However, if the bug disappears, you still need to consider the DC part of the problem and keep narrowing down the issue. In some scenarios, disabling DC is impossible since it might be necessary to use the display component to reproduce the issue (e.g., play a game).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kuhjyh²hubhÌ)�”}”(hŒE**Note: This will probably lead to the absence of a display output.**”h]”jH)�”}”(hj.h]”hŒANote: This will probably lead to the absence of a display output.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hjyh²hubeh}”(h]”Œavoid-loading-display-core”ah ]”h"]”Œavoid loading display core”ah$]”h&]”uh1hµhhÛh²hh³hÊh´KWubh¶)�”}”(hhh]”(h»)�”}”(hŒDisplay flickering”h]”hŒDisplay flickering”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjKh²hh³hÊh´KubhÌ)�”}”(hŒÄDisplay flickering might have multiple causes; one is the lack of proper power to the GPU or problems in the DPM switches. A good first generic verification is to set the GPU to use high voltage::”h]”hŒÃDisplay flickering might have multiple causes; one is the lack of proper power to the GPU or problems in the DPM switches. A good first generic verification is to set the GPU to use high voltage:”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjKh²hubj)�”}”(hŒSbash -c "echo high > /sys/class/drm/card0/device/power_dpm_force_performance_level"”h]”hŒSbash -c "echo high > /sys/class/drm/card0/device/power_dpm_force_performance_level"”…”�”}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´K…hjKh²hubhÌ)�”}”(hXThe above command sets the GPU/APU to use the maximum power allowed which disables DPM switches. If forcing DPM levels high does not fix the issue, it is less likely that the issue is related to power management. If the issue disappears, there is a good chance that other components might be involved, and the display should not be ignored since this could be a DPM issues. From the display side, if the power increase fixes the issue, it is worth debugging the clock configuration and the pipe split police used in the specific configuration.”h]”hXThe above command sets the GPU/APU to use the maximum power allowed which disables DPM switches. If forcing DPM levels high does not fix the issue, it is less likely that the issue is related to power management. If the issue disappears, there is a good chance that other components might be involved, and the display should not be ignored since this could be a DPM issues. From the display side, if the power increase fixes the issue, it is worth debugging the clock configuration and the pipe split police used in the specific configuration.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‡hjKh²hubeh}”(h]”Œdisplay-flickering”ah ]”h"]”Œdisplay flickering”ah$]”h&]”uh1hµhhÛh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒDisplay artifacts”h]”hŒDisplay artifacts”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjŽh²hh³hÊh´K‘ubhÌ)�”}”(hX×Users may see some screen artifacts that can be categorized into two different types: localized artifacts and general artifacts. The localized artifacts happen in some specific areas, such as around the UI window corners; if you see this type of issue, there is a considerable chance that you have a userspace problem, likely Mesa or similar. The general artifacts usually happen on the entire screen. They might be caused by a misconfiguration at the driver level of the display parameters, but the userspace might also cause this issue. One way to identify the source of the problem is to take a screenshot or make a desktop video capture when the problem happens; after checking the screenshot/video recording, if you don't see any of the artifacts, it means that the issue is likely on the driver side. If you can still see the problem in the data collected, it is an issue that probably happened during rendering, and the display code just got the framebuffer already corrupted.”h]”hXÙUsers may see some screen artifacts that can be categorized into two different types: localized artifacts and general artifacts. The localized artifacts happen in some specific areas, such as around the UI window corners; if you see this type of issue, there is a considerable chance that you have a userspace problem, likely Mesa or similar. The general artifacts usually happen on the entire screen. They might be caused by a misconfiguration at the driver level of the display parameters, but the userspace might also cause this issue. One way to identify the source of the problem is to take a screenshot or make a desktop video capture when the problem happens; after checking the screenshot/video recording, if you don’t see any of the artifacts, it means that the issue is likely on the driver side. If you can still see the problem in the data collected, it is an issue that probably happened during rendering, and the display code just got the framebuffer already corrupted.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K“hjŽh²hubeh}”(h]”Œdisplay-artifacts”ah ]”h"]”Œdisplay artifacts”ah$]”h&]”uh1hµhhÛh²hh³hÊh´K‘ubeh}”(h]”Œnarrow-down-display-issues”ah ]”h"]”Œnarrow down display issues”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Disabling/Enabling specific features”h]”hŒ$Disabling/Enabling specific features”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj½h²hh³hÊh´K¢ubhÌ)�”}”(hXDC has a struct named `dc_debug_options`, which is statically initialized by all DCE/DCN components based on the specific hardware characteristic. This structure usually facilitates the bring-up phase since developers can start with many disabled features and enable them individually. This is also an important debug feature since users can change it when debugging specific issues.”h]”(hŒDC has a struct named ”…”�”}”(hjÎh²hh³Nh´Nubj4)�”}”(hŒ`dc_debug_options`”h]”hŒdc_debug_options”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÎubhXW, which is statically initialized by all DCE/DCN components based on the specific hardware characteristic. This structure usually facilitates the bring-up phase since developers can start with many disabled features and enable them individually. This is also an important debug feature since users can change it when debugging specific issues.”…”�”}”(hjÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¤hj½h²hubhÌ)�”}”(hXGFor example, dGPU users sometimes see a problem where a horizontal fillet of flickering happens in some specific part of the screen. This could be an indication of Sub-Viewport issues; after the users identified the target DCN, they can set the `force_disable_subvp` field to true in the statically initialized version of `dc_debug_options` to see if the issue gets fixed. Along the same lines, users/developers can also try to turn off `fams2_config` and `enable_single_display_2to1_odm_policy`. In summary, the `dc_debug_options` is an interesting form for identifying the problem.”h]”(hŒõFor example, dGPU users sometimes see a problem where a horizontal fillet of flickering happens in some specific part of the screen. This could be an indication of Sub-Viewport issues; after the users identified the target DCN, they can set the ”…”�”}”(hjîh²hh³Nh´Nubj4)�”}”(hŒ`force_disable_subvp`”h]”hŒforce_disable_subvp”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjîubhŒ8 field to true in the statically initialized version of ”…”�”}”(hjîh²hh³Nh´Nubj4)�”}”(hŒ`dc_debug_options`”h]”hŒdc_debug_options”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjîubhŒa to see if the issue gets fixed. Along the same lines, users/developers can also try to turn off ”…”�”}”(hjîh²hh³Nh´Nubj4)�”}”(hŒ`fams2_config`”h]”hŒ fams2_config”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjîubhŒ and ”…”�”}”(hjîh²hh³Nh´Nubj4)�”}”(hŒ'`enable_single_display_2to1_odm_policy`”h]”hŒ%enable_single_display_2to1_odm_policy”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjîubhŒ. In summary, the ”…”�”}”(hjîh²hh³Nh´Nubj4)�”}”(hŒ`dc_debug_options`”h]”hŒdc_debug_options”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjîubhŒ4 is an interesting form for identifying the problem.”…”�”}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K«hj½h²hubeh}”(h]”Œ$disabling-enabling-specific-features”ah ]”h"]”Œ$disabling/enabling specific features”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¢ubh¶)�”}”(hhh]”(h»)�”}”(hŒDC Visual Confirmation”h]”hŒDC Visual Confirmation”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj^h²hh³hÊh´KµubhÌ)�”}”(hŒÖDisplay core provides a feature named visual confirmation, which is a set of bars added at the scanout time by the driver to convey some specific information. In general, you can enable this debug option by using::”h]”hŒÕDisplay core provides a feature named visual confirmation, which is a set of bars added at the scanout time by the driver to convey some specific information. In general, you can enable this debug option by using:”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K·hj^h²hubj)�”}”(hŒ;echo > /sys/kernel/debug/dri/0/amdgpu_dm_visual_confirm”h]”hŒ;echo > /sys/kernel/debug/dri/0/amdgpu_dm_visual_confirm”…”�”}”hj}sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´K»hj^h²hubhÌ)�”}”(hŒ¢Where `N` is an integer number for some specific scenarios that the developer wants to enable, you will see some of these debug cases in the following subsection.”h]”(hŒWhere ”…”�”}”(hj‹h²hh³Nh´Nubj4)�”}”(hŒ`N`”h]”hŒN”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‹ubhŒ™ is an integer number for some specific scenarios that the developer wants to enable, you will see some of these debug cases in the following subsection.”…”�”}”(hj‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K½hj^h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒMultiple Planes Debug”h]”hŒMultiple Planes Debug”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj«h²hh³hÊh´KÂubhÌ)�”}”(hŒ¬If you want to enable or debug multiple planes in a specific user-space application, you can leverage a debug feature named visual confirm. For enabling it, you will need::”h]”hŒ«If you want to enable or debug multiple planes in a specific user-space application, you can leverage a debug feature named visual confirm. For enabling it, you will need:”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÄhj«h²hubj)�”}”(hŒ9echo 1 > /sys/kernel/debug/dri/0/amdgpu_dm_visual_confirm”h]”hŒ9echo 1 > /sys/kernel/debug/dri/0/amdgpu_dm_visual_confirm”…”�”}”hjÊsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´KÈhj«h²hubhÌ)�”}”(hŒÔYou need to reload your GUI to see the visual confirmation. When the plane configuration changes or a full update occurs there will be a colored bar at the bottom of each hardware plane being drawn on the screen.”h]”hŒÔYou need to reload your GUI to see the visual confirmation. When the plane configuration changes or a full update occurs there will be a colored bar at the bottom of each hardware plane being drawn on the screen.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÊhj«h²hubj¨)�”}”(hhh]”(j­)�”}”(hŒKThe color indicates the format - For example, red is AR24 and green is NV12”h]”hÌ)�”}”(hjëh]”hŒKThe color indicates the format - For example, red is AR24 and green is NV12”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjæh²hh³hÊh´Nubj­)�”}”(hŒ6The height of the bar indicates the index of the plane”h]”hÌ)�”}”(hjh]”hŒ6The height of the bar indicates the index of the plane”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÏhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjæh²hh³hÊh´Nubj­)�”}”(hŒePipe split can be observed if there are two bars with a difference in height covering the same plane ”h]”hÌ)�”}”(hŒdPipe split can be observed if there are two bars with a difference in height covering the same plane”h]”hŒdPipe split can be observed if there are two bars with a difference in height covering the same plane”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjæh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j)j*uh1j§h³hÊh´KÎhj«h²hubhÌ)�”}”(hŒòConsider the video playback case in which a video is played in a specific plane, and the desktop is drawn in another plane. The video plane should feature one or two green bars at the bottom of the video depending on pipe split configuration.”h]”hŒòConsider the video playback case in which a video is played in a specific plane, and the desktop is drawn in another plane. The video plane should feature one or two green bars at the bottom of the video depending on pipe split configuration.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÓhj«h²hubj¨)�”}”(hhh]”(j­)�”}”(hŒ-There should **not** be any visual corruption”h]”hÌ)�”}”(hjHh]”(hŒ There should ”…”�”}”(hjJh²hh³Nh´NubjH)�”}”(hŒ**not**”h]”hŒnot”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjJubhŒ be any visual corruption”…”�”}”(hjJh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KØhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjCh²hh³hÊh´Nubj­)�”}”(hŒ7There should **not** be any underflow or screen flashes”h]”hÌ)�”}”(hjqh]”(hŒ There should ”…”�”}”(hjsh²hh³Nh´NubjH)�”}”(hŒ**not**”h]”hŒnot”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjsubhŒ# be any underflow or screen flashes”…”�”}”(hjsh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÙhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjCh²hh³hÊh´Nubj­)�”}”(hŒ)There should **not** be any black screens”h]”hÌ)�”}”(hjšh]”(hŒ There should ”…”�”}”(hjœh²hh³Nh´NubjH)�”}”(hŒ**not**”h]”hŒnot”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjœubhŒ be any black screens”…”�”}”(hjœh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÚhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjCh²hh³hÊh´Nubj­)�”}”(hŒ-There should **not** be any cursor corruption”h]”hÌ)�”}”(hjÃh]”(hŒ There should ”…”�”}”(hjÅh²hh³Nh´NubjH)�”}”(hŒ**not**”h]”hŒnot”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjÅubhŒ be any cursor corruption”…”�”}”(hjÅh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÛhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjCh²hh³hÊh´Nubj­)�”}”(hŒ„Multiple plane **may** be briefly disabled during window transitions or resizing but should come back after the action has finished ”h]”hÌ)�”}”(hŒƒMultiple plane **may** be briefly disabled during window transitions or resizing but should come back after the action has finished”h]”(hŒMultiple plane ”…”�”}”(hjîh²hh³Nh´NubjH)�”}”(hŒ**may**”h]”hŒmay”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjîubhŒm be briefly disabled during window transitions or resizing but should come back after the action has finished”…”�”}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÜhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hjCh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j)j*uh1j§h³hÊh´KØhj«h²hubeh}”(h]”Œmultiple-planes-debug”ah ]”h"]”Œmultiple planes debug”ah$]”h&]”uh1hµhj^h²hh³hÊh´KÂubh¶)�”}”(hhh]”(h»)�”}”(hŒPipe Split Debug”h]”hŒPipe Split Debug”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj"h²hh³hÊh´KàubhÌ)�”}”(hŒËSometimes we need to debug if DCN is splitting pipes correctly, and visual confirmation is also handy for this case. Similar to the MPO case, you can use the below command to enable visual confirmation::”h]”hŒÊSometimes we need to debug if DCN is splitting pipes correctly, and visual confirmation is also handy for this case. Similar to the MPO case, you can use the below command to enable visual confirmation:”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kâhj"h²hubj)�”}”(hŒ9echo 1 > /sys/kernel/debug/dri/0/amdgpu_dm_visual_confirm”h]”hŒ9echo 1 > /sys/kernel/debug/dri/0/amdgpu_dm_visual_confirm”…”�”}”hjAsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´Kæhj"h²hubhÌ)�”}”(hŒïIn this case, if you have a pipe split, you will see one small red bar at the bottom of the display covering the entire display width and another bar covering the second pipe. In other words, you will see a bit high bar in the second pipe.”h]”hŒïIn this case, if you have a pipe split, you will see one small red bar at the bottom of the display covering the entire display width and another bar covering the second pipe. In other words, you will see a bit high bar in the second pipe.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kèhj"h²hubeh}”(h]”Œpipe-split-debug”ah ]”h"]”Œpipe split debug”ah$]”h&]”uh1hµhj^h²hh³hÊh´Kàubeh}”(h]”Œdc-visual-confirmation”ah ]”h"]”Œdc visual confirmation”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kµubh¶)�”}”(hhh]”(h»)�”}”(hŒ DTN Debug”h]”hŒ DTN Debug”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjmh²hh³hÊh´KîubhÌ)�”}”(hŒãDC (DCN) provides an extensive log that dumps multiple details from our hardware configuration. Via debugfs, you can capture those status values by using Display Test Next (DTN) log, which can be captured via debugfs by using::”h]”hŒâDC (DCN) provides an extensive log that dumps multiple details from our hardware configuration. Via debugfs, you can capture those status values by using Display Test Next (DTN) log, which can be captured via debugfs by using:”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kðhjmh²hubj)�”}”(hŒ-cat /sys/kernel/debug/dri/0/amdgpu_dm_dtn_log”h]”hŒ-cat /sys/kernel/debug/dri/0/amdgpu_dm_dtn_log”…”�”}”hjŒsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´Kôhjmh²hubhÌ)�”}”(hŒ|Since this log is updated accordingly with DCN status, you can also follow the change in real-time by using something like::”h]”hŒ{Since this log is updated accordingly with DCN status, you can also follow the change in real-time by using something like:”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Köhjmh²hubj)�”}”(hŒ;sudo watch -d cat /sys/kernel/debug/dri/0/amdgpu_dm_dtn_log”h]”hŒ;sudo watch -d cat /sys/kernel/debug/dri/0/amdgpu_dm_dtn_log”…”�”}”hj¨sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´Kùhjmh²hubhÌ)�”}”(hŒgWhen reporting a bug related to DC, consider attaching this log before and after you reproduce the bug.”h]”hŒgWhen reporting a bug related to DC, consider attaching this log before and after you reproduce the bug.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kûhjmh²hubeh}”(h]”Œ dtn-debug”ah ]”h"]”Œ dtn debug”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kîubh¶)�”}”(hhh]”(h»)�”}”(hŒCollect Firmware information”h]”hŒCollect Firmware information”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÌh²hh³hÊh´KÿubhÌ)�”}”(hŒ®When reporting issues, it is important to have the firmware information since it can be helpful for debugging purposes. To get all the firmware information, use the command::”h]”hŒ­When reporting issues, it is important to have the firmware information since it can be helpful for debugging purposes. To get all the firmware information, use the command:”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÌh²hubj)�”}”(hŒ0cat /sys/kernel/debug/dri/0/amdgpu_firmware_info”h]”hŒ0cat /sys/kernel/debug/dri/0/amdgpu_firmware_info”…”�”}”hjësbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´MhjÌh²hubhÌ)�”}”(hŒRFrom the display perspective, pay attention to the firmware of the DMCU and DMCUB.”h]”hŒRFrom the display perspective, pay attention to the firmware of the DMCU and DMCUB.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÌh²hubeh}”(h]”Œcollect-firmware-information”ah ]”h"]”Œcollect firmware information”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kÿubh¶)�”}”(hhh]”(h»)�”}”(hŒDMUB Firmware Debug”h]”hŒDMUB Firmware Debug”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M ubhÌ)�”}”(hXJSometimes, dmesg logs aren't enough. This is especially true if a feature is implemented primarily in DMUB firmware. In such cases, all we see in dmesg when an issue arises is some generic timeout error. So, to get more relevant information, we can trace DMUB commands by enabling the relevant bits in `amdgpu_dm_dmub_trace_mask`.”h]”(hX0Sometimes, dmesg logs aren’t enough. This is especially true if a feature is implemented primarily in DMUB firmware. In such cases, all we see in dmesg when an issue arises is some generic timeout error. So, to get more relevant information, we can trace DMUB commands by enabling the relevant bits in ”…”�”}”(hj h²hh³Nh´Nubj4)�”}”(hŒ`amdgpu_dm_dmub_trace_mask`”h]”hŒamdgpu_dm_dmub_trace_mask”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ubhŒ.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjh²hubhÌ)�”}”(hŒ:Currently, we support the tracing of the following groups:”h]”hŒ:Currently, we support the tracing of the following groups:”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Trace Groups”h]”hŒ Trace Groups”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjNh²hh³hÊh´MubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jihjfubjj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jihjfubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÌ)�”}”(hŒName”h]”hŒName”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ7Documentation/gpu/amdgpu/display/trace-groups-table.csv”h´Khj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj†ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ Mask Value”h]”hŒ Mask Value”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfubhŒtbody”“”)�”}”(hhh]”(j…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒINFO”h]”hŒINFO”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjËubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x1”h]”hŒ0x1”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒIRQ SVC”h]”hŒIRQ SVC”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x2”h]”hŒ0x2”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒVBIOS”h]”hŒVBIOS”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj9ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x4”h]”hŒ0x4”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒREGISTER”h]”hŒREGISTER”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjpubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x8”h]”hŒ0x8”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒPHY DBG”h]”hŒPHY DBG”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj§ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x10”h]”hŒ0x10”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒPSR”h]”hŒPSR”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÞubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x20”h]”hŒ0x20”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒAUX”h]”hŒAUX”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x40”h]”hŒ0x40”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj/ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒSMU”h]”hŒSMU”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjL ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x80”h]”hŒ0x80”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjf ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjL ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒMALL”h]”hŒMALL”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj† ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjƒ ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x100”h]”hŒ0x100”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjƒ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒABM”h]”hŒABM”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjº ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x200”h]”hŒ0x200”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjÔ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjº ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒALPM”h]”hŒALPM”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjñ ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x400”h]”hŒ0x400”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjñ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒTIMER”h]”hŒTIMER”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj+ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj( ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x800”h]”hŒ0x800”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjB ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj( ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒ HW LOCK MGR”h]”hŒ HW LOCK MGR”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj_ ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x1000”h]”hŒ0x1000”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj_ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒINBOX1”h]”hŒINBOX1”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj™ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj– ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x2000”h]”hŒ0x2000”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj– ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒPHY SEQ”h]”hŒPHY SEQ”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjÐ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÍ ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x4000”h]”hŒ0x4000”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÍ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒ PSR STATE”h]”hŒ PSR STATE”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x8000”h]”hŒ0x8000”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒZSTATE”h]”hŒZSTATE”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj; ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x10000”h]”hŒ0x10000”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj; ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒTRANSMITTER CTL”h]”hŒTRANSMITTER CTL”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khju ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjr ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x20000”h]”hŒ0x20000”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒ PANEL CNTL”h]”hŒ PANEL CNTL”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj¬ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj© ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x40000”h]”hŒ0x40000”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj© ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒFAMS”h]”hŒFAMS”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjà ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x80000”h]”hŒ0x80000”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjà ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒDPIA”h]”hŒDPIA”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x100000”h]”hŒ0x100000”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒSUBVP”h]”hŒSUBVP”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjQ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjN ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x200000”h]”hŒ0x200000”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjN ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒINBOX0”h]”hŒINBOX0”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj… ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ0x400000”h]”hŒ0x400000”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjŸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj… ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒSDP”h]”hŒSDP”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj¿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj¼ ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ 0x4000000”h]”hŒ 0x4000000”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjÖ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj¼ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒREPLAY”h]”hŒREPLAY”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjó ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ 0x8000000”h]”hŒ 0x8000000”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjó ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒREPLAY RESIDENCY”h]”hŒREPLAY RESIDENCY”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj- ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj* ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ 0x20000000”h]”hŒ 0x20000000”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´KhjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj* ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒ CURSOR INFO”h]”hŒ CURSOR INFO”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khjd ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hja ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ 0x80000000”h]”hŒ 0x80000000”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj{ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hja ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubj…)�”}”(hhh]”(jŠ)�”}”(hhh]”hÌ)�”}”(hŒIPS”h]”hŒIPS”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj› ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj˜ ubjŠ)�”}”(hhh]”hÌ)�”}”(hŒ 0x100000000”h]”hŒ 0x100000000”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœh´Khj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj˜ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjfubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jdhjaubah}”(h]”h ]”Œcolwidths-given”ah"]”h$]”h&]”uh1j_hjNh²hh³jœh´NubhÌ)�”}”(hŒ>**Note: Not all ASICs support all of the listed trace groups**”h]”jH)�”}”(hjå h]”hŒ:Note: Not all ASICs support all of the listed trace groups”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jGhjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjNh²hubhÌ)�”}”(hŒBSo, to enable just PSR tracing you can use the following command::”h]”hŒASo, to enable just PSR tracing you can use the following command:”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjNh²hubj)�”}”(hŒA# echo 0x8020 > /sys/kernel/debug/dri/0/amdgpu_dm_dmub_trace_mask”h]”hŒA# echo 0x8020 > /sys/kernel/debug/dri/0/amdgpu_dm_dmub_trace_mask”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´M!hjNh²hubhÌ)�”}”(hŒcThen, you need to enable logging trace events to the buffer, which you can do using the following::”h]”hŒbThen, you need to enable logging trace events to the buffer, which you can do using the following:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M#hjNh²hubj)�”}”(hŒA# echo 1 > /sys/kernel/debug/dri/0/amdgpu_dm_dmcub_trace_event_en”h]”hŒA# echo 1 > /sys/kernel/debug/dri/0/amdgpu_dm_dmcub_trace_event_en”…”�”}”hj$sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´M&hjNh²hubhÌ)�”}”(hŒ’Lastly, after you are able to reproduce the issue you are trying to debug, you can disable tracing and read the trace log by using the following::”h]”hŒ‘Lastly, after you are able to reproduce the issue you are trying to debug, you can disable tracing and read the trace log by using the following:”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M(hjNh²hubj)�”}”(hŒz# echo 0 > /sys/kernel/debug/dri/0/amdgpu_dm_dmcub_trace_event_en # cat /sys/kernel/debug/dri/0/amdgpu_dm_dmub_tracebuffer”h]”hŒz# echo 0 > /sys/kernel/debug/dri/0/amdgpu_dm_dmcub_trace_event_en # cat /sys/kernel/debug/dri/0/amdgpu_dm_dmub_tracebuffer”…”�”}”hj@sbah}”(h]”h ]”h"]”h$]”h&]”j)j*uh1jh³hÊh´M+hjNh²hubhÌ)�”}”(hŒêSo, when reporting bugs related to features such as PSR and ABM, consider enabling the relevant bits in the mask before reproducing the issue and attach the log that you obtain from the trace buffer in any bug reports that you create.”h]”hŒêSo, when reporting bugs related to features such as PSR and ABM, consider enabling the relevant bits in the mask before reproducing the issue and attach the log that you obtain from the trace buffer in any bug reports that you create.”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M.hjNh²hubeh}”(h]”Œ trace-groups”ah ]”h"]”Œ trace groups”ah$]”h&]”uh1hµhjh²hh³hÊh´Mubeh}”(h]”Œdmub-firmware-debug”ah ]”h"]”Œdmub firmware debug”ah$]”h&]”uh1hµhh·h²hh³hÊh´M ubeh}”(h]”Œdisplay-core-debug-tools”ah ]”h"]”Œdisplay core debug tools”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”}”(jqjnjºj·jvjsjHjEj‹jˆj²j¯j[jXjjjgjjjbj_jÉjÆj j jijfjaj^uŒ nametypes”}”(jq‰jº‰jv‰jH‰j‹‰j²‰j[‰jj‰j‰jb‰jɉj ‰ji‰ja‰uh}”(jnh·j·hÛjshújEjyjˆjKj¯jŽjXj½jgj^jj«j_j"jÆjmj jÌjfjj^jNuŒ 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.