# Debug overview

A subsystem processes independently within its own execution environment on the Qualcomm^®^ SoC. This section describes the tools, sample logs, and troubleshooting methods for impacted subsystems. Understanding the discrepancies in subsystems and methods for examining errors is useful for diagnosing and troubleshooting such anomalies.

The following table lists the important subsystems on the SoC.

Table: Subsystems on SoC

| Subsystem | Description |
| --- | --- |
| Application processor subsystem (APSS) | This primary subsystem executes the Qualcomm Linux kernel as the high-level OS (HLOS). |
| Application digital signal processor (aDSP) | This subsystem, known as the low-power audio subsystem (LPASS), handles digital signal processing tasks, such as audio encoding/decoding, and voice recognition. |
| Compute digital signal processor (cDSP) | This subsystem, known as the compute DSP, performs compute-intensive tasks, such as neural network-related calculations. |
| Qualcomm^®^ Trusted Execution Environment (TEE)/TrustZone (TZ) | This subsystem performs secure operations and leverages the Arm® TrustZone® architecture. For more information, see [Qualcomm Linux Security Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-11). |
| Wireless local area network processor subsystem (WPSS) | This subsystem connects to a Wi-Fi network, transmits and receives data packets, handles security protocols, and ensures stable network performance. For more information, see [Qualcomm Linux Wi-Fi Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-14/introduction.html). |
| Always On Processor (AOP) | This subsystem regulates the power on the device. |

Software for all subsystems, except the application processor, is 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-70018-4).

Note

See [Hardware SoCs](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-115/soc.html) that Qualcomm^®^ Linux^®^ supports.

## Debug workflow

Identify the subsystem where the issue occurred first, as many subsystems are present on the Qualcomm SoC. This helps you debug the relevant subsystem.

The application processor, as the primary subsystem detects when other subsystems crash. For example, if the aDSP processor subsystem crashes, the kernel log captures the subsystem restart (SSR) crash error log. Therefore, to identify the subsystem that need debugging, first verify the kernel debug messages.

The following figure shows the workflow to identify errors and the components you need to debug.

