coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
tcss.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #define __SIMPLE_DEVICE__
4 
5 #include <bootmode.h>
6 #include <console/console.h>
7 #include <device/pci.h>
8 #include <intelblocks/p2sb.h>
9 #include <intelblocks/pcr.h>
10 #include <intelblocks/pmc_ipc.h>
12 #include <intelblocks/tcss.h>
13 #include <inttypes.h>
15 #include <soc/pci_devs.h>
16 #include <soc/pcr_ids.h>
17 #include <soc/tcss.h>
19 
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
24 
25 static uint32_t tcss_make_conn_cmd(int u, int u3, int u2, int ufp, int hsl,
26  int sbu, int acc)
27 {
28  return TCSS_CD_FIELD(USAGE, u) |
29  TCSS_CD_FIELD(USB3, u3) |
30  TCSS_CD_FIELD(USB2, u2) |
31  TCSS_CD_FIELD(UFP, ufp) |
32  TCSS_CD_FIELD(HSL, hsl) |
33  TCSS_CD_FIELD(SBU, sbu) |
34  TCSS_CD_FIELD(ACC, acc);
35 }
36 
37 static uint32_t tcss_make_alt_mode_cmd_buf_0(int u, int u3, int m)
38 {
39  return TCSS_ALT_FIELD(USAGE, u) |
40  TCSS_ALT_FIELD(USB3, u3) |
42 
43 }
44 
45 static uint32_t tcss_make_alt_mode_cmd_buf_1(int p, int c, int ufp, int dp)
46 {
47  return TCSS_ALT_FIELD(POLARITY, p) |
48  TCSS_ALT_FIELD(CABLE, c) |
49  TCSS_ALT_FIELD(UFP, ufp) |
50  TCSS_ALT_FIELD(DP_MODE, dp);
51 }
52 
53 static uint32_t tcss_make_safe_mode_cmd(int u, int u3)
54 {
55  return TCSS_CD_FIELD(USAGE, u) |
56  TCSS_CD_FIELD(USB3, u3);
57 }
58 
59 
60 static uint32_t tcss_make_hpd_mode_cmd(int u, int u3, int hpd_lvl, int hpd_irq)
61 {
62  return TCSS_HPD_FIELD(USAGE, u) |
63  TCSS_HPD_FIELD(USB3, u3) |
64  TCSS_HPD_FIELD(LVL, hpd_lvl) |
65  TCSS_HPD_FIELD(IRQ, hpd_irq);
66 
67 }
68 
69 static int send_pmc_req(int cmd_type, const struct pmc_ipc_buffer *req,
70  struct pmc_ipc_buffer *res, uint32_t size)
71 {
72  uint32_t cmd_reg;
73  uint32_t res_reg;
74  int tries = 2;
75  int r;
76 
78  size);
79 
80  printk(BIOS_DEBUG, "Raw Buffer output 0 %08" PRIx32 "\n", req->buf[0]);
81  printk(BIOS_DEBUG, "Raw Buffer output 1 %08" PRIx32 "\n", req->buf[1]);
82 
83  do {
84  r = pmc_send_ipc_cmd(cmd_reg, req, res);
85  if (r < 0) {
86  printk(BIOS_ERR, "pmc_send_ipc_cmd failed\n");
87  return -1;
88  }
89 
90  res_reg = res->buf[0];
91  if (cmd_type == CONNECT_REQ) {
92  if (!TCSS_CONN_STATUS_HAS_FAILED(res_reg)) {
93  printk(BIOS_DEBUG, "pmc_send_ipc_cmd succeeded\n");
94  return 0;
95  }
96 
97  if (TCSS_CONN_STATUS_IS_FATAL(res_reg)) {
98  printk(BIOS_ERR, "pmc_send_ipc_cmd status: fatal\n");
99  return -1;
100  }
101  } else {
102  if (!TCSS_STATUS_HAS_FAILED(res_reg)) {
103  printk(BIOS_DEBUG, "pmc_send_ipc_cmd succeeded\n");
104  return 0;
105  }
106 
107  if (TCSS_STATUS_IS_FATAL(res_reg)) {
108  printk(BIOS_ERR, "pmc_send_ipc_cmd status: fatal\n");
109  return -1;
110  }
111  }
112  } while (--tries >= 0);
113 
114  printk(BIOS_ERR, "pmc_send_ipc_cmd failed after retries\n");
115  return -1;
116 }
117 
118 static int send_pmc_disconnect_request(int port, const struct tcss_port_map *port_map)
119 {
120  uint32_t cmd;
121  struct pmc_ipc_buffer req = { 0 };
122  struct pmc_ipc_buffer rsp;
123 
125  port_map->usb2_port, 0, 0, 0, 0);
126 
127  req.buf[0] = cmd;
128 
129  printk(BIOS_DEBUG, "port C%d DISC req: usage %d usb3 %d usb2 %d\n",
130  port,
131  GET_TCSS_CD_FIELD(USAGE, cmd),
132  GET_TCSS_CD_FIELD(USB3, cmd),
133  GET_TCSS_CD_FIELD(USB2, cmd));
134 
135  return send_pmc_req(CONNECT_REQ, &req, &rsp, PMC_IPC_DISC_REQ_SIZE);
136 }
137 
138 static int send_pmc_connect_request(int port, const struct usbc_mux_info *mux_data,
139  const struct tcss_port_map *port_map)
140 {
141  uint32_t cmd;
142  struct pmc_ipc_buffer req = { 0 };
143  struct pmc_ipc_buffer rsp;
144 
145  cmd = tcss_make_conn_cmd(
147  port_map->usb3_port,
148  port_map->usb2_port,
149  mux_data->ufp,
150  mux_data->polarity,
151  mux_data->polarity,
152  mux_data->dbg_acc);
153 
154  req.buf[0] = cmd;
155 
156  printk(BIOS_DEBUG, "port C%d CONN req: usage %d usb3 %d usb2 %d "
157  "ufp %d ori_hsl %d ori_sbu %d dbg_acc %d\n",
158  port,
159  GET_TCSS_CD_FIELD(USAGE, cmd),
160  GET_TCSS_CD_FIELD(USB3, cmd),
161  GET_TCSS_CD_FIELD(USB2, cmd),
162  GET_TCSS_CD_FIELD(UFP, cmd),
163  GET_TCSS_CD_FIELD(HSL, cmd),
164  GET_TCSS_CD_FIELD(SBU, cmd),
165  GET_TCSS_CD_FIELD(ACC, cmd));
166 
167  return send_pmc_req(CONNECT_REQ, &req, &rsp, PMC_IPC_CONN_REQ_SIZE);
168 }
169 
170 static int send_pmc_safe_mode_request(int port, const struct usbc_mux_info *mux_data,
171  const struct tcss_port_map *port_map)
172 {
173  uint32_t cmd;
174  struct pmc_ipc_buffer req = { 0 };
175  struct pmc_ipc_buffer rsp;
176 
178 
179  req.buf[0] = cmd;
180 
181  printk(BIOS_DEBUG, "port C%d SAFE req: usage %d usb3 %d\n",
182  port,
183  GET_TCSS_CD_FIELD(USAGE, cmd),
184  GET_TCSS_CD_FIELD(USB3, cmd));
185 
186  return send_pmc_req(SAFE_REQ, &req, &rsp, PMC_IPC_SAFE_REQ_SIZE);
187 }
188 
189 static int send_pmc_dp_hpd_request(int port, const struct usbc_mux_info *mux_data,
190  const struct tcss_port_map *port_map)
191 {
192  struct pmc_ipc_buffer req = { 0 };
193  struct pmc_ipc_buffer rsp;
194  uint32_t cmd;
195 
198  port_map->usb3_port,
199  mux_data->hpd_lvl,
200  mux_data->hpd_irq);
201 
202  req.buf[0] = cmd;
203 
204  return send_pmc_req(HPD_REQ, &req, &rsp, PMC_IPC_HPD_REQ_SIZE);
205 
206 }
207 
208 static int send_pmc_dp_mode_request(int port, const struct usbc_mux_info *mux_data,
209  const struct tcss_port_map *port_map)
210 {
211  uint32_t cmd;
212  uint8_t dp_mode;
213  int ret;
214 
215  struct pmc_ipc_buffer req = { 0 };
216  struct pmc_ipc_buffer rsp;
217 
220  port_map->usb3_port,
222 
223  req.buf[0] = cmd;
224 
225  printk(BIOS_DEBUG, "port C%d ALT_1 req: usage %d usb3 %d dp_mode %d\n",
226  port,
227  GET_TCSS_ALT_FIELD(USAGE, cmd),
228  GET_TCSS_ALT_FIELD(USB3, cmd),
229  GET_TCSS_ALT_FIELD(MODE, cmd));
230 
231  switch (mux_data->dp_pin_mode) {
232  case MODE_DP_PIN_A:
233  dp_mode = 1;
234  break;
235  case MODE_DP_PIN_B:
236  dp_mode = 2;
237  break;
238  case MODE_DP_PIN_C:
239  dp_mode = 3;
240  break;
241  case MODE_DP_PIN_D:
242  dp_mode = 4;
243  break;
244  case MODE_DP_PIN_E:
245  dp_mode = 5;
246  break;
247  case MODE_DP_PIN_F:
248  dp_mode = 6;
249  break;
250  default:
251  dp_mode = 0;
252  break;
253  }
254 
256  mux_data->polarity,
257  mux_data->cable,
258  0, /* ufp is not supported in DP ALT Mode request */
259  dp_mode);
260 
261  printk(BIOS_DEBUG, "port C%d ALT_2 req: polarity %d cable %d ufp %d "
262  "dp_mode %d\n",
263  port,
264  GET_TCSS_ALT_FIELD(POLARITY, cmd),
265  GET_TCSS_ALT_FIELD(CABLE, cmd),
266  GET_TCSS_ALT_FIELD(UFP, cmd),
267  GET_TCSS_ALT_FIELD(DP_MODE, cmd));
268 
269  req.buf[1] = cmd;
270 
271  ret = send_pmc_req(DP_REQ, &req, &rsp, PMC_IPC_ALT_REQ_SIZE);
272  if (ret)
273  return ret;
274 
275  send_pmc_dp_hpd_request(port, mux_data, port_map);
276  return 0;
277 }
278 
279 static void tcss_init_mux(int port, const struct tcss_port_map *port_map)
280 {
281  int ret;
282 
283  ret = send_pmc_disconnect_request(port, port_map);
284  if (ret)
285  printk(BIOS_ERR, "Failed to setup port:%d to initial state\n", port);
286 }
287 
288 static void tcss_configure_dp_mode(const struct tcss_port_map *port_map, size_t num_ports)
289 {
290  int ret, port_bitmask;
291  size_t i;
292  const struct usbc_ops *ops;
293  struct usbc_mux_info mux_info;
294  const struct tcss_port_map *port_info;
295 
296  if (!display_init_required())
297  return;
298 
299  ops = usbc_get_ops();
300  if (ops == NULL)
301  return;
302 
303  port_bitmask = ops->dp_ops.wait_for_connection(WAIT_FOR_DISPLAYPORT_TIMEOUT_MS);
304  if (!port_bitmask) /* No DP device is connected */
305  return;
306 
307  for (i = 0; i < num_ports; i++) {
308  if (!(port_bitmask & BIT(i)))
309  continue;
310 
311  ret = ops->dp_ops.enter_dp_mode(i);
312  if (ret < 0)
313  continue;
314 
315  ret = ops->dp_ops.wait_for_hpd(i, WAIT_FOR_HPD_TIMEOUT_MS);
316  if (ret < 0)
317  continue;
318 
319  ret = ops->mux_ops.get_mux_info(i, &mux_info);
320  if (ret < 0)
321  continue;
322 
323  port_info = &port_map[i];
324 
325  ret = send_pmc_connect_request(i, &mux_info, port_info);
326  if (ret) {
327  printk(BIOS_ERR, "Port %zd connect request failed\n", i);
328  continue;
329  }
330  ret = send_pmc_safe_mode_request(i, &mux_info, port_info);
331  if (ret) {
332  printk(BIOS_ERR, "Port %zd safe mode request failed\n", i);
333  continue;
334  }
335 
336  ret = send_pmc_dp_mode_request(i, &mux_info, port_info);
337  if (ret) {
338  printk(BIOS_ERR, "Port C%zd mux set failed with error %d\n", i, ret);
339  } else {
340  printk(BIOS_INFO, "Port C%zd is configured to DP mode!\n", i);
341  return;
342  }
343  }
344 }
345 
347 {
348  unsigned int vw_index, vw_bit;
349  const unsigned int cpu_pid = gpio_get_pad_cpu_portid(pad);
350  if (!gpio_get_vw_info(pad, &vw_index, &vw_bit) || !cpu_pid)
351  return 0;
352 
353  return vw_index << BIAS_CTRL_VW_INDEX_SHIFT |
354  vw_bit << BIAS_CTRL_BIT_POS_SHIFT |
355  cpu_pid;
356 }
357 
359  const struct typec_aux_bias_pads *pads)
360 {
361  for (size_t i = 0; i < MAX_TYPE_C_PORTS; i++) {
362  if (pads[i].pad_auxn_dc && pads[i].pad_auxp_dc) {
364  calc_bias_ctrl_reg_value(pads[i].pad_auxp_dc);
366  calc_bias_ctrl_reg_value(pads[i].pad_auxn_dc);
367  }
368  }
369 }
370 
372  const struct typec_aux_bias_pads *pads)
373 {
374  for (size_t i = 0; i < MAX_TYPE_C_PORTS; i++) {
375  if (pads[i].pad_auxn_dc && pads[i].pad_auxp_dc) {
377  calc_bias_ctrl_reg_value(pads[i].pad_auxp_dc));
379  calc_bias_ctrl_reg_value(pads[i].pad_auxn_dc));
380  }
381  }
382 }
383 
384 const struct tcss_port_map *tcss_get_port_info(size_t *num_ports)
385 {
386  static struct tcss_port_map port_map[MAX_TYPE_C_PORTS];
387  size_t active_ports = 0;
388  size_t port;
389 
390  for (port = 0; port < MAX_TYPE_C_PORTS; port++) {
391  const struct device_path conn_path[] = {
392  {.type = DEVICE_PATH_PCI, .pci.devfn = PCH_DEVFN_PMC},
393  {.type = DEVICE_PATH_GENERIC, .generic.id = 0, .generic.subid = 0},
394  {.type = DEVICE_PATH_GENERIC, .generic.id = port},
395  };
396  const struct device *conn = find_dev_nested_path(pci_root_bus(), conn_path,
397  ARRAY_SIZE(conn_path));
398  unsigned int usb2_port, usb3_port;
399 
400  if (!is_dev_enabled(conn))
401  continue;
402 
403  if (CONFIG(DRIVERS_INTEL_PMC) &&
404  intel_pmc_mux_conn_get_ports(conn, &usb2_port, &usb3_port)) {
405  port_map[active_ports].usb2_port = usb2_port;
406  port_map[active_ports].usb3_port = usb3_port;
407  ++active_ports;
408  }
409  }
410 
411  *num_ports = active_ports;
412  return port_map;
413 }
414 
415 void tcss_configure(const struct typec_aux_bias_pads aux_bias_pads[MAX_TYPE_C_PORTS])
416 {
417  const struct tcss_port_map *port_map;
418  size_t num_ports;
419  size_t i;
420 
421  port_map = tcss_get_port_info(&num_ports);
422  if (port_map == NULL)
423  return;
424 
425  for (i = 0; i < num_ports; i++)
426  tcss_init_mux(i, &port_map[i]);
427 
428  /* This should be performed before alternate modes are entered */
430  tcss_ops.configure_aux_bias_pads(aux_bias_pads);
431 
432  if (CONFIG(ENABLE_TCSS_DISPLAY_DETECTION))
433  tcss_configure_dp_mode(port_map, num_ports);
434 }
435 
437 {
439 }
440 
442 {
444 }
#define PID_IOM
Definition: pcr_ids.h:31
#define IOM_CSME_IMR_TBT_STATUS
Definition: tcss.h:7
#define IOM_AUX_BIAS_CTRL_PULLUP_OFFSET(x)
Definition: tcss.h:12
#define IOM_AUX_BIAS_CTRL_PULLDOWN_OFFSET(x)
Definition: tcss.h:14
#define TBT_VALID_AUTHENTICATION
Definition: tcss.h:8
const struct soc_tcss_ops tcss_ops
Definition: tcss.c:5
int display_init_required(void)
Definition: bootmode.c:22
#define ARRAY_SIZE(a)
Definition: helpers.h:12
void ioe_p2sb_sbi_write(uint8_t pid, uint16_t reg, uint32_t val)
Definition: ioe_p2sb.c:19
uint32_t ioe_p2sb_sbi_read(uint8_t pid, uint16_t reg)
Definition: ioe_p2sb.c:14
#define REGBAR32(pid, x)
Definition: systemagent.h:30
#define PMC_IPC_USBC_CMD_ID
Definition: tcss.h:10
#define PMC_IPC_TCSS_DISC_REQ_RES
Definition: tcss.h:14
@ MAX_TYPE_C_PORTS
Definition: tcss.h:77
#define TCSS_STATUS_HAS_FAILED(s)
Definition: tcss.h:97
#define PMC_IPC_TCSS_CONN_REQ_RES
Definition: tcss.h:13
#define PMC_IPC_TCSS_SAFE_MODE_REQ_RES
Definition: tcss.h:15
#define TCSS_CONN_STATUS_IS_FATAL(s)
Definition: tcss.h:99
#define PMC_IPC_TCSS_ALTMODE_REQ_RES
Definition: tcss.h:16
#define TCSS_CONN_STATUS_HAS_FAILED(s)
Definition: tcss.h:96
#define GET_TCSS_ALT_FIELD(name, val)
Definition: tcss.h:93
#define PMC_IPC_DP_MODE
Definition: tcss.h:23
#define TCSS_HPD_FIELD(name, val)
Definition: tcss.h:90
#define PMC_IPC_TCSS_HPD_REQ_RES
Definition: tcss.h:17
#define TCSS_ALT_FIELD(name, val)
Definition: tcss.h:87
#define GET_TCSS_CD_FIELD(name, val)
Definition: tcss.h:83
#define PMC_IPC_CONN_REQ_SIZE
Definition: tcss.h:18
#define TCSS_CD_FIELD(name, val)
Definition: tcss.h:80
@ CONNECT_REQ
Definition: tcss.h:116
@ SAFE_REQ
Definition: tcss.h:117
@ DP_REQ
Definition: tcss.h:118
@ HPD_REQ
Definition: tcss.h:119
#define PMC_IPC_USBC_SUBCMD_ID
Definition: tcss.h:11
#define PMC_IPC_ALT_REQ_SIZE
Definition: tcss.h:20
#define PMC_IPC_HPD_REQ_SIZE
Definition: tcss.h:22
#define PMC_IPC_DISC_REQ_SIZE
Definition: tcss.h:19
#define PMC_IPC_SAFE_REQ_SIZE
Definition: tcss.h:21
#define TCSS_STATUS_IS_FATAL(s)
Definition: tcss.h:100
static uint32_t tcss_make_hpd_mode_cmd(int u, int u3, int hpd_lvl, int hpd_irq)
Definition: tcss.c:60
void tcss_configure(const struct typec_aux_bias_pads aux_bias_pads[MAX_TYPE_C_PORTS])
Definition: tcss.c:415
#define BIAS_CTRL_BIT_POS_SHIFT
Definition: tcss.c:21
static int send_pmc_disconnect_request(int port, const struct tcss_port_map *port_map)
Definition: tcss.c:118
static uint32_t tcss_make_alt_mode_cmd_buf_0(int u, int u3, int m)
Definition: tcss.c:37
static int send_pmc_safe_mode_request(int port, const struct usbc_mux_info *mux_data, const struct tcss_port_map *port_map)
Definition: tcss.c:170
const struct tcss_port_map * tcss_get_port_info(size_t *num_ports)
Definition: tcss.c:384
static int send_pmc_req(int cmd_type, const struct pmc_ipc_buffer *req, struct pmc_ipc_buffer *res, uint32_t size)
Definition: tcss.c:69
#define WAIT_FOR_HPD_TIMEOUT_MS
Definition: tcss.c:23
bool ioe_tcss_valid_tbt_auth(void)
Definition: tcss.c:441
static uint32_t tcss_make_safe_mode_cmd(int u, int u3)
Definition: tcss.c:53
static int send_pmc_dp_mode_request(int port, const struct usbc_mux_info *mux_data, const struct tcss_port_map *port_map)
Definition: tcss.c:208
static uint32_t tcss_make_conn_cmd(int u, int u3, int u2, int ufp, int hsl, int sbu, int acc)
Definition: tcss.c:25
#define BIAS_CTRL_VW_INDEX_SHIFT
Definition: tcss.c:20
static int send_pmc_connect_request(int port, const struct usbc_mux_info *mux_data, const struct tcss_port_map *port_map)
Definition: tcss.c:138
#define WAIT_FOR_DISPLAYPORT_TIMEOUT_MS
Definition: tcss.c:22
static uint32_t tcss_make_alt_mode_cmd_buf_1(int p, int c, int ufp, int dp)
Definition: tcss.c:45
static void tcss_configure_dp_mode(const struct tcss_port_map *port_map, size_t num_ports)
Definition: tcss.c:288
void ioe_tcss_configure_aux_bias_pads_sbi(const struct typec_aux_bias_pads *pads)
Definition: tcss.c:371
static void tcss_init_mux(int port, const struct tcss_port_map *port_map)
Definition: tcss.c:279
void tcss_configure_aux_bias_pads_regbar(const struct typec_aux_bias_pads *pads)
Definition: tcss.c:358
bool tcss_valid_tbt_auth(void)
Definition: tcss.c:436
static int send_pmc_dp_hpd_request(int port, const struct usbc_mux_info *mux_data, const struct tcss_port_map *port_map)
Definition: tcss.c:189
static uint32_t calc_bias_ctrl_reg_value(gpio_t pad)
Definition: tcss.c:346
#define printk(level,...)
Definition: stdlib.h:16
DEVTREE_CONST struct bus * pci_root_bus(void)
Definition: device_const.c:239
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,.
Definition: device_const.c:193
bool is_dev_enabled(const struct device *dev)
Definition: device_const.c:369
bool intel_pmc_mux_conn_get_ports(const struct device *conn, unsigned int *usb2_port, unsigned int *usb3_port)
Definition: conn.c:160
@ CONFIG
Definition: dsi_common.h:201
@ MODE
Definition: dsi_common.h:115
#define MODE_DP_PIN_B
Definition: ec_commands.h:6739
#define MODE_DP_PIN_C
Definition: ec_commands.h:6740
#define MODE_DP_PIN_F
Definition: ec_commands.h:6743
#define BIT(nr)
Definition: ec_commands.h:45
#define MODE_DP_PIN_D
Definition: ec_commands.h:6741
#define MODE_DP_PIN_E
Definition: ec_commands.h:6742
#define MODE_DP_PIN_A
Definition: ec_commands.h:6738
port
Definition: i915.h:29
#define PRIx32
Definition: inttypes.h:29
static struct device_operations ops
Definition: ipmi_kcs_ops.c:416
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
@ DEVICE_PATH_PCI
Definition: path.h:9
@ DEVICE_PATH_GENERIC
Definition: path.h:18
enum cb_err pmc_send_ipc_cmd(uint32_t cmd, const struct pmc_ipc_buffer *wbuf, struct pmc_ipc_buffer *rbuf)
Definition: pmc_ipc.c:81
static uint32_t pmc_make_ipc_cmd(uint32_t cmd, uint32_t subcmd, uint32_t size)
Definition: pmc_ipc.h:56
#define PCH_DEVFN_PMC
Definition: pci_devs.h:217
unsigned int gpio_get_pad_cpu_portid(gpio_t pad)
Definition: gpio.c:977
bool gpio_get_vw_info(gpio_t pad, unsigned int *vw_index, unsigned int *vw_bit)
Definition: gpio.c:953
#define NULL
Definition: stddef.h:19
unsigned int uint32_t
Definition: stdint.h:14
unsigned char uint8_t
Definition: stdint.h:8
enum device_path_type type
Definition: path.h:114
Definition: device.h:107
uint32_t buf[PMC_IPC_BUF_COUNT]
Definition: pmc_ipc.h:69
void(* configure_aux_bias_pads)(const struct typec_aux_bias_pads *pads)
Definition: tcss.h:141
uint8_t usb2_port
Definition: tcss.h:131
uint8_t usb3_port
Definition: tcss.h:132
bool dbg_acc
Definition: usbc_mux.h:15
bool polarity
Definition: usbc_mux.h:11
bool hpd_irq
Definition: usbc_mux.h:13
bool cable
Definition: usbc_mux.h:10
uint8_t dp_pin_mode
Definition: usbc_mux.h:16
bool hpd_lvl
Definition: usbc_mux.h:12
#define m(clkreg, src_bits, pmcreg, dst_bits)
#define c(value, pmcreg, dst_bits)
const struct usbc_ops * usbc_get_ops(void)
Definition: usbc_mux.c:16