]> git.proxmox.com Git - mirror_qemu.git/commit - hw/meson.build
hw/cxl/component: Introduce CXL components (8.1.x, 8.2.5)
authorBen Widawsky <ben.widawsky@intel.com>
Fri, 29 Apr 2022 14:40:27 +0000 (15:40 +0100)
committerMichael S. Tsirkin <mst@redhat.com>
Fri, 13 May 2022 10:13:35 +0000 (06:13 -0400)
commit9e58f52d3f809712762bef735a02290fd4436b0c
tree5218ef25aee064342e048caecc87a2681b89c275
parentcf04aba2a9d276336c45d2434f94458838a01034
hw/cxl/component: Introduce CXL components (8.1.x, 8.2.5)

A CXL 2.0 component is any entity in the CXL topology. All components
have a analogous function in PCIe. Except for the CXL host bridge, all
have a PCIe config space that is accessible via the common PCIe
mechanisms. CXL components are enumerated via DVSEC fields in the
extended PCIe header space. CXL components will minimally implement some
subset of CXL.mem and CXL.cache registers defined in 8.2.5 of the CXL
2.0 specification. Two headers and a utility library are introduced to
support the minimum functionality needed to enumerate components.

The cxl_pci header manages bits associated with PCI, specifically the
DVSEC and related fields. The cxl_component.h variant has data
structures and APIs that are useful for drivers implementing any of the
CXL 2.0 components. The library takes care of making use of the DVSEC
bits and the CXL.[mem|cache] registers. Per spec, the registers are
little endian.

None of the mechanisms required to enumerate a CXL capable hostbridge
are introduced at this point.

Note that the CXL.mem and CXL.cache registers used are always 4B wide.
It's possible in the future that this constraint will not hold.

Signed-off-by: Ben Widawsky <ben.widawsky@intel.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Adam Manzanares <a.manzanares@samsung.com>
Message-Id: <20220429144110.25167-3-Jonathan.Cameron@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/Kconfig
hw/cxl/Kconfig [new file with mode: 0644]
hw/cxl/cxl-component-utils.c [new file with mode: 0644]
hw/cxl/meson.build [new file with mode: 0644]
hw/meson.build
include/hw/cxl/cxl.h [new file with mode: 0644]
include/hw/cxl/cxl_component.h [new file with mode: 0644]
include/hw/cxl/cxl_pci.h [new file with mode: 0644]