diff --git a/src/drivers/intel/usb4/retimer/chip.h b/src/drivers/intel/usb4/retimer/chip.h index cb01f18e2c..2b60d50a25 100644 --- a/src/drivers/intel/usb4/retimer/chip.h +++ b/src/drivers/intel/usb4/retimer/chip.h @@ -9,6 +9,14 @@ #define DFP_NUM_MAX 2 +enum ec_typec_port { + UNDEFINED = 0, + EC_TYPEC_PORT_0, + EC_TYPEC_PORT_1, + EC_TYPEC_PORT_2, + EC_TYPEC_PORT_3 +}; + struct drivers_intel_usb4_retimer_config { /* Downstream facing port(DFP) */ struct { @@ -16,6 +24,11 @@ struct drivers_intel_usb4_retimer_config { struct acpi_gpio power_gpio; /* Type-C port associated with retimer */ DEVTREE_CONST struct device *typec_port; + /* + * EC Type-C port associated with retimer. This parameter must be configured + * correctly if the CPU Type-C port to EC port mapping is not sequential. + */ + enum ec_typec_port ec_port; } dfp[DFP_NUM_MAX]; }; diff --git a/src/drivers/intel/usb4/retimer/retimer.c b/src/drivers/intel/usb4/retimer/retimer.c index 40dd4c114e..e78cd29e29 100644 --- a/src/drivers/intel/usb4/retimer/retimer.c +++ b/src/drivers/intel/usb4/retimer/retimer.c @@ -400,7 +400,10 @@ static void usb4_retimer_fill_ssdt(const struct device *dev) usb_device = config->dfp[dfp_port].typec_port; usb_port = usb_device->path.usb.port_id; - ec_port = retimer_get_index_for_typec(usb_port); + /* Map to the EC port number if it is explicitly defined in the device tree */ + ec_port = (config->dfp[dfp_port].ec_port) ? + config->dfp[dfp_port].ec_port - EC_TYPEC_PORT_0 : + retimer_get_index_for_typec(usb_port); if (ec_port == -1) { printk(BIOS_ERR, "%s: No relative EC port found for TC port %d\n", __func__, usb_port);