On 2/12/2025 4:28 PM, Alison Schofield wrote: > On Tue, Feb 11, 2025 at 01:24:34PM -0600, Terry Bowman wrote: >> The CXL mem driver (cxl_mem) currently maps and caches a pointer to RAS >> registers for the endpoint's Root Port. The same needs to be done for >> each of the CXL Downstream Switch Ports and CXL Root Ports found between >> the endpoint and CXL Host Bridge. >> >> Introduce cxl_init_ep_ports_aer() to be called for each CXL Port in the >> sub-topology between the endpoint and the CXL Host Bridge. This function >> will determine if there are CXL Downstream Switch Ports or CXL Root Ports >> associated with this Port. The same check will be added in the future for >> upstream switch ports. >> >> Move the RAS register map logic from cxl_dport_map_ras() into >> cxl_dport_init_ras_reporting(). This eliminates the need for the helper >> function, cxl_dport_map_ras(). >> >> cxl_init_ep_ports_aer() calls cxl_dport_init_ras_reporting() to map >> the RAS registers for CXL Downstream Switch Ports and CXL Root Ports. >> >> cxl_dport_init_ras_reporting() must check for previously mapped registers >> before mapping. This is required because multiple Endpoints under a CXL >> switch may share an upstream CXL Root Port, CXL Downstream Switch Port, >> or CXL Downstream Switch Port. Ensure the RAS registers are only mapped >> once. > snip > >> @@ -788,22 +778,30 @@ static void cxl_disable_rch_root_ints(struct cxl_dport *dport) >> /** >> * cxl_dport_init_ras_reporting - Setup CXL RAS report on this dport >> * @dport: the cxl_dport that needs to be initialized >> - * @host: host device for devm operations >> */ >> -void cxl_dport_init_ras_reporting(struct cxl_dport *dport, struct device *host) >> +void cxl_dport_init_ras_reporting(struct cxl_dport *dport) >> { > With this change an update to cxl-test is needed. > This func was wrapped to make sure no mocked dports are sent to > cxl_dport_init_ras_reporting(). > > 2c402bd2e85b ("cxl/test: Skip cxl_setup_parent_dport() for emulated dports") > > This works for me: > diff --git a/tools/testing/cxl/test/mock.c b/tools/testing/cxl/test/mock.c > index af2594e4f35d..1252165bffba 100644 > --- a/tools/testing/cxl/test/mock.c > +++ b/tools/testing/cxl/test/mock.c > @@ -299,13 +299,13 @@ void __wrap_cxl_endpoint_parse_cdat(struct cxl_port *port) > } > EXPORT_SYMBOL_NS_GPL(__wrap_cxl_endpoint_parse_cdat, "CXL"); > > -void __wrap_cxl_dport_init_ras_reporting(struct cxl_dport *dport, struct device *host) > +void __wrap_cxl_dport_init_ras_reporting(struct cxl_dport *dport) > { > int index; > struct cxl_mock_ops *ops = get_cxl_mock_ops(&index); > > if (!ops || !ops->is_mock_port(dport->dport_dev)) > - cxl_dport_init_ras_reporting(dport, host); > + cxl_dport_init_ras_reporting(dport); > > put_cxl_mock_ops(index); > } > > > > snip to end Thanks. I'll add this to the patchset. Terry