# Overview

Source: [https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html](https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html)

A subsystem is a processor that has its own independent execution environment on the
                Qualcomm^®^ SoC. The tools, sample logs, and troubleshooting methods for
            the impacted subsystems are described here. Understanding the discrepancies that occur
            in subsystems and the methods for examining errors is useful when you must diagnose and
            troubleshoot such anomalies.

The following are the important subsystems on the SoC: 

Table : Subsystems on SoC

| Subsystem | Description |
| --- | --- |
| Application processor subsystem (APSS) | This is the primary subsystem. It executes the Linux kernel as<br>                                the high-level OS (HLOS). |
| Application digital signal processor (aDSP) | This subsystem is also known as the low-power audio subsystem<br>                                (LPASS). |
| Compute digital signal processor (cDSP) | This subsystem is also known as the compute DSP. |
| Qualcomm^®^ Trusted Execution Environment<br>                                (TEE)/TrustZone (TZ) | For more information on this subsystem, see [Qualcomm Linux Security<br>                                    Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-11). |
| Wireless local area network processor subsystem (WPSS) | For more information on this subsystem, see [Qualcomm Linux Wi-Fi<br>                                Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-14/introduction.html). |
| Always On Processor (AOP) | This subsystem regulates the power on the device. |

Except for the application processor, software pertaining to all other subsystems is also
            known as non-HLOS.

To understand the boot flow of the subsystems, see [Qualcomm Linux Boot Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-4).

Note: 
                
See [Hardware SoCs](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-115/soc.html) that are supported on
                        Qualcomm^®^ Linux^®^.

## Debug workflow

Source: [https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html](https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html)

Because multiple subsystems are present on the Qualcomm SoC, it is important to first
      identify the subsystem on which the issue occurred so that you can debug the relevant
      subsystem.

The application processor is the primary subsystem, and it can detect when other
      subsystem crashes occur. For example, if the aDSP processor subsystem crashes, the kernel log
      captures the subsystem restart (SSR) crash error log. Therefore, to identify the subsystems to
      be debugged, you must first verify the kernel debug messages.

The following figure shows the workflow to identify errors and the components to
      be debugged.
Figure : Workflow to identify the impacted subsystem
        
        <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export Debug-workflow.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="12.0417in" height="6.98958in" viewbox="0 0 867 503.25" xml:space="preserve" color-interpolation-filters="sRGB" class="st12"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(0):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #f7f8fa; marker-end: url("#mrkr5-4"); stroke: none; stroke-width: 1.5 }
