# Đặt cấu hình các hệ thống con bộ xử lý từ xa (remoteproc)

Remoteproc framework được dùng để tải firmware vào các hệ thống con khác, chẳng hạn như bộ xử lý tín hiệu số âm thanh (aDSP) và bộ xử lý tín hiệu số điện toán (cDSP) trên nền tảng Qualcomm.

Remoteproc framework được chia thành hai phần:

- Framework lõi: Framework lõi chứa logic chung. Nó tải firmware và khởi động hoặc dừng bộ xử lý từ xa.
- Driver remoteproc: Driver chứa các hoạt động đăc thù cho từng nền tảng để quản lý các lõi tương ứng. Driver remoteproc đăng ký một phiên bản remoteproc và một tập hợp các hoạt động với framework lõi.

Có một số bộ xử lý từ xa không đồng nhất trên SoC trong cấu hình đa xử lý bất đối xứng (ASMP). Bộ xử lý từ xa chạy nhiều phiên bản firmware hoặc hệ điều hành khác nhau.

Để biết thêm thông tin về framework chuẩn mà Qualcomm Linux sử dụng để quản lý các lõi khác, hãy xem [Remote Processor Framework](https://www.kernel.org/doc/html/next/staging/remoteproc.html).

## Hỗ trợ Qualcomm remoteproc

Qualcomm đã cải tiến khuôn khổ remoteproc để xác thực firmware ngoại vi bằng upstream PAS driver.

Driver Remoteproc trong Qualcomm Linux triển khai driver  dịch vụ xác thực ngoại vi (PAS). Đây là trình tải ảnh ngoại vi dựa trên TrustZone cho các bộ xử lý con trên thiết bị SoC Qualcomm.

Để biết thêm thông tin, hãy xem [qcom_q6v5_pas.c](https://github.com/torvalds/linux/blob/master/drivers/remoteproc/qcom_q6v5_pas.c).

Các bộ xử lý từ xa được dùng để quản lý vòng đời của nhiều bộ xử lý con khác nhau, chẳng hạn như aDSP, cDSP, hệ thống con ngoại vi modem (MPSS) và hệ thống con bộ xử lý không dây (WPSS). Các bộ đồng xử lý được hỗ trợ trên bo mạch dựa trên QCS6490 và Dragonwing™ RB3 Gen 2 Development Kit là aDSP, cDSP và WPSS.

Ghi chú

Danh sách các hệ thống con bộ xử lý từ xa được hỗ trợ tùy thuộc vào SoC đang sử dụng.

**Giao diện người dùng:** remoteproc framework theo dõi các thiết bị remoteproc đã đăng ký và cung cấp giao diện người dùng để khởi động và tắt các thiết bị. Không gian người dùng có thể truy vấn và thay đổi trạng thái hiện tại của remoteproc bằng cách sử dụng giao diện `sysfs` sau:

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>

**Hình: Hỗ trợ Remoteproc**

## Đặt cấu hình khôi phục remoteproc và khởi động lại hệ thống con

Các thiết bị con remoteproc quản lý ngữ cảnh giao tiếp cho các tình huống khôi phục và lỗi crash hệ thống con bộ xử lý từ xa.

Các thực thể, chẳng hạn như ngữ cảnh giao tiếp, phải xác định thời điểm bộ xử lý từ xa khởi động hoặc tắt. Mỗi thiết bị con có hai hoạt động:

- `probe()` được gọi sau remoteproc `start()`
- `remove()` được gọi trước `stop()`

Khi xảy ra lỗi nghiêm trọng trên bộ xử lý từ xa, driver remoteproc sẽ xử lý lỗi đó và gọi `rproc_report_crash()`. Thao tác này sẽ kích hoạt quá trình khôi phục bộ xử lý từ xa bị lỗi.

Trình xử lý khôi phục sẽ làm như sau:

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

**Hình: Trình tự lỗi  crash remoteproc**

Để bật và tắt chức năng khôi phục bằng node khôi phục `debugfs` từ không gian người dùng, hãy thực hiện như sau:

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

## Bật hoặc tắt tính năng core dump

Tính năng core dump bộ xử lý từ xa được hỗ trợ để gỡ lỗi hệ thống con (subsystem crash), sử dụng tính năng devcoredump trong Qualcomm Linux kernel.

Khi hệ thống con gặp lỗi, devcoredump sẽ cung cấp ảnh chụp nhanh bộ nhớ của remoteproc đang phục hồi tại node `/sys/class/devcoredump/devcdN/data` và lỗi liên quan `uevent` sẽ được gửi đến không gian người dùng. Khi node sysfs được đọc, sysfs sẽ cung cấp các segments trong một ELF container, và thao tác ghi vào node này sẽ giải phóng tài nguyên và hủy instance devcoredump.

Một node debugfs được hiển thị để bật và tắt tính năng core dump từ không gian người dùng.

# 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

Ghi chú

Để thu thập full RAM dump cho việc phân tích lỗi crash, Qualcomm SoC triển khai chế độ lỗi kernel panic khi xảy ra lỗi crash remoteproc (lỗi nghiêm trọng trên bộ xử lý từ xa). Chế độ lỗi kernel panic chỉ được bật khi tính năng core dump đang tắt.

Node devcoredump `/sys/class/devcoredump/devcdN/data` chỉ được tạo khi hệ thống con gặp lỗi crash, nếu tính năng core dump được bật cho hệ thống con đó. Để bật tính năng core dump, hãy chạy lệnh `echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump` Node `devcdN/data` là node tạm thời và sẽ bị xóa sau khi hết thời gian chờ. Để gỡ lỗi cho các sự cố, hãy sử dụng lệnh `copy` để sao chép node `devcdN/data` vào thiết bị cục bộ của bạn để sử dụng an toàn. Thời gian chờ xóa được định nghĩa trong `base/devcoredump.c`.

Sau đây là lệnh ví dụ để sao chép tệp core dump:

# 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

Để chuyển tệp core dump sang thiết bị chủ và gỡ lỗi, hãy sử dụng Qualcomm Crash Analysis Portal (QCAP).

Ghi chú

Để biết thêm thông tin về QCAP, hãy xem [Phân tích  RAM dump bằng QCAP](https://docs.qualcomm.com/bundle/resource/topics/80-70020-12A/debugging_linux_kernel.html#parse_ram_dumps_using_qcap).

## Đặt cấu hình node remoteproc và tải firmware trong DT

Các thiết bị remoteproc được đặt cấu hình trong các tệp device tree tương ứng bằng cách sử dụng liên kết DT. Cấu hình bao gồm tên thiết bị tương thích, vùng bộ nhớ, cài đặt ngắt và tham chiếu xung nhịp, theo liên kết DT, trong thư mục `Documentation/devicetree/bindings/remoteproc/`.

Ví dụ sau đây mô tả cấu device tree cho remoteproc QCS6490 aDSP trong tệp `arch/arm64/boot/dts/qcom/qcs6490.dtsi`:

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

Kiểm tra tệp cấu hình device tree IQ-9075 trong đường dẫn `arch/arm64/boot/dts/qcom/sa8775p.dtsi`.

Ghi chú

Để lấy tệp cấu hình device tree cho tất cả các SoC Qualcomm, hãy xem tệp DTSI của nền tảng tương ứng.

Tất cả các tệp firmware đều có trong thư mục `/lib/firmware` trong `rootfs` và các cấu hình liên quan được thực hiện trong tệp `arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts` của device tree bo mạch tương ứng. Đối với các SoC phần cứng Qualcomm khác, hãy xem các tệp `arch/arm64/boot/dts/qcom/<SoC>-<board>.dts`.

Ví dụ sau đây mô tả cấu hình DT remoteproc:

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

### Log tham khảo remoteproc

Log sau đây sẽ hiển thị khi remoteproc khởi động thành công:

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

Log sau đây sẽ hiển thị khi tải firmware remoteproc không thành công:

**
    \# 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
Phát triển kernel](https://docs.qualcomm.com/bundle/publicresource/80-70020-3VI/topics/kernel-development.md) [Next Topic
Đặt cấu hình và quản lý bộ nhớ](https://docs.qualcomm.com/bundle/publicresource/80-70020-3VI/topics/memory.md)