blob: 9e637d0da6f50df149ea3c4346a7d365b09a4032 [file] [log] [blame]
Tim Wawrzynczak5473d292023-02-06 16:46:33 -07001--
2-- Copyright (C) 2022 Google, LLC
3--
4-- This program is free software; you can redistribute it and/or modify
5-- it under the terms of the GNU General Public License as published by
6-- the Free Software Foundation; either version 2 of the License, or
7-- (at your option) any later version.
8--
9-- This program is distributed in the hope that it will be useful,
10-- but WITHOUT ANY WARRANTY; without even the implied warranty of
11-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12-- GNU General Public License for more details.
13--
14
Nico Huberc74eafd2024-07-23 12:38:02 +020015with HW.GFX.GMA.Config;
Tim Wawrzynczak5473d292023-02-06 16:46:33 -070016with HW.GFX.GMA.DP_Info;
Nico Huberc74eafd2024-07-23 12:38:02 +020017with HW.GFX.GMA.Registers;
Tim Wawrzynczak5473d292023-02-06 16:46:33 -070018
19package HW.GFX.GMA.Connectors.TC is
20
Tim Wawrzynczak5473d292023-02-06 16:46:33 -070021 procedure Program_DP_Mode (P : USBC_Port; Lane_Count : Natural);
22 procedure Enable_HDMI (Port : USBC_Port);
23
24 procedure Set_Signal_Levels
25 (Port : USBC_Port;
26 Link : DP_Link;
27 Train_Set : DP_Info.Train_Set);
28
29 type TC_Cold_Request_Type is (Block, Unblock);
30 procedure TC_Cold_Request
31 (Request : in TC_Cold_Request_Type;
32 Success : out Boolean);
33
Nico Huberc74eafd2024-07-23 12:38:02 +020034private
35 -- Some of the Connectors code only supports 4 ports.
36 -- And so far, no SKU needs more.
37 subtype Valid_TC_Port is USBC_Port range DDI_TC1 .. Config.Last_TC_Port;
38
Nico Huberdea094a2024-08-19 21:31:23 +020039 type Port_Regs_Array is array (USBC_Port) of Registers.Registers_Index;
40
41 DDI_BUF_CTL_BUFFER_ENABLE : constant := 1 * 2 ** 31;
42 DDI_BUF_CTL_TRANS_SELECT_MASK : constant := 16#f# * 2 ** 24;
43 DDI_BUF_CTL_PORT_REVERSAL : constant := 1 * 2 ** 16;
44 DDI_BUF_CTL_PORT_WIDTH_MASK : constant := 7 * 2 ** 1;
45 DDI_BUF_CTL_PORT_WIDTH_1_LANE : constant := 0 * 2 ** 1;
46 DDI_BUF_CTL_PORT_WIDTH_2_LANES : constant := 1 * 2 ** 1;
47 DDI_BUF_CTL_PORT_WIDTH_4_LANES : constant := 3 * 2 ** 1;
48 DDI_BUF_CTL_IDLE_STATUS : constant := 1 * 2 ** 7;
49 DDI_BUF_CTL_TC_PHY_OWNERSHIP : constant := 1 * 2 ** 6;
50
51 DDI_BUF_CTL_PORT_WIDTH : constant array (DP_Lane_Count) of Word32 :=
52 (HW.GFX.DP_Lane_Count_1 => DDI_BUF_CTL_PORT_WIDTH_1_LANE,
53 HW.GFX.DP_Lane_Count_2 => DDI_BUF_CTL_PORT_WIDTH_2_LANES,
54 HW.GFX.DP_Lane_Count_4 => DDI_BUF_CTL_PORT_WIDTH_4_LANES);
55 DDI_BUF_CTL : constant Port_Regs_Array :=
56 (DDI_TC1 => Registers.DDI_BUF_CTL_USBC1,
57 DDI_TC2 => Registers.DDI_BUF_CTL_USBC2,
58 DDI_TC3 => Registers.DDI_BUF_CTL_USBC3,
59 DDI_TC4 => Registers.DDI_BUF_CTL_USBC4,
60 DDI_TC5 => Registers.DDI_BUF_CTL_USBC5,
61 DDI_TC6 => Registers.DDI_BUF_CTL_USBC6);
62
Nico Huberc74eafd2024-07-23 12:38:02 +020063 type Fia_Regs_Record is record
64 PORT_TX_DFLEXDPMLE1 : Registers.Registers_Index;
65 PORT_TX_DFLEXDPSP : Registers.Registers_Index;
66 PORT_TX_DFLEXDPPMS : Registers.Registers_Index;
67 PORT_TX_DFLEXDPCSSS : Registers.Registers_Index;
68 PORT_TX_DFLEXPA1 : Registers.Registers_Index;
69 end record;
70
71 type Fia_Regs_Array is array (USBC_Port) of Fia_Regs_Record;
72 Fia_Regs : constant Fia_Regs_Array :=
73 (DDI_TC1 =>
74 (Registers.PORT_TX_DFLEXDPMLE1_FIA1,
75 Registers.PORT_TX_DFLEXDPSP_FIA1,
76 Registers.PORT_TX_DFLEXDPPMS_FIA1,
77 Registers.PORT_TX_DFLEXDPCSSS_FIA1,
78 Registers.PORT_TX_DFLEXPA1_FIA1),
79 DDI_TC2 =>
80 (Registers.PORT_TX_DFLEXDPMLE1_FIA1,
81 Registers.PORT_TX_DFLEXDPSP_FIA1,
82 Registers.PORT_TX_DFLEXDPPMS_FIA1,
83 Registers.PORT_TX_DFLEXDPCSSS_FIA1,
84 Registers.PORT_TX_DFLEXPA1_FIA1),
85 DDI_TC3 =>
86 (Registers.PORT_TX_DFLEXDPMLE1_FIA2,
87 Registers.PORT_TX_DFLEXDPSP_FIA2,
88 Registers.PORT_TX_DFLEXDPPMS_FIA2,
89 Registers.PORT_TX_DFLEXDPCSSS_FIA2,
90 Registers.PORT_TX_DFLEXPA1_FIA2),
91 DDI_TC4 =>
92 (Registers.PORT_TX_DFLEXDPMLE1_FIA2,
93 Registers.PORT_TX_DFLEXDPSP_FIA2,
94 Registers.PORT_TX_DFLEXDPPMS_FIA2,
95 Registers.PORT_TX_DFLEXDPCSSS_FIA2,
96 Registers.PORT_TX_DFLEXPA1_FIA2),
97 DDI_TC5 =>
98 (Registers.PORT_TX_DFLEXDPMLE1_FIA3,
99 Registers.PORT_TX_DFLEXDPSP_FIA3,
100 Registers.PORT_TX_DFLEXDPPMS_FIA3,
101 Registers.PORT_TX_DFLEXDPCSSS_FIA3,
102 Registers.PORT_TX_DFLEXPA1_FIA3),
103 DDI_TC6 =>
104 (Registers.PORT_TX_DFLEXDPMLE1_FIA3,
105 Registers.PORT_TX_DFLEXDPSP_FIA3,
106 Registers.PORT_TX_DFLEXDPPMS_FIA3,
107 Registers.PORT_TX_DFLEXDPCSSS_FIA3,
108 Registers.PORT_TX_DFLEXPA1_FIA3));
109
110 function Fia_Index (Port : USBC_Port) return Natural
111 is
112 (case Port is
113 when DDI_TC1 | DDI_TC3 | DDI_TC5 => 0,
114 when DDI_TC2 | DDI_TC4 | DDI_TC6 => 1);
115
116 function DFLEXDPMLE1_DPMLETC_MASK (Port : USBC_Port) return Word32 is
117 (Shift_Left (15, 4 * Fia_Index (Port)));
118 function DFLEXDPMLE1_DPMLETC_ML0 (Port : USBC_Port) return Word32 is
119 (Shift_Left (1, 4 * Fia_Index (Port)));
120 function DFLEXDPMLE1_DPMLETC_ML1_0 (Port : USBC_Port) return Word32 is
121 (Shift_Left (3, 4 * Fia_Index (Port)));
122 function DFLEXDPMLE1_DPMLETC_ML3 (Port : USBC_Port) return Word32 is
123 (Shift_Left (8, 4 * Fia_Index (Port)));
124 function DFLEXDPMLE1_DPMLETC_ML3_2 (Port : USBC_Port) return Word32 is
125 (Shift_Left (12, 4 * Fia_Index (Port)));
126 function DFLEXDPMLE1_DPMLETC_ML3_0 (Port : USBC_Port) return Word32 is
127 (Shift_Left (15, 4 * Fia_Index (Port)));
128 function DP_PHY_MODE_STATUS_COMPLETE (Port : USBC_Port) return Word32 is
129 (Shift_Left (1, Fia_Index (Port)));
130 function DP_PHY_MODE_STATUS_NOT_SAFE (Port : USBC_Port) return Word32 is
131 (Shift_Left (1, Fia_Index (Port)));
132 function TC_LIVE_STATE_TC (Port : USBC_Port) return Word32 is
133 (Shift_Left (1, Fia_Index (Port) * 8 + 5));
134 function DP_LANE_ASSIGNMENT_MASK (Port : USBC_Port) return Word32 is
135 (Shift_Left (16#f#, Fia_Index (Port) * 8));
136 function DP_LANE_ASSIGNMENT_SHIFT (Port : USBC_Port) return Natural is
137 (Fia_Index (Port) * 8);
138
139 procedure Get_Lane_Assignment_Count
140 (Port : in USBC_Port;
141 Lanes : out DP_Lane_Count);
142 procedure Set_Lane_Count (Port : USBC_Port; Lanes : DP_Lane_Count);
143
Tim Wawrzynczak5473d292023-02-06 16:46:33 -0700144end HW.GFX.GMA.Connectors.TC;