]> Git Repo - linux.git/blob - drivers/gpu/drm/amd/display/dc/bios/command_table_helper2.c
Linux 6.14-rc3
[linux.git] / drivers / gpu / drm / amd / display / dc / bios / command_table_helper2.c
1 /*
2  * Copyright 2012-15 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * Authors: AMD
23  *
24  */
25
26 #include "dm_services.h"
27
28 #include "ObjectID.h"
29 #include "atomfirmware.h"
30
31 #include "include/bios_parser_types.h"
32
33 #include "command_table_helper2.h"
34
35 bool dal_bios_parser_init_cmd_tbl_helper2(
36         const struct command_table_helper **h,
37         enum dce_version dce)
38 {
39         switch (dce) {
40 #if defined(CONFIG_DRM_AMD_DC_SI)
41         case DCE_VERSION_6_0:
42         case DCE_VERSION_6_1:
43         case DCE_VERSION_6_4:
44                 *h = dal_cmd_tbl_helper_dce60_get_table();
45                 return true;
46 #endif
47
48         case DCE_VERSION_8_0:
49         case DCE_VERSION_8_1:
50         case DCE_VERSION_8_3:
51                 *h = dal_cmd_tbl_helper_dce80_get_table();
52                 return true;
53
54         case DCE_VERSION_10_0:
55                 *h = dal_cmd_tbl_helper_dce110_get_table();
56                 return true;
57
58         case DCE_VERSION_11_0:
59                 *h = dal_cmd_tbl_helper_dce110_get_table();
60                 return true;
61
62         case DCE_VERSION_11_2:
63         case DCE_VERSION_11_22:
64         case DCE_VERSION_12_0:
65         case DCE_VERSION_12_1:
66                 *h = dal_cmd_tbl_helper_dce112_get_table2();
67                 return true;
68         case DCN_VERSION_1_0:
69         case DCN_VERSION_1_01:
70         case DCN_VERSION_2_0:
71         case DCN_VERSION_2_1:
72         case DCN_VERSION_2_01:
73         case DCN_VERSION_3_0:
74         case DCN_VERSION_3_01:
75         case DCN_VERSION_3_02:
76         case DCN_VERSION_3_03:
77         case DCN_VERSION_3_1:
78         case DCN_VERSION_3_14:
79         case DCN_VERSION_3_15:
80         case DCN_VERSION_3_16:
81         case DCN_VERSION_3_2:
82         case DCN_VERSION_3_21:
83         case DCN_VERSION_3_5:
84         case DCN_VERSION_3_51:
85         case DCN_VERSION_4_01:
86                 *h = dal_cmd_tbl_helper_dce112_get_table2();
87                 return true;
88
89         default:
90                 /* Unsupported DCE */
91                 BREAK_TO_DEBUGGER();
92                 return false;
93         }
94 }
95
96 /* real implementations */
97
98 bool dal_cmd_table_helper_controller_id_to_atom2(
99         enum controller_id id,
100         uint8_t *atom_id)
101 {
102         if (atom_id == NULL) {
103                 BREAK_TO_DEBUGGER();
104                 return false;
105         }
106
107         switch (id) {
108         case CONTROLLER_ID_D0:
109                 *atom_id = ATOM_CRTC1;
110                 return true;
111         case CONTROLLER_ID_D1:
112                 *atom_id = ATOM_CRTC2;
113                 return true;
114         case CONTROLLER_ID_D2:
115                 *atom_id = ATOM_CRTC3;
116                 return true;
117         case CONTROLLER_ID_D3:
118                 *atom_id = ATOM_CRTC4;
119                 return true;
120         case CONTROLLER_ID_D4:
121                 *atom_id = ATOM_CRTC5;
122                 return true;
123         case CONTROLLER_ID_D5:
124                 *atom_id = ATOM_CRTC6;
125                 return true;
126         /* TODO :case CONTROLLER_ID_UNDERLAY0:
127                 *atom_id = ATOM_UNDERLAY_PIPE0;
128                 return true;
129         */
130         case CONTROLLER_ID_UNDEFINED:
131                 *atom_id = ATOM_CRTC_INVALID;
132                 return true;
133         default:
134                 /* Wrong controller id */
135                 BREAK_TO_DEBUGGER();
136                 return false;
137         }
138 }
139
140 /**
141  * dal_cmd_table_helper_transmitter_bp_to_atom2 - Translate the Transmitter to the
142  *                                     corresponding ATOM BIOS value
143  *  @t: transmitter
144  *  returns: digitalTransmitter
145  *    // =00: Digital Transmitter1 ( UNIPHY linkAB )
146  *    // =01: Digital Transmitter2 ( UNIPHY linkCD )
147  *    // =02: Digital Transmitter3 ( UNIPHY linkEF )
148  */
149 uint8_t dal_cmd_table_helper_transmitter_bp_to_atom2(
150         enum transmitter t)
151 {
152         switch (t) {
153         case TRANSMITTER_UNIPHY_A:
154         case TRANSMITTER_UNIPHY_B:
155         case TRANSMITTER_TRAVIS_LCD:
156                 return 0;
157         case TRANSMITTER_UNIPHY_C:
158         case TRANSMITTER_UNIPHY_D:
159                 return 1;
160         case TRANSMITTER_UNIPHY_E:
161         case TRANSMITTER_UNIPHY_F:
162                 return 2;
163         default:
164                 /* Invalid Transmitter Type! */
165                 BREAK_TO_DEBUGGER();
166                 return 0;
167         }
168 }
169
170 uint32_t dal_cmd_table_helper_encoder_mode_bp_to_atom2(
171         enum signal_type s,
172         bool enable_dp_audio)
173 {
174         switch (s) {
175         case SIGNAL_TYPE_DVI_SINGLE_LINK:
176         case SIGNAL_TYPE_DVI_DUAL_LINK:
177                 return ATOM_ENCODER_MODE_DVI;
178         case SIGNAL_TYPE_HDMI_TYPE_A:
179                 return ATOM_ENCODER_MODE_HDMI;
180         case SIGNAL_TYPE_LVDS:
181                 return ATOM_ENCODER_MODE_LVDS;
182         case SIGNAL_TYPE_EDP:
183         case SIGNAL_TYPE_DISPLAY_PORT_MST:
184         case SIGNAL_TYPE_DISPLAY_PORT:
185         case SIGNAL_TYPE_VIRTUAL:
186                 if (enable_dp_audio)
187                         return ATOM_ENCODER_MODE_DP_AUDIO;
188                 else
189                         return ATOM_ENCODER_MODE_DP;
190         case SIGNAL_TYPE_RGB:
191                 return ATOM_ENCODER_MODE_CRT;
192         default:
193                 return ATOM_ENCODER_MODE_CRT;
194         }
195 }
196
197 bool dal_cmd_table_helper_clock_source_id_to_ref_clk_src2(
198         enum clock_source_id id,
199         uint32_t *ref_clk_src_id)
200 {
201         if (ref_clk_src_id == NULL) {
202                 BREAK_TO_DEBUGGER();
203                 return false;
204         }
205
206         switch (id) {
207         case CLOCK_SOURCE_ID_PLL1:
208                 *ref_clk_src_id = ENCODER_REFCLK_SRC_P1PLL;
209                 return true;
210         case CLOCK_SOURCE_ID_PLL2:
211                 *ref_clk_src_id = ENCODER_REFCLK_SRC_P2PLL;
212                 return true;
213         /*TODO:case CLOCK_SOURCE_ID_DCPLL:
214                 *ref_clk_src_id = ENCODER_REFCLK_SRC_DCPLL;
215                 return true;
216         */
217         case CLOCK_SOURCE_ID_EXTERNAL:
218                 *ref_clk_src_id = ENCODER_REFCLK_SRC_EXTCLK;
219                 return true;
220         case CLOCK_SOURCE_ID_UNDEFINED:
221                 *ref_clk_src_id = ENCODER_REFCLK_SRC_INVALID;
222                 return true;
223         default:
224                 /* Unsupported clock source id */
225                 BREAK_TO_DEBUGGER();
226                 return false;
227         }
228 }
229
230 uint8_t dal_cmd_table_helper_encoder_id_to_atom2(
231         enum encoder_id id)
232 {
233         switch (id) {
234         case ENCODER_ID_INTERNAL_LVDS:
235                 return ENCODER_OBJECT_ID_INTERNAL_LVDS;
236         case ENCODER_ID_INTERNAL_TMDS1:
237                 return ENCODER_OBJECT_ID_INTERNAL_TMDS1;
238         case ENCODER_ID_INTERNAL_TMDS2:
239                 return ENCODER_OBJECT_ID_INTERNAL_TMDS2;
240         case ENCODER_ID_INTERNAL_DAC1:
241                 return ENCODER_OBJECT_ID_INTERNAL_DAC1;
242         case ENCODER_ID_INTERNAL_DAC2:
243                 return ENCODER_OBJECT_ID_INTERNAL_DAC2;
244         case ENCODER_ID_INTERNAL_LVTM1:
245                 return ENCODER_OBJECT_ID_INTERNAL_LVTM1;
246         case ENCODER_ID_INTERNAL_HDMI:
247                 return ENCODER_OBJECT_ID_HDMI_INTERNAL;
248         case ENCODER_ID_EXTERNAL_TRAVIS:
249                 return ENCODER_OBJECT_ID_TRAVIS;
250         case ENCODER_ID_EXTERNAL_NUTMEG:
251                 return ENCODER_OBJECT_ID_NUTMEG;
252         case ENCODER_ID_INTERNAL_KLDSCP_TMDS1:
253                 return ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1;
254         case ENCODER_ID_INTERNAL_KLDSCP_DAC1:
255                 return ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1;
256         case ENCODER_ID_INTERNAL_KLDSCP_DAC2:
257                 return ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2;
258         case ENCODER_ID_EXTERNAL_MVPU_FPGA:
259                 return ENCODER_OBJECT_ID_MVPU_FPGA;
260         case ENCODER_ID_INTERNAL_DDI:
261                 return ENCODER_OBJECT_ID_INTERNAL_DDI;
262         case ENCODER_ID_INTERNAL_UNIPHY:
263                 return ENCODER_OBJECT_ID_INTERNAL_UNIPHY;
264         case ENCODER_ID_INTERNAL_KLDSCP_LVTMA:
265                 return ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA;
266         case ENCODER_ID_INTERNAL_UNIPHY1:
267                 return ENCODER_OBJECT_ID_INTERNAL_UNIPHY1;
268         case ENCODER_ID_INTERNAL_UNIPHY2:
269                 return ENCODER_OBJECT_ID_INTERNAL_UNIPHY2;
270         case ENCODER_ID_INTERNAL_UNIPHY3:
271                 return ENCODER_OBJECT_ID_INTERNAL_UNIPHY3;
272         case ENCODER_ID_INTERNAL_WIRELESS:
273                 return ENCODER_OBJECT_ID_INTERNAL_VCE;
274         case ENCODER_ID_INTERNAL_VIRTUAL:
275                 return ENCODER_OBJECT_ID_NONE;
276         case ENCODER_ID_UNKNOWN:
277                 return ENCODER_OBJECT_ID_NONE;
278         default:
279                 /* Invalid encoder id */
280                 BREAK_TO_DEBUGGER();
281                 return ENCODER_OBJECT_ID_NONE;
282         }
283 }
This page took 0.047437 seconds and 4 git commands to generate.