mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
cxl/acpi: Extract component registers of restricted hosts from RCRB
A downstream port must be connected to a component register block. For restricted hosts the base address is determined from the RCRB. The RCRB is provided by the host's CEDT CHBS entry. Rework CEDT parser to get the RCRB and add code to extract the component register block from it. RCRB's BAR[0..1] point to the component block containing CXL subsystem component registers. MEMBAR extraction follows the PCI base spec here, esp. 64 bit extraction and memory range alignment (6.0, 7.5.1.2.1). The RCRB base address is cached in the cxl_dport per-host bridge so that the upstream port component registers can be retrieved later by an RCD (RCIEP) associated with the host bridge. Note: Right now the component register block is used for HDM decoder capability only which is optional for RCDs. If unsupported by the RCD, the HDM init will fail. It is future work to bypass it in this case. Co-developed-by: Terry Bowman <terry.bowman@amd.com> Signed-off-by: Terry Bowman <terry.bowman@amd.com> Signed-off-by: Robert Richter <rrichter@amd.com> Link: https://lore.kernel.org/r/Y4dsGZ24aJlxSfI1@rric.localdomain [djbw: introduce devm_cxl_add_rch_dport()] Link: https://lore.kernel.org/r/166993044524.1882361.2539922887413208807.stgit@dwillia2-xfh.jf.intel.com Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
committed by
Dan Williams
parent
1dedb6f3cf
commit
d5b1a27143
@@ -696,6 +696,15 @@ static int mock_cxl_port_enumerate_dports(struct cxl_port *port)
|
||||
return 0;
|
||||
}
|
||||
|
||||
resource_size_t mock_cxl_rcrb_to_component(struct device *dev,
|
||||
resource_size_t rcrb,
|
||||
enum cxl_rcrb which)
|
||||
{
|
||||
dev_dbg(dev, "rcrb: %pa which: %d\n", &rcrb, which);
|
||||
|
||||
return (resource_size_t) which + 1;
|
||||
}
|
||||
|
||||
static struct cxl_mock_ops cxl_mock_ops = {
|
||||
.is_mock_adev = is_mock_adev,
|
||||
.is_mock_bridge = is_mock_bridge,
|
||||
@@ -704,6 +713,7 @@ static struct cxl_mock_ops cxl_mock_ops = {
|
||||
.is_mock_dev = is_mock_dev,
|
||||
.acpi_table_parse_cedt = mock_acpi_table_parse_cedt,
|
||||
.acpi_evaluate_integer = mock_acpi_evaluate_integer,
|
||||
.cxl_rcrb_to_component = mock_cxl_rcrb_to_component,
|
||||
.acpi_pci_find_root = mock_acpi_pci_find_root,
|
||||
.devm_cxl_port_enumerate_dports = mock_cxl_port_enumerate_dports,
|
||||
.devm_cxl_setup_hdm = mock_cxl_setup_hdm,
|
||||
|
||||
Reference in New Issue
Block a user