mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 19:43:43 -04:00
cxl: docs/linux/cxl-driver - add example configurations
Add 4 example configurations: - single device - cross-host-bridge interleave - intra-host-bridge-interleave - multi-level interleave Signed-off-by: Gregory Price <gourry@gourry.net> Link: https://patch.msgid.link/20250512162134.3596150-11-gourry@gourry.net Signed-off-by: Dave Jiang <dave.jiang@intel.com>
This commit is contained in:
committed by
Dave Jiang
parent
2e2865a1d0
commit
ef3a43a691
@@ -0,0 +1,246 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
=============
|
||||
Single Device
|
||||
=============
|
||||
This cxl-cli configuration dump shows the following host configuration:
|
||||
|
||||
* A single socket system with one CXL root
|
||||
* CXL Root has Four (4) CXL Host Bridges
|
||||
* One CXL Host Bridges has a single CXL Memory Expander Attached
|
||||
* No interleave is present.
|
||||
|
||||
This output is generated by :code:`cxl list -v` and describes the relationships
|
||||
between objects exposed in :code:`/sys/bus/cxl/devices/`.
|
||||
|
||||
::
|
||||
|
||||
[
|
||||
{
|
||||
"bus":"root0",
|
||||
"provider":"ACPI.CXL",
|
||||
"nr_dports":4,
|
||||
"dports":[
|
||||
{
|
||||
"dport":"pci0000:00",
|
||||
"alias":"ACPI0016:01",
|
||||
"id":0
|
||||
},
|
||||
{
|
||||
"dport":"pci0000:a8",
|
||||
"alias":"ACPI0016:02",
|
||||
"id":4
|
||||
},
|
||||
{
|
||||
"dport":"pci0000:2a",
|
||||
"alias":"ACPI0016:03",
|
||||
"id":1
|
||||
},
|
||||
{
|
||||
"dport":"pci0000:d2",
|
||||
"alias":"ACPI0016:00",
|
||||
"id":5
|
||||
}
|
||||
],
|
||||
|
||||
This chunk shows the CXL "bus" (root0) has 4 downstream ports attached to CXL
|
||||
Host Bridges. The `Root` can be considered the singular upstream port attached
|
||||
to the platform's memory controller - which routes memory requests to it.
|
||||
|
||||
The `ports:root0` section lays out how each of these downstream ports are
|
||||
configured. If a port is not configured (id's 0, 1, and 4), they are omitted.
|
||||
|
||||
::
|
||||
|
||||
"ports:root0":[
|
||||
{
|
||||
"port":"port1",
|
||||
"host":"pci0000:d2",
|
||||
"depth":1,
|
||||
"nr_dports":3,
|
||||
"dports":[
|
||||
{
|
||||
"dport":"0000:d2:01.1",
|
||||
"alias":"device:02",
|
||||
"id":0
|
||||
},
|
||||
{
|
||||
"dport":"0000:d2:01.3",
|
||||
"alias":"device:05",
|
||||
"id":2
|
||||
},
|
||||
{
|
||||
"dport":"0000:d2:07.1",
|
||||
"alias":"device:0d",
|
||||
"id":113
|
||||
}
|
||||
],
|
||||
|
||||
This chunk shows the available downstream ports associated with the CXL Host
|
||||
Bridge :code:`port1`. In this case, :code:`port1` has 3 available downstream
|
||||
ports: :code:`dport1`, :code:`dport2`, and :code:`dport113`..
|
||||
|
||||
::
|
||||
|
||||
"endpoints:port1":[
|
||||
{
|
||||
"endpoint":"endpoint5",
|
||||
"host":"mem0",
|
||||
"parent_dport":"0000:d2:01.1",
|
||||
"depth":2,
|
||||
"memdev":{
|
||||
"memdev":"mem0",
|
||||
"ram_size":137438953472,
|
||||
"serial":0,
|
||||
"numa_node":0,
|
||||
"host":"0000:d3:00.0"
|
||||
},
|
||||
"decoders:endpoint5":[
|
||||
{
|
||||
"decoder":"decoder5.0",
|
||||
"resource":825975898112,
|
||||
"size":137438953472,
|
||||
"interleave_ways":1,
|
||||
"region":"region0",
|
||||
"dpa_resource":0,
|
||||
"dpa_size":137438953472,
|
||||
"mode":"ram"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
This chunk shows the endpoints attached to the host bridge :code:`port1`.
|
||||
|
||||
:code:`endpoint5` contains a single configured decoder :code:`decoder5.0`
|
||||
which has the same interleave configuration as :code:`region0` (shown later).
|
||||
|
||||
Next we have the decoders belonging to the host bridge:
|
||||
|
||||
::
|
||||
|
||||
"decoders:port1":[
|
||||
{
|
||||
"decoder":"decoder1.0",
|
||||
"resource":825975898112,
|
||||
"size":137438953472,
|
||||
"interleave_ways":1,
|
||||
"region":"region0",
|
||||
"nr_targets":1,
|
||||
"targets":[
|
||||
{
|
||||
"target":"0000:d2:01.1",
|
||||
"alias":"device:02",
|
||||
"position":0,
|
||||
"id":0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Host Bridge :code:`port1` has a single decoder (:code:`decoder1.0`), whose only
|
||||
target is :code:`dport1` - which is attached to :code:`endpoint5`.
|
||||
|
||||
The next chunk shows the three CXL host bridges without attached endpoints.
|
||||
|
||||
::
|
||||
|
||||
{
|
||||
"port":"port2",
|
||||
"host":"pci0000:00",
|
||||
"depth":1,
|
||||
"nr_dports":2,
|
||||
"dports":[
|
||||
{
|
||||
"dport":"0000:00:01.3",
|
||||
"alias":"device:55",
|
||||
"id":2
|
||||
},
|
||||
{
|
||||
"dport":"0000:00:07.1",
|
||||
"alias":"device:5d",
|
||||
"id":113
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"port":"port3",
|
||||
"host":"pci0000:a8",
|
||||
"depth":1,
|
||||
"nr_dports":1,
|
||||
"dports":[
|
||||
{
|
||||
"dport":"0000:a8:01.1",
|
||||
"alias":"device:c3",
|
||||
"id":0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"port":"port4",
|
||||
"host":"pci0000:2a",
|
||||
"depth":1,
|
||||
"nr_dports":1,
|
||||
"dports":[
|
||||
{
|
||||
"dport":"0000:2a:01.1",
|
||||
"alias":"device:d0",
|
||||
"id":0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Next we have the `Root Decoders` belonging to :code:`root0`. This root decoder
|
||||
is a pass-through decoder because :code:`interleave_ways` is set to :code:`1`.
|
||||
|
||||
This information is generated by the CXL driver reading the ACPI CEDT CMFWS.
|
||||
|
||||
::
|
||||
|
||||
"decoders:root0":[
|
||||
{
|
||||
"decoder":"decoder0.0",
|
||||
"resource":825975898112,
|
||||
"size":137438953472,
|
||||
"interleave_ways":1,
|
||||
"max_available_extent":0,
|
||||
"volatile_capable":true,
|
||||
"nr_targets":1,
|
||||
"targets":[
|
||||
{
|
||||
"target":"pci0000:d2",
|
||||
"alias":"ACPI0016:00",
|
||||
"position":0,
|
||||
"id":5
|
||||
}
|
||||
],
|
||||
|
||||
Finally we have the `Memory Region` associated with the `Root Decoder`
|
||||
:code:`decoder0.0`. This region describes the discrete region associated
|
||||
with the lone device.
|
||||
|
||||
::
|
||||
|
||||
"regions:decoder0.0":[
|
||||
{
|
||||
"region":"region0",
|
||||
"resource":825975898112,
|
||||
"size":137438953472,
|
||||
"type":"ram",
|
||||
"interleave_ways":1,
|
||||
"decode_state":"commit",
|
||||
"mappings":[
|
||||
{
|
||||
"position":0,
|
||||
"memdev":"mem0",
|
||||
"decoder":"decoder5.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user