On Tue, Jun 17, 2025 at 06:09:39PM +0530, Neeraj Kumar wrote: > Add cxl_find_root_decoder to find root decoder on cxl bus. It is used to > find root decoder during region creation
Does the existing to_cxl_root_decoder() provide what you need here? > > Signed-off-by: Neeraj Kumar <[email protected]> > --- > drivers/cxl/core/port.c | 26 ++++++++++++++++++++++++++ > drivers/cxl/cxl.h | 1 + > 2 files changed, 27 insertions(+) > > diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c > index 2452f7c15b2d..94d9322b8e38 100644 > --- a/drivers/cxl/core/port.c > +++ b/drivers/cxl/core/port.c > @@ -513,6 +513,32 @@ struct cxl_switch_decoder *to_cxl_switch_decoder(struct > device *dev) > } > EXPORT_SYMBOL_NS_GPL(to_cxl_switch_decoder, "CXL"); > > +static int match_root_decoder(struct device *dev, void *data) > +{ > + return is_root_decoder(dev); > +} > + > +/** > + * cxl_find_root_decoder() - find a cxl root decoder on cxl bus > + * @port: any descendant port in root-cxl-port topology > + */ > +struct cxl_root_decoder *cxl_find_root_decoder(struct cxl_port *port) > +{ > + struct cxl_root *cxl_root __free(put_cxl_root) = find_cxl_root(port); > + struct device *dev; > + > + if (!cxl_root) > + return NULL; > + > + dev = device_find_child(&cxl_root->port.dev, NULL, match_root_decoder); > + > + if (!dev) > + return NULL; > + > + return to_cxl_root_decoder(dev); > +} > +EXPORT_SYMBOL_NS_GPL(cxl_find_root_decoder, "CXL"); > + > static void cxl_ep_release(struct cxl_ep *ep) > { > put_device(ep->ep); > diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h > index 30c80e04cb27..2c6a782d0941 100644 > --- a/drivers/cxl/cxl.h > +++ b/drivers/cxl/cxl.h > @@ -871,6 +871,7 @@ bool is_cxl_nvdimm_bridge(struct device *dev); > int devm_cxl_add_nvdimm(struct cxl_port *parent_port, struct cxl_memdev > *cxlmd); > struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge(struct cxl_port *port); > void cxl_region_discovery(struct cxl_port *port); > +struct cxl_root_decoder *cxl_find_root_decoder(struct cxl_port *port); > > #ifdef CONFIG_CXL_REGION > bool is_cxl_pmem_region(struct device *dev); > -- > 2.34.1 > >

