# リモート・プロセッサー（remoteproc）サブシステムを構成する

remoteprocフレームワークは、ファームウェアをQualcomm上の他のサブシステム（オーティオ・デジタル・シグナル・プロセッサー（aDSP）やコンピュート・デジタル・シグナル・プロセッサー（cDSP）など）に読み込むために使用します。

Remoteprocフレームワークは2つの部分に分かれます。

- コア・フレームワーク：コア・フレームワークには一般的なロジックがあります。ファームウェアを読み込み、リモート・プロセッサーを起動または停止します。
- Remoteprocドライバー：ドライバーには、対応するコアを管理するためのプラットフォーム特有のオペレーションがあります。remoteprocドライバーは、remoteprocインスタンスと一連のオペレーションをコア・フレームワークに登録します。

非対称マルチプロセッシング（ASMP）構成のSoCには複数の異種リモート・プロセッサーがあります。リモート・プロセッサーはファームウェアまたはOSの複数のインスタンスを実行します。

Qualcomm Linuxが他のコアを管理するために使用する標準フレームワークについては、[Remote Processor Framework](https://www.kernel.org/doc/html/next/staging/remoteproc.html) を参照してください。

## Qualcommのremoteprocサポート

Qualcommは、アップストリームのPASドライバーを使用する周辺ファームウェア認証のremoteprocフレームワークを強化しました。

Qualcomm LinuxのRemoteprocドライバーは、peripheral authentication service（PAS）ドライバーを実装します。これは、Qualcomm SoCデバイスのリモート・プロセッサー用のTrustZoneベースの周辺イメージローダーです。

詳細については、[qcom_q6v5_pas.c](https://github.com/torvalds/linux/blob/master/drivers/remoteproc/qcom_q6v5_pas.c) を参照してください。

リモート・プロセッサーは各種のコプロセッサー（aDSP、cDSP、モデム周辺サブシステム（MPSS）、ワイヤレス・プロセッサー・サブシステム（WPSS）など）の管理に使用されます。QCS6490ベースのボードとDragonwing™ RB3 Gen 2開発キットでサポートされているコプロセッサーはaDSP、cDSP、WPSSです。

注釈

サポートされているリモート・プロセッサー・サブシステムは、使用しているSoCによって異なります。

**ユーザーインターフェース：** Remoteprocフレームワークは、登録されたremoteprocデバイスを追跡し、デバイスの起動とシャットダウンのためのユーザーインターフェースを提供します。ユーザー領域は、以下の `sysfs` インターフェースを使用して、remoteprocの現在の状態のクエリと変更を行います。

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>

**図：Remoteprocのサポート**

## Remoteprocリカバリとサブシステムの再起動を構成する

Remoteprocサブデバイスは、リモート・プロセッサーのサブシステムのクラッシュとリカバリのシナリオのための通信コンテキストを管理します。

通信コンテキストなどのエンティティにより、リモート・プロセッサーが起動またはシャットダウンする時点を決定する必要があります。各サブデバイスには2つのオペレーションがあります。

- `probe()` ：remoteprocの `start()` の後に呼び出す
- `remove()` ：`stop()` の前に呼び出す

リモート・プロセッサーで致命的なエラーが発生すると、remoteprocドライバーはこれを処理して `rproc_report_crash()` を呼び出します。これにより、エラーが発生したリモート・プロセッサーのリカバリが実行されます。

リカバリ・ハンドラーは以下を実行します。

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

**図：remoteprocクラッシュ・シーケンス**

ユーザー領域からリカバリ `debugfs` ノードを使用してリカバリを有効または無効にするには、以下を実行します。

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

## コアダンプを有効または無効にする

リモートプロセッサーのコアダンプは、Qualcomm Linuxカーネルのdevcoredump機能を使用してサブシステムのクラッシュの問題をデバッグするために使用します。

サブシステムでクラッシュが発生すると、devcoredumpは `/sys/class/devcoredump/devcdN/data` ノードのリカバリ用remoteprocのメモリのスナップショットを開示し、関連付けられたクラッシュの `uevent` がユーザー領域に送信されます。sysfsノードが読み取られると、sysfsはELFコンテナのセグメントを提供し、書き込み処理によりリソースが解放され、devcoredumpインスタンスが破棄されます。

debugfsノードが開示され、ユーザー領域からのコアダンプが有効または無効になります。

# 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

注釈

完全なRAMダンプをクラッシュ分析用に収拾するため、Qualcomm SoCsはカーネルパニックをremoteprocクラッシュ（リモートプロセッサーの致命的なエラー）で実施します。カーネルパニックモードは、コアダンプが無効な場合のみ有効になります。

devcoredump `/sys/class/devcoredump/devcdN/data` ノードは、サブシステムでコアダンプが有効になっている場合のみサブシステムのクラッシュに作成されます。コアダンプを有効にするには、`echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump` コマンドを実行します。`devcdN/data` ノードは一時的なもので、タイムアウト後に削除されます。この問題をデバッグするには、`copy` コマンドを使用して `devcdN/data` ノードをローカルデバイスにコピーして、安全に使用できるようにします。削除タイムアウトは `base/devcoredump.c` で定義されます。

以下は、コアダンプをコピーするためのコマンドの例です。

# 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

コアダンプファイルをホストデバイスに転送して問題をデバッグするには、Qualcomm Crash Analysis Portal（QCAP）を使用します。

注釈

QCAPの詳細については、[QCAPを使用してRAMダンプを解析する](https://docs.qualcomm.com/bundle/resource/topics/80-70020-12A/debugging_linux_kernel.html#parse_ram_dumps_using_qcap) を参照してください。

## remoteprocノードとファームウェアの読み込みをDTで構成する

remoteprocデバイスはDTバインディングを使用して、各デバイスツリー・ファイルで構成されます。この構成には、互換性があるデバイスの名前、メモリ領域、割り込み設定、クロック・リファレンスなどが、`Documentation/devicetree/bindings/remoteproc/` ディレクトリにあるDTバインディングに従って含まれます。

以下の例は、`arch/arm64/boot/dts/qcom/qcs6490.dtsi` ファイルにあるQCS6490 aDSP remoteprocデバイスツリー構成を示しています。

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

パス `arch/arm64/boot/dts/qcom/sa8775p.dtsi` のIQ-9075デバイスツリー構成ファイルを確認します。

注釈

すべてのQualcomm SoCのデバイスツリー構成ファイルを取得するには、各プラットフォームのDTSIファイルを参照してください。

すべてのファームウェア・ファイルは、`rootfs` の `/lib/firmware` ディレクトリにあり、関連する構成は対応するボードデバイスツリーの `arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts` ファイルで行われます。他のQualcommハードウェアSoCについては、`arch/arm64/boot/dts/qcom/<SoC>-<board>.dts` ファイルを参照してください。

以下の例は remoteproc DT構成を示しています。

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

### Remoteproc参照ログ

以下のログは、remoteprocが正常に起動すると表示されます。

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

以下のログは、remoteprocファームウェアの読み込みが失敗すると表示されます。

**
    \# 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: Jan 01, 2026

[Previous Topic
カーネルを開発する](https://docs.qualcomm.com/bundle/publicresource/80-70020-3JA/topics/kernel-development.md) [Next Topic
メモリを構成および管理する](https://docs.qualcomm.com/bundle/publicresource/80-70020-3JA/topics/memory.md)