Lines Matching +full:0 +full:xd
26 #define PCIE2CIO_CMD 0x30
35 #define PCIE2CIO_WRDATA 0x34
36 #define PCIE2CIO_RDDATA 0x38
38 #define PHY_PORT_CS1 0x37
74 * @max_boot_acl: Maximum number of preboot ACL entries (%0 if not supported)
137 #define EP_NAME_INTEL_VSS 0x10
149 #define INTEL_VSS_FLAGS_RTD3 BIT(0)
198 return link ? ((link - 1) ^ 0x01) + 1 : 0; in dual_link_from_link()
209 return depth ? route & ~(0xffULL << (depth - 1) * TB_ROUTE_SHIFT) : 0; in get_parent_route()
223 return 0; in pci2cio_wait_completion()
250 return 0; in pcie2cio_read()
392 return 0; in icm_fr_get_switch_index()
395 return index != 0xff ? index : 0; in icm_fr_get_switch_index()
417 sw = &switches[0]; in icm_fr_get_route()
433 for (j = 0; j < ARRAY_SIZE(sw->ports); j++) { in icm_fr_get_route()
451 nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_SAVE_DEVS, 0); in icm_fr_save_devices()
464 memset(&reply, 0, sizeof(reply)); in icm_fr_driver_ready()
473 return 0; in icm_fr_driver_ready()
482 memset(&request, 0, sizeof(request)); in icm_fr_approve_switch()
488 memset(&reply, 0, sizeof(reply)); in icm_fr_approve_switch()
500 return 0; in icm_fr_approve_switch()
509 memset(&request, 0, sizeof(request)); in icm_fr_add_switch_key()
516 memset(&reply, 0, sizeof(reply)); in icm_fr_add_switch_key()
527 return 0; in icm_fr_add_switch_key()
537 memset(&request, 0, sizeof(request)); in icm_fr_challenge_switch_key()
544 memset(&reply, 0, sizeof(reply)); in icm_fr_challenge_switch_key()
557 return 0; in icm_fr_challenge_switch_key()
560 static int icm_fr_approve_xdomain_paths(struct tb *tb, struct tb_xdomain *xd, in icm_fr_approve_xdomain_paths() argument
568 memset(&request, 0, sizeof(request)); in icm_fr_approve_xdomain_paths()
570 request.link_info = xd->depth << ICM_LINK_INFO_DEPTH_SHIFT | xd->link; in icm_fr_approve_xdomain_paths()
571 memcpy(&request.remote_uuid, xd->remote_uuid, sizeof(*xd->remote_uuid)); in icm_fr_approve_xdomain_paths()
578 memset(&reply, 0, sizeof(reply)); in icm_fr_approve_xdomain_paths()
587 return 0; in icm_fr_approve_xdomain_paths()
590 static int icm_fr_disconnect_xdomain_paths(struct tb *tb, struct tb_xdomain *xd, in icm_fr_disconnect_xdomain_paths() argument
597 phy_port = tb_phy_port_from_link(xd->link); in icm_fr_disconnect_xdomain_paths()
598 if (phy_port == 0) in icm_fr_disconnect_xdomain_paths()
606 return 0; in icm_fr_disconnect_xdomain_paths()
683 struct tb_xdomain *xd; in add_xdomain() local
687 xd = tb_xdomain_alloc(sw->tb, &sw->dev, route, local_uuid, remote_uuid); in add_xdomain()
688 if (!xd) in add_xdomain()
691 xd->link = link; in add_xdomain()
692 xd->depth = depth; in add_xdomain()
694 tb_port_at(route, sw)->xdomain = xd; in add_xdomain()
696 tb_xdomain_add(xd); in add_xdomain()
703 static void update_xdomain(struct tb_xdomain *xd, u64 route, u8 link) in update_xdomain() argument
705 xd->link = link; in update_xdomain()
706 xd->route = route; in update_xdomain()
707 xd->is_unplugged = false; in update_xdomain()
710 static void remove_xdomain(struct tb_xdomain *xd) in remove_xdomain() argument
714 sw = tb_to_switch(xd->dev.parent); in remove_xdomain()
715 tb_port_at(xd->route, sw)->xdomain = NULL; in remove_xdomain()
716 tb_xdomain_remove(xd); in remove_xdomain()
729 struct tb_xdomain *xd; in icm_fr_device_connected() local
820 xd = tb_xdomain_find_by_link_depth(tb, link, depth); in icm_fr_device_connected()
821 if (xd) { in icm_fr_device_connected()
822 remove_xdomain(xd); in icm_fr_device_connected()
823 tb_xdomain_put(xd); in icm_fr_device_connected()
906 struct tb_xdomain *xd; in icm_fr_xdomain_connected() local
922 xd = tb_xdomain_find_by_uuid(tb, &pkg->remote_uuid); in icm_fr_xdomain_connected()
923 if (xd) { in icm_fr_xdomain_connected()
926 xd_phy_port = phy_port_from_route(xd->route, xd->depth); in icm_fr_xdomain_connected()
929 if (xd->depth == depth && xd_phy_port == phy_port) { in icm_fr_xdomain_connected()
930 update_xdomain(xd, route, link); in icm_fr_xdomain_connected()
931 tb_xdomain_put(xd); in icm_fr_xdomain_connected()
941 remove_xdomain(xd); in icm_fr_xdomain_connected()
942 tb_xdomain_put(xd); in icm_fr_xdomain_connected()
950 xd = tb_xdomain_find_by_link_depth(tb, link, depth); in icm_fr_xdomain_connected()
951 if (!xd) { in icm_fr_xdomain_connected()
956 xd = tb_xdomain_find_by_link_depth(tb, dual_link, in icm_fr_xdomain_connected()
959 if (xd) { in icm_fr_xdomain_connected()
960 remove_xdomain(xd); in icm_fr_xdomain_connected()
961 tb_xdomain_put(xd); in icm_fr_xdomain_connected()
992 struct tb_xdomain *xd; in icm_fr_xdomain_disconnected() local
999 xd = tb_xdomain_find_by_uuid(tb, &pkg->remote_uuid); in icm_fr_xdomain_disconnected()
1000 if (xd) { in icm_fr_xdomain_disconnected()
1001 remove_xdomain(xd); in icm_fr_xdomain_disconnected()
1002 tb_xdomain_put(xd); in icm_fr_xdomain_disconnected()
1008 return pcie2cio_write(tb_priv(tb), TB_CFG_SWITCH, 0, 0x777, BIT(1)); in icm_tr_cio_reset()
1021 memset(&reply, 0, sizeof(reply)); in icm_tr_driver_ready()
1038 return 0; in icm_tr_driver_ready()
1047 memset(&request, 0, sizeof(request)); in icm_tr_approve_switch()
1054 memset(&reply, 0, sizeof(reply)); in icm_tr_approve_switch()
1065 return 0; in icm_tr_approve_switch()
1074 memset(&request, 0, sizeof(request)); in icm_tr_add_switch_key()
1082 memset(&reply, 0, sizeof(reply)); in icm_tr_add_switch_key()
1093 return 0; in icm_tr_add_switch_key()
1103 memset(&request, 0, sizeof(request)); in icm_tr_challenge_switch_key()
1111 memset(&reply, 0, sizeof(reply)); in icm_tr_challenge_switch_key()
1124 return 0; in icm_tr_challenge_switch_key()
1127 static int icm_tr_approve_xdomain_paths(struct tb *tb, struct tb_xdomain *xd, in icm_tr_approve_xdomain_paths() argument
1135 memset(&request, 0, sizeof(request)); in icm_tr_approve_xdomain_paths()
1137 request.route_hi = upper_32_bits(xd->route); in icm_tr_approve_xdomain_paths()
1138 request.route_lo = lower_32_bits(xd->route); in icm_tr_approve_xdomain_paths()
1143 memcpy(&request.remote_uuid, xd->remote_uuid, sizeof(*xd->remote_uuid)); in icm_tr_approve_xdomain_paths()
1145 memset(&reply, 0, sizeof(reply)); in icm_tr_approve_xdomain_paths()
1154 return 0; in icm_tr_approve_xdomain_paths()
1157 static int icm_tr_xdomain_tear_down(struct tb *tb, struct tb_xdomain *xd, in icm_tr_xdomain_tear_down() argument
1164 memset(&request, 0, sizeof(request)); in icm_tr_xdomain_tear_down()
1167 request.route_hi = upper_32_bits(xd->route); in icm_tr_xdomain_tear_down()
1168 request.route_lo = lower_32_bits(xd->route); in icm_tr_xdomain_tear_down()
1169 memcpy(&request.remote_uuid, xd->remote_uuid, sizeof(*xd->remote_uuid)); in icm_tr_xdomain_tear_down()
1171 memset(&reply, 0, sizeof(reply)); in icm_tr_xdomain_tear_down()
1180 return 0; in icm_tr_xdomain_tear_down()
1183 static int icm_tr_disconnect_xdomain_paths(struct tb *tb, struct tb_xdomain *xd, in icm_tr_disconnect_xdomain_paths() argument
1189 ret = icm_tr_xdomain_tear_down(tb, xd, 1); in icm_tr_disconnect_xdomain_paths()
1194 return icm_tr_xdomain_tear_down(tb, xd, 2); in icm_tr_disconnect_xdomain_paths()
1206 struct tb_xdomain *xd; in __icm_tr_device_connected() local
1237 update_switch(sw, route, pkg->connection_id, 0, 0, 0, in __icm_tr_device_connected()
1255 xd = tb_xdomain_find_by_route(tb, route); in __icm_tr_device_connected()
1256 if (xd) { in __icm_tr_device_connected()
1257 remove_xdomain(xd); in __icm_tr_device_connected()
1258 tb_xdomain_put(xd); in __icm_tr_device_connected()
1329 struct tb_xdomain *xd; in icm_tr_xdomain_connected() local
1338 xd = tb_xdomain_find_by_uuid(tb, &pkg->remote_uuid); in icm_tr_xdomain_connected()
1339 if (xd) { in icm_tr_xdomain_connected()
1340 if (xd->route == route) { in icm_tr_xdomain_connected()
1341 update_xdomain(xd, route, 0); in icm_tr_xdomain_connected()
1342 tb_xdomain_put(xd); in icm_tr_xdomain_connected()
1346 remove_xdomain(xd); in icm_tr_xdomain_connected()
1347 tb_xdomain_put(xd); in icm_tr_xdomain_connected()
1351 xd = tb_xdomain_find_by_route(tb, route); in icm_tr_xdomain_connected()
1352 if (xd) { in icm_tr_xdomain_connected()
1353 remove_xdomain(xd); in icm_tr_xdomain_connected()
1354 tb_xdomain_put(xd); in icm_tr_xdomain_connected()
1374 add_xdomain(sw, route, &pkg->local_uuid, &pkg->remote_uuid, 0, 0); in icm_tr_xdomain_connected()
1383 struct tb_xdomain *xd; in icm_tr_xdomain_disconnected() local
1388 xd = tb_xdomain_find_by_route(tb, route); in icm_tr_xdomain_disconnected()
1389 if (xd) { in icm_tr_xdomain_disconnected()
1390 remove_xdomain(xd); in icm_tr_xdomain_disconnected()
1391 tb_xdomain_put(xd); in icm_tr_xdomain_disconnected()
1450 if (cap > 0) { in icm_ar_is_supported()
1463 return pcie2cio_write(tb_priv(tb), TB_CFG_SWITCH, 0, 0x50, BIT(9)); in icm_ar_cio_reset()
1497 memset(&reply, 0, sizeof(reply)); in icm_ar_driver_ready()
1511 return 0; in icm_ar_driver_ready()
1523 memset(&reply, 0, sizeof(reply)); in icm_ar_get_route()
1533 return 0; in icm_ar_get_route()
1544 memset(&reply, 0, sizeof(reply)); in icm_ar_get_boot_acl()
1553 for (i = 0; i < nuuids; i++) { in icm_ar_get_boot_acl()
1556 uuid[0] = reply.acl[i].uuid_lo; in icm_ar_get_boot_acl()
1559 if (uuid[0] == 0xffffffff && uuid[1] == 0xffffffff) { in icm_ar_get_boot_acl()
1561 uuid[0] = 0; in icm_ar_get_boot_acl()
1562 uuid[1] = 0; in icm_ar_get_boot_acl()
1563 } else if (uuid[0] != 0 || uuid[1] != 0) { in icm_ar_get_boot_acl()
1565 uuid[2] = 0xffffffff; in icm_ar_get_boot_acl()
1566 uuid[3] = 0xffffffff; in icm_ar_get_boot_acl()
1585 for (i = 0; i < nuuids; i++) { in icm_ar_set_boot_acl()
1593 request.acl[i].uuid_lo = 0xffffffff; in icm_ar_set_boot_acl()
1594 request.acl[i].uuid_hi = 0xffffffff; in icm_ar_set_boot_acl()
1597 if (uuid[2] != 0xffffffff || uuid[3] != 0xffffffff) in icm_ar_set_boot_acl()
1600 request.acl[i].uuid_lo = uuid[0]; in icm_ar_set_boot_acl()
1605 memset(&reply, 0, sizeof(reply)); in icm_ar_set_boot_acl()
1614 return 0; in icm_ar_set_boot_acl()
1627 memset(&reply, 0, sizeof(reply)); in icm_icl_driver_ready()
1641 return 0; in icm_icl_driver_ready()
1649 pci_read_config_dword(nhi->pdev, VS_CAP_10, &uuid[0]); in icm_icl_set_uuid()
1651 uuid[2] = 0xffffffff; in icm_icl_set_uuid()
1652 uuid[3] = 0xffffffff; in icm_icl_set_uuid()
1668 tb_dbg(tb, "ICM rtd3 veto=0x%08x\n", pkg->veto_reason); in icm_icl_rtd3_veto()
1777 res = tb_cfg_read_raw(tb->ctl, &tmp, 0, 0, TB_CFG_SWITCH, in __icm_driver_ready()
1778 0, 1, 100); in __icm_driver_ready()
1780 return 0; in __icm_driver_ready()
1820 return 0; in icm_firmware_start()
1833 return 0; in icm_firmware_start()
1850 return 0; in icm_reset_phy_port()
1878 return 0; in icm_reset_phy_port()
1931 nhi_mailbox_cmd(nhi, NHI_MAILBOX_ALLOW_ALL_DEVS, 0); in icm_firmware_init()
1935 if (ret < 0) in icm_firmware_init()
1947 ret = icm_reset_phy_port(tb, 0); in icm_firmware_init()
1954 return 0; in icm_firmware_init()
1970 return 0; in icm_driver_ready()
1983 tb->nboot_acl = 0; in icm_driver_ready()
1988 return 0; in icm_driver_ready()
1998 nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_DRV_UNLOADS, 0); in icm_suspend()
1999 return 0; in icm_suspend()
2029 return 0; in complete_rpm()
2115 nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_DRV_UNLOADS, 0); in icm_runtime_suspend()
2116 return 0; in icm_runtime_suspend()
2123 return 0; in icm_runtime_suspend_switch()
2134 return 0; in icm_runtime_resume_switch()
2144 return 0; in icm_runtime_resume()
2153 tb->root_switch = tb_switch_alloc_safe_mode(tb, &tb->dev, 0); in icm_start()
2155 tb->root_switch = tb_switch_alloc(tb, &tb->dev, 0); in icm_start()
2181 nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_DRV_UNLOADS, 0); in icm_stop()
2188 return nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_DISCONNECT_PCIE_PATHS, 0); in icm_disconnect_pcie_paths()
2251 return 0; in icm_usb4_switch_nvm_authenticate()
2283 memset(&request, 0, sizeof(request)); in icm_usb4_switch_op()
2299 memset(&reply, 0, sizeof(reply)); in icm_usb4_switch_op()
2317 return 0; in icm_usb4_switch_op()
2326 int ret = 0; in icm_usb4_switch_nvm_authenticate_status()
2343 *status = 0; in icm_usb4_switch_nvm_authenticate_status()