# Overview

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 table lists 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 the high-level OS (HLOS). |
| Application digital signal processor (aDSP) | This subsystem is also known as the low-power audio subsystem (LPASS). This subsystem handles digital signal processing tasks like audio encoding/decoding, and voice recognition. |
| Compute digital signal processor (cDSP) | This subsystem is also known as the compute DSP. This subsystem is intended for compute-intensive tasks such as neural network-related calculations. |
| Qualcomm^®^ Trusted Execution Environment (TEE)/TrustZone (TZ) | This subsystem performs secure operations and is built on the Arm® TrustZone® architecture. For more information on this subsystem, see [Qualcomm Linux Security Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-11). |
| Wireless local area network processor subsystem (WPSS) | This subsystem manages the task of connecting to a Wi-Fi network, transmitting and receiving data packets, handling security protocols, and ensuring stable network performance. For more information on this subsystem, see [Qualcomm Linux Wi-Fi Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-14/introduction.html). |
| Always On Processor (AOP) | This subsystem regulates the power on the device. |

Except for the application processor, software for 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-70017-4).

Note

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

## Debug workflow

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

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

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

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 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: &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 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-70017-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 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-70017-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-70017-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-70017-11/debug.html).

## Debugging methods

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 Linux host to the live device. To set up SSH, see [Use SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-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-70017-12/topic/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 off-target debug features, see [Off-target debug features](https://docs.qualcomm.com/doc/80-70017-12/topic/Debug-overview.html#off-target-debug-features).

## On-target debug features

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

- Perf utility
- Subsystem restart
- Force subsystem reset

### Perf utility

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

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

For more information on 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

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-70017-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-70017-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-70017-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. 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-70017-12/topic/debugging_linux_kernel.html#collect-and-parse-ram-dumps).

### QXDM Professional

QXDM Professional is 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-70017-12A/debug-non-hlos-subsystems.html#qxdm_professional).

## Common system issues

System issues can be categorized into one of the following types:

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

## Miscellaneous issues

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-70017-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-70017-12/topic/using_open_source_debug_tools.html#using-open-source-debug-tools).

Last Published: Dec 25, 2024

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