3 #define __SIMPLE_DEVICE__
15 #include <soc/pci_devs.h>
16 #include <soc/pcr_ids.h>
20 #define BIAS_CTRL_VW_INDEX_SHIFT 16
21 #define BIAS_CTRL_BIT_POS_SHIFT 8
22 #define WAIT_FOR_DISPLAYPORT_TIMEOUT_MS 1000
23 #define WAIT_FOR_HPD_TIMEOUT_MS 3000
90 res_reg = res->
buf[0];
112 }
while (--tries >= 0);
157 "ufp %d ori_hsl %d ori_sbu %d dbg_acc %d\n",
290 int ret, port_bitmask;
307 for (i = 0; i < num_ports; i++) {
308 if (!(port_bitmask &
BIT(i)))
311 ret =
ops->dp_ops.enter_dp_mode(i);
319 ret =
ops->mux_ops.get_mux_info(i, &mux_info);
323 port_info = &port_map[i];
338 printk(
BIOS_ERR,
"Port C%zd mux set failed with error %d\n", i, ret);
348 unsigned int vw_index, vw_bit;
362 if (pads[i].pad_auxn_dc && pads[i].pad_auxp_dc) {
375 if (pads[i].pad_auxn_dc && pads[i].pad_auxp_dc) {
387 size_t active_ports = 0;
398 unsigned int usb2_port, usb3_port;
403 if (
CONFIG(DRIVERS_INTEL_PMC) &&
405 port_map[active_ports].
usb2_port = usb2_port;
406 port_map[active_ports].
usb3_port = usb3_port;
411 *num_ports = active_ports;
422 if (port_map ==
NULL)
425 for (i = 0; i < num_ports; i++)
432 if (
CONFIG(ENABLE_TCSS_DISPLAY_DETECTION))
#define IOM_CSME_IMR_TBT_STATUS
#define IOM_AUX_BIAS_CTRL_PULLUP_OFFSET(x)
#define IOM_AUX_BIAS_CTRL_PULLDOWN_OFFSET(x)
#define TBT_VALID_AUTHENTICATION
const struct soc_tcss_ops tcss_ops
int display_init_required(void)
void ioe_p2sb_sbi_write(uint8_t pid, uint16_t reg, uint32_t val)
uint32_t ioe_p2sb_sbi_read(uint8_t pid, uint16_t reg)
#define PMC_IPC_USBC_CMD_ID
#define PMC_IPC_TCSS_DISC_REQ_RES
#define TCSS_STATUS_HAS_FAILED(s)
#define PMC_IPC_TCSS_CONN_REQ_RES
#define PMC_IPC_TCSS_SAFE_MODE_REQ_RES
#define TCSS_CONN_STATUS_IS_FATAL(s)
#define PMC_IPC_TCSS_ALTMODE_REQ_RES
#define TCSS_CONN_STATUS_HAS_FAILED(s)
#define GET_TCSS_ALT_FIELD(name, val)
#define TCSS_HPD_FIELD(name, val)
#define PMC_IPC_TCSS_HPD_REQ_RES
#define TCSS_ALT_FIELD(name, val)
#define GET_TCSS_CD_FIELD(name, val)
#define PMC_IPC_CONN_REQ_SIZE
#define TCSS_CD_FIELD(name, val)
#define PMC_IPC_USBC_SUBCMD_ID
#define PMC_IPC_ALT_REQ_SIZE
#define PMC_IPC_HPD_REQ_SIZE
#define PMC_IPC_DISC_REQ_SIZE
#define PMC_IPC_SAFE_REQ_SIZE
#define TCSS_STATUS_IS_FATAL(s)
static uint32_t tcss_make_hpd_mode_cmd(int u, int u3, int hpd_lvl, int hpd_irq)
void tcss_configure(const struct typec_aux_bias_pads aux_bias_pads[MAX_TYPE_C_PORTS])
#define BIAS_CTRL_BIT_POS_SHIFT
static int send_pmc_disconnect_request(int port, const struct tcss_port_map *port_map)
static uint32_t tcss_make_alt_mode_cmd_buf_0(int u, int u3, int m)
static int send_pmc_safe_mode_request(int port, const struct usbc_mux_info *mux_data, const struct tcss_port_map *port_map)
const struct tcss_port_map * tcss_get_port_info(size_t *num_ports)
static int send_pmc_req(int cmd_type, const struct pmc_ipc_buffer *req, struct pmc_ipc_buffer *res, uint32_t size)
#define WAIT_FOR_HPD_TIMEOUT_MS
bool ioe_tcss_valid_tbt_auth(void)
static uint32_t tcss_make_safe_mode_cmd(int u, int u3)
static int send_pmc_dp_mode_request(int port, const struct usbc_mux_info *mux_data, const struct tcss_port_map *port_map)
static uint32_t tcss_make_conn_cmd(int u, int u3, int u2, int ufp, int hsl, int sbu, int acc)
#define BIAS_CTRL_VW_INDEX_SHIFT
static int send_pmc_connect_request(int port, const struct usbc_mux_info *mux_data, const struct tcss_port_map *port_map)
#define WAIT_FOR_DISPLAYPORT_TIMEOUT_MS
static uint32_t tcss_make_alt_mode_cmd_buf_1(int p, int c, int ufp, int dp)
static void tcss_configure_dp_mode(const struct tcss_port_map *port_map, size_t num_ports)
void ioe_tcss_configure_aux_bias_pads_sbi(const struct typec_aux_bias_pads *pads)
static void tcss_init_mux(int port, const struct tcss_port_map *port_map)
void tcss_configure_aux_bias_pads_regbar(const struct typec_aux_bias_pads *pads)
bool tcss_valid_tbt_auth(void)
static int send_pmc_dp_hpd_request(int port, const struct usbc_mux_info *mux_data, const struct tcss_port_map *port_map)
static uint32_t calc_bias_ctrl_reg_value(gpio_t pad)
#define printk(level,...)
DEVTREE_CONST struct bus * pci_root_bus(void)
DEVTREE_CONST struct device * find_dev_nested_path(const struct bus *parent, const struct device_path nested_path[], size_t nested_path_length)
Find the device structure given an array of nested device paths,.
bool is_dev_enabled(const struct device *dev)
bool intel_pmc_mux_conn_get_ports(const struct device *conn, unsigned int *usb2_port, unsigned int *usb3_port)
static struct device_operations ops
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
enum cb_err pmc_send_ipc_cmd(uint32_t cmd, const struct pmc_ipc_buffer *wbuf, struct pmc_ipc_buffer *rbuf)
static uint32_t pmc_make_ipc_cmd(uint32_t cmd, uint32_t subcmd, uint32_t size)
unsigned int gpio_get_pad_cpu_portid(gpio_t pad)
bool gpio_get_vw_info(gpio_t pad, unsigned int *vw_index, unsigned int *vw_bit)
enum device_path_type type
uint32_t buf[PMC_IPC_BUF_COUNT]
void(* configure_aux_bias_pads)(const struct typec_aux_bias_pads *pads)
#define m(clkreg, src_bits, pmcreg, dst_bits)
#define c(value, pmcreg, dst_bits)
const struct usbc_ops * usbc_get_ops(void)