| 1 | /* SPDX-License-Identifier: MIT */ | 
|---|
| 2 | /* | 
|---|
| 3 | * Copyright © 2019 Intel Corporation | 
|---|
| 4 | */ | 
|---|
| 5 |  | 
|---|
| 6 | #ifndef __INTEL_TC_H__ | 
|---|
| 7 | #define __INTEL_TC_H__ | 
|---|
| 8 |  | 
|---|
| 9 | #include <linux/types.h> | 
|---|
| 10 |  | 
|---|
| 11 | struct intel_crtc_state; | 
|---|
| 12 | struct intel_digital_port; | 
|---|
| 13 | struct intel_encoder; | 
|---|
| 14 |  | 
|---|
| 15 | /* | 
|---|
| 16 | * The following enum values must stay fixed, as they match the corresponding | 
|---|
| 17 | * pin assignment fields in the PORT_TX_DFLEXPA1 and TCSS_DDI_STATUS registers. | 
|---|
| 18 | */ | 
|---|
| 19 | enum intel_tc_pin_assignment {            /* Lanes (a)   Signal/   Cable   Notes   */ | 
|---|
| 20 | /* DP    USB   Rate (b)  type            */ | 
|---|
| 21 | INTEL_TC_PIN_ASSIGNMENT_NONE = 0, /* 4     -     -         -       (c)     */ | 
|---|
| 22 | INTEL_TC_PIN_ASSIGNMENT_A,        /* 2/4   0     GEN2      TC->TC  (d,e)   */ | 
|---|
| 23 | INTEL_TC_PIN_ASSIGNMENT_B,        /* 1/2   1     GEN2      TC->TC  (d,f,g) */ | 
|---|
| 24 | INTEL_TC_PIN_ASSIGNMENT_C,        /* 4     0     DP2       TC->TC  (h)     */ | 
|---|
| 25 | INTEL_TC_PIN_ASSIGNMENT_D,        /* 2     1     DP2       TC->TC  (h,g)   */ | 
|---|
| 26 | INTEL_TC_PIN_ASSIGNMENT_E,        /* 4     0     DP2       TC->DP          */ | 
|---|
| 27 | INTEL_TC_PIN_ASSIGNMENT_F,        /* 2     1     GEN1/DP1  TC->DP  (d,g,i) */ | 
|---|
| 28 | /* | 
|---|
| 29 | * (a) - DP unidirectional lanes, each lane using 1 differential signal | 
|---|
| 30 | *       pair. | 
|---|
| 31 | *     - USB SuperSpeed bidirectional lane, using 2 differential (TX and | 
|---|
| 32 | *       RX) signal pairs. | 
|---|
| 33 | *     - USB 2.0 (HighSpeed) unidirectional lane, using 1 differential | 
|---|
| 34 | *       signal pair. Not indicated, this lane is always present on pin | 
|---|
| 35 | *       assignments A-D and never present on pin assignments E/F. | 
|---|
| 36 | * (b) - GEN1: USB 3.1 GEN1 bit rate (5 Gbps) and signaling. This | 
|---|
| 37 | *             is used for transferring only a USB stream. | 
|---|
| 38 | *     - GEN2: USB 3.1 GEN2 bit rate (10 Gbps) and signaling. This | 
|---|
| 39 | *             allows transferring an HBR3 (8.1 Gbps) DP stream. | 
|---|
| 40 | *     - DP1:  Display Port signaling defined by the DP v1.3 Standard, | 
|---|
| 41 | *             with a maximum bit rate of HBR3. | 
|---|
| 42 | *     - DP2:  Display Port signaling defined by the DP v2.1 Standard, | 
|---|
| 43 | *             with a maximum bit rate defined by the DP Alt Mode | 
|---|
| 44 | *             v2.1a Standard depending on the cable type as follows: | 
|---|
| 45 | *             - Passive (Full-Featured) USB 3.2 GEN1 | 
|---|
| 46 | *               TC->TC cables (CC3G1-X)                        : UHBR10 | 
|---|
| 47 | *             - Passive (Full-Featured) USB 3.2/4 GEN2 and | 
|---|
| 48 | *               Thunderbolt Alt Mode GEN2 | 
|---|
| 49 | *               TC->TC cables (CC3G2-X)                    all : UHBR10 | 
|---|
| 50 | *                                                    DP54 logo : UHBR13.5 | 
|---|
| 51 | *             - Passive (Full-Featured) USB4 GEN3+ and | 
|---|
| 52 | *               Thunderbolt Alt Mode GEN3+ | 
|---|
| 53 | *               TC->TC cables (CC4G3-X)                    all : UHBR13.5 | 
|---|
| 54 | *                                                    DP80 logo : UHBR20 | 
|---|
| 55 | *             - Active Re-Timed or | 
|---|
| 56 | *               Active Linear Re-driven (LRD) | 
|---|
| 57 | *               USB3.2 GEN1/2 and USB4 GEN2+ | 
|---|
| 58 | *               TC->TC cables                              all : HBR3 | 
|---|
| 59 | *                                               with DP_BR CTS : UHBR10 | 
|---|
| 60 | *                                                    DP54 logo : UHBR13.5 | 
|---|
| 61 | *                                                    DP80 logo : UHBR20 | 
|---|
| 62 | *             - Passive/Active Re-Timed or | 
|---|
| 63 | *               Active Linear Re-driven (LRD) | 
|---|
| 64 | *               TC->DP cables         with DP_BR CTS/DP8K logo : HBR3 | 
|---|
| 65 | *                                               with DP_BR CTS : UHBR10 | 
|---|
| 66 | *                                                    DP54 logo : UHBR13.5 | 
|---|
| 67 | *                                                    DP80 logo : UHBR20 | 
|---|
| 68 | * (c) Used in TBT-alt/legacy modes and on LNL+ after the sink | 
|---|
| 69 | *     disconnected in DP-alt mode. | 
|---|
| 70 | * (d) Only defined by the DP Alt Standard v1.0a, deprecated by v1.0b, | 
|---|
| 71 | *     only supported on ICL. | 
|---|
| 72 | * (e) GEN2 passive 1 m cable: 4 DP lanes, GEN2 active cable: 2 DP lanes. | 
|---|
| 73 | * (f) GEN2 passive 1 m cable: 2 DP lanes, GEN2 active cable: 1 DP lane. | 
|---|
| 74 | * (g) These pin assignments are also referred to as (USB/DP) | 
|---|
| 75 | *     multifunction or Multifunction Display Port (MFD) modes. | 
|---|
| 76 | * (h) Also used where one end of the cable is a captive connector, | 
|---|
| 77 | *     attached to a DP->HDMI/DVI/VGA converter. | 
|---|
| 78 | * (i) The DP end of the cable is a captive connector attached to a | 
|---|
| 79 | *     (DP/USB) multifunction dock as defined by the DockPort v1.0a | 
|---|
| 80 | *     specification. | 
|---|
| 81 | */ | 
|---|
| 82 | }; | 
|---|
| 83 |  | 
|---|
| 84 | bool intel_tc_port_in_tbt_alt_mode(struct intel_digital_port *dig_port); | 
|---|
| 85 | bool intel_tc_port_in_dp_alt_mode(struct intel_digital_port *dig_port); | 
|---|
| 86 | bool intel_tc_port_in_legacy_mode(struct intel_digital_port *dig_port); | 
|---|
| 87 | bool intel_tc_port_handles_hpd_glitches(struct intel_digital_port *dig_port); | 
|---|
| 88 |  | 
|---|
| 89 | bool intel_tc_port_connected(struct intel_encoder *encoder); | 
|---|
| 90 |  | 
|---|
| 91 | enum intel_tc_pin_assignment | 
|---|
| 92 | intel_tc_port_get_pin_assignment(struct intel_digital_port *dig_port); | 
|---|
| 93 | int intel_tc_port_max_lane_count(struct intel_digital_port *dig_port); | 
|---|
| 94 | void intel_tc_port_set_fia_lane_count(struct intel_digital_port *dig_port, | 
|---|
| 95 | int required_lanes); | 
|---|
| 96 |  | 
|---|
| 97 | void intel_tc_port_init_mode(struct intel_digital_port *dig_port); | 
|---|
| 98 | void intel_tc_port_sanitize_mode(struct intel_digital_port *dig_port, | 
|---|
| 99 | const struct intel_crtc_state *crtc_state); | 
|---|
| 100 | void intel_tc_port_lock(struct intel_digital_port *dig_port); | 
|---|
| 101 | void intel_tc_port_unlock(struct intel_digital_port *dig_port); | 
|---|
| 102 | void intel_tc_port_suspend(struct intel_digital_port *dig_port); | 
|---|
| 103 | void intel_tc_port_get_link(struct intel_digital_port *dig_port, | 
|---|
| 104 | int required_lanes); | 
|---|
| 105 | void intel_tc_port_put_link(struct intel_digital_port *dig_port); | 
|---|
| 106 | bool intel_tc_port_ref_held(struct intel_digital_port *dig_port); | 
|---|
| 107 | bool intel_tc_port_link_needs_reset(struct intel_digital_port *dig_port); | 
|---|
| 108 | bool intel_tc_port_link_reset(struct intel_digital_port *dig_port); | 
|---|
| 109 | void intel_tc_port_link_cancel_reset_work(struct intel_digital_port *dig_port); | 
|---|
| 110 |  | 
|---|
| 111 | int intel_tc_port_init(struct intel_digital_port *dig_port, bool is_legacy); | 
|---|
| 112 | void intel_tc_port_cleanup(struct intel_digital_port *dig_port); | 
|---|
| 113 |  | 
|---|
| 114 | bool intel_tc_cold_requires_aux_pw(struct intel_digital_port *dig_port); | 
|---|
| 115 |  | 
|---|
| 116 | #endif /* __INTEL_TC_H__ */ | 
|---|
| 117 |  | 
|---|