File Index
Files and directories
Sign in
FILE

hb-interleave.rst

File preview with syntax highlighting.

linux-6.19.14/Documentation/driver-api/cxl/linux/example-configurations/hb-interleave.rst RESTRUCTUREDTEXT
  1.. SPDX-License-Identifier: GPL-2.0
  2
  3============================
  4Inter-Host-Bridge Interleave
  5============================
  6This cxl-cli configuration dump shows the following host configuration:
  7
  8* A single socket system with one CXL root
  9* CXL Root has Four (4) CXL Host Bridges
 10* Two CXL Host Bridges have a single CXL Memory Expander Attached
 11* The CXL root is configured to interleave across the two host bridges.
 12
 13This output is generated by :code:`cxl list -v` and describes the relationships
 14between objects exposed in :code:`/sys/bus/cxl/devices/`.
 15
 16::
 17
 18  [
 19    {
 20        "bus":"root0",
 21        "provider":"ACPI.CXL",
 22        "nr_dports":4,
 23        "dports":[
 24            {
 25                "dport":"pci0000:00",
 26                "alias":"ACPI0016:01",
 27                "id":0
 28            },
 29            {
 30                "dport":"pci0000:a8",
 31                "alias":"ACPI0016:02",
 32                "id":4
 33            },
 34            {
 35                "dport":"pci0000:2a",
 36                "alias":"ACPI0016:03",
 37                "id":1
 38            },
 39            {
 40                "dport":"pci0000:d2",
 41                "alias":"ACPI0016:00",
 42                "id":5
 43            }
 44        ],
 45
 46This chunk shows the CXL "bus" (root0) has 4 downstream ports attached to CXL
 47Host Bridges.  The `Root` can be considered the singular upstream port attached
 48to the platform's memory controller - which routes memory requests to it.
 49
 50The `ports:root0` section lays out how each of these downstream ports are
 51configured.  If a port is not configured (id's 0 and 1), they are omitted.
 52
 53::
 54
 55        "ports:root0":[
 56            {
 57                "port":"port1",
 58                "host":"pci0000:d2",
 59                "depth":1,
 60                "nr_dports":3,
 61                "dports":[
 62                    {
 63                        "dport":"0000:d2:01.1",
 64                        "alias":"device:02",
 65                        "id":0
 66                    },
 67                    {
 68                        "dport":"0000:d2:01.3",
 69                        "alias":"device:05",
 70                        "id":2
 71                    },
 72                    {
 73                        "dport":"0000:d2:07.1",
 74                        "alias":"device:0d",
 75                        "id":113
 76                    }
 77                ],
 78
 79This chunk shows the available downstream ports associated with the CXL Host
 80Bridge :code:`port1`.  In this case, :code:`port1` has 3 available downstream
 81ports: :code:`dport1`, :code:`dport2`, and :code:`dport113`..
 82
 83::
 84
 85                "endpoints:port1":[
 86                    {
 87                        "endpoint":"endpoint5",
 88                        "host":"mem0",
 89                        "parent_dport":"0000:d2:01.1",
 90                        "depth":2,
 91                        "memdev":{
 92                            "memdev":"mem0",
 93                            "ram_size":137438953472,
 94                            "serial":0,
 95                            "numa_node":0,
 96                            "host":"0000:d3:00.0"
 97                        },
 98                        "decoders:endpoint5":[
 99                            {
100                                "decoder":"decoder5.0",
101                                "resource":825975898112,
102                                "size":274877906944,
103                                "interleave_ways":2,
104                                "interleave_granularity":256,
105                                "region":"region0",
106                                "dpa_resource":0,
107                                "dpa_size":137438953472,
108                                "mode":"ram"
109                            }
110                        ]
111                    }
112                ],
113
114This chunk shows the endpoints attached to the host bridge :code:`port1`.
115
116:code:`endpoint5` contains a single configured decoder :code:`decoder5.0`
117which has the same interleave configuration as :code:`region0` (shown later).
118
119Next we have the decodesr belonging to the host bridge:
120
121::
122
123                "decoders:port1":[
124                    {
125                        "decoder":"decoder1.0",
126                        "resource":825975898112,
127                        "size":274877906944,
128                        "interleave_ways":1,
129                        "region":"region0",
130                        "nr_targets":1,
131                        "targets":[
132                            {
133                                "target":"0000:d2:01.1",
134                                "alias":"device:02",
135                                "position":0,
136                                "id":0
137                            }
138                        ]
139                    }
140                ]
141            },
142
143Host Bridge :code:`port1` has a single decoder (:code:`decoder1.0`), whose only
144target is :code:`dport1` - which is attached to :code:`endpoint5`.
145
146The following chunk shows a similar configuration for Host Bridge :code:`port3`,
147the second host bridge with a memory device attached.
148
149::
150
151            {
152                "port":"port3",
153                "host":"pci0000:a8",
154                "depth":1,
155                "nr_dports":1,
156                "dports":[
157                    {
158                        "dport":"0000:a8:01.1",
159                        "alias":"device:c3",
160                        "id":0
161                    }
162                ],
163                "endpoints:port3":[
164                    {
165                        "endpoint":"endpoint6",
166                        "host":"mem1",
167                        "parent_dport":"0000:a8:01.1",
168                        "depth":2,
169                        "memdev":{
170                            "memdev":"mem1",
171                            "ram_size":137438953472,
172                            "serial":0,
173                            "numa_node":0,
174                            "host":"0000:a9:00.0"
175                        },
176                        "decoders:endpoint6":[
177                            {
178                                "decoder":"decoder6.0",
179                                "resource":825975898112,
180                                "size":274877906944,
181                                "interleave_ways":2,
182                                "interleave_granularity":256,
183                                "region":"region0",
184                                "dpa_resource":0,
185                                "dpa_size":137438953472,
186                                "mode":"ram"
187                            }
188                        ]
189                    }
190                ],
191                "decoders:port3":[
192                    {
193                        "decoder":"decoder3.0",
194                        "resource":825975898112,
195                        "size":274877906944,
196                        "interleave_ways":1,
197                        "region":"region0",
198                        "nr_targets":1,
199                        "targets":[
200                            {
201                                "target":"0000:a8:01.1",
202                                "alias":"device:c3",
203                                "position":0,
204                                "id":0
205                            }
206                        ]
207                    }
208                ]
209            },
210
211
212The next chunk shows the two CXL host bridges without attached endpoints.
213
214::
215
216            {
217                "port":"port2",
218                "host":"pci0000:00",
219                "depth":1,
220                "nr_dports":2,
221                "dports":[
222                    {
223                        "dport":"0000:00:01.3",
224                        "alias":"device:55",
225                        "id":2
226                    },
227                    {
228                        "dport":"0000:00:07.1",
229                        "alias":"device:5d",
230                        "id":113
231                    }
232                ]
233            },
234            {
235                "port":"port4",
236                "host":"pci0000:2a",
237                "depth":1,
238                "nr_dports":1,
239                "dports":[
240                    {
241                        "dport":"0000:2a:01.1",
242                        "alias":"device:d0",
243                        "id":0
244                    }
245                ]
246            }
247        ],
248
249Next we have the `Root Decoders` belonging to :code:`root0`.  This root decoder
250applies the interleave across the downstream ports :code:`port1` and
251:code:`port3` - with a granularity of 256 bytes.
252
253This information is generated by the CXL driver reading the ACPI CEDT CMFWS.
254
255::
256
257        "decoders:root0":[
258            {
259                "decoder":"decoder0.0",
260                "resource":825975898112,
261                "size":274877906944,
262                "interleave_ways":2,
263                "interleave_granularity":256,
264                "max_available_extent":0,
265                "volatile_capable":true,
266                "nr_targets":2,
267                "targets":[
268                    {
269                        "target":"pci0000:a8",
270                        "alias":"ACPI0016:02",
271                        "position":1,
272                        "id":4
273                    },
274                    {
275                        "target":"pci0000:d2",
276                        "alias":"ACPI0016:00",
277                        "position":0,
278                        "id":5
279                    }
280                ],
281
282Finally we have the `Memory Region` associated with the `Root Decoder`
283:code:`decoder0.0`.  This region describes the overall interleave configuration
284of the interleave set.
285
286::
287
288                "regions:decoder0.0":[
289                    {
290                        "region":"region0",
291                        "resource":825975898112,
292                        "size":274877906944,
293                        "type":"ram",
294                        "interleave_ways":2,
295                        "interleave_granularity":256,
296                        "decode_state":"commit",
297                        "mappings":[
298                            {
299                                "position":1,
300                                "memdev":"mem1",
301                                "decoder":"decoder6.0"
302                            },
303                            {
304                                "position":0,
305                                "memdev":"mem0",
306                                "decoder":"decoder5.0"
307                            }
308                        ]
309                    }
310                ]
311            }
312        ]
313    }
314  ]
~/ Read-only file preview.