# remoteprocessor(remoteproc) 서브시스템 구성

remoteproc 프레임워크는 Qualcomm 플랫폼의 오디오 디지털 신호 프로세서(aDSP) 및 컴퓨팅 디지털 신호 프로세서(cDSP) 같은 다른 서브시스템에 펌웨어를 로드하는 데 사용됩니다.

remoteproc 프레임워크는 두 부분으로 나뉩니다.

- 코어 프레임워크: 코어 프레임워크에는 공통 로직이 포함됩니다. 이 로직은 펌웨어를 로드하고, 원격 프로세서를 시작하거나 중지합니다.
- Remoteproc 드라이버: 이 드라이버에는 해당하는 코어를 관리하기 위한 플랫폼별 작업이 포함됩니다. remoteproc 드라이버는 remoteproc 인스턴스와 일련의 작업을 코어 프레임워크에 등록합니다.

여러 이종 원격 프로세서가 SoC에 비대칭적 다중 처리(ASMP) 구성으로 존재합니다. 원격 프로세서는 펌웨어 또는 운영 체제의 서로 다른 인스턴스를 실행합니다.

Qualcomm Linux가 다른 코어를 관리하기 위해 사용하는 표준 프레임워크에 대한 자세한 내용은 [Remote Processor Framework](https://www.kernel.org/doc/html/next/staging/remoteproc.html) 를 참조하세요.

## Qualcomm remoteproc 지원

퀄컴은 업스트림 PAS 드라이버를 사용하여 주변장치 펌웨어를 인증할 수 있는 remoteproc 프레임워크를 개선했습니다.

Qualcomm Linux의 Remoteproc 드라이버는 Qualcomm SoC 기기의 원격 프로세서를 위한 TrustZone 기반 주변장치 이미지 로더인 PAS(Peripheral Authentication Service) 드라이버를 구현합니다.

자세한 내용은 [qcom_q6v5_pas.c](https://github.com/torvalds/linux/blob/master/drivers/remoteproc/qcom_q6v5_pas.c) 를 참조하세요.

원격 프로세서는 aDSP, cDSP, MPSS(Modem Peripheral Subsystem), WPSS(Wireless Processor Subsystem) 등과 같은 다양한 코프로세서의 수명 주기를 관리하는 데 사용됩니다. 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 서브 기기는 원격 프로세서 서브시스템 충돌 및 복구 시나리오를 위한 통신 컨텍스트를 관리합니다.

통신 컨텍스트 같은 엔터티는 원격 프로세서를 부팅하거나 종료하는 시기를 결정해야 합니다. 각 서브 기기는 두 가지 작업을 수행합니다.

- remoteproc `start()` 후에 `probe()` 호출됨
- `stop()` 전에 `remove()` 호출됨

원격 프로세서에서 오류가 발생하면, 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 SoC는 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

코어 덤프 파일을 호스트 기기로 전송하고 문제를 디버그하려면 QCAP(Qualcomm Crash Analysis Portal)를 사용하세요.

참고

QCAP에 대한 자세한 내용은 [QCAP를 사용하여 RAM 구문 분석](https://docs.qualcomm.com/bundle/resource/topics/80-70020-12A/debugging_linux_kernel.html#parse_ram_dumps_using_qcap) 을 참조하세요.

## DT의 remoteproc 노드 및 펌웨어 로드 구성

remoteproc 기기는 DT 바인딩을 사용하여 각 기기 트리 파일에서 구성됩니다. 구성에는 DT 바인딩에 따라 호환되는 기기 이름, 메모리 영역, 인터럽트 설정, 클럭 참조가 `Documentation/devicetree/bindings/remoteproc/` 디렉토리에 포함됩니다.

다음 예시는 `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-3KO/topics/kernel-development.md) [Next Topic
메모리 구성 및 관리](https://docs.qualcomm.com/bundle/publicresource/80-70020-3KO/topics/memory.md)