.svg-1 .st2 { fill: #4672c4; fill-opacity: 1; stroke: #4672c4; stroke-opacity: 1; stroke-width: 0.37313432835821 }
.svg-1 .st3 { fill: none; stroke: #3253dc; stroke-width: 2.5 }
.svg-1 .st4 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-1 .st5 { font-size: 1em }
.svg-1 .st6 { marker-end: url("#mrkr5-17"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2.25 }
.svg-1 .st7 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.47169811320755 }
.svg-1 .st8 { fill: #ffffff; stroke: none; stroke-linecap: butt; stroke-width: 7.2 }
.svg-1 .st9 { fill: none }
.svg-1 .st10 { stroke: #3253dc; stroke-width: 2.5 }
.svg-1 .st11 { fill: #000000; font-family: Arial; font-size: 0.75em }
.svg-1 .st12 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend5">		<path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"></path>	</g>	<marker id="mrkr5-4" class="st2" v:arrowtype="5" v:arrowsize="2" v:setback="4.69" refx="-4.69" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-2.68,-2.68) "></use>	</marker>	<marker id="mrkr5-17" class="st7" v:arrowtype="5" v:arrowsize="2" v:setback="3.71" refx="-3.71" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-2.12,-2.12) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="msvThemeOrder" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="0" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Flowchart" v:index="0"></v:layer>	<v:layer v:name="Connector" v:index="1"></v:layer>	<g id="shape26-1" v:mid="26" v:groupcontext="shape" transform="translate(19.5,-19.5)">		<title></title>		<v:textblock v:margins="rect(2,2,2,2)" v:verticalalign="2"></v:textblock>		<rect x="0" y="39" width="828" height="464.25" class="st1"></rect>	</g>	<g id="shape1-5" v:mid="1" v:groupcontext="shape" v:layermember="0" transform="translate(397.143,-437.25)">		<title></title>		<desc>Start</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.375):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.375):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="39.4286" cy="488.464" width="78.86" height="29.5714"></v:textrect>		<path d="M14.79 503.25 L64.07 503.25 A14.7857 14.7857 -180 0 0 64.07 473.68 L14.79 473.68 A14.7857 14.7857 -180 1 0 14.79					 503.25 Z" class="st3"></path>		<text x="26.76" y="492.06" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Start</text>		</g>	<g id="shape2-8" v:mid="2" v:groupcontext="shape" v:layermember="0" transform="translate(369.818,-303.021)">		<title></title>		<desc>Panic or Bug in dmesg?</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="66.6863" cy="461.238" width="111.15" height="63.0186"></v:textrect>		<path d="M0 461.24 L66.69 419.23 L133.37 461.24 L66.69 503.25 L0 461.24 Z" class="st3"></path>		<text x="32.33" y="457.64" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Panic or Bug<v:lf></v:lf><tspan x="39" dy="1.2em" class="st5">in dmesg?</tspan></text>		</g>	<g id="shape3-12" v:mid="3" v:groupcontext="shape" v:layermember="1" transform="translate(445.538,-437.25)">		<title></title>		<path d="M-8.97 503.25 L-8.97 521.25 L-9.03 521.25 L-9.03 545.11" class="st6"></path>	</g>	<g id="shape4-18" v:mid="4" v:groupcontext="shape" v:layermember="0" transform="translate(177.762,-166.98)">		<title></title>		<desc>Subsystem restart log in dmesg?</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="66.6863" cy="457.236" width="111.15" height="69.021"></v:textrect>		<path d="M0 457.24 L66.69 411.22 L133.37 457.24 L66.69 503.25 L0 457.24 Z" class="st3"></path>		<text x="37.01" y="446.44" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Subsystem <v:lf></v:lf><tspan x="33.67" dy="1.2em" class="st5">restart log in </tspan><tspan x="45.34" dy="1.2em" class="st5">dmesg?</tspan></text>		</g>	<g id="shape5-23" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(569.877,-166.25)">		<title></title>		<desc>Error in TrustZone?</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="66.6863" cy="457.236" width="111.15" height="69.021"></v:textrect>		<path d="M0 457.24 L66.69 411.22 L133.37 457.24 L66.69 503.25 L0 457.24 Z" class="st3"></path>		<text x="14.67" y="460.84" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Error in TrustZone?</text>		</g>	<g id="shape6-26" v:mid="6" v:groupcontext="shape" v:layermember="1" transform="translate(369.818,-345.034)">		<title></title>		<desc>Yes</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="-105.698" cy="503.25" width="60.01" height="22.4037"></v:textrect>		<path d="M0 503.25 L-125.37 503.25 L-125.37 580.93" class="st6"></path>		<rect v:rectcontext="textBkgnd" x="-116.037" y="496.05" width="20.6782" height="14.4001" class="st8"></rect>		<text x="-116.04" y="506.85" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Yes</text>		</g>	<g id="shape7-33" v:mid="7" v:groupcontext="shape" v:layermember="1" transform="translate(503.191,-345.034)">		<title></title>		<desc>No</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="110.064" cy="503.25" width="60.01" height="22.4037"></v:textrect>		<path d="M0 503.25 L133.37 503.25 L133.37 581.66" class="st6"></path>		<rect v:rectcontext="textBkgnd" x="102.394" y="496.05" width="15.3399" height="14.4001" class="st8"></rect>		<text x="102.39" y="506.85" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>No</text>		</g>	<g id="shape8-40" v:mid="8" v:groupcontext="shape" v:layermember="0" transform="translate(71.7976,-35.7024)">		<title></title>		<desc>Debug specific subsystem</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="AntiScale" v:val="VT0(1):26"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="49.2857" cy="466.286" width="80.58" height="73.9286"></v:textrect>		<path d="M0 503.25 L98.57 503.25 L98.57 429.32 L0 429.32 L0 503.25 Z" class="st9"></path>		<path d="M0 503.25 L98.57 503.25 L98.57 429.32 L0 429.32 L0 503.25" class="st10"></path>		<path d="M9 503.25 L9 429.32" class="st10"></path>		<path d="M89.57 503.25 L89.57 429.32" class="st10"></path>		<text x="31.6" y="455.49" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Debug <tspan x="29.28" dy="1.2em" class="st5">specific </tspan><tspan x="20.61" dy="1.2em" class="st5">subsystem</tspan></text>		</g>	<g id="shape10-48" v:mid="10" v:groupcontext="shape" v:layermember="0" transform="translate(308.369,-35.7024)">		<title></title>		<desc>Debug Application processor</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="AntiScale" v:val="VT0(1):26"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="49.2857" cy="466.286" width="80.58" height="73.9286"></v:textrect>		<path d="M0 503.25 L98.57 503.25 L98.57 429.32 L0 429.32 L0 503.25 Z" class="st9"></path>		<path d="M0 503.25 L98.57 503.25 L98.57 429.32 L0 429.32 L0 503.25" class="st10"></path>		<path d="M9 503.25 L9 429.32" class="st10"></path>		<path d="M89.57 503.25 L89.57 429.32" class="st10"></path>		<text x="31.6" y="455.49" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Debug <tspan x="19.93" dy="1.2em" class="st5">Application </tspan><tspan x="22.94" dy="1.2em" class="st5">processor</tspan></text>		</g>	<g id="shape11-56" v:mid="11" v:groupcontext="shape" v:layermember="0" transform="translate(586.25,-35.7024)">		<title></title>		<desc>Debug Always-on processor</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="AntiScale" v:val="VT0(1):26"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="49.2857" cy="466.286" width="80.58" height="73.9286"></v:textrect>		<path d="M0 503.25 L98.57 503.25 L98.57 429.32 L0 429.32 L0 503.25 Z" class="st9"></path>		<path d="M0 503.25 L98.57 503.25 L98.57 429.32 L0 429.32 L0 503.25" class="st10"></path>		<path d="M9 503.25 L9 429.32" class="st10"></path>		<path d="M89.57 503.25 L89.57 429.32" class="st10"></path>		<text x="31.6" y="455.49" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Debug <v:lf></v:lf><tspan x="21.61" dy="1.2em" class="st5">Always</tspan>-on <tspan x="22.94" dy="1.2em" class="st5">processor </tspan> </text>		</g>	<g id="shape12-64" v:mid="12" v:groupcontext="shape" v:layermember="0" transform="translate(712.238,-35.7024)">		<title></title>		<desc>Debug NoC</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="AntiScale" v:val="VT0(1):26"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="49.2857" cy="466.286" width="80.58" height="73.9286"></v:textrect>		<path d="M0 503.25 L98.57 503.25 L98.57 429.32 L0 429.32 L0 503.25 Z" class="st9"></path>		<path d="M0 503.25 L98.57 503.25 L98.57 429.32 L0 429.32 L0 503.25" class="st10"></path>		<path d="M9 503.25 L9 429.32" class="st10"></path>		<path d="M89.57 503.25 L89.57 429.32" class="st10"></path>		<text x="17.93" y="469.89" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Debug NoC</text>		</g>	<g id="shape13-70" v:mid="13" v:groupcontext="shape" v:layermember="1" transform="translate(177.762,-212.994)">		<title></title>		<desc>Yes</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="-56.6786" cy="526.592" width="60.01" height="22.4037"></v:textrect>		<path d="M0 503.25 L-56.68 503.25 L-56.68 598.27" class="st6"></path>		<rect v:rectcontext="textBkgnd" x="-67.0177" y="519.393" width="20.6782" height="14.4001" class="st8"></rect>		<text x="-67.02" y="530.19" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Yes</text>		</g>	<g id="shape14-77" v:mid="14" v:groupcontext="shape" v:layermember="1" transform="translate(311.135,-212.994)">		<title></title>		<desc>No</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="46.5202" cy="531.672" width="60.01" height="22.4037"></v:textrect>		<path d="M0 503.25 L46.52 503.25 L46.52 598.27" class="st6"></path>		<rect v:rectcontext="textBkgnd" x="38.8502" y="524.472" width="15.3399" height="14.4001" class="st8"></rect>		<text x="38.85" y="535.27" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>No</text>		</g>	<g id="shape16-84" v:mid="16" v:groupcontext="shape" v:layermember="1" transform="translate(569.877,-212.264)">		<title></title>		<desc>Nonsecure WD bite AHB timeout XPU error SMMU error No error</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="-122.438" cy="532.079" width="88.54" height="62.0036"></v:textrect>		<path d="M0 503.25 L-122.44 503.25 L-122.44 642.85 L-154.59 642.85" class="st6"></path>		<rect v:rectcontext="textBkgnd" x="-161.453" y="505.079" width="78.0293" height="53.9992" class="st8"></rect>		<text x="-161.45" y="513.18" class="st11" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Nonsecure WD bite<v:lf></v:lf><tspan x="-147.7" dy="1.2em" class="st5">AHB timeout<v:lf></v:lf></tspan><tspan x="-142.44" dy="1.2em" class="st5">XPU error<v:lf></v:lf></tspan><tspan x="-146.94" dy="1.2em" class="st5">SMMU error<v:lf></v:lf></tspan><tspan x="-138.94" dy="1.2em" class="st5">No error</tspan></text>		</g>	<g id="shape18-95" v:mid="18" v:groupcontext="shape" v:layermember="1" transform="translate(703.25,-212.264)">		<title></title>		<desc>NoC error</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="58.2738" cy="525.43" width="64.02" height="22.4037"></v:textrect>		<path d="M0 503.25 L58.27 503.25 L58.27 597.54" class="st6"></path>		<rect v:rectcontext="textBkgnd" x="31.9359" y="518.23" width="52.6759" height="14.4001" class="st8"></rect>		<text x="31.94" y="529.03" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>NoC error</text>		</g>	<g id="shape21-102" v:mid="21" v:groupcontext="shape" v:layermember="1" transform="translate(645.253,-166.25)">		<title></title>		<desc>AoP error</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="-9" cy="531.56" width="62.69" height="22.4037"></v:textrect>		<path d="M-8.69 503.25 L-9.22 551.52" class="st6"></path>		<rect v:rectcontext="textBkgnd" x="-34.6759" y="524.36" width="51.352" height="14.4001" class="st8"></rect>		<text x="-34.68" y="535.16" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AoP error</text>		</g></g>
</svg>

When there are no panic signatures in the kernel dmesg logs, verify the Qualcomm TEE
      diagnostic (diag) logs for errors such as nonsecure watchdog bite, and network-on-chip (NoC)
      errors. The following topics describe some of the example kernel messages that indicate kernel
      panic, bugs, and subsystem crash issues.

### Identify kernel panic and bugs

From the kernel dmesg logs, you can determine whether the reset was a kernel panic or a
        bug. The following are some example logs that indicate a kernel panic or a bug:

- Panic (Pattern: General
            error)

        18.800936: <6> Kernel panic - not syncing: Fatal exception
        18.800938: <6> SMP: stopping secondary CPUs
        18.800947: <6> CPU0: stopping
        Kernel panic - not syncing: Apps watchdog Bark received!Copy to clipboard
- Bug (Pattern 1: Forced crash due to memory
            corruption)

        12.899532: <6> BUG kmalloc-128 (Not tainted): Redzone overwritten
        12.905418: <6> -----------------------------------------------------------------------------Copy to clipboard
- Bug (Pattern 2: Forced crash from
            driver)

        320.510769: <6> ------------[ cut here ]------------
        320.510781: <6> kernel BUG at /local/mnt/workspace/lnxbuild/project/trees_in_use/free_tree_platform_manifest_refs_tags/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c:955!Copy to clipboard
- Bug (Pattern 3: Forced crash due to lockup
            issue)

        [ 180.993861] BUG: spinlock lockup suspected on CPU#0, swapper/0/0
        [ 180.993883] lock: stop_lock+0x0/0x18, .magic: dead4ead, .owner: swapper/6/0, .owner_cpu: 6
        [ 181.015629] Causing a watchdog bite!Copy to clipboard

Note: Most bugs are followed by a kernel panic. For more information
          on debugging kernel issues, see [Qualcomm Linux Kernel Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-3/overview.html).

### Identify subsystem crash issues

To determine whether the restart was due to a subsystem crash, verify the kernel dmesg
        logs. For example, the following log indicates that the aDSP subsystem crashed, according to
        the qcm6490.dtsi (node: remoteproc\_adsp: remoteproc@3000000).

0x000000000A27652C |   5198.790423:   qcom_q6v5_pas 3000000.remoteproc: fatal error received: err_inject_crash.c:413:Crash injected via Diag 
    0x000000000A276689 |   5198.801061:   remoteproc remoteproc2: crash detected in 3000000.remoteproc: type fatal error 
    0x000000000A2767A1 |   5198.809602:   remoteproc remoteproc2: handling crash #1 in 3000000.remoteproc 
    0x000000000A27688E |   5198.816837:   remoteproc remoteproc2: recovering 3000000.remoteproc 
    0x000000000A276971 |   5198.823784:   qcom_q6v5_pas 8a00000.remoteproc: subsystem event rejectedCopy to clipboard

### Identify system issues from Qualcomm TEE logs

This feature is available to licensed developers with authorized access. For sample logs
        that indicate errors in the Qualcomm TEE, see [Qualcomm Linux Debug Guide - Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-70015-12A/identify_subsystem_to_be_debugged.html#identify_and_debug_errors_in_tz).

If there is no error in the Qualcomm TEE diag logs, it is most probably a secure watchdog
        bite issue. For more information on watchdog issues, see [Hardware reset](https://docs.qualcomm.com/doc/80-70015-12/topic/general_system_debugging.html#reset_hardware).

For information on debugging issues in Qualcomm TEE, see [Qualcomm Linux Security Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-11/debug.html).

## Debugging methods

Source: [https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html](https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html)

There are two approaches to debugging:

- **On-target debugging**
    On-target debugging is a basic way of debugging
                        software issues. This approach is powerful because most of the information
                        is accessible from the live device. SSH is used to connect the host machine
                        to the live device. To set up SSH, follow the steps mentioned [here](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#use-ssh).

    For more information
                        about various on-target debug features, see [On-target debug features](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-12/Debug-overview.html#on_target_debug_features).
- **Off-target debugging**

    This debugging approach requires logs instead of an actual device, and is a
                        convenient and efficient method of debugging. Debugging is performed using
                        memory dumps or logging tools. Various types of logs can be used for offline
                        debugging. Because the RAM dump captures most of the memory regions, but
                        only limited hardware register information, debugging a hardware-related
                        issue can be a challenge.

    For more information about various on-target debug features, see [Off-target debug features](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-12/Debug-overview.html#off_target_debug_features).

## On-target debug features

Source: [https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html](https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html)

The following debug features are available on the device and can be used at runtime:

### Perf utility

Perf is a powerful utility in Linux that facilitates performance analysis and
                profiling. This utility is included in the Linux kernel at the
                    tools/perf directory.

The Perf utility can be used to debug various aspects of system behavior, including
                CPU performance counters, tracepoints, kprobes, and uprobes (for dynamic tracing).
                The following are the key features of the Perf utility:

Table : Key features of Perf utility

| Feature | Description |
| --- | --- |
| CPU performance counters | These CPU hardware registers are used to track events such as<br>                                    executed instructions, cache misses, and branch mispredictions.<br>                                    These events form the basis for profiling applications and<br>                                    identifying performance bottlenecks. |
| Tracepoints | These tracepoints are placed at logical locations in the<br>                                    code. For example, system calls, network events, and file system<br>                                    operations. These tracepoints provide information such as<br>                                    timestamps and stack traces with minimal overhead. |
| Dynamic tracing | This feature dynamically creates tracepoints using the<br>                                    kprobes and uprobes frameworks. Therefore, this feature allows<br>                                    tracing in both kernel space and user space. |

For more information on the Perf utility, see the following:
- [https://perf.wiki.kernel.org/index.php/Main_Page](https://perf.wiki.kernel.org/index.php/Main_Page)
- [https://github.com/Linaro/OpenCSD/blob/master/HOWTO.md](https://github.com/Linaro/OpenCSD/blob/master/HOWTO.md)
- [https://docs.kernel.org/trace/coresight/index.html](https://docs.kernel.org/trace/coresight/index.html)
- [https://docs.kernel.org/trace/coresight/coresight-perf.html](https://docs.kernel.org/trace/coresight/coresight-perf.html)

### Subsystem restart

The subsystems can restart independently when they crash without requiring a reboot
                of the device. This type of restart is known as a subsystem restart (SSR). The SSR
                feature is implemented using the remoteproc framework available in the Linux kernel.

To enable a full memory dump for debugging purposes, the SSR feature is disabled by
                default. It is recommended to use the SSR feature on commercial devices and not
                during the development phase. For more information on the SSR feature, see [Remoteproc subsystem](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-3/features.html#remoteproc-subsystem).

When the SSR feature is enabled, the SSR dump is generated on a subsystem restart.
                You may consider using the SSR dump for debugging, as its size is smaller than the
                full memory dump. However, the entire RAM dump is required to debug some subsystem
                crashes.

For information on how to enable and capture subsystem dumps, see [Subsystem dumps](https://docs.qualcomm.com/doc/80-70015-12/topic/debugging_linux_kernel.html#subsystem_ram_dumps).

### Force subsystem reset

This feature can be used to debug use cases that require you to restart a
                subsystem.

This feature is available to licensed developers with authorized access. To reset the
                subsystem forcibly, you can run the `diag` command using the QXDM
                Professional™. For information on QXDM Professional commands and their usage, see
                    [Qualcomm Linux Debug Guide - Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-70015-12A/debug-non-hlos-subsystems.html#qxdm_professional).

## Off-target debug features

Source: [https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html](https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html)

The following features and tools are available for offline debugging:

### RAM dump

The RAM dump is a snapshot of the entire memory at the time of failure. The RAM dump
                can be analyzed using various tools, including Qualcomm Crash Analysis Portal
                (QCAP), RAMParser, Lauterbach TRACE32 simulator, and crash utility. For information
                on how to collect and parse RAM dumps, see [Collect and parse RAM dump](https://docs.qualcomm.com/doc/80-70015-12/topic/debugging_linux_kernel.html#collect_and_parse_ram_dumps).

### QXDM Professional

QXDM Professional can be used to debug various subsystems.

This tool is available to licensed developers with authorized access. For information
                on QXDM Professional commands and their usage, see [Qualcomm Linux Debug Guide - Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-70015-12A/debug-non-hlos-subsystems.html#qxdm_professional).

## Common system issues

Source: [https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html](https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html)

System issues can be categorized into one of the following types:
- [Linux kernel space issues](https://docs.qualcomm.com/doc/80-70015-12/topic/debugging_linux_kernel.html)
- [System issues](https://docs.qualcomm.com/doc/80-70015-12/topic/general_system_debugging.html)
    - [Watchdog issues](https://docs.qualcomm.com/doc/80-70015-12/topic/general_system_debugging.html#watchdog_timeout)
    - [Bus
                                hang and timeout issues](https://docs.qualcomm.com/doc/80-70015-12/topic/general_system_debugging.html#erroneous_transaction_on_bus_error_and_timeout)
    - [Hardware reset issues](https://docs.qualcomm.com/doc/80-70015-12/topic/general_system_debugging.html#reset_hardware)

## Miscellaneous issues

Source: [https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html](https://docs.qualcomm.com/doc/80-70015-12/topic/Debug-overview.html)

The following are the miscellaneous issues that you may encounter:
- Device-freeze issues due to software bugs
- Linux application-related issues
- Random resets due to hardware issues related to the PCB

To debug Linux kernel-related issues, see [Debug Linux kernel space issues](https://docs.qualcomm.com/doc/80-70015-12/topic/debugging_linux_kernel.html).

To debug Linux application-related issues, see [Debug Linux user space issues](https://docs.qualcomm.com/doc/80-70015-12/topic/using_open_source_debug_tools.html).

Last Published: Oct 14, 2024

[Next Topic
Debug Linux user space issues](https://docs.qualcomm.com/bundle/publicresource/80-70015-12/topics/using_open_source_debug_tools.md)