<?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="7.57292in" viewbox="0 0 867 545.25" xml:space="preserve" color-interpolation-filters="sRGB" class="st12" aria-label="../../_images/Debug-workflow.svg"><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: #fafafa; marker-end: url("#mrkr5-4"); stroke: #d2d7e1; stroke-width: 2 }
.svg-1 .st2 { fill: #d2d7e1; fill-opacity: 1; stroke: #d2d7e1; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st3 { fill: #d2d7e1; stroke: #d2d7e1; 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("#mrkr4-17"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.75 }
.svg-1 .st7 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.49295774647887 }
.svg-1 .st8 { fill: none }
.svg-1 .st9 { stroke: #7c8aa3; stroke-width: 2.5 }
.svg-1 .st10 { fill: #fafafa; stroke: none; stroke-width: 0.25 }
.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="3.955" refx="-3.955" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-2.26,-2.26) "></use>	</marker>	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="mrkr4-17" class="st7" v:arrowtype="4" v:arrowsize="1" v:setback="4.05714" refx="-4.0571428571429" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-2.0285714285714,-2.0285714285714) "></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(33.75,-31.5)">		<title>Sheet.26</title>		<rect x="0" y="63.75" width="801" height="481.5" rx="2.88" ry="2.88" class="st1"></rect>	</g>	<g id="shape1-5" v:mid="1" v:groupcontext="shape" v:layermember="0" transform="translate(394.893,-460.929)">		<title>Start/End</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="530.464" width="78.86" height="29.5714"></v:textrect>		<path d="M14.79 545.25 L64.07 545.25 A14.7857 14.7857 -180 0 0 64.07 515.68 L14.79 515.68 A14.7857 14.7857 -180 1 0 14.79					 545.25 Z" class="st3"></path>		<text x="26.76" y="534.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(367.568,-326.7)">		<title>Decision</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="503.238" width="111.15" height="63.0186"></v:textrect>		<path d="M0 503.24 L66.69 461.23 L133.37 503.24 L66.69 545.25 L0 503.24 Z" class="st3"></path>		<text x="32.33" y="499.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(425.255,-458.866)">		<title>Dynamic connector</title>		<path d="M9 545.25 L9 586.29" class="st6"></path>	</g>	<g id="shape4-18" v:mid="4" v:groupcontext="shape" v:layermember="0" transform="translate(175.512,-190.659)">		<title>Decision.4</title>		<desc>Subsystem restart log in dmesg exists?</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="499.236" width="111.15" height="69.021"></v:textrect>		<path d="M0 499.24 L66.69 453.22 L133.37 499.24 L66.69 545.25 L0 499.24 Z" class="st3"></path>		<text x="37.01" y="488.44" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Subsystem <v:lf></v:lf><tspan x="14" dy="1.2em" class="st5">restart log in dmesg </tspan><tspan x="48.01" dy="1.2em" class="st5">exists?</tspan></text>		</g>	<g id="shape5-23" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(567.627,-189.929)">		<title>Decision.5</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="499.236" width="111.15" height="69.021"></v:textrect>		<path d="M0 499.24 L66.69 453.22 L133.37 499.24 L66.69 545.25 L0 499.24 Z" class="st3"></path>		<text x="47.02" y="495.64" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Error in <tspan x="33.67" dy="1.2em" class="st5">TrustZone*?</tspan></text>		</g>	<g id="shape6-27" v:mid="6" v:groupcontext="shape" v:layermember="1" transform="translate(367.568,-368.712)">		<title>Dynamic connector.6</title>		<path d="M0 545.25 L-125.37 545.25 L-125.37 624.18" class="st6"></path>	</g>	<g id="shape7-32" v:mid="7" v:groupcontext="shape" v:layermember="1" transform="translate(500.941,-368.712)">		<title>Dynamic connector.7</title>		<path d="M0 545.25 L133.37 545.25 L133.37 624.91" class="st6"></path>	</g>	<g id="shape8-37" v:mid="8" v:groupcontext="shape" v:layermember="0" transform="translate(69.5476,-59.3809)">		<title>Subprocess</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="508.286" width="80.58" height="73.9286"></v:textrect>		<path d="M0 545.25 L98.57 545.25 L98.57 471.32 L0 471.32 L0 545.25 Z" class="st8"></path>		<path d="M0 545.25 L98.57 545.25 L98.57 471.32 L0 471.32 L0 545.25" class="st9"></path>		<path d="M9 545.25 L9 471.32" class="st9"></path>		<path d="M89.57 545.25 L89.57 471.32" class="st9"></path>		<text x="31.6" y="497.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-45" v:mid="10" v:groupcontext="shape" v:layermember="0" transform="translate(306.119,-59.3809)">		<title>Subprocess.10</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="508.286" width="80.58" height="73.9286"></v:textrect>		<path d="M0 545.25 L98.57 545.25 L98.57 471.32 L0 471.32 L0 545.25 Z" class="st8"></path>		<path d="M0 545.25 L98.57 545.25 L98.57 471.32 L0 471.32 L0 545.25" class="st9"></path>		<path d="M9 545.25 L9 471.32" class="st9"></path>		<path d="M89.57 545.25 L89.57 471.32" class="st9"></path>		<text x="31.6" y="497.49" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Debug <tspan x="20.6" dy="1.2em" class="st5">application </tspan><tspan x="22.94" dy="1.2em" class="st5">processor</tspan></text>		</g>	<g id="shape11-53" v:mid="11" v:groupcontext="shape" v:layermember="0" transform="translate(585.028,-58.9018)">		<title>Subprocess.11</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="508.286" width="80.58" height="73.9286"></v:textrect>		<path d="M0 545.25 L98.57 545.25 L98.57 471.32 L0 471.32 L0 545.25 Z" class="st8"></path>		<path d="M0 545.25 L98.57 545.25 L98.57 471.32 L0 471.32 L0 545.25" class="st9"></path>		<path d="M9 545.25 L9 471.32" class="st9"></path>		<path d="M89.57 545.25 L89.57 471.32" class="st9"></path>		<text x="31.6" y="497.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-61" v:mid="12" v:groupcontext="shape" v:layermember="0" transform="translate(709.988,-59.3809)">		<title>Subprocess.12</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="508.286" width="80.58" height="73.9286"></v:textrect>		<path d="M0 545.25 L98.57 545.25 L98.57 471.32 L0 471.32 L0 545.25 Z" class="st8"></path>		<path d="M0 545.25 L98.57 545.25 L98.57 471.32 L0 471.32 L0 545.25" class="st9"></path>		<path d="M9 545.25 L9 471.32" class="st9"></path>		<path d="M89.57 545.25 L89.57 471.32" class="st9"></path>		<text x="17.93" y="511.89" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Debug NoC</text>		</g>	<g id="shape13-67" v:mid="13" v:groupcontext="shape" v:layermember="1" transform="translate(175.512,-236.673)">		<title>Dynamic connector.13</title>		<path d="M0 545.25 L-56.68 545.25 L-56.68 641.51" class="st6"></path>	</g>	<g id="shape14-72" v:mid="14" v:groupcontext="shape" v:layermember="1" transform="translate(308.885,-236.673)">		<title>Dynamic connector.14</title>		<path d="M0 545.25 L46.52 545.25 L46.52 641.51" class="st6"></path>	</g>	<g id="shape16-77" v:mid="16" v:groupcontext="shape" v:layermember="1" transform="translate(567.627,-235.943)">		<title>Dynamic connector.16</title>		<path d="M0 545.25 L-122.44 545.25 L-122.44 684.85 L-155.84 684.85" class="st6"></path>	</g>	<g id="shape18-82" v:mid="18" v:groupcontext="shape" v:layermember="1" transform="translate(701,-235.943)">		<title>Dynamic connector.18</title>		<path d="M0 545.25 L58.27 545.25 L58.27 640.78" class="st6"></path>	</g>	<g id="shape21-87" v:mid="21" v:groupcontext="shape" v:layermember="1" transform="translate(625.314,-189.929)">		<title>Dynamic connector.21</title>		<path d="M9 545.25 L9 596.21" class="st6"></path>	</g>	<g id="shape34-92" v:mid="34" v:groupcontext="shape" transform="translate(725.119,-179.679)">		<title>Sheet.34</title>		<desc>NoC error</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="34.1548" cy="536.25" width="68.31" height="18"></v:textrect>		<rect x="0" y="527.25" width="68.3095" height="18" class="st10"></rect>		<text x="7.82" y="539.85" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>NoC error</text>		</g>	<g id="shape36-95" v:mid="36" v:groupcontext="shape" transform="translate(600.159,-157.179)">		<title>Sheet.36</title>		<desc>AoP error</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="34.1548" cy="536.25" width="68.31" height="18"></v:textrect>		<rect x="0" y="527.25" width="68.3095" height="18" class="st10"></rect>		<text x="8.48" y="539.85" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AoP error</text>		</g>	<g id="shape37-98" v:mid="37" v:groupcontext="shape" transform="translate(411.75,-148.179)">		<title>Sheet.37</title>		<desc>Non-secure WD bite AHB timeout XPU error SMMU error No error</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="34.1548" cy="510.938" width="68.31" height="68.625"></v:textrect>		<rect x="0" y="476.625" width="68.3095" height="68.625" class="st10"></rect>		<text x="2.15" y="486.64" class="st11" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Non-secure WD <tspan x="26.9" dy="1.2em" class="st5">bite<v:lf></v:lf></tspan><tspan x="8.9" dy="1.2em" class="st5">AHB timeout<v:lf></v:lf></tspan><tspan x="14.15" dy="1.2em" class="st5">XPU error<v:lf></v:lf></tspan><tspan x="9.66" dy="1.2em" class="st5">SMMU error<v:lf></v:lf></tspan><tspan x="17.65" dy="1.2em" class="st5">No error</tspan></text>		</g>	<g id="shape39-106" v:mid="39" v:groupcontext="shape" transform="translate(312.75,-240.75)">		<title>Sheet.39</title>		<desc>No</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="15.125" cy="536.25" width="30.26" height="18"></v:textrect>		<rect x="0" y="527.25" width="30.25" height="18" class="st10"></rect>		<text x="7.46" y="539.85" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>No</text>		</g>	<g id="shape43-109" v:mid="43" v:groupcontext="shape" transform="translate(137.869,-240.75)">		<title>Sheet.43</title>		<desc>Yes</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="15.125" cy="536.25" width="30.26" height="18"></v:textrect>		<rect x="0" y="527.25" width="30.25" height="18" class="st10"></rect>		<text x="4.79" y="539.85" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Yes</text>		</g>	<g id="shape46-112" v:mid="46" v:groupcontext="shape" transform="translate(293.75,-375.75)">		<title>Sheet.46</title>		<desc>Yes</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="15.125" cy="538.5" width="30.26" height="13.5"></v:textrect>		<rect x="0" y="531.75" width="30.25" height="13.5" class="st10"></rect>		<text x="4.79" y="542.1" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Yes</text>		</g>	<g id="shape47-115" v:mid="47" v:groupcontext="shape" transform="translate(544.51,-375.75)">		<title>Sheet.47</title>		<desc>No</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="15.125" cy="536.25" width="30.26" height="18"></v:textrect>		<rect x="0" y="527.25" width="30.25" height="18" class="st10"></rect>		<text x="7.46" y="539.85" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>No</text>		</g></g>
</svg>

**Figure : Workflow to identify the impacted subsystem**

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

### Identify kernel panic and bugs

You can determine from the kernel dmesg logs 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: &lt;6&gt; Kernel panic - not syncing: Fatal exception

18.800938: &lt;6&gt; SMP: stopping secondary CPUs

18.800947: &lt;6&gt; CPU0: stopping

Kernel panic - not syncing: Apps watchdog Bark received!
- Bug (Pattern 1: Forced crash due to memory corruption)

12.899532: &lt;6&gt; BUG kmalloc-128 (Not tainted): Redzone overwritten

12.905418: &lt;6&gt; -----------------------------------------------------------------------------
- Bug (Pattern 2: Forced crash from driver)

320.510769: &lt;6&gt; ------------[ cut here ]------------

320.510781: &lt;6&gt; 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!
- 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!

Note

Most bugs typically result in a kernel panic. For more information about debugging kernel issues, see [Qualcomm Linux Kernel Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-3/overview.html).

### Identify subsystem crash issues

You can verify the kernel dmesg logs to determine whether the restart was due to a subsystem crash. 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 rejected

### 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-70018-12A/identify_subsystem_to_be_debugged.html#identify_and_debug_errors_in_tz).

If the Qualcomm TEE diag logs shows no error, the issue may be due to a secure watchdog bite issue. For more information about watchdog issues, see [Hardware reset](https://docs.qualcomm.com/doc/80-70018-12/topic/general_system_debugging.html#reset-hardware).

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

## Debug methods

The following are the two debugging approaches:

- **On-target debugging**

    On-target debugging resolves software issues. This approach allows access to most information directly from the live device. Connect the Linux host to the live device using SSH. To set up SSH, see [Sign in using SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-254/how_to.html#use-ssh).

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

    This approach uses logs instead of an actual device, making it an efficient method of debugging. You can debug using memory dumps or logging tools and various types of logs for offline debugging. As 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 off-target debug features, see [Off-target debug features](https://docs.qualcomm.com/doc/80-70018-12/topic/Debug-overview.html#off-target-debug-features).

## On-target debug features

You can use the following debug features on the device at runtime:

- Perf utility
- Subsystem restart
- Force subsystem reset
- [Debug using OpenOCD](https://docs.qualcomm.com/doc/80-70018-12/topic/debugging_linux_kernel.html#debug-using-openocd)

### Perf utility

The Perf utility in Linux facilitates performance analysis and profiling. The Linux kernel includes this utility at the `tools/perf` directory.

You can use the Perf utility to debug various aspects of system behavior, including CPU performance counters, tracepoints, kprobes, and uprobes (for dynamic tracing). The following table lists the key features of the Perf utility.

Table : Key features of Perf utility

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

For more information about the Perf utility, see the following resources:

- [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

Subsystems can restart independently when they crash without requiring a device restart, called a subsystem restart (SSR). The SSR feature uses the remoteproc framework available in the Linux kernel.

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

Enable the SSR feature to generate the SSR dump on a subsystem restart. Consider using the SSR dump for debugging, as its size is smaller than the full memory dump. However, you need the entire RAM dump to debug some subsystem crashes.

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

### Force subsystem reset

Use this feature to debug use cases that require restarting a subsystem.

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

## Off-target debug features

You can use RAM dump or QXDM Professional for offline debugging.

### RAM dump

The RAM dump is a snapshot of the entire memory at the time of failure. You can analyze the RAM dump using various tools, including Qualcomm^®^ Crash Analysis Portal (QCAP), RAMParser, Lauterbach TRACE32 simulator, and crash utility.

For more information about how to collect and parse RAM dumps, see [Collect and parse RAM dump](https://docs.qualcomm.com/doc/80-70018-12/topic/debugging_linux_kernel.html#collect-and-parse-ram-dumps).

### QXDM Professional

Use QXDM Professional to debug various subsystems.

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

## Common system issues

You can categorize system issues into one of the following types:

> 
> 
> - [Linux kernel space issues](https://docs.qualcomm.com/doc/80-70018-12/topic/debugging_linux_kernel.html#debugging-linux-kernel)
> - [System issues](https://docs.qualcomm.com/doc/80-70018-12/topic/general_system_debugging.html#general-system-debugging)
> 
> 
> 
> > 
> > 
> > - [Watchdog issues](https://docs.qualcomm.com/doc/80-70018-12/topic/general_system_debugging.html#watchdog-timeout)
> >     - [Bus hang and timeout issues](https://docs.qualcomm.com/doc/80-70018-12/topic/general_system_debugging.html#erroneous-transaction-on-bus-error-and-timeout)
> >     - [Hardware reset issues](https://docs.qualcomm.com/doc/80-70018-12/topic/general_system_debugging.html#reset-hardware)

## Miscellaneous issues

You may run into the following miscellaneous issues:

- 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-70018-12/topic/debugging_linux_kernel.html#debugging-linux-kernel).

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

Last Published: May 02, 2025

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