# Configure the remoteprocessor (remoteproc) subsystems

The remoteproc framework is used to load firmware into other subsystems, such
as the audio digital signal processor (aDSP) and compute digital signal
processor (cDSP) on Qualcomm platforms.

The remoteproc framework is divided into two parts:

- Core framework: The core framework contains a common logic. It loads the firmware and starts or stops the remote processor.
- Remoteproc drivers: The drivers contain platform-specific operations to manage the corresponding cores. A remoteproc driver registers a remoteproc instance and a set of operations with the core framework.

Several heterogeneous remote processors are present on an SoC in
an asymmetric multiprocessing (ASMP) configuration. The remote
processors run different instances of firmware or OS.

For more information about the standard framework that the Qualcomm Linux uses
to manage other cores, see [Remote Processor
Framework](https://www.kernel.org/doc/html/next/staging/remoteproc.html).

## Qualcomm remoteproc support

Qualcomm has enhanced the remoteproc framework for peripheral firmware
authentication using the upstream PAS driver.

The Remoteproc driver in Qualcomm Linux implements a peripheral
authentication service (PAS) driver, which is a TrustZone-based
peripheral image loader for remote processors on Qualcomm SoC devices.

For more information,
see [qcom_q6v5_pas.c](https://github.com/torvalds/linux/blob/master/drivers/remoteproc/qcom_q6v5_pas.c).

The remote processors are used to manage the lifecycle of various co-processors, such as aDSP, cDSP, modem peripheral subsystem (MPSS), and wireless processor subsystem (WPSS). The supported co-processors on QCS6490-based boards and Dragonwing™ RB3 Gen 2 Development Kit are aDSP, cDSP, and WPSS.

Note

List of supported remote processor subsystems depends upon the SoC in use.

**User interface:** The remoteproc framework tracks the registered
remoteproc devices and provides a user interface to boot and shutdown
the devices. The user space can query and change the current state of a
remoteproc using the following `sysfs` interface:

remoteproc user space interface
    # start remoteproc:
      echo "start" > /sys/class/remoteproc/remoteprocN/state
    
    # stop remoteproc:
      echo "stop" > /sys/class/remoteproc/remoteprocN/state
    Copy to clipboard

<?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 remoteproc-framework.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="10.1681in" height="7.74685in" viewbox="0 0 732.102 557.773" xml:space="preserve" color-interpolation-filters="sRGB" class="st16" aria-label="../_images/remoteproc-framework.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st2 { fill: none; stroke: #6280cc; stroke-dasharray: 10.5, 7.5; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st3 { fill: #6280cc; fill-opacity: 1; stroke: #6280cc; stroke-opacity: 1; stroke-width: 0.37313432835821 }
.svg-1 .st4 { fill: #007884; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-opacity: 0; stroke-width: 2 }
.svg-1 .st5 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st6 { fill: #ffffff; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 1.16666em }
.svg-1 .st7 { font-size: 1em }
.svg-1 .st8 { stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st9 { fill: #000000; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 1.16666em }
.svg-1 .st10 { fill: none; stroke: #6280cc; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st11 { marker-end: url("#mrkr4-85"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st12 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.52631578947368 }
.svg-1 .st13 { marker-end: url("#mrkr4-85"); marker-start: url("#mrkr4-110"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st14 { fill: #007884; stroke: #000000; stroke-opacity: 0; stroke-width: 2 }
.svg-1 .st15 { fill: none; stroke: none; stroke-width: 0.25 }
.svg-1 .st16 { 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-7" class="st3" 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) "></use>	</marker>	<marker id="mrkr5-9" class="st3" 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>	<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-85" class="st12" v:arrowtype="4" v:arrowsize="1" v:setback="3.8" refx="-3.8" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-1.9,-1.9) "></use>	</marker>	<marker id="mrkr4-110" class="st12" v:arrowtype="4" v:arrowsize="1" v:setback="3.62" refx="3.62" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(1.9) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="OrgChartStyle" v:prompt="" v:val="VT0(1):26"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Flowchart" v:index="0"></v:layer>	<v:layer v:name="Irrigation System" v:index="1"></v:layer>	<v:layer v:name="Flow Segment" v:index="2"></v:layer>	<v:layer v:name="Connector" v:index="3"></v:layer>	<g id="shape1031-1" v:mid="1031" v:groupcontext="shape" transform="translate(41.6482,-42.7629)">		<title>Sheet.1031</title>		<rect x="0" y="83.2993" width="648" height="474.474" rx="4" ry="4" class="st1"></rect>	</g>	<g id="group1020-3" transform="translate(18,-18)" v:mid="1020" v:groupcontext="group">		<title>Sheet.1020</title>	</g>	<g id="shape1001-4" v:mid="1001" v:groupcontext="shape" v:layermember="0" transform="translate(200.952,-111.867)">		<title>Process.1001</title>		<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>		<path d="M0 557.77 L463.7 557.77 L463.7 362.4 L0 362.4 L0 557.77 Z" class="st2"></path>	</g>	<g id="shape1-10" v:mid="1" v:groupcontext="shape" v:layermember="0" transform="translate(97.1053,-445.647)">		<title>Process</title>		<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>		<rect x="0" y="511.183" width="147.226" height="46.5902" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape5-12" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(347.39,-445.647)">		<title>Process.5</title>		<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>		<rect x="0" y="511.183" width="147.226" height="46.5902" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape6-14" v:mid="6" v:groupcontext="shape" transform="translate(116.735,-461.592)">		<title>Sheet.6</title>		<desc>User space clients</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="53.9829" cy="550.974" width="107.97" height="13.5991"></v:textrect>		<rect x="0" y="544.174" width="107.966" height="13.5991" class="st5"></rect>		<text x="19.31" y="546.77" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>User space <tspan x="33.45" dy="1.2em" class="st7">clients</tspan></text>		</g>	<g id="shape7-18" v:mid="7" v:groupcontext="shape" transform="translate(357.205,-459.105)">		<title>Sheet.7</title>		<desc>Peripheral manager</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.798" cy="548.707" width="127.6" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="127.596" height="18.1322" class="st5"></rect>		<text x="32.24" y="544.51" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Peripheral <tspan x="36.18" dy="1.2em" class="st7">manager</tspan></text>		</g>	<g id="shape11-22" v:mid="11" v:groupcontext="shape" v:layermember="0" transform="translate(60.1448,-363.348)">		<title>Process.11</title>		<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>		<rect x="0" y="516.564" width="240.831" height="41.2095" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape13-24" v:mid="13" v:groupcontext="shape" transform="translate(67.6869,-372)">		<title>Sheet.13</title>		<desc>/sys/class/remoteproc/remoteproc*</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="112.873" cy="546.44" width="225.75" height="22.6674"></v:textrect>		<rect x="0" y="535.106" width="225.747" height="22.6674" class="st5"></rect>		<text x="38.26" y="542.24" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>/sys/class/remoteproc/<tspan x="73.71" dy="1.2em" class="st7">remoteproc*</tspan></text>		</g>	<g id="shape15-28" v:mid="15" v:groupcontext="shape" v:layermember="1;2" transform="translate(43.1296,-383.953)">		<title>Lateral line</title>		<v:custprops>			<v:cp v:nameu="ShapeClass" v:lbl="Shape class" v:invis="true" v:langid="1033" v:val="VT4(Building Component)"></v:cp>			<v:cp v:nameu="ShapeType" v:lbl="Shape type" v:invis="true" v:langid="1033" v:val="VT4(Flow Segment)"></v:cp>			<v:cp v:nameu="SubShapeType" v:lbl="Subshape type" v:invis="true" v:langid="1033" v:val="VT4(Pipe Segment)"></v:cp>			<v:cp v:nameu="BaseElevation" v:lbl="Base elevation" v:type="2" v:langid="1033"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="SolSH" v:val="VT4({5D50005D-537C-4738-9C46-130C74335A6D})"></v:ud>			<v:ud v:nameu="ShapeClass" v:prompt="Building Component" v:val="VT0(3):26"></v:ud>			<v:ud v:nameu="ShapeType" v:prompt="Flow Segment" v:val="VT0(19):26"></v:ud>			<v:ud v:nameu="SubShapeType" v:prompt="Pipe Segment" v:val="VT0(56):26"></v:ud>		</v:userdefs>		<path d="M0 557.77 L17.02 557.77" class="st8"></path>	</g>	<g id="shape27-31" v:mid="27" v:groupcontext="shape" v:layermember="1;2" transform="translate(302.422,-383.951) rotate(0.148518)">		<title>Lateral line.27</title>		<v:custprops>			<v:cp v:nameu="ShapeClass" v:lbl="Shape class" v:invis="true" v:langid="1033" v:val="VT4(Building Component)"></v:cp>			<v:cp v:nameu="ShapeType" v:lbl="Shape type" v:invis="true" v:langid="1033" v:val="VT4(Flow Segment)"></v:cp>			<v:cp v:nameu="SubShapeType" v:lbl="Subshape type" v:invis="true" v:langid="1033" v:val="VT4(Pipe Segment)"></v:cp>			<v:cp v:nameu="BaseElevation" v:lbl="Base elevation" v:type="2" v:langid="1033"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="SolSH" v:val="VT4({5D50005D-537C-4738-9C46-130C74335A6D})"></v:ud>			<v:ud v:nameu="ShapeClass" v:prompt="Building Component" v:val="VT0(3):26"></v:ud>			<v:ud v:nameu="ShapeType" v:prompt="Flow Segment" v:val="VT0(19):26"></v:ud>			<v:ud v:nameu="SubShapeType" v:prompt="Pipe Segment" v:val="VT0(56):26"></v:ud>		</v:userdefs>		<path d="M0 557.77 L46.41 557.77" class="st8"></path>	</g>	<g id="shape28-34" v:mid="28" v:groupcontext="shape" v:layermember="0" transform="translate(347.39,-363.228)">		<title>Process.28</title>		<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>		<rect x="0" y="516.564" width="147.226" height="41.2095" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape29-36" v:mid="29" v:groupcontext="shape" v:layermember="1;2" transform="translate(496.616,-383.833)">		<title>Lateral line.29</title>		<v:custprops>			<v:cp v:nameu="ShapeClass" v:lbl="Shape class" v:invis="true" v:langid="1033" v:val="VT4(Building Component)"></v:cp>			<v:cp v:nameu="ShapeType" v:lbl="Shape type" v:invis="true" v:langid="1033" v:val="VT4(Flow Segment)"></v:cp>			<v:cp v:nameu="SubShapeType" v:lbl="Subshape type" v:invis="true" v:langid="1033" v:val="VT4(Pipe Segment)"></v:cp>			<v:cp v:nameu="BaseElevation" v:lbl="Base elevation" v:type="2" v:langid="1033"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="SolSH" v:val="VT4({5D50005D-537C-4738-9C46-130C74335A6D})"></v:ud>			<v:ud v:nameu="ShapeClass" v:prompt="Building Component" v:val="VT0(3):26"></v:ud>			<v:ud v:nameu="ShapeType" v:prompt="Flow Segment" v:val="VT0(19):26"></v:ud>			<v:ud v:nameu="SubShapeType" v:prompt="Pipe Segment" v:val="VT0(56):26"></v:ud>		</v:userdefs>		<path d="M0 557.77 L193.74 557.77" class="st8"></path>	</g>	<g id="shape30-39" v:mid="30" v:groupcontext="shape" transform="translate(594.123,-388.023)">		<title>Sheet.30</title>		<desc>Userspace</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="37.5254" cy="547.059" width="75.06" height="21.429"></v:textrect>		<rect x="0" y="536.344" width="75.0507" height="21.429" class="st5"></rect>		<text x="4.58" y="551.26" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Userspace</text>		</g>	<g id="shape31-42" v:mid="31" v:groupcontext="shape" transform="translate(352,-374.767)">		<title>Sheet.31</title>		<desc>/dev/remoteproc*</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68.8541" cy="548.707" width="137.71" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="137.708" height="18.1322" class="st5"></rect>		<text x="12.87" y="552.91" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>/dev/remoteproc*</text>		</g>	<g id="shape1000-45" v:mid="1000" v:groupcontext="shape" transform="translate(620.674,-361.605)">		<title>Sheet.1000</title>		<desc>Kernel</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24.25" cy="548.707" width="48.51" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="48.5" height="18.1322" class="st5"></rect>		<text x="4.51" y="552.91" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Kernel</text>		</g>	<g id="shape1002-48" v:mid="1002" v:groupcontext="shape" v:layermember="0" transform="translate(214.817,-250.237)">		<title>Process.1002</title>		<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>		<rect x="0" y="516.564" width="240.831" height="41.2095" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape1003-50" v:mid="1003" v:groupcontext="shape" v:layermember="0" transform="translate(489.162,-250.237)">		<title>Process.1003</title>		<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>		<rect x="0" y="516.564" width="159.486" height="41.2095" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape1004-52" v:mid="1004" v:groupcontext="shape" v:layermember="0" transform="translate(489.648,-168.585)">		<title>Process.1004</title>		<desc>Mdt-loader/SCM driver</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="79.743" cy="537.169" width="159.49" height="41.2095"></v:textrect>		<rect x="0" y="516.564" width="159.486" height="41.2095" rx="4" ry="4" class="st4"></rect>		<text x="9.02" y="541.37" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Mdt-loader/SCM driver</text>		</g>	<g id="shape1005-55" v:mid="1005" v:groupcontext="shape" v:layermember="0" transform="translate(219.725,-127.993)">		<title>Process.1005</title>		<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>		<rect x="0" y="475.973" width="233.979" height="81.8009" rx="2" ry="2" class="st10"></rect>	</g>	<g id="shape1006-57" v:mid="1006" v:groupcontext="shape" v:layermember="0" transform="translate(225.623,-159.212)">		<title>Process.1006</title>		<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>		<rect x="0" y="513.248" width="71.582" height="44.525" rx="2" ry="2" class="st4"></rect>	</g>	<g id="shape1007-59" v:mid="1007" v:groupcontext="shape" v:layermember="0" transform="translate(299.648,-159.212)">		<title>Process.1007</title>		<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>		<rect x="0" y="513.248" width="53.4" height="44.525" rx="2" ry="2" class="st4"></rect>	</g>	<g id="shape1008-61" v:mid="1008" v:groupcontext="shape" v:layermember="0" transform="translate(355.341,-159.212)">		<title>Process.1008</title>		<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>		<rect x="0" y="513.248" width="92.4" height="44.525" rx="2" ry="2" class="st4"></rect>	</g>	<g id="shape1011-63" v:mid="1011" v:groupcontext="shape" transform="translate(233.4,-261.718)">		<title>Sheet.1011</title>		<desc>Remoteproc core</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="102.496" cy="548.707" width="205" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="204.991" height="18.1322" class="st5"></rect>		<text x="48.94" y="552.91" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc core</text>		</g>	<g id="shape1012-66" v:mid="1012" v:groupcontext="shape" transform="translate(506.202,-254.083)">		<title>Sheet.1012</title>		<desc>Remoteproc platform device</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.798" cy="541.014" width="127.6" height="33.5186"></v:textrect>		<rect x="0" y="524.255" width="127.596" height="33.5186" class="st5"></rect>		<text x="25.7" y="536.81" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc <tspan x="15.3" dy="1.2em" class="st7">platform device</tspan></text>		</g>	<g id="shape1013-70" v:mid="1013" v:groupcontext="shape" transform="translate(231.648,-174.458)">		<title>Sheet.1013</title>		<desc>sysmon</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="29.0704" cy="550.427" width="58.15" height="14.6933"></v:textrect>		<rect x="0" y="543.08" width="58.1409" height="14.6933" class="st5"></rect>		<text x="4.55" y="554.63" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>sysmon</text>		</g>	<g id="shape1014-73" v:mid="1014" v:groupcontext="shape" transform="translate(305.31,-174.458)">		<title>Sheet.1014</title>		<desc>Glink</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="20.7678" cy="550.427" width="41.54" height="14.6933"></v:textrect>		<rect x="0" y="543.08" width="41.5357" height="14.6933" class="st5"></rect>		<text x="5.19" y="554.63" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Glink</text>		</g>	<g id="shape1015-76" v:mid="1015" v:groupcontext="shape" transform="translate(362.102,-167)">		<title>Sheet.1015</title>		<desc>SSR notification</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="39.4768" cy="542.969" width="78.96" height="29.6091"></v:textrect>		<rect x="0" y="528.164" width="78.9537" height="29.6091" class="st5"></rect>		<text x="26.86" y="538.77" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SSR <tspan x="4.2" dy="1.2em" class="st7">notification</tspan></text>		</g>	<g id="shape1022-80" v:mid="1022" v:groupcontext="shape" transform="translate(728.492,112.127) rotate(90)">		<title>Sheet.1022</title>		<path d="M0 557.77 L33.61 557.77" class="st11"></path>	</g>	<g id="shape1023-86" v:mid="1023" v:groupcontext="shape" transform="translate(797.128,194.546) rotate(90)">		<title>Sheet.1023</title>		<path d="M0 557.77 L64.24 557.77" class="st11"></path>	</g>	<g id="shape1024-91" v:mid="1024" v:groupcontext="shape" transform="translate(978.776,112.127) rotate(90)">		<title>Sheet.1024</title>		<path d="M0 557.77 L33.61 557.77" class="st11"></path>	</g>	<g id="shape1025-96" v:mid="1025" v:groupcontext="shape" transform="translate(978.776,194.546) rotate(90)">		<title>Sheet.1025</title>		<path d="M0 557.77 L64.24 557.77" class="st11"></path>	</g>	<g id="shape1026-101" v:mid="1026" v:groupcontext="shape" v:layermember="0" transform="translate(61.6482,-250.237)">		<title>Process.1026</title>		<desc>Kernel clients</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="59.8498" cy="537.169" width="119.7" height="41.2095"></v:textrect>		<rect x="0" y="516.564" width="119.7" height="41.2095" rx="4" ry="4" class="st4"></rect>		<text x="17.85" y="541.37" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Kernel clients</text>		</g>	<g id="shape1027-104" v:mid="1027" v:groupcontext="shape" transform="translate(180.464,-270.842)">		<title>Sheet.1027</title>		<path d="M7.24 557.77 L7.6 557.77 L20.85 557.77 L26.08 557.77" class="st13"></path>	</g>	<g id="shape1028-112" v:mid="1028" v:groupcontext="shape" transform="translate(893.006,307.536) rotate(90)">		<title>Sheet.1028</title>		<path d="M0 557.77 L31.7 557.77" class="st11"></path>	</g>	<g id="shape1029-117" v:mid="1029" v:groupcontext="shape" transform="translate(232.81,-133.646)">		<title>Sheet.1029</title>		<desc>Remoteproc subdevices</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="100.745" cy="547.978" width="201.5" height="19.591"></v:textrect>		<rect x="0" y="538.182" width="201.49" height="19.591" class="st5"></rect>		<text x="25.8" y="552.18" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc subdevices</text>		</g>	<g id="shape1030-120" v:mid="1030" v:groupcontext="shape" transform="translate(456.348,-270.842)">		<title>Sheet.1030</title>		<path d="M7.24 557.77 L7.6 557.77 L23.62 557.77 L25.2 557.77" class="st13"></path>	</g>	<g id="shape1034-127" v:mid="1034" v:groupcontext="shape" transform="translate(565.737,-56.2629)">		<title>Sheet.1034</title>		<rect x="0" y="538.943" width="19.5" height="18.8305" rx="2" ry="2" class="st14"></rect>	</g>	<g id="shape1035-129" v:mid="1035" v:groupcontext="shape" transform="translate(586.2,-56.7532)">		<title>Sheet.1035</title>		<desc>Open source</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="44.9" cy="548.848" width="89.8" height="17.85"></v:textrect>		<rect x="0" y="539.923" width="89.8" height="17.85" class="st15"></rect>		<text x="5.66" y="553.05" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Open source</text>		</g></g>
</svg>

**Figure : Remoteproc support**

## Configure remoteproc recovery and subsystem restart

The remoteproc subdevices manage communication contexts for remote
processor subsystem crash and recovery scenarios.

Entities, such as communication contexts, must determine when a remote
processor boots or shuts down. Each subdevice has two operations:

- `probe()` called after the remoteproc `start()`
- `remove()` called before `stop()`

When a fatal error occurs on a remote processor, the remoteproc driver
handles it and invokes `rproc_report_crash()`, which triggers recovery
of the faulty remote processor.

The recovery handler does the following:

<?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 Remoteproc-recovery.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="11.1528in" height="2.12503in" viewbox="0 0 802.998 153.002" xml:space="preserve" color-interpolation-filters="sRGB" class="st7" aria-label="../_images/Remoteproc-recovery.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"></v:ud>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-2 .st1 { fill: #fafafa; stroke: #c7c8c8; stroke-width: 1.25 }
.svg-2 .st2 { marker-end: url("#mrkr4-10"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.25 }
.svg-2 .st3 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.3315649867374 }
.svg-2 .st4 { fill: #6280cc; stroke: #c8c8c8; stroke-opacity: 0; stroke-width: 1.25 }
.svg-2 .st5 { fill: #ffffff; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 1.16666em }
.svg-2 .st6 { font-size: 1em }
.svg-2 .st7 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<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-10" class="st3" v:arrowtype="4" v:arrowsize="2" v:setback="6.032" refx="-6.032" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-3.016,-3.016) "></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>	<g id="group1018-1" transform="translate(18.0016,-32.1846)" v:mid="1018" v:groupcontext="group">		<title>Sheet.1018</title>		<g id="shape1017-2" v:mid="1017" v:groupcontext="shape">			<title>Rectangle</title>			<v:userdefs>				<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			</v:userdefs>			<rect x="0" y="67.7446" width="766.998" height="85.2578" rx="4" ry="4" class="st1"></rect>		</g>		<g id="group1016-4" transform="translate(11.7053,-11.0733)" v:mid="1016" v:groupcontext="group">			<title>Sheet.1016</title>			<g id="shape1009-5" v:mid="1009" v:groupcontext="shape" transform="translate(152.789,-31.6638)">				<title>Sheet.1009</title>				<path d="M0 153 L35.21 153" class="st2"></path>			</g>			<g id="shape1010-11" v:mid="1010" v:groupcontext="shape" transform="translate(349.008,-31.5557)">				<title>Sheet.1010</title>				<path d="M0 153 L34.44 153" class="st2"></path>			</g>			<g id="shape1011-16" v:mid="1011" v:groupcontext="shape" transform="translate(547.983,-31.5363)">				<title>Sheet.1011</title>				<path d="M0 153 L30.96 153" class="st2"></path>			</g>			<g id="group1012-21" transform="translate(586.286,0)" v:mid="1012" v:groupcontext="group">				<title>Sheet.1012</title>				<g id="shape1004-22" v:mid="1004" v:groupcontext="shape" transform="translate(0.801115,-0.819834) rotate(0.3)">					<title>Rectangle.1012</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<rect x="0" y="90.7121" width="156.978" height="62.2903" rx="4" ry="4" class="st4"></rect>				</g>				<g id="shape1005-24" v:mid="1005" v:groupcontext="shape" transform="translate(21.1031,-12.9557)">					<title>Sheet.1005</title>					<desc>Start remoteproc instance</desc>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="57.5479" cy="133.874" width="115.1" height="38.257"></v:textrect>					<rect x="0" y="114.745" width="115.096" height="38.257" rx="4" ry="4" class="st4"></rect>					<text x="4.76" y="129.67" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Start remoteproc <tspan x="31.05" dy="1.2em" class="st6">instance</tspan></text>					</g>			</g>			<g id="group1013-28" transform="translate(390.857,0)" v:mid="1013" v:groupcontext="group">				<title>Sheet.1013</title>				<g id="shape1003-29" v:mid="1003" v:groupcontext="shape" transform="translate(0.801115,-0.819834) rotate(0.3)">					<title>Rectangle.1006</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<rect x="0" y="90.7121" width="156.978" height="62.2903" rx="4" ry="4" class="st4"></rect>				</g>				<g id="shape1006-31" v:mid="1006" v:groupcontext="shape" transform="translate(23.852,-21.9169)">					<title>Sheet.1006</title>					<desc>Reload firmware</desc>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="54.799" cy="142.473" width="109.6" height="21.0581"></v:textrect>					<rect x="0" y="131.944" width="109.598" height="21.0581" rx="4" ry="4" class="st4"></rect>					<text x="33.33" y="138.27" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Reload <tspan x="27.02" dy="1.2em" class="st6">firmware</tspan></text>					</g>			</g>			<g id="group1014-35" transform="translate(195.429,0)" v:mid="1014" v:groupcontext="group">				<title>Sheet.1014</title>				<g id="shape1002-36" v:mid="1002" v:groupcontext="shape" transform="translate(0.801115,-0.819834) rotate(0.3)">					<title>Rectangle.1005</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<rect x="0" y="90.7121" width="156.978" height="62.2903" rx="4" ry="4" class="st4"></rect>				</g>				<g id="shape1007-38" v:mid="1007" v:groupcontext="shape" transform="translate(16.3706,-12.4272)">					<title>Sheet.1007</title>					<desc>Invoke coredump generator</desc>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="63.2675" cy="133.874" width="126.54" height="38.257"></v:textrect>					<rect x="0" y="114.745" width="126.535" height="38.257" rx="4" ry="4" class="st4"></rect>					<text x="9.53" y="129.67" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Invoke coredump <tspan x="33.24" dy="1.2em" class="st6">generator</tspan></text>					</g>			</g>			<g id="group1015-42" v:mid="1015" v:groupcontext="group">				<title>Sheet.1015</title>				<g id="shape1001-43" v:mid="1001" v:groupcontext="shape" transform="translate(0.801115,-0.819834) rotate(0.3)">					<title>Rectangle.1001</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<rect x="0" y="90.7121" width="156.978" height="62.2903" rx="4" ry="4" class="st4"></rect>				</g>				<g id="shape1008-45" v:mid="1008" v:groupcontext="shape" transform="translate(21.1031,-12.0944)">					<title>Sheet.1008</title>					<desc>Stop remoteproc instance</desc>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="57.5479" cy="133.874" width="115.1" height="38.257"></v:textrect>					<rect x="0" y="114.745" width="115.096" height="38.257" rx="4" ry="4" class="st4"></rect>					<text x="5.3" y="129.67" class="st5" v:langid="1033"><v:paragraph v:horizalign="1" v:bulletsize="0.166667"></v:paragraph><v:tablist></v:tablist>Stop remoteproc <tspan x="31.05" dy="1.2em" class="st6">instance</tspan></text>					</g>			</g>		</g>	</g></g>
</svg>

**Figure: Remoteproc crash sequence**

To enable and disable recovery using the recovery `debugfs` node from
the user space, do the following:

mount -t debugfs nodev /sys/kernel/debug
    echo disabled > /sys/kernel/debug/remoteproc/remoteprocN/recovery
    Copy to clipboard

## Enable or disable core dump

Remote processor core dumps are supported for debugging the subsystem
crash issues using the Qualcomm Linux kernel devcoredump feature.

When a subsystem crash occurs, devcoredump exposes a snapshot of
the memory of the recovering remoteproc in the
`/sys/class/devcoredump/devcdN/data` node, and an associated crash
`uevent` is sent to the user space. When the sysfs node is read, the sysfs
provides the segments in an ELF container, and a write operation frees up the
resources and destroys the devcoredump instance.

A debugfs node is exposed to enable and disable core dump from the user
space.

# Disable core dumps:
      echo disabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump
    
    # Enable core dumps:
      echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump
    #
    # N represents the index number of the remote processor.
    Copy to clipboard

Note

To collect the full RAM dump for crash analysis, Qualcomm SoCs implement kernel panic on remoteproc crash (fatal error on remote processor).
The kernel panic mode is enabled only when the core dump is disabled.

The devcoredump `/sys/class/devcoredump/devcdN/data` node is created on a subsystem crash only if core dump is enabled for the subsystem. To enable the core dump, run the  `echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump` command.
The `devcdN/data` node is temporary and is removed
after a timeout. To debug the issues, use the `copy` command to copy the `devcdN/data` node to your local device for secure usage. The delete timeout is defined in
`base/devcoredump.c`.

The following is an example command to copy the core dumps:

# Copy Core dump to a local device
      cp /sys/class/devcoredump/devcdN/data > /var/spool/crash/dump_file.elf
    #
    # N represents the index of core dump. It is incremented each time a new core dump is generated.
    Copy to clipboard

To transfer the core dump file to a host device and debug the issues, use the Qualcomm Crash Analysis Portal (QCAP).

Note

For more information about QCAP, see [Parse RAM dumps using QCAP](https://docs.qualcomm.com/bundle/resource/topics/80-70020-12A/debugging_linux_kernel.html#parse_ram_dumps_using_qcap).

## Configure the remoteproc node and firmware load in DT

The remoteproc devices are configured in the respective device tree
files using the DT bindings. The configuration includes compatible device
names, memory regions, interrupt settings, and clock references,
according to the DT bindings, in the
`Documentation/devicetree/bindings/remoteproc/` directory.

The following example shows the QCS6490 aDSP remoteproc device tree
configuration in the `arch/arm64/boot/dts/qcom/qcs6490.dtsi` file:

remoteproc_adsp: remoteproc@3000000 {
              compatible = "qcom,sc7280-adsp-pas";
              reg = <0x0 0x03000000 0x0 0x100>;
    
              interrupts-extended = <&pdc 6 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 3 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 7 IRQ_TYPE_EDGE_RISING>;
              interrupt-names = "wdog", "fatal", "ready", "handover",
                              "stop-ack", "shutdown-ack";
    
              clocks = <&rpmhcc RPMH_CXO_CLK>;
              clock-names = "xo";
              <snip>
     };
    Copy to clipboard

Check the IQ-9075 device tree configuration file in the `arch/arm64/boot/dts/qcom/sa8775p.dtsi` path.

Note

To get the device tree configuration file for all the Qualcomm SoCs, see the respective platform DTSI file.

All firmware files are present in the `/lib/firmware` directory in `rootfs` and the related configurations are done in the corresponding
board device tree `arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts` file. For other Qualcomm hardware SoCs, see `arch/arm64/boot/dts/qcom/<SoC>-<board>.dts` files.

The following example shows the remoteproc DT configuration:

&remoteproc_adsp {
    firmware-name = "qcom/qcs6490/adsp.mdt";
    status = "okay";
    };
    Copy to clipboard

### Remoteproc reference logs

The following log is displayed when a remoteproc boots successfully:

**
    \# remoteproc success**
    "remoteproc remoteproc1: remote processor 4080000.remoteproc is now up"
    Copy to clipboard

The following log is displayed when a remoteproc firmware load fails:

**
    \# remoteproc failure**
    Error log: "remoteproc remoteproc0: Direct firmware load for qcom/qcs6490/modem.mdt failed with error -2"
    
    # Caused by: error loading firmware.
    # Solution: ensure that the modem firmware is copied to /lib/firmware/qcom/qcs6490 in rootfs.
    Copy to clipboard

Last Published: Jul 02, 2025

[Previous Topic
Develop the kernel](https://docs.qualcomm.com/bundle/publicresource/80-70020-3/topics/kernel-development.md) [Next Topic
Configure and manage memory](https://docs.qualcomm.com/bundle/publicresource/80-70020-3/topics/memory.md)