soc/intel/common/tcss: Configure USB-C ports with attached devices
Inspect all type-C USB ports, check if there is a USB device attached, and if so, send the connection request to the PMC. This allows for any attached USB2/USB3 devices to be used for booting by the payload. Since this functionality is only needed by ChromeOS devices with TCSS running upstream coreboot, introduce a new Kconfig to guard its use. Boards needing it will select it in subsequent commits. TEST=tested with rest of patch train Change-Id: I69522dbcc8cae6bbf41659ae653107d0e031c812 Signed-off-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/72909 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Martin L Roth <gaumless@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
b33778e71f
commit
9c7433ec55
|
@ -9,3 +9,11 @@ config ENABLE_TCSS_DISPLAY_DETECTION
|
|||
depends on SOC_INTEL_COMMON_BLOCK_TCSS && RUN_FSP_GOP
|
||||
help
|
||||
Enable displays to be detected over Type-C ports during boot.
|
||||
|
||||
config ENABLE_TCSS_USB_DETECTION
|
||||
bool "Enable detection of USB boot devices attached to USB Type-C ports with TCSS"
|
||||
depends on SOC_INTEL_COMMON_BLOCK_TCSS
|
||||
help
|
||||
Enable USB-C attached storage devices to be detected at boot.
|
||||
This option is required for some payloads (eg, edk2), without which devices attached
|
||||
to USB-C ports will not be detected and available to boot from.
|
||||
|
|
|
@ -340,6 +340,32 @@ static void tcss_configure_dp_mode(const struct tcss_port_map *port_map, size_t
|
|||
}
|
||||
}
|
||||
|
||||
static void tcss_configure_usb_mode(const struct tcss_port_map *port_map, size_t num_ports)
|
||||
{
|
||||
int ret;
|
||||
size_t i;
|
||||
const struct usbc_ops *ops;
|
||||
struct usbc_mux_info mux_info;
|
||||
const struct tcss_port_map *port_info;
|
||||
|
||||
ops = usbc_get_ops();
|
||||
if (ops == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < num_ports; i++) {
|
||||
ret = ops->mux_ops.get_mux_info(i, &mux_info);
|
||||
if ((ret < 0) || !mux_info.usb || (mux_info.dp && mux_info.hpd_lvl))
|
||||
continue;
|
||||
|
||||
port_info = &port_map[i];
|
||||
ret = send_pmc_connect_request(i, &mux_info, port_info);
|
||||
if (ret) {
|
||||
printk(BIOS_ERR, "Port %zu connect request failed\n", i);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t calc_bias_ctrl_reg_value(gpio_t pad)
|
||||
{
|
||||
unsigned int vw_index, vw_bit;
|
||||
|
@ -429,6 +455,9 @@ void tcss_configure(const struct typec_aux_bias_pads aux_bias_pads[MAX_TYPE_C_PO
|
|||
|
||||
if (CONFIG(ENABLE_TCSS_DISPLAY_DETECTION))
|
||||
tcss_configure_dp_mode(port_map, num_ports);
|
||||
|
||||
if (CONFIG(ENABLE_TCSS_USB_DETECTION))
|
||||
tcss_configure_usb_mode(port_map, num_ports);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue