€•°Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ;/translations/zh_CN/driver-api/cxl/linux/access-coordinates”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ;/translations/zh_TW/driver-api/cxl/linux/access-coordinates”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ;/translations/it_IT/driver-api/cxl/linux/access-coordinates”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ;/translations/ja_JP/driver-api/cxl/linux/access-coordinates”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ;/translations/ko_KR/driver-api/cxl/linux/access-coordinates”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ;/translations/pt_BR/driver-api/cxl/linux/access-coordinates”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ;/translations/sp_SP/driver-api/cxl/linux/access-coordinates”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/cxl/linux/access-coordinates.rst”h´Kubh¶)�”}”(hŒ4This data file has been placed in the public domain.”h]”hŒ4This data file has been placed in the public domain.”…”�”}”hhÈsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³Œo/srv/docbuild/lib/venvs/build-kernel-docs/lib64/python3.9/site-packages/docutils/parsers/rst/include/isonum.txt”h´Kubh¶)�”}”(hŒ¸Derived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .”h]”hŒ¸Derived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .”…”�”}”hh×sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³hÖh´KubhŒsubstitution_definition”“”)�”}”(hŒ*.. |amp| unicode:: U+00026 .. AMPERSAND”h]”hŒ&”…”�”}”hhçsbah}”(h]”h ]”h"]”Œamp”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ+.. |apos| unicode:: U+00027 .. APOSTROPHE”h]”hŒ'”…”�”}”hhösbah}”(h]”h ]”h"]”Œapos”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ).. |ast| unicode:: U+0002A .. ASTERISK”h]”hŒ*”…”�”}”hjsbah}”(h]”h ]”h"]”Œast”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ+.. |brvbar| unicode:: U+000A6 .. BROKEN BAR”h]”hŒ¦”…”�”}”hjsbah}”(h]”h ]”h"]”Œbrvbar”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ0.. |bsol| unicode:: U+0005C .. REVERSE SOLIDUS”h]”hŒ\”…”�”}”hj#sbah}”(h]”h ]”h"]”Œbsol”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ*.. |cent| unicode:: U+000A2 .. CENT SIGN”h]”hŒ¢”…”�”}”hj2sbah}”(h]”h ]”h"]”Œcent”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ&.. |colon| unicode:: U+0003A .. COLON”h]”hŒ:”…”�”}”hjAsbah}”(h]”h ]”h"]”Œcolon”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ&.. |comma| unicode:: U+0002C .. COMMA”h]”hŒ,”…”�”}”hjPsbah}”(h]”h ]”h"]”Œcomma”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |commat| unicode:: U+00040 .. COMMERCIAL AT”h]”hŒ@”…”�”}”hj_sbah}”(h]”h ]”h"]”Œcommat”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN”h]”hŒ©”…”�”}”hjnsbah}”(h]”h ]”h"]”Œcopy”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |curren| unicode:: U+000A4 .. CURRENCY SIGN”h]”hŒ¤”…”�”}”hj}sbah}”(h]”h ]”h"]”Œcurren”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROW”h]”hŒ↓”…”�”}”hjŒsbah}”(h]”h ]”h"]”Œdarr”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |deg| unicode:: U+000B0 .. DEGREE SIGN”h]”hŒ°”…”�”}”hj›sbah}”(h]”h ]”h"]”Œdeg”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |divide| unicode:: U+000F7 .. DIVISION SIGN”h]”hŒ÷”…”�”}”hjªsbah}”(h]”h ]”h"]”Œdivide”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |dollar| unicode:: U+00024 .. DOLLAR SIGN”h]”hŒ$”…”�”}”hj¹sbah}”(h]”h ]”h"]”Œdollar”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |equals| unicode:: U+0003D .. EQUALS SIGN”h]”hŒ=”…”�”}”hjÈsbah}”(h]”h ]”h"]”Œequals”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ1.. |excl| unicode:: U+00021 .. EXCLAMATION MARK”h]”hŒ!”…”�”}”hj×sbah}”(h]”h ]”h"]”Œexcl”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ9.. |frac12| unicode:: U+000BD .. VULGAR FRACTION ONE HALF”h]”hŒ½”…”�”}”hjæsbah}”(h]”h ]”h"]”Œfrac12”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ<.. |frac14| unicode:: U+000BC .. VULGAR FRACTION ONE QUARTER”h]”hŒ¼”…”�”}”hjõsbah}”(h]”h ]”h"]”Œfrac14”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ;.. |frac18| unicode:: U+0215B .. VULGAR FRACTION ONE EIGHTH”h]”hŒâ…›”…”�”}”hjsbah}”(h]”h ]”h"]”Œfrac18”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ?.. |frac34| unicode:: U+000BE .. VULGAR FRACTION THREE QUARTERS”h]”hŒ¾”…”�”}”hjsbah}”(h]”h ]”h"]”Œfrac34”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ>.. |frac38| unicode:: U+0215C .. VULGAR FRACTION THREE EIGHTHS”h]”hŒâ…œ”…”�”}”hj"sbah}”(h]”h ]”h"]”Œfrac38”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHS”h]”hŒâ…�”…”�”}”hj1sbah}”(h]”h ]”h"]”Œfrac58”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ>.. |frac78| unicode:: U+0215E .. VULGAR FRACTION SEVEN EIGHTHS”h]”hŒâ…ž”…”�”}”hj@sbah}”(h]”h ]”h"]”Œfrac78”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ2.. |gt| unicode:: U+0003E .. GREATER-THAN SIGN”h]”hŒ>”…”�”}”hjOsbah}”(h]”h ]”h"]”Œgt”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALF”h]”hŒ½”…”�”}”hj^sbah}”(h]”h ]”h"]”Œhalf”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ/.. |horbar| unicode:: U+02015 .. HORIZONTAL BAR”h]”hŒ―”…”�”}”hjmsbah}”(h]”h ]”h"]”Œhorbar”ah$]”h&]”uh1håh³hÖh´K!hhh²hubhæ)�”}”(hŒ'.. |hyphen| unicode:: U+02010 .. HYPHEN”h]”hŒâ€�”…”�”}”hj|sbah}”(h]”h ]”h"]”Œhyphen”ah$]”h&]”uh1håh³hÖh´K"hhh²hubhæ)�”}”(hŒ:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARK”h]”hŒ¡”…”�”}”hj‹sbah}”(h]”h ]”h"]”Œiexcl”ah$]”h&]”uh1håh³hÖh´K#hhh²hubhæ)�”}”(hŒ7.. |iquest| unicode:: U+000BF .. INVERTED QUESTION MARK”h]”hŒ¿”…”�”}”hjšsbah}”(h]”h ]”h"]”Œiquest”ah$]”h&]”uh1håh³hÖh´K$hhh²hubhæ)�”}”(hŒJ.. |laquo| unicode:: U+000AB .. LEFT-POINTING DOUBLE ANGLE QUOTATION MARK”h]”hŒ«”…”�”}”hj©sbah}”(h]”h ]”h"]”Œlaquo”ah$]”h&]”uh1håh³hÖh´K%hhh²hubhæ)�”}”(hŒ0.. |larr| unicode:: U+02190 .. LEFTWARDS ARROW”h]”hŒâ†�”…”�”}”hj¸sbah}”(h]”h ]”h"]”Œlarr”ah$]”h&]”uh1håh³hÖh´K&hhh²hubhæ)�”}”(hŒ3.. |lcub| unicode:: U+0007B .. LEFT CURLY BRACKET”h]”hŒ{”…”�”}”hjÇsbah}”(h]”h ]”h"]”Œlcub”ah$]”h&]”uh1håh³hÖh´K'hhh²hubhæ)�”}”(hŒ;.. |ldquo| unicode:: U+0201C .. LEFT DOUBLE QUOTATION MARK”h]”hŒ“”…”�”}”hjÖsbah}”(h]”h ]”h"]”Œldquo”ah$]”h&]”uh1håh³hÖh´K(hhh²hubhæ)�”}”(hŒ).. |lowbar| unicode:: U+0005F .. LOW LINE”h]”hŒ_”…”�”}”hjåsbah}”(h]”h ]”h"]”Œlowbar”ah$]”h&]”uh1håh³hÖh´K)hhh²hubhæ)�”}”(hŒ1.. |lpar| unicode:: U+00028 .. LEFT PARENTHESIS”h]”hŒ(”…”�”}”hjôsbah}”(h]”h ]”h"]”Œlpar”ah$]”h&]”uh1håh³hÖh´K*hhh²hubhæ)�”}”(hŒ4.. |lsqb| unicode:: U+0005B .. LEFT SQUARE BRACKET”h]”hŒ[”…”�”}”hjsbah}”(h]”h ]”h"]”Œlsqb”ah$]”h&]”uh1håh³hÖh´K+hhh²hubhæ)�”}”(hŒ;.. |lsquo| unicode:: U+02018 .. LEFT SINGLE QUOTATION MARK”h]”hŒ‘”…”�”}”hjsbah}”(h]”h ]”h"]”Œlsquo”ah$]”h&]”uh1håh³hÖh´K,hhh²hubhæ)�”}”(hŒ/.. |lt| unicode:: U+0003C .. LESS-THAN SIGN”h]”hŒ<”…”�”}”hj!sbah}”(h]”h ]”h"]”Œlt”ah$]”h&]”uh1håh³hÖh´K-hhh²hubhæ)�”}”(hŒ+.. |micro| unicode:: U+000B5 .. MICRO SIGN”h]”hŒµ”…”�”}”hj0sbah}”(h]”h ]”h"]”Œmicro”ah$]”h&]”uh1håh³hÖh´K.hhh²hubhæ)�”}”(hŒ+.. |middot| unicode:: U+000B7 .. MIDDLE DOT”h]”hŒ·”…”�”}”hj?sbah}”(h]”h ]”h"]”Œmiddot”ah$]”h&]”uh1håh³hÖh´K/hhh²hubhæ)�”}”(hŒ/.. |nbsp| unicode:: U+000A0 .. NO-BREAK SPACE”h]”hŒ ”…”�”}”hjNsbah}”(h]”h ]”h"]”Œnbsp”ah$]”h&]”uh1håh³hÖh´K0hhh²hubhæ)�”}”(hŒ).. |not| unicode:: U+000AC .. NOT SIGN”h]”hŒ¬”…”�”}”hj]sbah}”(h]”h ]”h"]”Œnot”ah$]”h&]”uh1håh³hÖh´K1hhh²hubhæ)�”}”(hŒ,.. |num| unicode:: U+00023 .. NUMBER SIGN”h]”hŒ#”…”�”}”hjlsbah}”(h]”h ]”h"]”Œnum”ah$]”h&]”uh1håh³hÖh´K2hhh²hubhæ)�”}”(hŒ).. |ohm| unicode:: U+02126 .. OHM SIGN”h]”hŒΩ”…”�”}”hj{sbah}”(h]”h ]”h"]”Œohm”ah$]”h&]”uh1håh³hÖh´K3hhh²hubhæ)�”}”(hŒ;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATOR”h]”hŒª”…”�”}”hjŠsbah}”(h]”h ]”h"]”Œordf”ah$]”h&]”uh1håh³hÖh´K4hhh²hubhæ)�”}”(hŒ<.. |ordm| unicode:: U+000BA .. MASCULINE ORDINAL INDICATOR”h]”hŒº”…”�”}”hj™sbah}”(h]”h ]”h"]”Œordm”ah$]”h&]”uh1håh³hÖh´K5hhh²hubhæ)�”}”(hŒ-.. |para| unicode:: U+000B6 .. PILCROW SIGN”h]”hŒ¶”…”�”}”hj¨sbah}”(h]”h ]”h"]”Œpara”ah$]”h&]”uh1håh³hÖh´K6hhh²hubhæ)�”}”(hŒ-.. |percnt| unicode:: U+00025 .. PERCENT SIGN”h]”hŒ%”…”�”}”hj·sbah}”(h]”h ]”h"]”Œpercnt”ah$]”h&]”uh1håh³hÖh´K7hhh²hubhæ)�”}”(hŒ*.. |period| unicode:: U+0002E .. FULL STOP”h]”hŒ.”…”�”}”hjÆsbah}”(h]”h ]”h"]”Œperiod”ah$]”h&]”uh1håh³hÖh´K8hhh²hubhæ)�”}”(hŒ*.. |plus| unicode:: U+0002B .. PLUS SIGN”h]”hŒ+”…”�”}”hjÕsbah}”(h]”h ]”h"]”Œplus”ah$]”h&]”uh1håh³hÖh´K9hhh²hubhæ)�”}”(hŒ0.. |plusmn| unicode:: U+000B1 .. PLUS-MINUS SIGN”h]”hŒ±”…”�”}”hjäsbah}”(h]”h ]”h"]”Œplusmn”ah$]”h&]”uh1håh³hÖh´K:hhh²hubhæ)�”}”(hŒ+.. |pound| unicode:: U+000A3 .. POUND SIGN”h]”hŒ£”…”�”}”hjósbah}”(h]”h ]”h"]”Œpound”ah$]”h&]”uh1håh³hÖh´K;hhh²hubhæ)�”}”(hŒ... |quest| unicode:: U+0003F .. QUESTION MARK”h]”hŒ?”…”�”}”hjsbah}”(h]”h ]”h"]”Œquest”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ1.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROW”h]”hŒ→”…”�”}”hj/sbah}”(h]”h ]”h"]”Œrarr”ah$]”h&]”uh1håh³hÖh´K?hhh²hubhæ)�”}”(hŒ4.. |rcub| unicode:: U+0007D .. RIGHT CURLY BRACKET”h]”hŒ}”…”�”}”hj>sbah}”(h]”h ]”h"]”Œrcub”ah$]”h&]”uh1håh³hÖh´K@hhh²hubhæ)�”}”(hŒ<.. |rdquo| unicode:: U+0201D .. RIGHT DOUBLE QUOTATION MARK”h]”hŒâ€�”…”�”}”hjMsbah}”(h]”h ]”h"]”Œrdquo”ah$]”h&]”uh1håh³hÖh´KAhhh²hubhæ)�”}”(hŒ0.. |reg| unicode:: U+000AE .. REGISTERED SIGN”h]”hŒ®”…”�”}”hj\sbah}”(h]”h ]”h"]”Œreg”ah$]”h&]”uh1håh³hÖh´KBhhh²hubhæ)�”}”(hŒ2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESIS”h]”hŒ)”…”�”}”hjksbah}”(h]”h ]”h"]”Œrpar”ah$]”h&]”uh1håh³hÖh´KChhh²hubhæ)�”}”(hŒ5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKET”h]”hŒ]”…”�”}”hjzsbah}”(h]”h ]”h"]”Œrsqb”ah$]”h&]”uh1håh³hÖh´KDhhh²hubhæ)�”}”(hŒ<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARK”h]”hŒ’”…”�”}”hj‰sbah}”(h]”h ]”h"]”Œrsquo”ah$]”h&]”uh1håh³hÖh´KEhhh²hubhæ)�”}”(hŒ-.. |sect| unicode:: U+000A7 .. SECTION SIGN”h]”hŒ§”…”�”}”hj˜sbah}”(h]”h ]”h"]”Œsect”ah$]”h&]”uh1håh³hÖh´KFhhh²hubhæ)�”}”(hŒ*.. |semi| unicode:: U+0003B .. SEMICOLON”h]”hŒ;”…”�”}”hj§sbah}”(h]”h ]”h"]”Œsemi”ah$]”h&]”uh1håh³hÖh´KGhhh²hubhæ)�”}”(hŒ,.. |shy| unicode:: U+000AD .. SOFT HYPHEN”h]”hŒ­”…”�”}”hj¶sbah}”(h]”h ]”h"]”Œshy”ah$]”h&]”uh1håh³hÖh´KHhhh²hubhæ)�”}”(hŒ(.. |sol| unicode:: U+0002F .. SOLIDUS”h]”hŒ/”…”�”}”hjÅsbah}”(h]”h ]”h"]”Œsol”ah$]”h&]”uh1håh³hÖh´KIhhh²hubhæ)�”}”(hŒ,.. |sung| unicode:: U+0266A .. EIGHTH NOTE”h]”hŒ♪”…”�”}”hjÔsbah}”(h]”h ]”h"]”Œsung”ah$]”h&]”uh1håh³hÖh´KJhhh²hubhæ)�”}”(hŒ0.. |sup1| unicode:: U+000B9 .. SUPERSCRIPT ONE”h]”hŒ¹”…”�”}”hjãsbah}”(h]”h ]”h"]”Œsup1”ah$]”h&]”uh1håh³hÖh´KKhhh²hubhæ)�”}”(hŒ0.. |sup2| unicode:: U+000B2 .. SUPERSCRIPT TWO”h]”hŒ²”…”�”}”hjòsbah}”(h]”h ]”h"]”Œsup2”ah$]”h&]”uh1håh³hÖh´KLhhh²hubhæ)�”}”(hŒ2.. |sup3| unicode:: U+000B3 .. SUPERSCRIPT THREE”h]”hŒ³”…”�”}”hjsbah}”(h]”h ]”h"]”Œsup3”ah$]”h&]”uh1håh³hÖh´KMhhh²hubhæ)�”}”(hŒ4.. |times| unicode:: U+000D7 .. MULTIPLICATION SIGN”h]”hŒ×”…”�”}”hjsbah}”(h]”h ]”h"]”Œtimes”ah$]”h&]”uh1håh³hÖh´KNhhh²hubhæ)�”}”(hŒ0.. |trade| unicode:: U+02122 .. TRADE MARK SIGN”h]”hŒâ„¢”…”�”}”hjsbah}”(h]”h ]”h"]”Œtrade”ah$]”h&]”uh1håh³hÖh´KOhhh²hubhæ)�”}”(hŒ... |uarr| unicode:: U+02191 .. UPWARDS ARROW”h]”hŒ↑”…”�”}”hj.sbah}”(h]”h ]”h"]”Œuarr”ah$]”h&]”uh1håh³hÖh´KPhhh²hubhæ)�”}”(hŒ... |verbar| unicode:: U+0007C .. VERTICAL LINE”h]”hŒ|”…”�”}”hj=sbah}”(h]”h ]”h"]”Œverbar”ah$]”h&]”uh1håh³hÖh´KQhhh²hubhæ)�”}”(hŒ*.. |yen| unicode:: U+000A5 .. YEN SIGN ”h]”hŒÂ¥”…”�”}”hjLsbah}”(h]”h ]”h"]”Œyen”ah$]”h&]”uh1håh³hÖh´KRhhh²hubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ"CXL Access Coordinates Computation”h]”hŒ"CXL Access Coordinates Computation”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj]h²hh³hÇh´Kubj\)�”}”(hhh]”(ja)�”}”(hŒ!Latency and Bandwidth Calculation”h]”hŒ!Latency and Bandwidth Calculation”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjph²hh³hÇh´K ubhŒ paragraph”“”)�”}”(hXÀA memory region performance coordinates (latency and bandwidth) are typically provided via ACPI tables :doc:`SRAT <../platform/acpi/srat>` and :doc:`HMAT <../platform/acpi/hmat>`. However, the platform firmware (BIOS) is not able to annotate those for CXL devices that are hot-plugged since they do not exist during platform firmware initialization. The CXL driver can compute the performance coordinates by retrieving data from several components.”h]”(hŒgA memory region performance coordinates (latency and bandwidth) are typically provided via ACPI tables ”…”�”}”(hjƒh²hh³Nh´Nubh)�”}”(hŒ#:doc:`SRAT <../platform/acpi/srat>`”h]”hŒinline”“”)�”}”(hj�h]”hŒSRAT”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hj‹ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ'driver-api/cxl/linux/access-coordinates”Œ refdomain”jœŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ../platform/acpi/srat”uh1hh³hÇh´K hjƒubhŒ and ”…”�”}”(hjƒh²hh³Nh´Nubh)�”}”(hŒ#:doc:`HMAT <../platform/acpi/hmat>`”h]”j�)�”}”(hj¶h]”hŒHMAT”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”(j›Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hj´ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j¨Œ refdomain”jÂŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj®Œ../platform/acpi/hmat”uh1hh³hÇh´K hjƒubhX. However, the platform firmware (BIOS) is not able to annotate those for CXL devices that are hot-plugged since they do not exist during platform firmware initialization. The CXL driver can compute the performance coordinates by retrieving data from several components.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K hjph²hubj‚)�”}”(hX¨The :doc:`SRAT <../platform/acpi/srat>` provides a Generic Port Affinity subtable that ties a proximity domain to a device handle, which in this case would be the CXL hostbridge. Using this association, the performance coordinates for the Generic Port can be retrieved from the :doc:`HMAT <../platform/acpi/hmat>` subtable. This piece represents the performance coordinates between a CPU and a Generic Port (CXL hostbridge).”h]”(hŒThe ”…”�”}”(hjÞh²hh³Nh´Nubh)�”}”(hŒ#:doc:`SRAT <../platform/acpi/srat>`”h]”j�)�”}”(hjèh]”hŒSRAT”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”(j›Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hjæubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j¨Œ refdomain”jôŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj®Œ../platform/acpi/srat”uh1hh³hÇh´KhjÞubhŒï provides a Generic Port Affinity subtable that ties a proximity domain to a device handle, which in this case would be the CXL hostbridge. Using this association, the performance coordinates for the Generic Port can be retrieved from the ”…”�”}”(hjÞh²hh³Nh´Nubh)�”}”(hŒ#:doc:`HMAT <../platform/acpi/hmat>`”h]”j�)�”}”(hj h]”hŒHMAT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(j›Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j¨Œ refdomain”jŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj®Œ../platform/acpi/hmat”uh1hh³hÇh´KhjÞubhŒo subtable. This piece represents the performance coordinates between a CPU and a Generic Port (CXL hostbridge).”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Khjph²hubj‚)�”}”(hXcThe :doc:`CDAT <../platform/cdat>` provides the performance coordinates for the CXL device itself. That is the bandwidth and latency to access that device's memory region. The DSMAS subtable provides a DSMADHandle that is tied to a Device Physical Address (DPA) range. The DSLBIS subtable provides the performance coordinates that's tied to a DSMADhandle and this ties the two table entries together to provide the performance coordinates for each DPA region. For example, if a device exports a DRAM region and a PMEM region, then there would be different performance characteristsics for each of those regions.”h]”(hŒThe ”…”�”}”(hj4h²hh³Nh´Nubh)�”}”(hŒ:doc:`CDAT <../platform/cdat>`”h]”j�)�”}”(hj>h]”hŒCDAT”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”(j›Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hj<ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j¨Œ refdomain”jJŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj®Œ../platform/cdat”uh1hh³hÇh´Khj4ubhXE provides the performance coordinates for the CXL device itself. That is the bandwidth and latency to access that device’s memory region. The DSMAS subtable provides a DSMADHandle that is tied to a Device Physical Address (DPA) range. The DSLBIS subtable provides the performance coordinates that’s tied to a DSMADhandle and this ties the two table entries together to provide the performance coordinates for each DPA region. For example, if a device exports a DRAM region and a PMEM region, then there would be different performance characteristsics for each of those regions.”…”�”}”(hj4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Khjph²hubj‚)�”}”(hXIf there's a CXL switch in the topology, then the performance coordinates for the switch is provided by SSLBIS subtable. This provides the bandwidth and latency for traversing the switch between the switch upstream port and the switch downstream port that points to the endpoint device.”h]”hX If there’s a CXL switch in the topology, then the performance coordinates for the switch is provided by SSLBIS subtable. This provides the bandwidth and latency for traversing the switch between the switch upstream port and the switch downstream port that points to the endpoint device.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K"hjph²hubj‚)�”}”(hŒSimple topology example::”h]”hŒSimple topology example:”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K'hjph²hubhŒ literal_block”“”)�”}”(hŒŠGP0/HB0/ACPI0016-0 RP0 | | L0 | SW 0 / USP0 SW 0 / DSP0 | | L1 | EP0”h]”hŒŠGP0/HB0/ACPI0016-0 RP0 | | L0 | SW 0 / USP0 SW 0 / DSP0 | | L1 | EP0”…”�”}”hj„sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‚h³hÇh´K)hjph²hubj‚)�”}”(hXºIn this example, there is a CXL switch between an endpoint and a root port. Latency in this example is calculated as such: L(EP0) - Latency from EP0 CDAT DSMAS+DSLBIS L(L1) - Link latency between EP0 and SW0DSP0 L(SW0) - Latency for the switch from SW0 CDAT SSLBIS. L(L0) - Link latency between SW0 and RP0 L(RP0) - Latency from root port to CPU via SRAT and HMAT (Generic Port). Total read and write latencies are the sum of all these parts.”h]”hXºIn this example, there is a CXL switch between an endpoint and a root port. Latency in this example is calculated as such: L(EP0) - Latency from EP0 CDAT DSMAS+DSLBIS L(L1) - Link latency between EP0 and SW0DSP0 L(SW0) - Latency for the switch from SW0 CDAT SSLBIS. L(L0) - Link latency between SW0 and RP0 L(RP0) - Latency from root port to CPU via SRAT and HMAT (Generic Port). Total read and write latencies are the sum of all these parts.”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K5hjph²hubj‚)�”}”(hXBandwidth in this example is calculated as such: B(EP0) - Bandwidth from EP0 CDAT DSMAS+DSLBIS B(L1) - Link bandwidth between EP0 and SW0DSP0 B(SW0) - Bandwidth for the switch from SW0 CDAT SSLBIS. B(L0) - Link bandwidth between SW0 and RP0 B(RP0) - Bandwidth from root port to CPU via SRAT and HMAT (Generic Port). The total read and write bandwidth is the min() of all these parts.”h]”hXBandwidth in this example is calculated as such: B(EP0) - Bandwidth from EP0 CDAT DSMAS+DSLBIS B(L1) - Link bandwidth between EP0 and SW0DSP0 B(SW0) - Bandwidth for the switch from SW0 CDAT SSLBIS. B(L0) - Link bandwidth between SW0 and RP0 B(RP0) - Bandwidth from root port to CPU via SRAT and HMAT (Generic Port). The total read and write bandwidth is the min() of all these parts.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K>hjph²hubj‚)�”}”(hXTo calculate the link bandwidth: LinkOperatingFrequency (GT/s) is the current negotiated link speed. DataRatePerLink (MB/s) = LinkOperatingFrequency / 8 Bandwidth (MB/s) = PCIeCurrentLinkWidth * DataRatePerLink Where PCIeCurrentLinkWidth is the number of lanes in the link.”h]”hXTo calculate the link bandwidth: LinkOperatingFrequency (GT/s) is the current negotiated link speed. DataRatePerLink (MB/s) = LinkOperatingFrequency / 8 Bandwidth (MB/s) = PCIeCurrentLinkWidth * DataRatePerLink Where PCIeCurrentLinkWidth is the number of lanes in the link.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KFhjph²hubj‚)�”}”(hŒZTo calculate the link latency: LinkLatency (picoseconds) = FlitSize / LinkBandwidth (MB/s)”h]”hŒZTo calculate the link latency: LinkLatency (picoseconds) = FlitSize / LinkBandwidth (MB/s)”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KLhjph²hubj‚)�”}”(hŒµSee `CXL Memory Device SW Guide r1.0 `_, section 2.11.3 and 2.11.4 for details.”h]”(hŒSee ”…”�”}”(hjÊh²hh³Nh´NubhŒ reference”“”)�”}”(hŒ‰`CXL Memory Device SW Guide r1.0 `_”h]”hŒCXL Memory Device SW Guide r1.0”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒCXL Memory Device SW Guide r1.0”Œrefuri”Œdhttps://www.intel.com/content/www/us/en/content-details/643805/cxl-memory-device-software-guide.html”uh1jÒhjÊubhŒtarget”“”)�”}”(hŒg ”h]”h}”(h]”Œcxl-memory-device-sw-guide-r1-0”ah ]”h"]”Œcxl memory device sw guide r1.0”ah$]”h&]”Œrefuri”jåuh1jæŒ referenced”KhjÊubhŒ(, section 2.11.3 and 2.11.4 for details.”…”�”}”(hjÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KOhjph²hubj‚)�”}”(hŒ“In the end, the access coordinates for a constructed memory region is calculated from one or more memory partitions from each of the CXL device(s).”h]”hŒ“In the end, the access coordinates for a constructed memory region is calculated from one or more memory partitions from each of the CXL device(s).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KRhjph²hubeh}”(h]”Œ!latency-and-bandwidth-calculation”ah ]”h"]”Œ!latency and bandwidth calculation”ah$]”h&]”uh1j[hj]h²hh³hÇh´K ubj\)�”}”(hhh]”(ja)�”}”(hŒ Shared Upstream Link Calculation”h]”hŒ Shared Upstream Link Calculation”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjh²hh³hÇh´KVubj‚)�”}”(hXéFor certain CXL region construction with endpoints behind CXL switches (SW) or Root Ports (RP), there is the possibility of the total bandwidth for all the endpoints behind a switch being more than the switch upstream link. A similar situation can occur within the host, upstream of the root ports. The CXL driver performs an additional pass after all the targets have arrived for a region in order to recalculate the bandwidths with possible upstream link being a limiting factor in mind.”h]”hXéFor certain CXL region construction with endpoints behind CXL switches (SW) or Root Ports (RP), there is the possibility of the total bandwidth for all the endpoints behind a switch being more than the switch upstream link. A similar situation can occur within the host, upstream of the root ports. The CXL driver performs an additional pass after all the targets have arrived for a region in order to recalculate the bandwidths with possible upstream link being a limiting factor in mind.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KWhjh²hubj‚)�”}”(hXÀThe algorithm assumes the configuration is a symmetric topology as that maximizes performance. When asymmetric topology is detected, the calculation is aborted. An asymmetric topology is detected during topology walk where the number of RPs detected as a grandparent is not equal to the number of devices iterated in the same iteration loop. The assumption is made that subtle asymmetry in properties does not happen and all paths to EPs are equal.”h]”hXÀThe algorithm assumes the configuration is a symmetric topology as that maximizes performance. When asymmetric topology is detected, the calculation is aborted. An asymmetric topology is detected during topology walk where the number of RPs detected as a grandparent is not equal to the number of devices iterated in the same iteration loop. The assumption is made that subtle asymmetry in properties does not happen and all paths to EPs are equal.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K_hjh²hubj‚)�”}”(hŒÛThere can be multiple switches under an RP. There can be multiple RPs under a CXL Host Bridge (HB). There can be multiple HBs under a CXL Fixed Memory Window Structure (CFMWS) in the :doc:`CEDT <../platform/acpi/cedt>`.”h]”(hŒ·There can be multiple switches under an RP. There can be multiple RPs under a CXL Host Bridge (HB). There can be multiple HBs under a CXL Fixed Memory Window Structure (CFMWS) in the ”…”�”}”(hjCh²hh³Nh´Nubh)�”}”(hŒ#:doc:`CEDT <../platform/acpi/cedt>`”h]”j�)�”}”(hjMh]”hŒCEDT”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”(j›Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hjKubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j¨Œ refdomain”jYŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj®Œ../platform/acpi/cedt”uh1hh³hÇh´KfhjCubhŒ.”…”�”}”(hjCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kfhjh²hubj‚)�”}”(hŒAn example hierarchy::”h]”hŒAn example hierarchy:”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kjhjh²hubjƒ)�”}”(hX‘ CFMWS 0 | _________|_________ | | ACPI0017-0 ACPI0017-1 GP0/HB0/ACPI0016-0 GP1/HB1/ACPI0016-1 | | | | RP0 RP1 RP2 RP3 | | | | SW 0 SW 1 SW 2 SW 3 | | | | | | | | EP0 EP1 EP2 EP3 EP4 EP5 EP6 EP7”h]”hX‘ CFMWS 0 | _________|_________ | | ACPI0017-0 ACPI0017-1 GP0/HB0/ACPI0016-0 GP1/HB1/ACPI0016-1 | | | | RP0 RP1 RP2 RP3 | | | | SW 0 SW 1 SW 2 SW 3 | | | | | | | | EP0 EP1 EP2 EP3 EP4 EP5 EP6 EP7”…”�”}”hjƒsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‚h³hÇh´Klhjh²hubj‚)�”}”(hŒ&Computation for the example hierarchy:”h]”hŒ&Computation for the example hierarchy:”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kyhjh²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hXrMin (GP0 to CPU BW, Min(SW 0 Upstream Link to RP0 BW, Min(SW0SSLBIS for SW0DSP0 (EP0), EP0 DSLBIS, EP0 Upstream Link) + Min(SW0SSLBIS for SW0DSP1 (EP1), EP1 DSLBIS, EP1 Upstream link)) + Min(SW 1 Upstream Link to RP1 BW, Min(SW1SSLBIS for SW1DSP0 (EP2), EP2 DSLBIS, EP2 Upstream Link) + Min(SW1SSLBIS for SW1DSP1 (EP3), EP3 DSLBIS, EP3 Upstream link))) +”h]”(hŒterm”“”)�”}”(hŒMin (GP0 to CPU BW,”h]”hŒMin (GP0 to CPU BW,”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªh³hÇh´K€hj¦ubhŒ definition”“”)�”}”(hhh]”j )�”}”(hhh]”(j¥)�”}”(hŒ¦Min(SW 0 Upstream Link to RP0 BW, Min(SW0SSLBIS for SW0DSP0 (EP0), EP0 DSLBIS, EP0 Upstream Link) + Min(SW0SSLBIS for SW0DSP1 (EP1), EP1 DSLBIS, EP1 Upstream link)) +”h]”(j«)�”}”(hŒ!Min(SW 0 Upstream Link to RP0 BW,”h]”hŒ!Min(SW 0 Upstream Link to RP0 BW,”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªh³hÇh´K}hjÂubj»)�”}”(hhh]”j‚)�”}”(hŒ„Min(SW0SSLBIS for SW0DSP0 (EP0), EP0 DSLBIS, EP0 Upstream Link) + Min(SW0SSLBIS for SW0DSP1 (EP1), EP1 DSLBIS, EP1 Upstream link)) +”h]”hŒ„Min(SW0SSLBIS for SW0DSP0 (EP0), EP0 DSLBIS, EP0 Upstream Link) + Min(SW0SSLBIS for SW0DSP1 (EP1), EP1 DSLBIS, EP1 Upstream link)) +”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K}hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³hÇh´K}hj¿ubj¥)�”}”(hŒ§Min(SW 1 Upstream Link to RP1 BW, Min(SW1SSLBIS for SW1DSP0 (EP2), EP2 DSLBIS, EP2 Upstream Link) + Min(SW1SSLBIS for SW1DSP1 (EP3), EP3 DSLBIS, EP3 Upstream link))) +”h]”(j«)�”}”(hŒ!Min(SW 1 Upstream Link to RP1 BW,”h]”hŒ!Min(SW 1 Upstream Link to RP1 BW,”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªh³hÇh´K€hjñubj»)�”}”(hhh]”j‚)�”}”(hŒ…Min(SW1SSLBIS for SW1DSP0 (EP2), EP2 DSLBIS, EP2 Upstream Link) + Min(SW1SSLBIS for SW1DSP1 (EP3), EP3 DSLBIS, EP3 Upstream link))) +”h]”hŒ…Min(SW1SSLBIS for SW1DSP0 (EP2), EP2 DSLBIS, EP2 Upstream Link) + Min(SW1SSLBIS for SW1DSP1 (EP3), EP3 DSLBIS, EP3 Upstream link))) +”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K€hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³hÇh´K€hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³hÇh´K€hj¡ubj¥)�”}”(hXrMin (GP1 to CPU BW, Min(SW 2 Upstream Link to RP2 BW, Min(SW2SSLBIS for SW2DSP0 (EP4), EP4 DSLBIS, EP4 Upstream Link) + Min(SW2SSLBIS for SW2DSP1 (EP5), EP5 DSLBIS, EP5 Upstream link)) + Min(SW 3 Upstream Link to RP3 BW, Min(SW3SSLBIS for SW3DSP0 (EP6), EP6 DSLBIS, EP6 Upstream Link) + Min(SW3SSLBIS for SW3DSP1 (EP7), EP7 DSLBIS, EP7 Upstream link)))) ”h]”(j«)�”}”(hŒMin (GP1 to CPU BW,”h]”hŒMin (GP1 to CPU BW,”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªh³hÇh´Kˆhj2ubj»)�”}”(hhh]”j )�”}”(hhh]”(j¥)�”}”(hŒ¦Min(SW 2 Upstream Link to RP2 BW, Min(SW2SSLBIS for SW2DSP0 (EP4), EP4 DSLBIS, EP4 Upstream Link) + Min(SW2SSLBIS for SW2DSP1 (EP5), EP5 DSLBIS, EP5 Upstream link)) +”h]”(j«)�”}”(hŒ!Min(SW 2 Upstream Link to RP2 BW,”h]”hŒ!Min(SW 2 Upstream Link to RP2 BW,”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªh³hÇh´K„hjJubj»)�”}”(hhh]”j‚)�”}”(hŒ„Min(SW2SSLBIS for SW2DSP0 (EP4), EP4 DSLBIS, EP4 Upstream Link) + Min(SW2SSLBIS for SW2DSP1 (EP5), EP5 DSLBIS, EP5 Upstream link)) +”h]”hŒ„Min(SW2SSLBIS for SW2DSP0 (EP4), EP4 DSLBIS, EP4 Upstream Link) + Min(SW2SSLBIS for SW2DSP1 (EP5), EP5 DSLBIS, EP5 Upstream link)) +”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K„hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³hÇh´K„hjGubj¥)�”}”(hŒ§Min(SW 3 Upstream Link to RP3 BW, Min(SW3SSLBIS for SW3DSP0 (EP6), EP6 DSLBIS, EP6 Upstream Link) + Min(SW3SSLBIS for SW3DSP1 (EP7), EP7 DSLBIS, EP7 Upstream link)))) ”h]”(j«)�”}”(hŒ!Min(SW 3 Upstream Link to RP3 BW,”h]”hŒ!Min(SW 3 Upstream Link to RP3 BW,”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªh³hÇh´Kˆhjyubj»)�”}”(hhh]”j‚)�”}”(hŒ„Min(SW3SSLBIS for SW3DSP0 (EP6), EP6 DSLBIS, EP6 Upstream Link) + Min(SW3SSLBIS for SW3DSP1 (EP7), EP7 DSLBIS, EP7 Upstream link))))”h]”hŒ„Min(SW3SSLBIS for SW3DSP0 (EP6), EP6 DSLBIS, EP6 Upstream Link) + Min(SW3SSLBIS for SW3DSP1 (EP7), EP7 DSLBIS, EP7 Upstream link))))”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K‡hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³hÇh´KˆhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³hÇh´Kˆhj¡h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjh²hh³Nh´Nubj‚)�”}”(hXThe calculation starts at cxl_region_shared_upstream_perf_update(). A xarray is created to collect all the endpoint bandwidths via the cxl_endpoint_gather_bandwidth() function. The min() of bandwidth from the endpoint CDAT and the upstream link bandwidth is calculated. If the endpoint has a CXL switch as a parent, then min() of calculated bandwidth and the bandwidth from the SSLBIS for the switch downstream port that is associated with the endpoint is calculated. The final bandwidth is stored in a 'struct cxl_perf_ctx' in the xarray indexed by a device pointer. If the endpoint is direct attached to a root port (RP), the device pointer would be an RP device. If the endpoint is behind a switch, the device pointer would be the upstream device of the parent switch.”h]”hXThe calculation starts at cxl_region_shared_upstream_perf_update(). A xarray is created to collect all the endpoint bandwidths via the cxl_endpoint_gather_bandwidth() function. The min() of bandwidth from the endpoint CDAT and the upstream link bandwidth is calculated. If the endpoint has a CXL switch as a parent, then min() of calculated bandwidth and the bandwidth from the SSLBIS for the switch downstream port that is associated with the endpoint is calculated. The final bandwidth is stored in a ‘struct cxl_perf_ctx’ in the xarray indexed by a device pointer. If the endpoint is direct attached to a root port (RP), the device pointer would be an RP device. If the endpoint is behind a switch, the device pointer would be the upstream device of the parent switch.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KŠhjh²hubj‚)�”}”(hXbAt the next stage, the code walks through one or more switches if they exist in the topology. For endpoints directly attached to RPs, this step is skipped. If there is another switch upstream, the code takes the min() of the current gathered bandwidth and the upstream link bandwidth. If there's a switch upstream, then the SSLBIS of the upstream switch.”h]”hXdAt the next stage, the code walks through one or more switches if they exist in the topology. For endpoints directly attached to RPs, this step is skipped. If there is another switch upstream, the code takes the min() of the current gathered bandwidth and the upstream link bandwidth. If there’s a switch upstream, then the SSLBIS of the upstream switch.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K–hjh²hubj‚)�”}”(hX Once the topology walk reaches the RP, whether it's direct attached endpoints or walking through the switch(es), cxl_rp_gather_bandwidth() is called. At this point all the bandwidths are aggregated per each host bridge, which is also the index for the resulting xarray.”h]”hXOnce the topology walk reaches the RP, whether it’s direct attached endpoints or walking through the switch(es), cxl_rp_gather_bandwidth() is called. At this point all the bandwidths are aggregated per each host bridge, which is also the index for the resulting xarray.”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kœhjh²hubj‚)�”}”(hXRThe next step is to take the min() of the per host bridge bandwidth and the bandwidth from the Generic Port (GP). The bandwidths for the GP are retrieved via ACPI tables (:doc:`SRAT <../platform/acpi/srat>` and :doc:`HMAT <../platform/acpi/hmat>`). The minimum bandwidth are aggregated under the same ACPI0017 device to form a new xarray.”h]”(hŒ«The next step is to take the min() of the per host bridge bandwidth and the bandwidth from the Generic Port (GP). The bandwidths for the GP are retrieved via ACPI tables (”…”�”}”(hjêh²hh³Nh´Nubh)�”}”(hŒ#:doc:`SRAT <../platform/acpi/srat>`”h]”j�)�”}”(hjôh]”hŒSRAT”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”(j›Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hjòubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j¨Œ refdomain”j Œreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj®Œ../platform/acpi/srat”uh1hh³hÇh´K¡hjêubhŒ and ”…”�”}”(hjêh²hh³Nh´Nubh)�”}”(hŒ#:doc:`HMAT <../platform/acpi/hmat>`”h]”j�)�”}”(hj h]”hŒHMAT”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(j›Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j¨Œ refdomain”j$ Œreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj®Œ../platform/acpi/hmat”uh1hh³hÇh´K¡hjêubhŒ\). The minimum bandwidth are aggregated under the same ACPI0017 device to form a new xarray.”…”�”}”(hjêh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K¡hjh²hubj‚)�”}”(hŒÊFinally, the cxl_region_update_bandwidth() is called and the aggregated bandwidth from all the members of the last xarray is updated for the access coordinates residing in the cxl region (cxlr) context.”h]”hŒÊFinally, the cxl_region_update_bandwidth() is called and the aggregated bandwidth from all the members of the last xarray is updated for the access coordinates residing in the cxl region (cxlr) context.”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K§hjh²hubeh}”(h]”Œ shared-upstream-link-calculation”ah ]”h"]”Œ shared upstream link calculation”ah$]”h&]”uh1j[hj]h²hh³hÇh´KVubj\)�”}”(hhh]”(ja)�”}”(hŒQTG ID”h]”hŒQTG ID”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjV h²hh³hÇh´K¬ubj‚)�”}”(hXÛEach :doc:`CEDT <../platform/acpi/cedt>` has a QTG ID field. This field provides the ID that associates with a QoS Throttling Group (QTG) for the CFMWS window. Once the access coordinates are calculated, an ACPI Device Specific Method can be issued to the ACPI0016 device to retrieve the QTG ID depends on the access coordinates provided. The QTG ID for the device can be used as guidance to match to the CFMWS to setup the best Linux root decoder for the device performance.”h]”(hŒEach ”…”�”}”(hjg h²hh³Nh´Nubh)�”}”(hŒ#:doc:`CEDT <../platform/acpi/cedt>`”h]”j�)�”}”(hjq h]”hŒCEDT”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”(j›Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j�hjo ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j¨Œ refdomain”j} Œreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆj®Œ../platform/acpi/cedt”uh1hh³hÇh´K­hjg ubhX³ has a QTG ID field. This field provides the ID that associates with a QoS Throttling Group (QTG) for the CFMWS window. Once the access coordinates are calculated, an ACPI Device Specific Method can be issued to the ACPI0016 device to retrieve the QTG ID depends on the access coordinates provided. The QTG ID for the device can be used as guidance to match to the CFMWS to setup the best Linux root decoder for the device performance.”…”�”}”(hjg h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K­hjV h²hubeh}”(h]”Œqtg-id”ah ]”h"]”Œqtg id”ah$]”h&]”uh1j[hj]h²hh³hÇh´K¬ubeh}”(h]”Œ"cxl-access-coordinates-computation”ah ]”h"]”Œ"cxl access coordinates computation”ah$]”h&]”uh1j[hhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(j`NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÌ Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”(hóhçjhöjjj jj/j#j>j2jMjAj\jPjkj_jzjnj‰j}j˜jŒj§j›j¶jªjÅj¹jÔjÈjãj×jòjæjjõjjjjj.j"j=j1jLj@j[jOjjj^jyjmjˆj|j—j‹j¦jšjµj©jÄj¸jÓjÇjâjÖjñjåjjôjjjjj-j!j<j0jKj?jZjNjij]jxjlj‡j{j–jŠj¥j™j´j¨jÃj·jÒjÆjájÕjðjäjÿjójjjjj,j j;j/jJj>jYjMjhj\jwjkj†jzj•j‰j¤j˜j³j§jÂj¶jÑjÅjàjÔjïjãjþjòj jjjj+jj:j.jIj=jXjLuŒsubstitution_names”}”(Œamp”hóŒapos”jŒast”jŒbrvbar”j Œbsol”j/Œcent”j>Œcolon”jMŒcomma”j\Œcommat”jkŒcopy”jzŒcurren”j‰Œdarr”j˜Œdeg”j§Œdivide”j¶Œdollar”jÅŒequals”jÔŒexcl”jãŒfrac12”jòŒfrac14”jŒfrac18”jŒfrac34”jŒfrac38”j.Œfrac58”j=Œfrac78”jLŒgt”j[Œhalf”jjŒhorbar”jyŒhyphen”jˆŒiexcl”j—Œiquest”j¦Œlaquo”jµŒlarr”jÄŒlcub”jÓŒldquo”jâŒlowbar”jñŒlpar”jŒlsqb”jŒlsquo”jŒlt”j-Œmicro”j<Œmiddot”jKŒnbsp”jZŒnot”jiŒnum”jxŒohm”j‡Œordf”j–Œordm”j¥Œpara”j´Œpercnt”jÃŒperiod”jÒŒplus”jáŒplusmn”jðŒpound”jÿŒquest”jŒquot”jŒraquo”j,Œrarr”j;Œrcub”jJŒrdquo”jYŒreg”jhŒrpar”jwŒrsqb”j†Œrsquo”j•Œsect”j¤Œsemi”j³Œshy”jÂŒsol”jÑŒsung”jàŒsup1”jïŒsup2”jþŒsup3”j Œtimes”jŒtrade”j+Œuarr”j:Œverbar”jIŒyen”jXuŒrefnames”}”Œrefids”}”Œnameids”}”(j¦ j£ jjjñjîjS jP jž j› uŒ nametypes”}”(j¦ ‰j‰jñˆjS ‰jž ‰uh}”(j£ j]jjpjîjèjP jj› jV uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ9Documentation/driver-api/cxl/linux/access-coordinates.rst”(NNNNt”†”aŒ decoration”Nh²hub.