Re: [PATCH v14 25/34] cxl/port: Map Port component registers before switchport init
From: Dave Jiang
Date: Wed Jan 14 2026 - 16:59:14 EST
On 1/14/26 11:20 AM, Terry Bowman wrote:
> Port HDM registers must be mapped before calling
> devm_cxl_switch_port_decoders_setup(). Invoke a call to this function
> in cxl_port_add_dport().
s/Invoke.../Map the per port component registers when the first dport is being enumerated./
>
> Signed-off-by: Terry Bowman <terry.bowman@xxxxxxx>
Reviewed-by: Dave Jiang <dave.jiang@xxxxxxxxx>
> ---
> drivers/cxl/core/port.c | 3 ++-
> drivers/cxl/cxlpci.h | 3 +++
> drivers/cxl/port.c | 5 +++++
> 3 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c
> index 2c4e28e7975c..3f730511f11d 100644
> --- a/drivers/cxl/core/port.c
> +++ b/drivers/cxl/core/port.c
> @@ -778,7 +778,7 @@ static int cxl_setup_comp_regs(struct device *host, struct cxl_register_map *map
> return cxl_setup_regs(map);
> }
>
> -static int cxl_port_setup_regs(struct cxl_port *port,
> +int cxl_port_setup_regs(struct cxl_port *port,
> resource_size_t component_reg_phys)
> {
> if (dev_is_platform(port->uport_dev))
> @@ -786,6 +786,7 @@ static int cxl_port_setup_regs(struct cxl_port *port,
> return cxl_setup_comp_regs(&port->dev, &port->reg_map,
> component_reg_phys);
> }
> +EXPORT_SYMBOL_NS_GPL(cxl_port_setup_regs, "CXL");
>
> static int cxl_dport_setup_regs(struct device *host, struct cxl_dport *dport,
> resource_size_t component_reg_phys)
> diff --git a/drivers/cxl/cxlpci.h b/drivers/cxl/cxlpci.h
> index ef4496b4e55e..532506595d0f 100644
> --- a/drivers/cxl/cxlpci.h
> +++ b/drivers/cxl/cxlpci.h
> @@ -99,4 +99,7 @@ static inline void devm_cxl_port_ras_setup(struct cxl_port *port)
> }
> #endif
>
> +int cxl_port_setup_regs(struct cxl_port *port,
> + resource_size_t component_reg_phys);
> +
> #endif /* __CXL_PCI_H__ */
> diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c
> index d76b4b532064..f8a33dbf8222 100644
> --- a/drivers/cxl/port.c
> +++ b/drivers/cxl/port.c
> @@ -278,6 +278,11 @@ static struct cxl_dport *cxl_port_add_dport(struct cxl_port *port,
> return ERR_CAST(port_group);
>
> if (port->nr_dports == 0) {
> +
> + rc = cxl_port_setup_regs(port, port->component_reg_phys);
> + if (rc)
> + return ERR_PTR(rc);
> +
> rc = devm_cxl_switch_port_decoders_setup(port);
> if (rc)
> return ERR_PTR(rc);