Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Thunderbolt driver - Port/Switch config area registers
0004  *
0005  * Every thunderbolt device consists (logically) of a switch with multiple
0006  * ports. Every port contains up to four config regions (HOPS, PORT, SWITCH,
0007  * COUNTERS) which are used to configure the device.
0008  *
0009  * Copyright (c) 2014 Andreas Noever <andreas.noever@gmail.com>
0010  * Copyright (C) 2018, Intel Corporation
0011  */
0012 
0013 #ifndef _TB_REGS
0014 #define _TB_REGS
0015 
0016 #include <linux/types.h>
0017 
0018 
0019 #define TB_ROUTE_SHIFT 8  /* number of bits in a port entry of a route */
0020 
0021 
0022 /*
0023  * TODO: should be 63? But we do not know how to receive frames larger than 256
0024  * bytes at the frame level. (header + checksum = 16, 60*4 = 240)
0025  */
0026 #define TB_MAX_CONFIG_RW_LENGTH 60
0027 
0028 enum tb_switch_cap {
0029     TB_SWITCH_CAP_TMU       = 0x03,
0030     TB_SWITCH_CAP_VSE       = 0x05,
0031 };
0032 
0033 enum tb_switch_vse_cap {
0034     TB_VSE_CAP_PLUG_EVENTS      = 0x01, /* also EEPROM */
0035     TB_VSE_CAP_TIME2        = 0x03,
0036     TB_VSE_CAP_CP_LP        = 0x04,
0037     TB_VSE_CAP_LINK_CONTROLLER  = 0x06, /* also IECS */
0038 };
0039 
0040 enum tb_port_cap {
0041     TB_PORT_CAP_PHY         = 0x01,
0042     TB_PORT_CAP_POWER       = 0x02,
0043     TB_PORT_CAP_TIME1       = 0x03,
0044     TB_PORT_CAP_ADAP        = 0x04,
0045     TB_PORT_CAP_VSE         = 0x05,
0046     TB_PORT_CAP_USB4        = 0x06,
0047 };
0048 
0049 enum tb_port_state {
0050     TB_PORT_DISABLED    = 0, /* tb_cap_phy.disable == 1 */
0051     TB_PORT_CONNECTING  = 1, /* retry */
0052     TB_PORT_UP      = 2,
0053     TB_PORT_UNPLUGGED   = 7,
0054 };
0055 
0056 /* capability headers */
0057 
0058 struct tb_cap_basic {
0059     u8 next;
0060     /* enum tb_cap cap:8; prevent "narrower than values of its type" */
0061     u8 cap; /* if cap == 0x05 then we have a extended capability */
0062 } __packed;
0063 
0064 /**
0065  * struct tb_cap_extended_short - Switch extended short capability
0066  * @next: Pointer to the next capability. If @next and @length are zero
0067  *    then we have a long cap.
0068  * @cap: Base capability ID (see &enum tb_switch_cap)
0069  * @vsec_id: Vendor specific capability ID (see &enum switch_vse_cap)
0070  * @length: Length of this capability
0071  */
0072 struct tb_cap_extended_short {
0073     u8 next;
0074     u8 cap;
0075     u8 vsec_id;
0076     u8 length;
0077 } __packed;
0078 
0079 /**
0080  * struct tb_cap_extended_long - Switch extended long capability
0081  * @zero1: This field should be zero
0082  * @cap: Base capability ID (see &enum tb_switch_cap)
0083  * @vsec_id: Vendor specific capability ID (see &enum switch_vse_cap)
0084  * @zero2: This field should be zero
0085  * @next: Pointer to the next capability
0086  * @length: Length of this capability
0087  */
0088 struct tb_cap_extended_long {
0089     u8 zero1;
0090     u8 cap;
0091     u8 vsec_id;
0092     u8 zero2;
0093     u16 next;
0094     u16 length;
0095 } __packed;
0096 
0097 /**
0098  * struct tb_cap_any - Structure capable of hold every capability
0099  * @basic: Basic capability
0100  * @extended_short: Vendor specific capability
0101  * @extended_long: Vendor specific extended capability
0102  */
0103 struct tb_cap_any {
0104     union {
0105         struct tb_cap_basic basic;
0106         struct tb_cap_extended_short extended_short;
0107         struct tb_cap_extended_long extended_long;
0108     };
0109 } __packed;
0110 
0111 /* capabilities */
0112 
0113 struct tb_cap_link_controller {
0114     struct tb_cap_extended_long cap_header;
0115     u32 count:4; /* number of link controllers */
0116     u32 unknown1:4;
0117     u32 base_offset:8; /*
0118                 * offset (into this capability) of the configuration
0119                 * area of the first link controller
0120                 */
0121     u32 length:12; /* link controller configuration area length */
0122     u32 unknown2:4; /* TODO check that length is correct */
0123 } __packed;
0124 
0125 struct tb_cap_phy {
0126     struct tb_cap_basic cap_header;
0127     u32 unknown1:16;
0128     u32 unknown2:14;
0129     bool disable:1;
0130     u32 unknown3:11;
0131     enum tb_port_state state:4;
0132     u32 unknown4:2;
0133 } __packed;
0134 
0135 struct tb_eeprom_ctl {
0136     bool fl_sk:1; /* send pulse to transfer one bit */
0137     bool fl_cs:1; /* set to 0 before access */
0138     bool fl_di:1; /* to eeprom */
0139     bool fl_do:1; /* from eeprom */
0140     bool bit_banging_enable:1; /* set to 1 before access */
0141     bool not_present:1; /* should be 0 */
0142     bool unknown1:1;
0143     bool present:1; /* should be 1 */
0144     u32 unknown2:24;
0145 } __packed;
0146 
0147 struct tb_cap_plug_events {
0148     struct tb_cap_extended_short cap_header;
0149     u32 __unknown1:2; /* VSC_CS_1 */
0150     u32 plug_events:5; /* VSC_CS_1 */
0151     u32 __unknown2:25; /* VSC_CS_1 */
0152     u32 vsc_cs_2;
0153     u32 vsc_cs_3;
0154     struct tb_eeprom_ctl eeprom_ctl;
0155     u32 __unknown5[7]; /* VSC_CS_5 -> VSC_CS_11 */
0156     u32 drom_offset; /* VSC_CS_12: 32 bit register, but eeprom addresses are 16 bit */
0157 } __packed;
0158 
0159 /* device headers */
0160 
0161 /* Present on port 0 in TB_CFG_SWITCH at address zero. */
0162 struct tb_regs_switch_header {
0163     /* DWORD 0 */
0164     u16 vendor_id;
0165     u16 device_id;
0166     /* DWORD 1 */
0167     u32 first_cap_offset:8;
0168     u32 upstream_port_number:6;
0169     u32 max_port_number:6;
0170     u32 depth:3;
0171     u32 __unknown1:1;
0172     u32 revision:8;
0173     /* DWORD 2 */
0174     u32 route_lo;
0175     /* DWORD 3 */
0176     u32 route_hi:31;
0177     bool enabled:1;
0178     /* DWORD 4 */
0179     u32 plug_events_delay:8; /*
0180                   * RW, pause between plug events in
0181                   * milliseconds. Writing 0x00 is interpreted
0182                   * as 255ms.
0183                   */
0184     u32 cmuv:8;
0185     u32 __unknown4:8;
0186     u32 thunderbolt_version:8;
0187 } __packed;
0188 
0189 /* USB4 version 1.0 */
0190 #define USB4_VERSION_1_0            0x20
0191 
0192 #define ROUTER_CS_1             0x01
0193 #define ROUTER_CS_4             0x04
0194 #define ROUTER_CS_5             0x05
0195 #define ROUTER_CS_5_SLP             BIT(0)
0196 #define ROUTER_CS_5_WOP             BIT(1)
0197 #define ROUTER_CS_5_WOU             BIT(2)
0198 #define ROUTER_CS_5_WOD             BIT(3)
0199 #define ROUTER_CS_5_C3S             BIT(23)
0200 #define ROUTER_CS_5_PTO             BIT(24)
0201 #define ROUTER_CS_5_UTO             BIT(25)
0202 #define ROUTER_CS_5_HCO             BIT(26)
0203 #define ROUTER_CS_5_CV              BIT(31)
0204 #define ROUTER_CS_6             0x06
0205 #define ROUTER_CS_6_SLPR            BIT(0)
0206 #define ROUTER_CS_6_TNS             BIT(1)
0207 #define ROUTER_CS_6_WOPS            BIT(2)
0208 #define ROUTER_CS_6_WOUS            BIT(3)
0209 #define ROUTER_CS_6_HCI             BIT(18)
0210 #define ROUTER_CS_6_CR              BIT(25)
0211 #define ROUTER_CS_7             0x07
0212 #define ROUTER_CS_9             0x09
0213 #define ROUTER_CS_25                0x19
0214 #define ROUTER_CS_26                0x1a
0215 #define ROUTER_CS_26_OPCODE_MASK        GENMASK(15, 0)
0216 #define ROUTER_CS_26_STATUS_MASK        GENMASK(29, 24)
0217 #define ROUTER_CS_26_STATUS_SHIFT       24
0218 #define ROUTER_CS_26_ONS            BIT(30)
0219 #define ROUTER_CS_26_OV             BIT(31)
0220 
0221 /* USB4 router operations opcodes */
0222 enum usb4_switch_op {
0223     USB4_SWITCH_OP_QUERY_DP_RESOURCE = 0x10,
0224     USB4_SWITCH_OP_ALLOC_DP_RESOURCE = 0x11,
0225     USB4_SWITCH_OP_DEALLOC_DP_RESOURCE = 0x12,
0226     USB4_SWITCH_OP_NVM_WRITE = 0x20,
0227     USB4_SWITCH_OP_NVM_AUTH = 0x21,
0228     USB4_SWITCH_OP_NVM_READ = 0x22,
0229     USB4_SWITCH_OP_NVM_SET_OFFSET = 0x23,
0230     USB4_SWITCH_OP_DROM_READ = 0x24,
0231     USB4_SWITCH_OP_NVM_SECTOR_SIZE = 0x25,
0232     USB4_SWITCH_OP_BUFFER_ALLOC = 0x33,
0233 };
0234 
0235 /* Router TMU configuration */
0236 #define TMU_RTR_CS_0                0x00
0237 #define TMU_RTR_CS_0_FREQ_WIND_MASK     GENMASK(26, 16)
0238 #define TMU_RTR_CS_0_TD             BIT(27)
0239 #define TMU_RTR_CS_0_UCAP           BIT(30)
0240 #define TMU_RTR_CS_1                0x01
0241 #define TMU_RTR_CS_1_LOCAL_TIME_NS_MASK     GENMASK(31, 16)
0242 #define TMU_RTR_CS_1_LOCAL_TIME_NS_SHIFT    16
0243 #define TMU_RTR_CS_2                0x02
0244 #define TMU_RTR_CS_3                0x03
0245 #define TMU_RTR_CS_3_LOCAL_TIME_NS_MASK     GENMASK(15, 0)
0246 #define TMU_RTR_CS_3_TS_PACKET_INTERVAL_MASK    GENMASK(31, 16)
0247 #define TMU_RTR_CS_3_TS_PACKET_INTERVAL_SHIFT   16
0248 #define TMU_RTR_CS_15               0xf
0249 #define TMU_RTR_CS_15_FREQ_AVG_MASK     GENMASK(5, 0)
0250 #define TMU_RTR_CS_15_DELAY_AVG_MASK        GENMASK(11, 6)
0251 #define TMU_RTR_CS_15_OFFSET_AVG_MASK       GENMASK(17, 12)
0252 #define TMU_RTR_CS_15_ERROR_AVG_MASK        GENMASK(23, 18)
0253 #define TMU_RTR_CS_22               0x16
0254 #define TMU_RTR_CS_24               0x18
0255 #define TMU_RTR_CS_25               0x19
0256 
0257 enum tb_port_type {
0258     TB_TYPE_INACTIVE    = 0x000000,
0259     TB_TYPE_PORT        = 0x000001,
0260     TB_TYPE_NHI     = 0x000002,
0261     /* TB_TYPE_ETHERNET = 0x020000, lower order bits are not known */
0262     /* TB_TYPE_SATA     = 0x080000, lower order bits are not known */
0263     TB_TYPE_DP_HDMI_IN  = 0x0e0101,
0264     TB_TYPE_DP_HDMI_OUT = 0x0e0102,
0265     TB_TYPE_PCIE_DOWN   = 0x100101,
0266     TB_TYPE_PCIE_UP     = 0x100102,
0267     TB_TYPE_USB3_DOWN   = 0x200101,
0268     TB_TYPE_USB3_UP     = 0x200102,
0269 };
0270 
0271 /* Present on every port in TB_CF_PORT at address zero. */
0272 struct tb_regs_port_header {
0273     /* DWORD 0 */
0274     u16 vendor_id;
0275     u16 device_id;
0276     /* DWORD 1 */
0277     u32 first_cap_offset:8;
0278     u32 max_counters:11;
0279     u32 counters_support:1;
0280     u32 __unknown1:4;
0281     u32 revision:8;
0282     /* DWORD 2 */
0283     enum tb_port_type type:24;
0284     u32 thunderbolt_version:8;
0285     /* DWORD 3 */
0286     u32 __unknown2:20;
0287     u32 port_number:6;
0288     u32 __unknown3:6;
0289     /* DWORD 4 */
0290     u32 nfc_credits;
0291     /* DWORD 5 */
0292     u32 max_in_hop_id:11;
0293     u32 max_out_hop_id:11;
0294     u32 __unknown4:10;
0295     /* DWORD 6 */
0296     u32 __unknown5;
0297     /* DWORD 7 */
0298     u32 __unknown6;
0299 
0300 } __packed;
0301 
0302 /* Basic adapter configuration registers */
0303 #define ADP_CS_4                0x04
0304 #define ADP_CS_4_NFC_BUFFERS_MASK       GENMASK(9, 0)
0305 #define ADP_CS_4_TOTAL_BUFFERS_MASK     GENMASK(29, 20)
0306 #define ADP_CS_4_TOTAL_BUFFERS_SHIFT        20
0307 #define ADP_CS_4_LCK                BIT(31)
0308 #define ADP_CS_5                0x05
0309 #define ADP_CS_5_LCA_MASK           GENMASK(28, 22)
0310 #define ADP_CS_5_LCA_SHIFT          22
0311 
0312 /* TMU adapter registers */
0313 #define TMU_ADP_CS_3                0x03
0314 #define TMU_ADP_CS_3_UDM            BIT(29)
0315 #define TMU_ADP_CS_6                0x06
0316 #define TMU_ADP_CS_6_DTS            BIT(1)
0317 
0318 /* Lane adapter registers */
0319 #define LANE_ADP_CS_0               0x00
0320 #define LANE_ADP_CS_0_SUPPORTED_SPEED_MASK  GENMASK(19, 16)
0321 #define LANE_ADP_CS_0_SUPPORTED_SPEED_SHIFT 16
0322 #define LANE_ADP_CS_0_SUPPORTED_WIDTH_MASK  GENMASK(25, 20)
0323 #define LANE_ADP_CS_0_SUPPORTED_WIDTH_SHIFT 20
0324 #define LANE_ADP_CS_0_SUPPORTED_WIDTH_DUAL  0x2
0325 #define LANE_ADP_CS_0_CL0S_SUPPORT      BIT(26)
0326 #define LANE_ADP_CS_0_CL1_SUPPORT       BIT(27)
0327 #define LANE_ADP_CS_1               0x01
0328 #define LANE_ADP_CS_1_TARGET_SPEED_MASK     GENMASK(3, 0)
0329 #define LANE_ADP_CS_1_TARGET_SPEED_GEN3     0xc
0330 #define LANE_ADP_CS_1_TARGET_WIDTH_MASK     GENMASK(9, 4)
0331 #define LANE_ADP_CS_1_TARGET_WIDTH_SHIFT    4
0332 #define LANE_ADP_CS_1_TARGET_WIDTH_SINGLE   0x1
0333 #define LANE_ADP_CS_1_TARGET_WIDTH_DUAL     0x3
0334 #define LANE_ADP_CS_1_CL0S_ENABLE       BIT(10)
0335 #define LANE_ADP_CS_1_CL1_ENABLE        BIT(11)
0336 #define LANE_ADP_CS_1_LD            BIT(14)
0337 #define LANE_ADP_CS_1_LB            BIT(15)
0338 #define LANE_ADP_CS_1_CURRENT_SPEED_MASK    GENMASK(19, 16)
0339 #define LANE_ADP_CS_1_CURRENT_SPEED_SHIFT   16
0340 #define LANE_ADP_CS_1_CURRENT_SPEED_GEN2    0x8
0341 #define LANE_ADP_CS_1_CURRENT_SPEED_GEN3    0x4
0342 #define LANE_ADP_CS_1_CURRENT_WIDTH_MASK    GENMASK(25, 20)
0343 #define LANE_ADP_CS_1_CURRENT_WIDTH_SHIFT   20
0344 #define LANE_ADP_CS_1_PMS           BIT(30)
0345 
0346 /* USB4 port registers */
0347 #define PORT_CS_1               0x01
0348 #define PORT_CS_1_LENGTH_SHIFT          8
0349 #define PORT_CS_1_TARGET_MASK           GENMASK(18, 16)
0350 #define PORT_CS_1_TARGET_SHIFT          16
0351 #define PORT_CS_1_RETIMER_INDEX_SHIFT       20
0352 #define PORT_CS_1_WNR_WRITE         BIT(24)
0353 #define PORT_CS_1_NR                BIT(25)
0354 #define PORT_CS_1_RC                BIT(26)
0355 #define PORT_CS_1_PND               BIT(31)
0356 #define PORT_CS_2               0x02
0357 #define PORT_CS_18              0x12
0358 #define PORT_CS_18_BE               BIT(8)
0359 #define PORT_CS_18_TCM              BIT(9)
0360 #define PORT_CS_18_CPS              BIT(10)
0361 #define PORT_CS_18_WOU4S            BIT(18)
0362 #define PORT_CS_19              0x13
0363 #define PORT_CS_19_PC               BIT(3)
0364 #define PORT_CS_19_PID              BIT(4)
0365 #define PORT_CS_19_WOC              BIT(16)
0366 #define PORT_CS_19_WOD              BIT(17)
0367 #define PORT_CS_19_WOU4             BIT(18)
0368 
0369 /* Display Port adapter registers */
0370 #define ADP_DP_CS_0             0x00
0371 #define ADP_DP_CS_0_VIDEO_HOPID_MASK        GENMASK(26, 16)
0372 #define ADP_DP_CS_0_VIDEO_HOPID_SHIFT       16
0373 #define ADP_DP_CS_0_AE              BIT(30)
0374 #define ADP_DP_CS_0_VE              BIT(31)
0375 #define ADP_DP_CS_1_AUX_TX_HOPID_MASK       GENMASK(10, 0)
0376 #define ADP_DP_CS_1_AUX_RX_HOPID_MASK       GENMASK(21, 11)
0377 #define ADP_DP_CS_1_AUX_RX_HOPID_SHIFT      11
0378 #define ADP_DP_CS_2             0x02
0379 #define ADP_DP_CS_2_HDP             BIT(6)
0380 #define ADP_DP_CS_3             0x03
0381 #define ADP_DP_CS_3_HDPC            BIT(9)
0382 #define DP_LOCAL_CAP                0x04
0383 #define DP_REMOTE_CAP               0x05
0384 #define DP_STATUS_CTRL              0x06
0385 #define DP_STATUS_CTRL_CMHS         BIT(25)
0386 #define DP_STATUS_CTRL_UF           BIT(26)
0387 #define DP_COMMON_CAP               0x07
0388 /*
0389  * DP_COMMON_CAP offsets work also for DP_LOCAL_CAP and DP_REMOTE_CAP
0390  * with exception of DPRX done.
0391  */
0392 #define DP_COMMON_CAP_RATE_MASK         GENMASK(11, 8)
0393 #define DP_COMMON_CAP_RATE_SHIFT        8
0394 #define DP_COMMON_CAP_RATE_RBR          0x0
0395 #define DP_COMMON_CAP_RATE_HBR          0x1
0396 #define DP_COMMON_CAP_RATE_HBR2         0x2
0397 #define DP_COMMON_CAP_RATE_HBR3         0x3
0398 #define DP_COMMON_CAP_LANES_MASK        GENMASK(14, 12)
0399 #define DP_COMMON_CAP_LANES_SHIFT       12
0400 #define DP_COMMON_CAP_1_LANE            0x0
0401 #define DP_COMMON_CAP_2_LANES           0x1
0402 #define DP_COMMON_CAP_4_LANES           0x2
0403 #define DP_COMMON_CAP_LTTPR_NS          BIT(27)
0404 #define DP_COMMON_CAP_DPRX_DONE         BIT(31)
0405 
0406 /* PCIe adapter registers */
0407 #define ADP_PCIE_CS_0               0x00
0408 #define ADP_PCIE_CS_0_PE            BIT(31)
0409 
0410 /* USB adapter registers */
0411 #define ADP_USB3_CS_0               0x00
0412 #define ADP_USB3_CS_0_V             BIT(30)
0413 #define ADP_USB3_CS_0_PE            BIT(31)
0414 #define ADP_USB3_CS_1               0x01
0415 #define ADP_USB3_CS_1_CUBW_MASK         GENMASK(11, 0)
0416 #define ADP_USB3_CS_1_CDBW_MASK         GENMASK(23, 12)
0417 #define ADP_USB3_CS_1_CDBW_SHIFT        12
0418 #define ADP_USB3_CS_1_HCA           BIT(31)
0419 #define ADP_USB3_CS_2               0x02
0420 #define ADP_USB3_CS_2_AUBW_MASK         GENMASK(11, 0)
0421 #define ADP_USB3_CS_2_ADBW_MASK         GENMASK(23, 12)
0422 #define ADP_USB3_CS_2_ADBW_SHIFT        12
0423 #define ADP_USB3_CS_2_CMR           BIT(31)
0424 #define ADP_USB3_CS_3               0x03
0425 #define ADP_USB3_CS_3_SCALE_MASK        GENMASK(5, 0)
0426 #define ADP_USB3_CS_4               0x04
0427 #define ADP_USB3_CS_4_ALR_MASK          GENMASK(6, 0)
0428 #define ADP_USB3_CS_4_ALR_20G           0x1
0429 #define ADP_USB3_CS_4_ULV           BIT(7)
0430 #define ADP_USB3_CS_4_MSLR_MASK         GENMASK(18, 12)
0431 #define ADP_USB3_CS_4_MSLR_SHIFT        12
0432 #define ADP_USB3_CS_4_MSLR_20G          0x1
0433 
0434 /* Hop register from TB_CFG_HOPS. 8 byte per entry. */
0435 struct tb_regs_hop {
0436     /* DWORD 0 */
0437     u32 next_hop:11; /*
0438               * hop to take after sending the packet through
0439               * out_port (on the incoming port of the next switch)
0440               */
0441     u32 out_port:6; /* next port of the path (on the same switch) */
0442     u32 initial_credits:8;
0443     u32 unknown1:6; /* set to zero */
0444     bool enable:1;
0445 
0446     /* DWORD 1 */
0447     u32 weight:4;
0448     u32 unknown2:4; /* set to zero */
0449     u32 priority:3;
0450     bool drop_packages:1;
0451     u32 counter:11; /* index into TB_CFG_COUNTERS on this port */
0452     bool counter_enable:1;
0453     bool ingress_fc:1;
0454     bool egress_fc:1;
0455     bool ingress_shared_buffer:1;
0456     bool egress_shared_buffer:1;
0457     bool pending:1;
0458     u32 unknown3:3; /* set to zero */
0459 } __packed;
0460 
0461 /* TMU Thunderbolt 3 registers */
0462 #define TB_TIME_VSEC_3_CS_9         0x9
0463 #define TB_TIME_VSEC_3_CS_9_TMU_OBJ_MASK    GENMASK(17, 16)
0464 #define TB_TIME_VSEC_3_CS_26            0x1a
0465 #define TB_TIME_VSEC_3_CS_26_TD         BIT(22)
0466 
0467 /*
0468  * Used for Titan Ridge only. Bits are part of the same register: TMU_ADP_CS_6
0469  * (see above) as in USB4 spec, but these specific bits used for Titan Ridge
0470  * only and reserved in USB4 spec.
0471  */
0472 #define TMU_ADP_CS_6_DISABLE_TMU_OBJ_MASK   GENMASK(3, 2)
0473 #define TMU_ADP_CS_6_DISABLE_TMU_OBJ_CL1    BIT(2)
0474 #define TMU_ADP_CS_6_DISABLE_TMU_OBJ_CL2    BIT(3)
0475 
0476 /* Plug Events registers */
0477 #define TB_PLUG_EVENTS_USB_DISABLE      BIT(2)
0478 #define TB_PLUG_EVENTS_CS_1_LANE_DISABLE    BIT(3)
0479 #define TB_PLUG_EVENTS_CS_1_DPOUT_DISABLE   BIT(4)
0480 #define TB_PLUG_EVENTS_CS_1_LOW_DPIN_DISABLE    BIT(5)
0481 #define TB_PLUG_EVENTS_CS_1_HIGH_DPIN_DISABLE   BIT(6)
0482 
0483 #define TB_PLUG_EVENTS_PCIE_WR_DATA     0x1b
0484 #define TB_PLUG_EVENTS_PCIE_CMD         0x1c
0485 #define TB_PLUG_EVENTS_PCIE_CMD_DW_OFFSET_MASK  GENMASK(9, 0)
0486 #define TB_PLUG_EVENTS_PCIE_CMD_BR_SHIFT    10
0487 #define TB_PLUG_EVENTS_PCIE_CMD_BR_MASK     GENMASK(17, 10)
0488 #define TB_PLUG_EVENTS_PCIE_CMD_RD_WR_MASK  BIT(21)
0489 #define TB_PLUG_EVENTS_PCIE_CMD_WR      0x1
0490 #define TB_PLUG_EVENTS_PCIE_CMD_COMMAND_SHIFT   22
0491 #define TB_PLUG_EVENTS_PCIE_CMD_COMMAND_MASK    GENMASK(24, 22)
0492 #define TB_PLUG_EVENTS_PCIE_CMD_COMMAND_VAL 0x2
0493 #define TB_PLUG_EVENTS_PCIE_CMD_REQ_ACK_MASK    BIT(30)
0494 #define TB_PLUG_EVENTS_PCIE_CMD_TIMEOUT_MASK    BIT(31)
0495 #define TB_PLUG_EVENTS_PCIE_CMD_RD_DATA     0x1d
0496 
0497 /* CP Low Power registers */
0498 #define TB_LOW_PWR_C1_CL1           0x1
0499 #define TB_LOW_PWR_C1_CL1_OBJ_MASK      GENMASK(4, 1)
0500 #define TB_LOW_PWR_C1_CL2_OBJ_MASK      GENMASK(4, 1)
0501 #define TB_LOW_PWR_C1_PORT_A_MASK       GENMASK(2, 1)
0502 #define TB_LOW_PWR_C0_PORT_B_MASK       GENMASK(4, 3)
0503 #define TB_LOW_PWR_C3_CL1           0x3
0504 
0505 /* Common link controller registers */
0506 #define TB_LC_DESC              0x02
0507 #define TB_LC_DESC_NLC_MASK         GENMASK(3, 0)
0508 #define TB_LC_DESC_SIZE_SHIFT           8
0509 #define TB_LC_DESC_SIZE_MASK            GENMASK(15, 8)
0510 #define TB_LC_DESC_PORT_SIZE_SHIFT      16
0511 #define TB_LC_DESC_PORT_SIZE_MASK       GENMASK(27, 16)
0512 #define TB_LC_FUSE              0x03
0513 #define TB_LC_SNK_ALLOCATION            0x10
0514 #define TB_LC_SNK_ALLOCATION_SNK0_MASK      GENMASK(3, 0)
0515 #define TB_LC_SNK_ALLOCATION_SNK0_CM        0x1
0516 #define TB_LC_SNK_ALLOCATION_SNK1_SHIFT     4
0517 #define TB_LC_SNK_ALLOCATION_SNK1_MASK      GENMASK(7, 4)
0518 #define TB_LC_SNK_ALLOCATION_SNK1_CM        0x1
0519 #define TB_LC_POWER             0x740
0520 
0521 /* Link controller registers */
0522 #define TB_LC_CS_42             0x2a
0523 #define TB_LC_CS_42_USB_PLUGGED         BIT(31)
0524 
0525 #define TB_LC_PORT_ATTR             0x8d
0526 #define TB_LC_PORT_ATTR_BE          BIT(12)
0527 
0528 #define TB_LC_SX_CTRL               0x96
0529 #define TB_LC_SX_CTRL_WOC           BIT(1)
0530 #define TB_LC_SX_CTRL_WOD           BIT(2)
0531 #define TB_LC_SX_CTRL_WODPC         BIT(3)
0532 #define TB_LC_SX_CTRL_WODPD         BIT(4)
0533 #define TB_LC_SX_CTRL_WOU4          BIT(5)
0534 #define TB_LC_SX_CTRL_WOP           BIT(6)
0535 #define TB_LC_SX_CTRL_L1C           BIT(16)
0536 #define TB_LC_SX_CTRL_L1D           BIT(17)
0537 #define TB_LC_SX_CTRL_L2C           BIT(20)
0538 #define TB_LC_SX_CTRL_L2D           BIT(21)
0539 #define TB_LC_SX_CTRL_SLI           BIT(29)
0540 #define TB_LC_SX_CTRL_UPSTREAM          BIT(30)
0541 #define TB_LC_SX_CTRL_SLP           BIT(31)
0542 #define TB_LC_LINK_ATTR             0x97
0543 #define TB_LC_LINK_ATTR_CPS         BIT(18)
0544 
0545 #define TB_LC_LINK_REQ              0xad
0546 #define TB_LC_LINK_REQ_XHCI_CONNECT     BIT(31)
0547 
0548 #endif