1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef _INTEL_DPLL_MGR_H_
26#define _INTEL_DPLL_MGR_H_
27
28#include <linux/types.h>
29
30#include "intel_display.h"
31
32
33#define abs_diff(a, b) ({ \
34 typeof(a) __a = (a); \
35 typeof(b) __b = (b); \
36 (void) (&__a == &__b); \
37 __a > __b ? (__a - __b) : (__b - __a); })
38
39struct drm_atomic_state;
40struct drm_device;
41struct drm_i915_private;
42struct intel_crtc;
43struct intel_crtc_state;
44struct intel_encoder;
45struct intel_shared_dpll;
46
47
48
49
50
51
52enum intel_dpll_id {
53
54
55
56 DPLL_ID_PRIVATE = -1,
57
58
59
60
61 DPLL_ID_PCH_PLL_A = 0,
62
63
64
65 DPLL_ID_PCH_PLL_B = 1,
66
67
68
69
70
71 DPLL_ID_WRPLL1 = 0,
72
73
74
75 DPLL_ID_WRPLL2 = 1,
76
77
78
79 DPLL_ID_SPLL = 2,
80
81
82
83 DPLL_ID_LCPLL_810 = 3,
84
85
86
87 DPLL_ID_LCPLL_1350 = 4,
88
89
90
91 DPLL_ID_LCPLL_2700 = 5,
92
93
94
95
96
97 DPLL_ID_SKL_DPLL0 = 0,
98
99
100
101 DPLL_ID_SKL_DPLL1 = 1,
102
103
104
105 DPLL_ID_SKL_DPLL2 = 2,
106
107
108
109 DPLL_ID_SKL_DPLL3 = 3,
110
111
112
113
114
115 DPLL_ID_ICL_DPLL0 = 0,
116
117
118
119 DPLL_ID_ICL_DPLL1 = 1,
120
121
122
123 DPLL_ID_ICL_TBTPLL = 2,
124
125
126
127 DPLL_ID_ICL_MGPLL1 = 3,
128
129
130
131 DPLL_ID_ICL_MGPLL2 = 4,
132
133
134
135 DPLL_ID_ICL_MGPLL3 = 5,
136
137
138
139 DPLL_ID_ICL_MGPLL4 = 6,
140};
141#define I915_NUM_PLLS 7
142
143struct intel_dpll_hw_state {
144
145 u32 dpll;
146 u32 dpll_md;
147 u32 fp0;
148 u32 fp1;
149
150
151 u32 wrpll;
152 u32 spll;
153
154
155
156
157
158
159
160
161 u32 ctrl1;
162
163 u32 cfgcr1, cfgcr2;
164
165
166 u32 cfgcr0;
167
168
169
170 u32 ebb0, ebb4, pll0, pll1, pll2, pll3, pll6, pll8, pll9, pll10, pcsdw12;
171
172
173
174
175
176 u32 mg_refclkin_ctl;
177 u32 mg_clktop2_coreclkctl1;
178 u32 mg_clktop2_hsclkctl;
179 u32 mg_pll_div0;
180 u32 mg_pll_div1;
181 u32 mg_pll_lf;
182 u32 mg_pll_frac_lock;
183 u32 mg_pll_ssc;
184 u32 mg_pll_bias;
185 u32 mg_pll_tdc_coldst_bias;
186 u32 mg_pll_bias_mask;
187 u32 mg_pll_tdc_coldst_bias_mask;
188};
189
190
191
192
193
194
195
196
197
198
199
200struct intel_shared_dpll_state {
201
202
203
204 unsigned crtc_mask;
205
206
207
208
209
210 struct intel_dpll_hw_state hw_state;
211};
212
213
214
215
216struct intel_shared_dpll_funcs {
217
218
219
220
221
222
223
224 void (*prepare)(struct drm_i915_private *dev_priv,
225 struct intel_shared_dpll *pll);
226
227
228
229
230
231
232
233 void (*enable)(struct drm_i915_private *dev_priv,
234 struct intel_shared_dpll *pll);
235
236
237
238
239
240
241
242
243 void (*disable)(struct drm_i915_private *dev_priv,
244 struct intel_shared_dpll *pll);
245
246
247
248
249
250
251
252
253 bool (*get_hw_state)(struct drm_i915_private *dev_priv,
254 struct intel_shared_dpll *pll,
255 struct intel_dpll_hw_state *hw_state);
256};
257
258
259
260
261struct dpll_info {
262
263
264
265 const char *name;
266
267
268
269
270 const struct intel_shared_dpll_funcs *funcs;
271
272
273
274
275
276 enum intel_dpll_id id;
277
278#define INTEL_DPLL_ALWAYS_ON (1 << 0)
279
280
281
282
283
284
285
286 u32 flags;
287};
288
289
290
291
292struct intel_shared_dpll {
293
294
295
296
297
298
299 struct intel_shared_dpll_state state;
300
301
302
303
304 unsigned active_mask;
305
306
307
308
309 bool on;
310
311
312
313
314 const struct dpll_info *info;
315};
316
317#define SKL_DPLL0 0
318#define SKL_DPLL1 1
319#define SKL_DPLL2 2
320#define SKL_DPLL3 3
321
322
323struct intel_shared_dpll *
324intel_get_shared_dpll_by_id(struct drm_i915_private *dev_priv,
325 enum intel_dpll_id id);
326enum intel_dpll_id
327intel_get_shared_dpll_id(struct drm_i915_private *dev_priv,
328 struct intel_shared_dpll *pll);
329void assert_shared_dpll(struct drm_i915_private *dev_priv,
330 struct intel_shared_dpll *pll,
331 bool state);
332#define assert_shared_dpll_enabled(d, p) assert_shared_dpll(d, p, true)
333#define assert_shared_dpll_disabled(d, p) assert_shared_dpll(d, p, false)
334struct intel_shared_dpll *intel_get_shared_dpll(struct intel_crtc_state *state,
335 struct intel_encoder *encoder);
336void intel_release_shared_dpll(struct intel_shared_dpll *dpll,
337 struct intel_crtc *crtc,
338 struct drm_atomic_state *state);
339void intel_prepare_shared_dpll(const struct intel_crtc_state *crtc_state);
340void intel_enable_shared_dpll(const struct intel_crtc_state *crtc_state);
341void intel_disable_shared_dpll(const struct intel_crtc_state *crtc_state);
342void intel_shared_dpll_swap_state(struct drm_atomic_state *state);
343void intel_shared_dpll_init(struct drm_device *dev);
344
345void intel_dpll_dump_hw_state(struct drm_i915_private *dev_priv,
346 const struct intel_dpll_hw_state *hw_state);
347int cnl_hdmi_pll_ref_clock(struct drm_i915_private *dev_priv);
348enum intel_dpll_id icl_tc_port_to_pll_id(enum tc_port tc_port);
349bool intel_dpll_is_combophy(enum intel_dpll_id id);
350
351#endif
352