On 2024-10-16 23:34, Rodrigo Siqueira wrote: > One of the challenges to contributing to the display code is the > complexity of the DC component. This commit adds a documentation page > that discusses the programming model used by DCN and an overview of how > the display code is organized. > > Cc: Leo Li <sunpeng.li@xxxxxxx> > Cc: Aurabindo Pillai <aurabindo.pillai@xxxxxxx> > Cc: Hamza Mahfooz <hamza.mahfooz@xxxxxxx> > Cc: Harry Wentland <harry.wentland@xxxxxxx> > Cc: Mario Limonciello <mario.limonciello@xxxxxxx> > Cc: Christian Konig <christian.koenig@xxxxxxx> > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@xxxxxxx> Series is Reviewed-by: Harry Wentland <harry.wentland@xxxxxxx> Harry > --- > .../gpu/amdgpu/display/dc-arch-overview.svg | 731 +++++++++++++++++ > .../gpu/amdgpu/display/dc-components.svg | 732 ++++++++++++++++++ > .../gpu/amdgpu/display/dcn-blocks.rst | 2 + > .../gpu/amdgpu/display/dcn-overview.rst | 2 + > Documentation/gpu/amdgpu/display/index.rst | 1 + > .../amdgpu/display/programming-model-dcn.rst | 162 ++++ > 6 files changed, 1630 insertions(+) > create mode 100644 Documentation/gpu/amdgpu/display/dc-arch-overview.svg > create mode 100644 Documentation/gpu/amdgpu/display/dc-components.svg > create mode 100644 Documentation/gpu/amdgpu/display/programming-model-dcn.rst > > diff --git a/Documentation/gpu/amdgpu/display/dc-arch-overview.svg b/Documentation/gpu/amdgpu/display/dc-arch-overview.svg > new file mode 100644 > index 000000000000..23394931cf26 > --- /dev/null > +++ b/Documentation/gpu/amdgpu/display/dc-arch-overview.svg > @@ -0,0 +1,731 @@ > +<?xml version="1.0" encoding="UTF-8" standalone="no"?> > +<!-- Created with Inkscape (http://www.inkscape.org/) --> > + > +<svg > + width="1204.058" > + height="510.57321" > + viewBox="0 0 318.57366 135.08917" > + version="1.1" > + id="svg8" > + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" > + sodipodi:docname="dc-arch-overview.svg" > + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" > + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" > + xmlns="http://www.w3.org/2000/svg" > + xmlns:svg="http://www.w3.org/2000/svg" > + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > + xmlns:cc="http://creativecommons.org/ns#" > + xmlns:dc="http://purl.org/dc/elements/1.1/"> > + <defs > + id="defs2"> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="marker8858" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8616" > + style="fill:#aa00d4;fill-opacity:1;fill-rule:evenodd;stroke:#aa00d4;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Send" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Send" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8622" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="matrix(-0.3,0,0,-0.3,0.69,0)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow1Lend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow1Lend" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8592" > + d="M 0,0 5,-5 -12.5,0 5,5 Z" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1" > + transform="matrix(-0.8,0,0,-0.8,-10,0)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Lend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Lend" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8610" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path1200" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2-1" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9-9" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2-7" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9-8" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-4" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-5" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-0" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-3" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-6" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-1" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2-6" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9-1" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-0-7" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-3-4" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-6-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-1-0" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2-8" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9-6" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path1200-6" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="marker8858-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8616-5" > + style="fill:#00ffcc;fill-opacity:1;fill-rule:evenodd;stroke:#00ffcc;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-56" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-0-2" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-3-9" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + </defs> > + <sodipodi:namedview > + id="base" > + pagecolor="#ffffff" > + bordercolor="#666666" > + borderopacity="1.0" > + inkscape:pageopacity="0.0" > + inkscape:pageshadow="2" > + inkscape:zoom="1.4" > + inkscape:cx="812.5" > + inkscape:cy="315" > + inkscape:document-units="mm" > + inkscape:current-layer="layer1" > + showgrid="false" > + inkscape:window-width="3840" > + inkscape:window-height="2083" > + inkscape:window-x="0" > + inkscape:window-y="0" > + inkscape:window-maximized="1" > + showguides="false" > + fit-margin-top="0" > + fit-margin-left="0" > + fit-margin-right="0" > + fit-margin-bottom="0" > + units="px" > + inkscape:snap-global="false" > + inkscape:showpageshadow="2" > + inkscape:pagecheckerboard="0" > + inkscape:deskcolor="#d1d1d1" /> > + <metadata > + id="metadata5"> > + <rdf:RDF> > + <cc:Work > + rdf:about=""> > + <dc:format>image/svg+xml</dc:format> > + <dc:type > + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> > + </cc:Work> > + </rdf:RDF> > + </metadata> > + <g > + inkscape:label="Layer 1" > + inkscape:groupmode="layer" > + id="layer1" > + transform="translate(399.57097,11.171866)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.54816px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + x="-297.75696" > + y="109.44505" > + id="text1063" /> > + <path > + style="fill:#008000;stroke:#008000;stroke-width:0.463298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.463298, 0.926596;stroke-dashoffset:0;stroke-opacity:1" > + d="m -120.41395,84.001461 h -9.04766" > + id="path1171-0-7" > + inkscape:connector-curvature="0" /> > + <path > + style="fill:none;stroke:#ff0000;stroke-width:0.982225;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.982225, 1.96445;stroke-dashoffset:0;stroke-opacity:1" > + d="m -129.96274,90.649221 h 8.66407" > + id="path1171-7-1-3-8" > + inkscape:connector-curvature="0" /> > + <path > + style="fill:none;stroke:#3771c8;stroke-width:0.745037;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" > + d="m -121.33167,97.283841 h -7.91265" > + id="path7149-3-7-8" > + inkscape:connector-curvature="0" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.54816px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + x="-115.55721" > + y="85.330681" > + id="text12079"><tspan > + sodipodi:role="line" > + id="tspan12077" > + x="-115.55721" > + y="85.330681" > + style="font-size:4.80199px;stroke-width:0.163704">Board/Platform</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.54816px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + x="-115.75885" > + y="92.435066" > + id="text12079-3"><tspan > + sodipodi:role="line" > + id="tspan12077-1" > + x="-115.75885" > + y="92.435066" > + style="font-size:4.80199px;stroke-width:0.163704">SoC</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.54816px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + x="-115.6041" > + y="98.608604" > + id="text12079-3-4"><tspan > + sodipodi:role="line" > + id="tspan12077-1-9" > + x="-115.6041" > + y="98.608604" > + style="font-size:4.80199px;stroke-width:0.163704">Component</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-368.54205" > + y="92.633011" > + id="text1010-5"><tspan > + sodipodi:role="line" > + x="-368.54205" > + y="92.633011" > + style="font-size:6.35px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan1057">DRAM</tspan></text> > + <g > + id="g730" > + transform="translate(6.9386906,-2.5203356)"> > + <text > + id="text838-5-2-6-2" > + y="32.372173" > + x="-372.97867" > + style="font-style:normal;font-weight:normal;font-size:6.54814px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + xml:space="preserve"><tspan > + id="tspan936-1-2-3" > + style="text-align:center;text-anchor:middle;stroke-width:0.163704" > + y="32.372173" > + x="-372.97867" > + sodipodi:role="line">dc_plane</tspan></text> > + <rect > + ry="6.9139691e-07" > + y="18.717371" > + x="-390.50565" > + height="23.904575" > + width="35.080177" > + id="rect834-5-2-6-75" > + style="fill:none;stroke:#000000;stroke-width:0.561714;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + </g> > + <g > + id="g738" > + transform="translate(6.9386906,31.346346)"> > + <text > + id="text734" > + y="32.372173" > + x="-372.97867" > + style="font-style:normal;font-weight:normal;font-size:6.54814px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + xml:space="preserve"><tspan > + id="tspan732" > + style="text-align:center;text-anchor:middle;stroke-width:0.163704" > + y="32.372173" > + x="-372.97867" > + sodipodi:role="line">dc_plane</tspan></text> > + <rect > + ry="6.9139691e-07" > + y="18.717371" > + x="-390.50565" > + height="23.904575" > + width="35.080177" > + id="rect736" > + style="fill:none;stroke:#000000;stroke-width:0.561714;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + </g> > + <rect > + ry="2.1256196e-06" > + y="8.5983658" > + x="-389.18051" > + height="73.491852" > + width="46.307304" > + id="rect744" > + style="fill:none;stroke:#3771c8;stroke-width:1.13159;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <g > + id="g757" > + transform="translate(-19.949528,-8.6078171)"> > + <text > + id="text600" > + y="56.289795" > + x="-256.91336" > + style="font-style:normal;font-weight:normal;font-size:6.54814px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + xml:space="preserve"><tspan > + id="tspan598" > + style="text-align:center;text-anchor:middle;stroke-width:0.163704" > + y="56.289795" > + x="-256.91336" > + sodipodi:role="line">DC</tspan></text> > + <rect > + ry="1.7458606e-06" > + y="23.771139" > + x="-289.21854" > + height="60.361938" > + width="65.042557" > + id="rect602" > + style="fill:none;stroke:#000000;stroke-width:1.21541;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + </g> > + <rect > + ry="2.3633565e-06" > + y="4.4885707" > + x="-316.43292" > + height="81.711441" > + width="79.57225" > + id="rect787" > + style="fill:none;stroke:#3771c8;stroke-width:1.5641;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <g > + id="g765" > + transform="translate(6.5577393,-7.020317)"> > + <text > + id="text608" > + y="31.942825" > + x="-189.71797" > + style="font-style:normal;font-weight:normal;font-size:6.54814px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + xml:space="preserve"><tspan > + id="tspan606" > + style="text-align:center;text-anchor:middle;stroke-width:0.163704" > + y="31.942825" > + x="-189.71797" > + sodipodi:role="line">dc_link</tspan></text> > + <rect > + ry="6.8036792e-07" > + y="18.197111" > + x="-211.99069" > + height="23.523254" > + width="44.846642" > + id="rect610" > + style="fill:none;stroke:#000000;stroke-width:0.630025;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + </g> > + <rect > + ry="1.0582555e-06" > + y="4.3160448" > + x="-210.69141" > + height="36.588463" > + width="55.543594" > + id="rect794" > + style="fill:none;stroke:#3771c8;stroke-width:0.874443;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <g > + id="g781" > + transform="translate(6.5577393,37.542802)"> > + <text > + id="text777" > + y="31.942825" > + x="-189.71797" > + style="font-style:normal;font-weight:normal;font-size:6.54814px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + xml:space="preserve"><tspan > + id="tspan775" > + style="text-align:center;text-anchor:middle;stroke-width:0.163704" > + y="31.942825" > + x="-189.71797" > + sodipodi:role="line">dc_link</tspan></text> > + <rect > + ry="6.8036792e-07" > + y="18.197111" > + x="-211.99069" > + height="23.523254" > + width="44.846642" > + id="rect779" > + style="fill:none;stroke:#000000;stroke-width:0.630025;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + </g> > + <rect > + ry="1.0582555e-06" > + y="50.466679" > + x="-210.69141" > + height="36.588463" > + width="55.543594" > + id="rect796" > + style="fill:none;stroke:#3771c8;stroke-width:0.874443;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <g > + id="g2151" > + transform="translate(2.1659807,-25.895798)"> > + <rect > + ry="9.2671934e-07" > + y="29.395185" > + x="-132.25786" > + height="32.040688" > + width="44.742229" > + id="rect618" > + style="fill:none;stroke:#3771c8;stroke-width:0.734435;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <g > + id="g838" > + transform="translate(1.9073486e-6,0.26687336)"> > + <text > + id="text616" > + y="47.132744" > + x="-110.03735" > + style="font-style:normal;font-weight:normal;font-size:6.54814px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163704" > + xml:space="preserve"><tspan > + id="tspan614" > + style="text-align:center;text-anchor:middle;stroke-width:0.163704" > + y="47.132744" > + x="-110.03735" > + sodipodi:role="line">dc_link</tspan></text> > + <rect > + ry="5.7260945e-07" > + y="35.249866" > + x="-126.21788" > + height="19.797579" > + width="32.66227" > + id="rect833" > + style="fill:none;stroke:#000000;stroke-width:0.493257;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + </g> > + </g> > + <rect > + ry="3.6076738e-06" > + y="-9.4559708" > + x="-397.85507" > + height="124.73286" > + width="250.94243" > + id="rect1307" > + style="fill:none;stroke:#008000;stroke-width:3.43179;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.86358, 3.43179;stroke-dashoffset:0" /> > + <rect > + ry="2.9172609e-06" > + y="-4.5401988" > + x="-393.52301" > + height="100.8623" > + width="174.14117" > + id="rect1990" > + style="fill:none;stroke:#ff0000;stroke-width:2.57074;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:2.57074, 5.14148;stroke-dashoffset:0" /> > + <path > + style="fill:none;stroke:#aa00d4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" > + d="m -317.69814,47.452094 h -23.80954" > + id="path2142" /> > + <path > + style="fill:none;stroke:#aa00d4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" > + d="m -130.71642,19.101665 h -23.80954" > + id="path2144" /> > + <g > + aria-label="}" > + transform="rotate(180,-59.876965,-0.22738225)" > + style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#aa00d4;fill-opacity:1;stroke:none;stroke-width:0.264583" > + id="text1003-5"> > + <path > + d="m 92.00239,-21.748413 h 0.86816 c 0,0 15.81267,-0.177767 16.15994,-0.5333 0.35553,-0.355534 1.10026,-1.124479 1.10026,-2.306836 v -20.048953 c 0,-1.289844 0.18603,-2.228288 0.5581,-2.815332 0.37207,-0.587044 0.45004,-0.992187 1.36781,-1.215429 -0.91777,-0.206706 -0.99574,-0.603581 -1.36781,-1.190625 -0.37207,-0.587045 -0.5581,-1.529623 -0.5581,-2.827735 v -19.913761 c 0,-1.174088 -0.74473,-1.938899 -1.10026,-2.294433 -0.34727,-0.363802 -15.00239,-0.545703 -16.15994,-0.545703 h -0.86816 v -1.773536 h 0.78134 c 2.05879,0 17.33403,0.305924 18.02029,0.917774 0.69453,0.60358 1.0418,1.81901 1.0418,3.646289 v 19.814542 c 0,1.231966 0.22324,2.087728 0.66973,2.567285 0.44648,0.471289 1.25677,0.706934 2.43086,0.706934 h 0.76894 v 1.773535 h -0.76894 c -1.17409,0 -1.98438,0.239778 -2.43086,0.719336 -0.44649,0.479557 -0.66973,1.343587 -0.66973,2.59209 v 19.937331 c 0,1.827279 -0.34727,3.046842 -1.0418,3.658691 -0.68626,0.611849 -15.9615,0.917774 -18.02029,0.917774 h -0.78134 z" > + style="font-size:25.4px;fill:#aa00d4;stroke-width:0.264583" > + id="path1005-3" > + inkscape:connector-curvature="0" > + sodipodi:nodetypes="cccsscccsscsccscsscsccscsscscc" /> > + </g> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-275.85803" > + y="92.633011" > + id="text2157"><tspan > + sodipodi:role="line" > + x="-275.85803" > + y="92.633011" > + style="font-size:6.35px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan2155">DCN</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-279.29822" > + y="110.19857" > + id="text3141"><tspan > + sodipodi:role="line" > + x="-279.29822" > + y="110.19857" > + style="font-weight:bold;font-size:6.35px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan3139">SoC</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-275.85803" > + y="123.8538" > + id="text3375"><tspan > + sodipodi:role="line" > + x="-275.85803" > + y="123.8538" > + style="font-size:6.35px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan3373">Board/Platform</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-107.57491" > + y="42.939579" > + id="text3379"><tspan > + sodipodi:role="line" > + x="-107.57491" > + y="42.939579" > + style="font-size:6.35px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan3377">Display</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-182.71582" > + y="46.643749" > + id="text3383"><tspan > + sodipodi:role="line" > + x="-182.71582" > + y="46.643749" > + style="font-size:6.35px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan3381">Connector</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-182.71582" > + y="93.210457" > + id="text3387"><tspan > + sodipodi:role="line" > + x="-182.71582" > + y="93.210457" > + style="font-size:6.35px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan3385">Connector</tspan></text> > + </g> > +</svg> > diff --git a/Documentation/gpu/amdgpu/display/dc-components.svg b/Documentation/gpu/amdgpu/display/dc-components.svg > new file mode 100644 > index 000000000000..f84bb2a57c05 > --- /dev/null > +++ b/Documentation/gpu/amdgpu/display/dc-components.svg > @@ -0,0 +1,732 @@ > +<?xml version="1.0" encoding="UTF-8" standalone="no"?> > +<!-- Created with Inkscape (http://www.inkscape.org/) --> > + > +<svg > + width="533.42053" > + height="631.18573" > + viewBox="0 0 141.13418 167.00122" > + version="1.1" > + id="svg8" > + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" > + sodipodi:docname="dc-components.svg" > + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" > + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" > + xmlns="http://www.w3.org/2000/svg" > + xmlns:svg="http://www.w3.org/2000/svg" > + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > + xmlns:cc="http://creativecommons.org/ns#" > + xmlns:dc="http://purl.org/dc/elements/1.1/"> > + <defs > + id="defs2"> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="marker8858" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8616" > + style="fill:#aa00d4;fill-opacity:1;fill-rule:evenodd;stroke:#aa00d4;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Send" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Send" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8622" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="matrix(-0.3,0,0,-0.3,0.69,0)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow1Lend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow1Lend" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8592" > + d="M 0,0 5,-5 -12.5,0 5,5 Z" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1" > + transform="matrix(-0.8,0,0,-0.8,-10,0)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Lend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Lend" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8610" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path1200" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2-1" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9-9" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2-7" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9-8" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-4" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-5" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-0" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-3" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-6" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-1" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2-6" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9-1" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-0-7" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-3-4" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-6-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-1-0" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-2-8" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-9-6" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path1200-6" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="marker8858-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + id="path8616-5" > + style="fill:#00ffcc;fill-opacity:1;fill-rule:evenodd;stroke:#00ffcc;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" > + inkscape:connector-curvature="0" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-3-3" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-6-56" > + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + <marker > + inkscape:stockid="Arrow2Mend" > + orient="auto" > + refY="0" > + refX="0" > + id="Arrow2Mend-8-0-2" > + style="overflow:visible" > + inkscape:isstock="true"> > + <path > + inkscape:connector-curvature="0" > + id="path1200-9-3-9" > + style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" > + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" > + transform="scale(-0.6)" /> > + </marker> > + </defs> > + <sodipodi:namedview > + id="base" > + pagecolor="#ffffff" > + bordercolor="#666666" > + borderopacity="1.0" > + inkscape:pageopacity="0.0" > + inkscape:pageshadow="2" > + inkscape:zoom="1.4" > + inkscape:cx="482.85714" > + inkscape:cy="470" > + inkscape:document-units="mm" > + inkscape:current-layer="layer1" > + showgrid="false" > + inkscape:window-width="3840" > + inkscape:window-height="2083" > + inkscape:window-x="0" > + inkscape:window-y="0" > + inkscape:window-maximized="1" > + showguides="false" > + fit-margin-top="0" > + fit-margin-left="0" > + fit-margin-right="0" > + fit-margin-bottom="0" > + units="px" > + inkscape:snap-global="false" > + inkscape:showpageshadow="2" > + inkscape:pagecheckerboard="0" > + inkscape:deskcolor="#d1d1d1" /> > + <metadata > + id="metadata5"> > + <rdf:RDF> > + <cc:Work > + rdf:about=""> > + <dc:format>image/svg+xml</dc:format> > + <dc:type > + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> > + </cc:Work> > + </rdf:RDF> > + </metadata> > + <g > + inkscape:label="Layer 1" > + inkscape:groupmode="layer" > + id="layer1" > + transform="translate(384.1992,26.608359)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.0511px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.101278" > + x="-330.72058" > + y="57.56284" > + id="text1063" /> > + <rect > + ry="4.7572436e-07" > + y="-26.142614" > + x="-383.73346" > + height="16.447845" > + width="140.2027" > + id="rect744" > + style="fill:none;stroke:#3771c8;stroke-width:0.93149;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="1.0800992e-06" > + y="-5.1415901" > + x="-383.27942" > + height="37.343693" > + width="40.239418" > + id="rect602" > + style="fill:none;stroke:#000000;stroke-width:0.751929;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:10.476px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-363.2121" > + y="17.270189" > + id="text3379"><tspan > + sodipodi:role="line" > + x="-363.2121" > + y="17.270189" > + style="font-size:10.476px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan3377">Core</tspan></text> > + <rect > + ry="1.0800992e-06" > + y="-5.1415901" > + x="-331.06259" > + height="37.343693" > + width="40.239418" > + id="rect526" > + style="fill:none;stroke:#000000;stroke-width:0.751929;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="4.4701343e-07" > + y="-5.2654457" > + x="-286.88507" > + height="15.455184" > + width="43.167706" > + id="rect528" > + style="fill:none;stroke:#000000;stroke-width:0.501024;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="4.4701343e-07" > + y="15.68337" > + x="-286.88507" > + height="15.455184" > + width="43.167706" > + id="rect530" > + style="fill:none;stroke:#000000;stroke-width:0.501024;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="4.4701343e-07" > + y="36.959518" > + x="-286.88507" > + height="15.455184" > + width="43.167706" > + id="rect532" > + style="fill:none;stroke:#000000;stroke-width:0.501024;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="1.6213723e-06" > + y="60.089264" > + x="-286.65378" > + height="56.057846" > + width="42.705132" > + id="rect534" > + style="fill:none;stroke:#000000;stroke-width:0.949072;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="4.4031123e-07" > + y="37.077362" > + x="-382.96875" > + height="15.223459" > + width="92.225845" > + id="rect536" > + style="fill:none;stroke:#000000;stroke-width:0.726817;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="4.4031123e-07" > + y="59.989784" > + x="-382.96875" > + height="15.223459" > + width="92.225845" > + id="rect538" > + style="fill:none;stroke:#000000;stroke-width:0.726817;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="4.4031123e-07" > + y="80.283493" > + x="-382.96875" > + height="15.223459" > + width="92.225845" > + id="rect540" > + style="fill:none;stroke:#000000;stroke-width:0.726817;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <rect > + ry="4.3543034e-07" > + y="124.89404" > + x="-382.88803" > + height="15.054706" > + width="139.2859" > + id="rect554" > + style="fill:none;stroke:#000000;stroke-width:0.888245;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:8.73001px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-311.29712" > + y="-16.144287" > + id="text660"><tspan > + sodipodi:role="line" > + x="-311.29712" > + y="-16.144287" > + style="font-size:8.73001px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan658">Display Core API (dc/dc.h)</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:10.476px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-311.40384" > + y="17.511137" > + id="text664"><tspan > + sodipodi:role="line" > + x="-311.40384" > + y="17.511137" > + style="font-size:10.476px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan662">Link</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.36501px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-336.97806" > + y="43.095863" > + id="text668"><tspan > + sodipodi:role="line" > + x="-336.97806" > + y="43.095863" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan666">Hardware Sequencer API</tspan><tspan > + sodipodi:role="line" > + x="-336.97806" > + y="48.552124" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan670">(dc/inc/hw_sequence.h)</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.36501px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-337.03479" > + y="68.73642" > + id="text750"><tspan > + sodipodi:role="line" > + x="-337.03479" > + y="68.73642" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan748">Hardware Sequencer</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.36501px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-336.98022" > + y="89.209091" > + id="text756"><tspan > + sodipodi:role="line" > + x="-336.98022" > + y="89.209091" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan754">Block Level API (dc/inc/hw)</tspan></text> > + <g > + id="g1543" > + transform="matrix(0.61866289,0,0,0.61866289,-146.50941,-10.146755)"> > + <rect > + ry="7.3007396e-07" > + y="180.25436" > + x="-382.5336" > + height="25.241808" > + width="29.376135" > + id="rect542" > + style="fill:none;stroke:#000000;stroke-width:0.528201;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-367.99722" > + y="195.3941" > + id="text838"><tspan > + sodipodi:role="line" > + x="-367.99722" > + y="195.3941" > + style="font-size:7.05556px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan836">DCHUB</tspan></text> > + </g> > + <a > + id="a1538" > + transform="matrix(0.61866289,0,0,0.61866289,-154.037,-10.146755)"> > + <rect > + ry="7.3027257e-07" > + y="180.25093" > + x="-339.82092" > + height="25.248676" > + width="28.609333" > + id="rect546" > + style="fill:none;stroke:#000000;stroke-width:0.521332;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-325.67853" > + y="195.35883" > + id="text842"><tspan > + sodipodi:role="line" > + x="-325.67853" > + y="195.35883" > + style="font-size:7.05556px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan840">HUBP</tspan></text> > + </a> > + <g > + id="g1533" > + transform="matrix(0.61866289,0,0,0.61866289,-154.69251,-10.146755)"> > + <rect > + ry="7.3027257e-07" > + y="180.25093" > + x="-308.59961" > + height="25.248676" > + width="28.609333" > + id="rect844" > + style="fill:none;stroke:#000000;stroke-width:0.521332;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-294.45721" > + y="195.3941" > + id="text848"><tspan > + sodipodi:role="line" > + x="-294.45721" > + y="195.3941" > + style="font-size:7.05556px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan846">DPP</tspan></text> > + </g> > + <g > + id="g1528" > + transform="matrix(0.61866289,0,0,0.61866289,-155.67539,-10.146755)"> > + <rect > + ry="7.3027257e-07" > + y="180.25093" > + x="-276.84912" > + height="25.248676" > + width="28.609333" > + id="rect850" > + style="fill:none;stroke:#000000;stroke-width:0.521332;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-262.77728" > + y="195.3941" > + id="text854"><tspan > + sodipodi:role="line" > + x="-262.77728" > + y="195.3941" > + style="font-size:7.05556px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan852">MPC</tspan></text> > + </g> > + <g > + id="g1523" > + transform="matrix(0.61866289,0,0,0.61866289,-157.64019,-10.146755)"> > + <rect > + ry="7.3027257e-07" > + y="180.25093" > + x="-243.51147" > + height="25.248676" > + width="28.609333" > + id="rect856" > + style="fill:none;stroke:#000000;stroke-width:0.521332;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" > + x="-229.2068" > + y="193.25275" > + id="text860"><tspan > + sodipodi:role="line" > + x="-229.2068" > + y="193.25275" > + style="font-size:7.05556px;text-align:center;text-anchor:middle;stroke-width:0.264583" > + id="tspan858">...</tspan></text> > + </g> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.36501px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-313.35858" > + y="133.55629" > + id="text951"><tspan > + sodipodi:role="line" > + x="-313.35858" > + y="133.55629" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan949">Hardware Registers</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.36501px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-265.39505" > + y="86.926537" > + id="text1044"><tspan > + sodipodi:role="line" > + x="-265.39505" > + y="86.926537" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan1042">DMUB</tspan><tspan > + sodipodi:role="line" > + x="-265.39505" > + y="92.382797" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan1046">Block</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.36501px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-265.42343" > + y="43.272846" > + id="text1052"><tspan > + sodipodi:role="line" > + x="-265.42343" > + y="43.272846" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan1048">DMUB Hardware API</tspan><tspan > + sodipodi:role="line" > + x="-265.42343" > + y="48.729107" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan1050">(dmub/dmub_srv.h)</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.36501px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-265.40161" > + y="24.997644" > + id="text1058"><tspan > + sodipodi:role="line" > + x="-265.40161" > + y="24.997644" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan1056">DMUB Service</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.36501px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.163688" > + x="-265.30121" > + y="0.99768418" > + id="text1064"><tspan > + sodipodi:role="line" > + x="-265.30121" > + y="0.99768418" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan1062">DMUB Service API</tspan><tspan > + sodipodi:role="line" > + x="-265.30121" > + y="6.4539466" > + style="font-size:4.36501px;text-align:center;text-anchor:middle;stroke-width:0.163688" > + id="tspan1066">(dc/dc_dmub_srv.h)</tspan></text> > + </g> > +</svg> > diff --git a/Documentation/gpu/amdgpu/display/dcn-blocks.rst b/Documentation/gpu/amdgpu/display/dcn-blocks.rst > index 5e34366f6dbe..756957128dad 100644 > --- a/Documentation/gpu/amdgpu/display/dcn-blocks.rst > +++ b/Documentation/gpu/amdgpu/display/dcn-blocks.rst > @@ -1,3 +1,5 @@ > +.. _dcn_blocks: > + > ========== > DCN Blocks > ========== > diff --git a/Documentation/gpu/amdgpu/display/dcn-overview.rst b/Documentation/gpu/amdgpu/display/dcn-overview.rst > index 9fea6500448b..eb54a6802e04 100644 > --- a/Documentation/gpu/amdgpu/display/dcn-overview.rst > +++ b/Documentation/gpu/amdgpu/display/dcn-overview.rst > @@ -1,3 +1,5 @@ > +.. _dcn_overview: > + > ======================= > Display Core Next (DCN) > ======================= > diff --git a/Documentation/gpu/amdgpu/display/index.rst b/Documentation/gpu/amdgpu/display/index.rst > index f0c342e00a39..bd2d797c123e 100644 > --- a/Documentation/gpu/amdgpu/display/index.rst > +++ b/Documentation/gpu/amdgpu/display/index.rst > @@ -90,6 +90,7 @@ table of content: > display-manager.rst > dcn-overview.rst > dcn-blocks.rst > + programming-model-dcn.rst > mpo-overview.rst > dc-debug.rst > display-contributing.rst > diff --git a/Documentation/gpu/amdgpu/display/programming-model-dcn.rst b/Documentation/gpu/amdgpu/display/programming-model-dcn.rst > new file mode 100644 > index 000000000000..c1b48d49fb0b > --- /dev/null > +++ b/Documentation/gpu/amdgpu/display/programming-model-dcn.rst > @@ -0,0 +1,162 @@ > +==================== > +DC Programming Model > +==================== > + > +In the :ref:`Display Core Next (DCN) <dcn_overview>` and :ref:`DCN Block > +<dcn_blocks>` pages, you learned about the hardware components and how they > +interact with each other. On this page, the focus is shifted to the display > +code architecture. Hence, it is reasonable to remind the reader that the code > +in DC is shared with other OSes; for this reason, DC provides a set of > +abstractions and operations to connect different APIs with the hardware > +configuration. See DC as a service available for a Display Manager (amdgpu_dm) > +to access and configure DCN/DCE hardware (DCE is also part of DC, but for > +simplicity's sake, this documentation only examines DCN). > + > +.. note:: > + For this page, we will use the term GPU to refers to dGPU and APU. > + > +Overview > +======== > + > +From the display hardware perspective, it is plausible to expect that if a > +problem is well-defined, it will probably be implemented at the hardware level. > +On the other hand, when there are multiple ways of achieving something without > +a very well-defined scope, the solution is usually implemented as a policy at > +the DC level. In other words, some policies are defined in the DC core > +(resource management, power optimization, image quality, etc.), and the others > +implemented in hardware are enabled via DC configuration. > + > +In terms of hardware management, DCN has multiple instances of the same block > +(e.g., HUBP, DPP, MPC, etc), and during the driver execution, it might be > +necessary to use some of these instances. The core has policies in place for > +handling those instances. Regarding resource management, the DC objective is > +quite simple: minimize the hardware shuffle when the driver performs some > +actions. When the state changes from A to B, the transition is considered > +easier to maneuver if the hardware resource is still used for the same set of > +driver objects. Usually, adding and removing a resource to a `pipe_ctx` (more > +details below) is not a problem; however, moving a resource from one `pipe_ctx` > +to another should be avoided. > + > +Another area of influence for DC is power optimization, which has a myriad of > +arrangement possibilities. In some way, just displaying an image via DCN should > +be relatively straightforward; however, showing it with the best power > +footprint is more desirable, but it has many associated challenges. > +Unfortunately, there is no straight-forward analytic way to determine if a > +configuration is the best one for the context due to the enormous variety of > +variables related to this problem (e.g., many different DCN/DCE hardware > +versions, different displays configurations, etc.) for this reason DC > +implements a dedicated library for trying some configuration and verify if it > +is possible to support it or not. This type of policy is extremely complex to > +create and maintain, and amdgpu driver relies on Display Mode Library (DML) to > +generate the best decisions. > + > +In summary, DC must deal with the complexity of handling multiple scenarios and > +determine policies to manage them. All of the above information is conveyed to > +give the reader some idea about the complexity of driving a display from the > +driver's perspective. This page hopes to allow the reader to better navigate > +over the amdgpu display code. > + > +Display Driver Architecture Overview > +==================================== > + > +The diagram below provides an overview of the display driver architecture; > +notice it illustrates the software layers adopted by DC: > + > +.. kernel-figure:: dc-components.svg > + > +The first layer of the diagram is the high-level DC API represented by the > +`dc.h` file; below it are two big blocks represented by Core and Link. Next is > +the hardware configuration block; the main file describing it is > +the`hw_sequencer.h`, where the implementation of the callbacks can be found in > +the hardware sequencer folder. Almost at the end, you can see the block level > +API (`dc/inc/hw`), which represents each DCN low-level block, such as HUBP, > +DPP, MPC, OPTC, etc. Notice on the left side of the diagram that we have a > +different set of layers representing the interaction with the DMUB > +microcontroller. > + > +Basic Objects > +------------- > + > +The below diagram outlines the basic display objects. In particular, pay > +attention to the names in the boxes since they represent a data structure in > +the driver: > + > +.. kernel-figure:: dc-arch-overview.svg > + > +Let's start with the central block in the image, `dc`. The `dc` struct is > +initialized per GPU; for example, one GPU has one `dc` instance, two GPUs have > +two `dc` instances, and so forth. In other words we have one 'dc' per 'amdgpu' > +instance. In some ways, this object behaves like the `Singleton` pattern. > + > +After the `dc` block in the diagram, you can see the `dc_link` component, which > +is a low-level abstraction for the connector. One interesting aspect of the > +image is that connectors are not part of the DCN block; they are defined by the > +platform/board and not by the SoC. The `dc_link` struct is the high-level data > +container with information such as connected sinks, connection status, signal > +types, etc. After `dc_link`, there is the `dc_sink`, which is the object that > +represents the connected display. > + > +.. note:: > + For historical reasons, we used the name `dc_link`, which gives the > + wrong impression that this abstraction only deals with physical connections > + that the developer can easily manipulate. However, this also covers > + conections like eDP or cases where the output is connected to other devices. > + > +There are two structs that are not represented in the diagram since they were > +elaborated in the DCN overview page (check the DCN block diagram :ref:`Display > +Core Next (DCN) <dcn_overview>`); still, it is worth bringing back for this > +overview which is `dc_stream` and `dc_state`. The `dc_stream` stores many > +properties associated with the data transmission, but most importantly, it > +represents the data flow from the connector to the display. Next we have > +`dc_state`, which represents the logic state within the hardware at the moment; > +`dc_state` is composed of `dc_stream` and `dc_plane`. The `dc_stream` is the DC > +version of `drm_crtc` and represents the post-blending pipeline. > + > +Speaking of the `dc_plane` data structure (first part of the diagram), you can > +think about it as an abstraction similar to `drm_plane` that represents the > +pre-blending portion of the pipeline. This image was probably processed by GFX > +and is ready to be composited under a `dc_stream`. Normally, the driver may > +have one or more `dc_plane` connected to the same `dc_stream`, which defines a > +composition at the DC level. > + > +Basic Operations > +---------------- > + > +Now that we have covered the basic objects, it is time to examine some of the > +basic hardware/software operations. Let's start with the `dc_create()` > +function, which directly works with the `dc` data struct; this function behaves > +like a constructor responsible for the basic software initialization and > +preparing for enabling other parts of the API. It is important to highlight > +that this operation does not touch any hardware configuration; it is only a > +software initialization. > + > +Next, we have the `dc_hardware_init()`, which also relies on the `dc` data > +struct. Its main function is to put the hardware in a valid state. It is worth > +highlighting that the hardware might initialize in an unknown state, and it is > +a requirement to put it in a valid state; this function has multiple callbacks > +for the hardware-specific initialization, whereas `dc_hardware_init` does the > +hardware initialization and is the first point where we touch hardware. > + > +The `dc_get_link_at_index` is an operation that depends on the `dc_link` data > +structure. This function retrieves and enumerates all the `dc_links` available > +on the device; this is required since this information is not part of the SoC > +definition but depends on the board configuration. As soon as the `dc_link` is > +initialized, it is useful to figure out if any of them are already connected to > +the display by using the `dc_link_detect()` function. After the driver figures > +out if any display is connected to the device, the challenging phase starts: > +configuring the monitor to show something. Nonetheless, dealing with the ideal > +configuration is not a DC task since this is the Display Manager (`amdgpu_dm`) > +responsibility which in turn is responsible for dealing with the atomic > +commits. The only interface DC provides to the configuration phase is the > +function `dc_validate_with_context` that receives the configuration information > +and, based on that, validates whether the hardware can support it or not. It is > +important to add that even if the display supports some specific configuration, > +it does not mean the DCN hardware can support it. > + > +After the DM and DC agree upon the configuration, the stream configuration > +phase starts. This task activates one or more `dc_stream` at this phase, and in > +the best-case scenario, you might be able to turn the display on with a black > +screen (it does not show anything yet since it does not have any plane > +associated with it). The final step would be to call the > +`dc_update_planes_and_stream,` which will add or remove planes. > +