diff options
-rw-r--r-- | designs/mctp-standards.svg | 536 | ||||
-rw-r--r-- | designs/mctp.md | 216 |
2 files changed, 752 insertions, 0 deletions
diff --git a/designs/mctp-standards.svg b/designs/mctp-standards.svg new file mode 100644 index 0000000..cf5f339 --- /dev/null +++ b/designs/mctp-standards.svg @@ -0,0 +1,536 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1495.6182" + height="1069.0875" + viewBox="0 0 395.71564 282.86274" + version="1.1" + id="svg8" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.60692406" + inkscape:cx="823.7656" + inkscape:cy="600.24404" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1916" + inkscape:window-height="1161" + inkscape:window-x="0" + inkscape:window-y="18" + inkscape:window-maximized="0" + fit-margin-top="20" + fit-margin-left="20" + fit-margin-right="20" + fit-margin-bottom="20" + units="px" /> + <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" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-16.904944,296.36879)"> + <rect + style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#3465a4;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect836" + width="73.32737" + height="37.797626" + x="126.62202" + y="-77.423241" + rx="4.4125886" + ry="4.4125886" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="163.04317" + y="-54.415119" + id="text840"><tspan + sodipodi:role="line" + id="tspan838" + x="163.04317" + y="-54.415119" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">LPC</tspan></text> + <text + id="text4744" + y="-274.17047" + x="277.3479" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-274.17047" + x="277.3479" + id="tspan4742" + sodipodi:role="line">PLDM profiles</tspan></text> + <rect + ry="4.4125886" + rx="4.4125886" + y="-76.289314" + x="222.62798" + height="37.797626" + width="73.32737" + id="rect847" + style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#3465a4;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + id="text851" + y="-53.281193" + x="259.04913" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-53.281193" + x="259.04913" + id="tspan849" + sodipodi:role="line">PCIe VDM</tspan></text> + <rect + ry="4.4125886" + rx="4.4125886" + y="-131.47383" + x="126.62202" + height="41.577389" + width="168.95535" + id="rect855" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#3465a4;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + id="text859" + y="-108.46571" + x="210.74141" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-108.46571" + x="210.74141" + id="tspan857" + sodipodi:role="line">MCTP Base</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-94.354599" + x="210.74141" + sodipodi:role="line" + id="tspan878">DSP0236</tspan></text> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#3465a4;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect870" + width="168.95535" + height="41.577389" + x="126.62202" + y="-184.3905" + rx="4.4125886" + ry="4.4125886" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="210.74141" + y="-161.38239" + id="text874"><tspan + sodipodi:role="line" + id="tspan872" + x="210.74141" + y="-161.38239" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">PLDM Base</tspan><tspan + sodipodi:role="line" + x="210.74141" + y="-147.27127" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan880">DSP0240</tspan></text> + <rect + ry="4.4125886" + rx="4.4125886" + y="-267.3941" + x="71.059532" + height="66.901794" + width="56.318439" + id="rect882" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#3465a4;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + id="text886" + y="-254.44016" + x="98.670265" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan890" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-254.44016" + x="98.670265" + sodipodi:role="line">Redfish</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-247.3846" + x="98.670265" + sodipodi:role="line" + id="tspan4623">(PLDM variant)</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-240.32904" + x="98.670265" + sodipodi:role="line" + id="tspan4629" /><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-233.27348" + x="98.670265" + sodipodi:role="line" + id="tspan4637">DSP0218</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-226.21793" + x="98.670265" + sodipodi:role="line" + id="tspan4678">[WIP]</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="178.04527" + y="-254.44016" + id="text904"><tspan + sodipodi:role="line" + x="178.04527" + y="-254.44016" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan902">BIOS</tspan><tspan + sodipodi:role="line" + x="178.04527" + y="-245.62071" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan908">configuration</tspan><tspan + sodipodi:role="line" + x="178.04527" + y="-236.80127" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan910">& control</tspan><tspan + sodipodi:role="line" + x="178.04527" + y="-227.98183" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan4666" /><tspan + sodipodi:role="line" + x="178.04527" + y="-219.16237" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan4670">DSP0247</tspan></text> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#729fcf;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect914" + width="56.318439" + height="66.901794" + x="213.93448" + y="-267.3941" + rx="4.4125886" + ry="4.4125886" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="241.54523" + y="-254.44016" + id="text920"><tspan + sodipodi:role="line" + x="241.54523" + y="-254.44016" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan918">Platform</tspan><tspan + sodipodi:role="line" + x="241.54523" + y="-245.62071" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan924">monitoring</tspan><tspan + sodipodi:role="line" + x="241.54523" + y="-236.80127" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan926">& control</tspan><tspan + sodipodi:role="line" + x="241.54523" + y="-227.98183" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan4674" /><tspan + sodipodi:role="line" + x="241.54523" + y="-219.16237" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan4676">DSP0248</tspan></text> + <rect + ry="4.4125886" + rx="4.4125886" + y="-267.3941" + x="277.43451" + height="66.901794" + width="56.318439" + id="rect4641" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#729fcf;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + id="text4649" + y="-254.44016" + x="305.04526" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan4647" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-254.44016" + x="305.04526" + sodipodi:role="line">FRU Data</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-245.62071" + x="305.04526" + sodipodi:role="line" + id="tspan4658" /><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-236.80127" + x="305.04526" + sodipodi:role="line" + id="tspan4662">DSP0257</tspan></text> + <rect + ry="4.4125886" + rx="4.4125886" + y="-267.3941" + x="150.43451" + height="66.901794" + width="56.318439" + id="rect4732" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#729fcf;stroke-width:2.765;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#3465a4;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4740" + width="263.82742" + height="96.384308" + x="142.11903" + y="-289.69467" + rx="4.4125886" + ry="4.4125886" /> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#729fcf;stroke-width:2.76489568;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4751" + width="56.318439" + height="66.901794" + x="340.93439" + y="-267.3941" + rx="4.4125886" + ry="4.4125886" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="368.54514" + y="-254.44016" + id="text4759"><tspan + sodipodi:role="line" + x="368.54514" + y="-254.44016" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan4753">FW Update</tspan><tspan + id="tspan4755" + sodipodi:role="line" + x="368.54514" + y="-245.62071" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" /><tspan + id="tspan4757" + sodipodi:role="line" + x="368.54514" + y="-236.80127" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">DSP0267</tspan></text> + <g + id="g4812"> + <path + sodipodi:nodetypes="ccccccccccc" + inkscape:connector-curvature="0" + d="m 271.88098,-127.31634 h -3.9915 l 9.5353,7.45461 9.53531,-7.45461 h -3.9915 v -19.86002 h 3.9915 l -9.53531,-7.45461 -9.5353,7.45461 h 3.9915 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.56500006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4787" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="350.14923" + y="-148.795" + id="text4796"><tspan + sodipodi:role="line" + x="350.14923" + y="-148.795" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan4790">PLDM over MCTP</tspan><tspan + id="tspan4798" + sodipodi:role="line" + x="350.14923" + y="-139.97556" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">binding</tspan><tspan + id="tspan4792" + sodipodi:role="line" + x="350.14923" + y="-131.15611" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" /><tspan + id="tspan4794" + sodipodi:role="line" + x="350.14923" + y="-122.33666" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">DSP0241</tspan></text> + <ellipse + ry="25.754292" + rx="47.829399" + cy="-139.24619" + cx="350.57373" + id="path4800" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.56500006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path4802" + d="m 282.77611,-137.93333 19.80129,-1.21586" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.56500006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> + <path + sodipodi:nodetypes="ccccccccccc" + inkscape:connector-curvature="0" + d="m 271.88098,-72.283006 h -3.9915 l 9.5353,7.45461 9.53531,-7.45461 h -3.9915 v -19.86002 h 3.9915 l -9.53531,-7.45461 -9.5353,7.45461 h 3.9915 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.56500006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4814" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="350.14923" + y="-93.761665" + id="text4824"><tspan + sodipodi:role="line" + x="350.14923" + y="-93.761665" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan4816">MCTP PCIe VDM</tspan><tspan + id="tspan4818" + sodipodi:role="line" + x="350.14923" + y="-84.942223" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">transport binding</tspan><tspan + id="tspan4820" + sodipodi:role="line" + x="350.14923" + y="-76.122772" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" /><tspan + id="tspan4822" + sodipodi:role="line" + x="350.14923" + y="-67.303329" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">DSP0238</tspan></text> + <ellipse + ry="25.754292" + rx="47.829399" + cy="-84.212852" + cx="350.57373" + id="ellipse4826" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.56500006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path4828" + d="m 282.77611,-82.899996 19.80129,-1.21586" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.56500006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + id="path4888" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#959595;stroke-width:1.56500006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 182.69325,-72.76478 h 3.9915 l -9.5353,7.45461 -9.53531,-7.45461 h 3.9915 V -92.6248 h -3.9915 l 9.53531,-7.45461 9.5353,7.45461 h -3.9915 z" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccccc" /> + <ellipse + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#959595;stroke-width:1.56500006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="ellipse4890" + cx="-71.345757" + cy="-45.334488" + rx="47.829399" + ry="25.754292" + transform="scale(-1,1)" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#959595;stroke-width:1.56500006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 171.79812,-83.38177 -52.45603,37.681652" + id="path4892" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <text + id="text4858" + y="-117.57417" + x="70.168396" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan4850" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-117.57417" + x="70.168396" + sodipodi:role="line">MCTP Serial</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-108.75473" + x="70.168396" + sodipodi:role="line" + id="tspan4852">transport binding</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-99.93528" + x="70.168396" + sodipodi:role="line" + id="tspan4854" /><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + y="-91.115837" + x="70.168396" + sodipodi:role="line" + id="tspan4856">DSP0253</tspan></text> + <path + sodipodi:nodetypes="ccccccccccc" + inkscape:connector-curvature="0" + d="m 149.50126,-73.470764 h 3.9915 l -9.5353,7.45461 -9.53531,-7.45461 h 3.9915 v -19.86002 h -3.9915 l 9.53531,-7.454606 9.5353,7.454606 h -3.9915 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.56500006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4832" /> + <ellipse + ry="25.754292" + rx="47.829399" + cy="-106.56726" + cx="-70.80851" + id="ellipse4844" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.56500006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="scale(-1,1)" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path4846" + d="M 138.60613,-84.087754 118.49658,-106.11097" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.56500006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="70.515785" + y="-57.249187" + id="text4920"><tspan + sodipodi:role="line" + x="70.515785" + y="-57.249187" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" + id="tspan4912">MCTP LPC</tspan><tspan + id="tspan4914" + sodipodi:role="line" + x="70.515785" + y="-48.429741" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">transport binding?</tspan><tspan + id="tspan4916" + sodipodi:role="line" + x="70.515785" + y="-39.610298" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px" /><tspan + id="tspan4918" + sodipodi:role="line" + x="70.515785" + y="-30.790852" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">unspec</tspan></text> + </g> +</svg> diff --git a/designs/mctp.md b/designs/mctp.md new file mode 100644 index 0000000..6985cef --- /dev/null +++ b/designs/mctp.md @@ -0,0 +1,216 @@ +# OpenBMC platform communication channel: MCTP & PLDM + +Author: Jeremy Kerr <jk@ozlabs.org> <jk> + +## Problem Description + +Currently, we have a few different methods of communication between host +and BMC. This is primarily IPMI-based, but also includes a few +hardware-specific side-channels, like hiomap. On OpenPOWER hardware at +least, we've definitely started to hit some of the limitations of IPMI +(for example, we have need for >255 sensors), as well as the hardware +channels that IPMI typically uses. + +This design aims to use the Management Component Transport Protocol +(MCTP) to provide a common transport layer over the multiple channels +that OpenBMC platforms provide. Then, on top of MCTP, we have the +opportunity to move to newer host/BMC messaging protocols to overcome +some of the limitations we've encountered with IPMI. + +## Background and References + +Separating the "transport" and "messaging protocol" parts of the current +stack allows us to design these parts separately. Currently, IPMI +defines both of these; we currently have BT and KCS (both defined as +part of the IPMI 2.0 standard) as the transports, and IPMI itself as the +messaging protocol. + +Some efforts of improving the hardware transport mechanism of IPMI have +been attempted, but not in a cross-implementation manner so far. This +does not address some of the limitations of the IPMI data model. + +MCTP defines a standard transport protocol, plus a number of separate +physical layer bindings for the actual transport of MCTP packets. These +are defined by the DMTF's Platform Management Working group; standards +are available at: + + https://www.dmtf.org/standards/pmci + +The following diagram shows how these standards map to the areas of +functionality that we may want to implement for OpenBMC. The DSP numbers +provided are references to DMTF standard documents. + +![](mctp-standards.svg) + +One of the key concepts here is that separation of transport protocol +from the physical layer bindings; this means that an MCTP "stack" may be +using either a I2C, PCI, Serial or custom hardware channel, without the +higher layers of that stack needing to be aware of the hardware +implementation. These higher levels only need to be aware that they are +communicating with a certain entity, defined by an Entity ID (MCTP EID). +These entities may be any element of the platform that communicates +over MCTP - for example, the host device, the BMC, or any other +system peripheral - static or hot-pluggable. + +This document is focussed on the "transport" part of the platform design. +While this does enable new messaging protocols (mainly PLDM), those +components are not covered in detail much; we will propose those parts +in separate design efforts. For example, the PLDM design at +[pldm-stack.md]. + +As part of the design, the references to MCTP "messages" and "packets" +are intentional, to match the definitions in the MCTP standard. MCTP +messages are the higher-level data transferred between MCTP endpoints, +which packets are typically smaller, and are what is sent over the +hardware. Messages that are larger than the hardware Maximum Transmit +Unit (MTU) are split into individual packets by the transmit +implementation, and reassembled at the receive implementation. + +## Requirements + +Any channel between host and BMC should: + + - Have a simple serialisation and deserialisation format, to enable + implementations in host firmware, which have widely varying runtime + capabilities + + - Allow different hardware channels, as we have a wide variety of + target platforms for OpenBMC + + - Be usable over simple hardware implementations, but have a facility + for higher bandwidth messaging on platforms that require it. + + - Ideally, integrate with newer messaging protocols + +## Proposed Design + +The MCTP core specification just provides the packetisation, routing and +addressing mechanisms. The actual transmit/receive of those packets is +up to the hardware binding of the MCTP transport. + +For OpenBMC, we would introduce a "MCTP+applications" daemon, which +implements the transport over a configurable hardware channel (eg., +Serial UART, I2C or PCI), and provides handlers for any incoming MCTP +application requests. This daemon is responsible for the packetisation +and routing of MCTP messages from external endpoints, and handling the +application layer requests. + +This daemon has a few components: + + 1) the core MCTP stack + + 2) one or more binding implementations (eg, MCTP-over-serial), which + interact with the hardware channel(s). + + 3) one or more MCTP message handlers (eg PLDM or NVME-MI), to handle incoming + MCTP messages of specific types + + 4) the core application, consisting of main loop, handler management and + MCTP binding management + +The proposed implementation here is to produce an MCTP "library" which +provides the packetisation and routing functions, between: + + - an "upper" messaging transmit/receive interface, for tx/rx of a full + message to a specific endpoint (ie, (1) above) + + - a "lower" hardware binding for transmit/receive of individual + packets, providing a method for the core to tx/rx each packet to + hardware, and defines the parameters of the common packetisation + code (ie. (2) above). + +The lower interface would be plugged in to one of a number of +hardware-specific binding implementations. Most of these would be +included in the library source tree, but others can be plugged-in too, +perhaps where the physical layer implementation does not make sense to +include in the platform-agnostic library. + +The reason for a library is to allow the same MCTP implementation to be +used in both OpenBMC and host firmware; the library should be +bidirectional. To allow this, the library would be written in portable C +(structured in a way that can be compiled as "extern C" in C++ +codebases), and be able to be configured to suit those runtime +environments (for example, POSIX IO may not be available on all +platforms; we should be able to compile the library to suit). The +licence for the library should also allow this re-use; a dual Apache & +GPLv2+ licence may be best. + +These "lower" binding implementations may have very different methods of +transferring packets to the physical layer. For example, a serial +binding implementation for running on a Linux environment may be +implemented through read()/write() syscalls to a PTY device. An I2C +binding for use in low-level host firmware environments may interact +directly with hardware registers to perform packet transfers. + +The application-specific handlers (listed as (3) above) implement the +actual functionality provided over the MCTP channel. Each of these would +register with the MCTP core library to receive MCTP messages of a +certain type, and would transmit MCTP messages of that same type. While +the handlers themselves are out of scope for this design, there are a +few elements that are important here: + + - Handlers are likely to perform IO to other components of the BMC + (such as sending and receiving dbus messages). To allow multiple + handlers to co-exist, this IO should be implemented using + non-blocking interfaces (eg, using poll()). + + - Handlers should be implemented as separate components from the main + daemon, so as not to require completely separate functionality (such + as PLDM and NVME-MI) existing in the same codebase. Having the core + daemon load handlers as shared objects would allow this. + +MCTP is intended to be an optional component of OpenBMC. Platforms using +OpenBMC are free to adopt it as they see fit. + +## Alternatives Considered + +There have been two main alternatives to this approach: + +Continue using IPMI, but start making more use of OEM extensions to +suit the requirements of new platforms. However, given that the IPMI +standard is no longer under active development, we would likely end up +with a large amount of platform-specific customisations. This also does +not solve the hardware channel issues in a standard manner. + +Redfish between host and BMC. This would mean that host firmware needs a +HTTP client, a TCP/IP stack, a JSON (de)serialiser, and support for +Redfish schema. While this may be present in some environments (for +example, UEFI-based firmware), this is may not be feasible for all host +firmware implementations (for example, OpenPOWER). It's possible that we +could run a simplified Redfish stack - indeed, MCTP has a proposal for a +Redfish-over-MCTP channel (DSP0218), which uses simplified serialisation +format and no requirement on HTTP. However, this may involve a large +amount of complexity in host firmware. + +In terms of an MCTP daemon implementation, an alternative is to have the +core MCTP stack exist in a different process from the application +handlers. For example, the MCTP core could be only responsible for +proxying MCTP messages to and from a dbus interface, as is currently +done for IPMI messages. However, the complexity, messaging overheads and +state management involved here has indicated that the added separation +has not been a clear advantage. + +## Impacts + +Development would be required to implement the MCTP transport, plus any +new users of the MCTP messaging (eg, a PLDM implementation). These would +somewhat duplicate the work we have in IPMI handlers. + +We'd want to keep IPMI running in parallel, so the "upgrade" path should +be fairly straightforward. + +Design and development needs to involve potential host, management +controllers and managed device implementations. + +## Testing + +For the core MCTP library, we are able to run tests there in complete +isolation (I have already been able to run a prototype MCTP stack +through the afl fuzzer) to ensure that the core transport protocol +works. + +For MCTP hardware bindings, we would develop channel-specific tests that +would be run in CI on both host and BMC. + +For the OpenBMC MCTP daemon implementation, testing models would depend +on the structure we adopt in the design section. |