xref: /openbmc/linux/drivers/gpu/drm/i915/display/intel_dpll_mgr.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1df0566a6SJani Nikula /*
2df0566a6SJani Nikula  * Copyright © 2012-2016 Intel Corporation
3df0566a6SJani Nikula  *
4df0566a6SJani Nikula  * Permission is hereby granted, free of charge, to any person obtaining a
5df0566a6SJani Nikula  * copy of this software and associated documentation files (the "Software"),
6df0566a6SJani Nikula  * to deal in the Software without restriction, including without limitation
7df0566a6SJani Nikula  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8df0566a6SJani Nikula  * and/or sell copies of the Software, and to permit persons to whom the
9df0566a6SJani Nikula  * Software is furnished to do so, subject to the following conditions:
10df0566a6SJani Nikula  *
11df0566a6SJani Nikula  * The above copyright notice and this permission notice (including the next
12df0566a6SJani Nikula  * paragraph) shall be included in all copies or substantial portions of the
13df0566a6SJani Nikula  * Software.
14df0566a6SJani Nikula  *
15df0566a6SJani Nikula  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16df0566a6SJani Nikula  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17df0566a6SJani Nikula  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18df0566a6SJani Nikula  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19df0566a6SJani Nikula  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20df0566a6SJani Nikula  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21df0566a6SJani Nikula  * IN THE SOFTWARE.
22df0566a6SJani Nikula  *
23df0566a6SJani Nikula  */
24df0566a6SJani Nikula 
25df0566a6SJani Nikula #ifndef _INTEL_DPLL_MGR_H_
26df0566a6SJani Nikula #define _INTEL_DPLL_MGR_H_
27df0566a6SJani Nikula 
28df0566a6SJani Nikula #include <linux/types.h>
29df0566a6SJani Nikula 
30eef037eaSVivek Kasireddy #include "intel_wakeref.h"
31df0566a6SJani Nikula 
32497520caSJani Nikula enum tc_port;
33df0566a6SJani Nikula struct drm_i915_private;
34866955faSImre Deak struct intel_atomic_state;
35df0566a6SJani Nikula struct intel_crtc;
36df0566a6SJani Nikula struct intel_crtc_state;
37df0566a6SJani Nikula struct intel_encoder;
38df0566a6SJani Nikula struct intel_shared_dpll;
39d39bc5c5SJani Nikula struct intel_shared_dpll_funcs;
40df0566a6SJani Nikula 
41df0566a6SJani Nikula /**
42df0566a6SJani Nikula  * enum intel_dpll_id - possible DPLL ids
43df0566a6SJani Nikula  *
44df0566a6SJani Nikula  * Enumeration of possible IDs for a DPLL. Real shared dpll ids must be >= 0.
45df0566a6SJani Nikula  */
46df0566a6SJani Nikula enum intel_dpll_id {
47df0566a6SJani Nikula 	/**
48df0566a6SJani Nikula 	 * @DPLL_ID_PRIVATE: non-shared dpll in use
49df0566a6SJani Nikula 	 */
50df0566a6SJani Nikula 	DPLL_ID_PRIVATE = -1,
51df0566a6SJani Nikula 
52df0566a6SJani Nikula 	/**
53df0566a6SJani Nikula 	 * @DPLL_ID_PCH_PLL_A: DPLL A in ILK, SNB and IVB
54df0566a6SJani Nikula 	 */
55df0566a6SJani Nikula 	DPLL_ID_PCH_PLL_A = 0,
56df0566a6SJani Nikula 	/**
57df0566a6SJani Nikula 	 * @DPLL_ID_PCH_PLL_B: DPLL B in ILK, SNB and IVB
58df0566a6SJani Nikula 	 */
59df0566a6SJani Nikula 	DPLL_ID_PCH_PLL_B = 1,
60df0566a6SJani Nikula 
61df0566a6SJani Nikula 
62df0566a6SJani Nikula 	/**
63df0566a6SJani Nikula 	 * @DPLL_ID_WRPLL1: HSW and BDW WRPLL1
64df0566a6SJani Nikula 	 */
65df0566a6SJani Nikula 	DPLL_ID_WRPLL1 = 0,
66df0566a6SJani Nikula 	/**
67df0566a6SJani Nikula 	 * @DPLL_ID_WRPLL2: HSW and BDW WRPLL2
68df0566a6SJani Nikula 	 */
69df0566a6SJani Nikula 	DPLL_ID_WRPLL2 = 1,
70df0566a6SJani Nikula 	/**
71df0566a6SJani Nikula 	 * @DPLL_ID_SPLL: HSW and BDW SPLL
72df0566a6SJani Nikula 	 */
73df0566a6SJani Nikula 	DPLL_ID_SPLL = 2,
74df0566a6SJani Nikula 	/**
75df0566a6SJani Nikula 	 * @DPLL_ID_LCPLL_810: HSW and BDW 0.81 GHz LCPLL
76df0566a6SJani Nikula 	 */
77df0566a6SJani Nikula 	DPLL_ID_LCPLL_810 = 3,
78df0566a6SJani Nikula 	/**
79df0566a6SJani Nikula 	 * @DPLL_ID_LCPLL_1350: HSW and BDW 1.35 GHz LCPLL
80df0566a6SJani Nikula 	 */
81df0566a6SJani Nikula 	DPLL_ID_LCPLL_1350 = 4,
82df0566a6SJani Nikula 	/**
83df0566a6SJani Nikula 	 * @DPLL_ID_LCPLL_2700: HSW and BDW 2.7 GHz LCPLL
84df0566a6SJani Nikula 	 */
85df0566a6SJani Nikula 	DPLL_ID_LCPLL_2700 = 5,
86df0566a6SJani Nikula 
87df0566a6SJani Nikula 
88df0566a6SJani Nikula 	/**
89df0566a6SJani Nikula 	 * @DPLL_ID_SKL_DPLL0: SKL and later DPLL0
90df0566a6SJani Nikula 	 */
91df0566a6SJani Nikula 	DPLL_ID_SKL_DPLL0 = 0,
92df0566a6SJani Nikula 	/**
93df0566a6SJani Nikula 	 * @DPLL_ID_SKL_DPLL1: SKL and later DPLL1
94df0566a6SJani Nikula 	 */
95df0566a6SJani Nikula 	DPLL_ID_SKL_DPLL1 = 1,
96df0566a6SJani Nikula 	/**
97df0566a6SJani Nikula 	 * @DPLL_ID_SKL_DPLL2: SKL and later DPLL2
98df0566a6SJani Nikula 	 */
99df0566a6SJani Nikula 	DPLL_ID_SKL_DPLL2 = 2,
100df0566a6SJani Nikula 	/**
101df0566a6SJani Nikula 	 * @DPLL_ID_SKL_DPLL3: SKL and later DPLL3
102df0566a6SJani Nikula 	 */
103df0566a6SJani Nikula 	DPLL_ID_SKL_DPLL3 = 3,
104df0566a6SJani Nikula 
105df0566a6SJani Nikula 
106df0566a6SJani Nikula 	/**
10768ff39c3SVandita Kulkarni 	 * @DPLL_ID_ICL_DPLL0: ICL/TGL combo PHY DPLL0
108df0566a6SJani Nikula 	 */
109df0566a6SJani Nikula 	DPLL_ID_ICL_DPLL0 = 0,
110df0566a6SJani Nikula 	/**
11168ff39c3SVandita Kulkarni 	 * @DPLL_ID_ICL_DPLL1: ICL/TGL combo PHY DPLL1
112df0566a6SJani Nikula 	 */
113df0566a6SJani Nikula 	DPLL_ID_ICL_DPLL1 = 1,
114df0566a6SJani Nikula 	/**
115eef037eaSVivek Kasireddy 	 * @DPLL_ID_EHL_DPLL4: EHL combo PHY DPLL4
116eef037eaSVivek Kasireddy 	 */
117eef037eaSVivek Kasireddy 	DPLL_ID_EHL_DPLL4 = 2,
118eef037eaSVivek Kasireddy 	/**
11968ff39c3SVandita Kulkarni 	 * @DPLL_ID_ICL_TBTPLL: ICL/TGL TBT PLL
120df0566a6SJani Nikula 	 */
121df0566a6SJani Nikula 	DPLL_ID_ICL_TBTPLL = 2,
122df0566a6SJani Nikula 	/**
12368ff39c3SVandita Kulkarni 	 * @DPLL_ID_ICL_MGPLL1: ICL MG PLL 1 port 1 (C),
12468ff39c3SVandita Kulkarni 	 *                      TGL TC PLL 1 port 1 (TC1)
125df0566a6SJani Nikula 	 */
126df0566a6SJani Nikula 	DPLL_ID_ICL_MGPLL1 = 3,
127df0566a6SJani Nikula 	/**
128df0566a6SJani Nikula 	 * @DPLL_ID_ICL_MGPLL2: ICL MG PLL 1 port 2 (D)
12968ff39c3SVandita Kulkarni 	 *                      TGL TC PLL 1 port 2 (TC2)
130df0566a6SJani Nikula 	 */
131df0566a6SJani Nikula 	DPLL_ID_ICL_MGPLL2 = 4,
132df0566a6SJani Nikula 	/**
133df0566a6SJani Nikula 	 * @DPLL_ID_ICL_MGPLL3: ICL MG PLL 1 port 3 (E)
13468ff39c3SVandita Kulkarni 	 *                      TGL TC PLL 1 port 3 (TC3)
135df0566a6SJani Nikula 	 */
136df0566a6SJani Nikula 	DPLL_ID_ICL_MGPLL3 = 5,
137df0566a6SJani Nikula 	/**
138df0566a6SJani Nikula 	 * @DPLL_ID_ICL_MGPLL4: ICL MG PLL 1 port 4 (F)
13968ff39c3SVandita Kulkarni 	 *                      TGL TC PLL 1 port 4 (TC4)
140df0566a6SJani Nikula 	 */
141df0566a6SJani Nikula 	DPLL_ID_ICL_MGPLL4 = 6,
14268ff39c3SVandita Kulkarni 	/**
143d328bd4fSAnna Karas 	 * @DPLL_ID_TGL_MGPLL5: TGL TC PLL port 5 (TC5)
14468ff39c3SVandita Kulkarni 	 */
14568ff39c3SVandita Kulkarni 	DPLL_ID_TGL_MGPLL5 = 7,
14668ff39c3SVandita Kulkarni 	/**
147d328bd4fSAnna Karas 	 * @DPLL_ID_TGL_MGPLL6: TGL TC PLL port 6 (TC6)
14868ff39c3SVandita Kulkarni 	 */
14968ff39c3SVandita Kulkarni 	DPLL_ID_TGL_MGPLL6 = 8,
150049c651bSAditya Swarup 
151049c651bSAditya Swarup 	/**
152049c651bSAditya Swarup 	 * @DPLL_ID_DG1_DPLL0: DG1 combo PHY DPLL0
153049c651bSAditya Swarup 	 */
154049c651bSAditya Swarup 	DPLL_ID_DG1_DPLL0 = 0,
155049c651bSAditya Swarup 	/**
156049c651bSAditya Swarup 	 * @DPLL_ID_DG1_DPLL1: DG1 combo PHY DPLL1
157049c651bSAditya Swarup 	 */
158049c651bSAditya Swarup 	DPLL_ID_DG1_DPLL1 = 1,
159049c651bSAditya Swarup 	/**
160049c651bSAditya Swarup 	 * @DPLL_ID_DG1_DPLL2: DG1 combo PHY DPLL2
161049c651bSAditya Swarup 	 */
162049c651bSAditya Swarup 	DPLL_ID_DG1_DPLL2 = 2,
163049c651bSAditya Swarup 	/**
164049c651bSAditya Swarup 	 * @DPLL_ID_DG1_DPLL3: DG1 combo PHY DPLL3
165049c651bSAditya Swarup 	 */
166049c651bSAditya Swarup 	DPLL_ID_DG1_DPLL3 = 3,
167df0566a6SJani Nikula };
16868ff39c3SVandita Kulkarni 
16968ff39c3SVandita Kulkarni #define I915_NUM_PLLS 9
170df0566a6SJani Nikula 
171eea72c4cSImre Deak enum icl_port_dpll_id {
172eea72c4cSImre Deak 	ICL_PORT_DPLL_DEFAULT,
173eea72c4cSImre Deak 	ICL_PORT_DPLL_MG_PHY,
174eea72c4cSImre Deak 
175eea72c4cSImre Deak 	ICL_PORT_DPLL_COUNT,
176eea72c4cSImre Deak };
177eea72c4cSImre Deak 
178df0566a6SJani Nikula struct intel_dpll_hw_state {
179df0566a6SJani Nikula 	/* i9xx, pch plls */
180df0566a6SJani Nikula 	u32 dpll;
181df0566a6SJani Nikula 	u32 dpll_md;
182df0566a6SJani Nikula 	u32 fp0;
183df0566a6SJani Nikula 	u32 fp1;
184df0566a6SJani Nikula 
185df0566a6SJani Nikula 	/* hsw, bdw */
186df0566a6SJani Nikula 	u32 wrpll;
187df0566a6SJani Nikula 	u32 spll;
188df0566a6SJani Nikula 
189df0566a6SJani Nikula 	/* skl */
190df0566a6SJani Nikula 	/*
191df0566a6SJani Nikula 	 * DPLL_CTRL1 has 6 bits for each each this DPLL. We store those in
192df0566a6SJani Nikula 	 * lower part of ctrl1 and they get shifted into position when writing
193df0566a6SJani Nikula 	 * the register.  This allows us to easily compare the state to share
194df0566a6SJani Nikula 	 * the DPLL.
195df0566a6SJani Nikula 	 */
196df0566a6SJani Nikula 	u32 ctrl1;
197df0566a6SJani Nikula 	/* HDMI only, 0 when used for DP */
198df0566a6SJani Nikula 	u32 cfgcr1, cfgcr2;
199df0566a6SJani Nikula 
200244dba4cSLucas De Marchi 	/* icl */
201df0566a6SJani Nikula 	u32 cfgcr0;
202df0566a6SJani Nikula 
203b70ad01aSJosé Roberto de Souza 	/* tgl */
204b70ad01aSJosé Roberto de Souza 	u32 div0;
205b70ad01aSJosé Roberto de Souza 
206df0566a6SJani Nikula 	/* bxt */
207df0566a6SJani Nikula 	u32 ebb0, ebb4, pll0, pll1, pll2, pll3, pll6, pll8, pll9, pll10, pcsdw12;
208df0566a6SJani Nikula 
209df0566a6SJani Nikula 	/*
210df0566a6SJani Nikula 	 * ICL uses the following, already defined:
211df0566a6SJani Nikula 	 * u32 cfgcr0, cfgcr1;
212df0566a6SJani Nikula 	 */
213df0566a6SJani Nikula 	u32 mg_refclkin_ctl;
214df0566a6SJani Nikula 	u32 mg_clktop2_coreclkctl1;
215df0566a6SJani Nikula 	u32 mg_clktop2_hsclkctl;
216df0566a6SJani Nikula 	u32 mg_pll_div0;
217df0566a6SJani Nikula 	u32 mg_pll_div1;
218df0566a6SJani Nikula 	u32 mg_pll_lf;
219df0566a6SJani Nikula 	u32 mg_pll_frac_lock;
220df0566a6SJani Nikula 	u32 mg_pll_ssc;
221df0566a6SJani Nikula 	u32 mg_pll_bias;
222df0566a6SJani Nikula 	u32 mg_pll_tdc_coldst_bias;
223df0566a6SJani Nikula 	u32 mg_pll_bias_mask;
224df0566a6SJani Nikula 	u32 mg_pll_tdc_coldst_bias_mask;
225df0566a6SJani Nikula };
226df0566a6SJani Nikula 
227df0566a6SJani Nikula /**
228df0566a6SJani Nikula  * struct intel_shared_dpll_state - hold the DPLL atomic state
229df0566a6SJani Nikula  *
230df0566a6SJani Nikula  * This structure holds an atomic state for the DPLL, that can represent
231df0566a6SJani Nikula  * either its current state (in struct &intel_shared_dpll) or a desired
232df0566a6SJani Nikula  * future state which would be applied by an atomic mode set (stored in
233df0566a6SJani Nikula  * a struct &intel_atomic_state).
234df0566a6SJani Nikula  *
235866955faSImre Deak  * See also intel_reserve_shared_dplls() and intel_release_shared_dplls().
236df0566a6SJani Nikula  */
237df0566a6SJani Nikula struct intel_shared_dpll_state {
238df0566a6SJani Nikula 	/**
239d0f1bfc6SVille Syrjälä 	 * @pipe_mask: mask of pipes using this DPLL, active or not
240df0566a6SJani Nikula 	 */
241d0f1bfc6SVille Syrjälä 	u8 pipe_mask;
242df0566a6SJani Nikula 
243df0566a6SJani Nikula 	/**
244df0566a6SJani Nikula 	 * @hw_state: hardware configuration for the DPLL stored in
245df0566a6SJani Nikula 	 * struct &intel_dpll_hw_state.
246df0566a6SJani Nikula 	 */
247df0566a6SJani Nikula 	struct intel_dpll_hw_state hw_state;
248df0566a6SJani Nikula };
249df0566a6SJani Nikula 
250df0566a6SJani Nikula /**
251df0566a6SJani Nikula  * struct dpll_info - display PLL platform specific info
252df0566a6SJani Nikula  */
253df0566a6SJani Nikula struct dpll_info {
254df0566a6SJani Nikula 	/**
255df0566a6SJani Nikula 	 * @name: DPLL name; used for logging
256df0566a6SJani Nikula 	 */
257df0566a6SJani Nikula 	const char *name;
258df0566a6SJani Nikula 
259df0566a6SJani Nikula 	/**
260df0566a6SJani Nikula 	 * @funcs: platform specific hooks
261df0566a6SJani Nikula 	 */
262df0566a6SJani Nikula 	const struct intel_shared_dpll_funcs *funcs;
263df0566a6SJani Nikula 
264df0566a6SJani Nikula 	/**
265df0566a6SJani Nikula 	 * @id: unique indentifier for this DPLL; should match the index in the
266df0566a6SJani Nikula 	 * dev_priv->shared_dplls array
267df0566a6SJani Nikula 	 */
268df0566a6SJani Nikula 	enum intel_dpll_id id;
269df0566a6SJani Nikula 
270df0566a6SJani Nikula #define INTEL_DPLL_ALWAYS_ON	(1 << 0)
271df0566a6SJani Nikula 	/**
272df0566a6SJani Nikula 	 * @flags:
273df0566a6SJani Nikula 	 *
274df0566a6SJani Nikula 	 * INTEL_DPLL_ALWAYS_ON
275df0566a6SJani Nikula 	 *     Inform the state checker that the DPLL is kept enabled even if
276df0566a6SJani Nikula 	 *     not in use by any CRTC.
277df0566a6SJani Nikula 	 */
278df0566a6SJani Nikula 	u32 flags;
279df0566a6SJani Nikula };
280df0566a6SJani Nikula 
281df0566a6SJani Nikula /**
282df0566a6SJani Nikula  * struct intel_shared_dpll - display PLL with tracked state and users
283df0566a6SJani Nikula  */
284df0566a6SJani Nikula struct intel_shared_dpll {
285df0566a6SJani Nikula 	/**
286df0566a6SJani Nikula 	 * @state:
287df0566a6SJani Nikula 	 *
288df0566a6SJani Nikula 	 * Store the state for the pll, including its hw state
289df0566a6SJani Nikula 	 * and CRTCs using it.
290df0566a6SJani Nikula 	 */
291df0566a6SJani Nikula 	struct intel_shared_dpll_state state;
292df0566a6SJani Nikula 
293df0566a6SJani Nikula 	/**
294d0f1bfc6SVille Syrjälä 	 * @active_mask: mask of active pipes (i.e. DPMS on) using this DPLL
295df0566a6SJani Nikula 	 */
296d0f1bfc6SVille Syrjälä 	u8 active_mask;
297df0566a6SJani Nikula 
298df0566a6SJani Nikula 	/**
299df0566a6SJani Nikula 	 * @on: is the PLL actually active? Disabled during modeset
300df0566a6SJani Nikula 	 */
301df0566a6SJani Nikula 	bool on;
302df0566a6SJani Nikula 
303df0566a6SJani Nikula 	/**
304df0566a6SJani Nikula 	 * @info: platform specific info
305df0566a6SJani Nikula 	 */
306df0566a6SJani Nikula 	const struct dpll_info *info;
307900554dcSAnna Karas 
308900554dcSAnna Karas 	/**
309900554dcSAnna Karas 	 * @wakeref: In some platforms a device-level runtime pm reference may
310900554dcSAnna Karas 	 * need to be grabbed to disable DC states while this DPLL is enabled
311900554dcSAnna Karas 	 */
312eef037eaSVivek Kasireddy 	intel_wakeref_t wakeref;
313df0566a6SJani Nikula };
314df0566a6SJani Nikula 
315df0566a6SJani Nikula #define SKL_DPLL0 0
316df0566a6SJani Nikula #define SKL_DPLL1 1
317df0566a6SJani Nikula #define SKL_DPLL2 2
318df0566a6SJani Nikula #define SKL_DPLL3 3
319df0566a6SJani Nikula 
320df0566a6SJani Nikula /* shared dpll functions */
321df0566a6SJani Nikula struct intel_shared_dpll *
322df0566a6SJani Nikula intel_get_shared_dpll_by_id(struct drm_i915_private *dev_priv,
323df0566a6SJani Nikula 			    enum intel_dpll_id id);
324df0566a6SJani Nikula void assert_shared_dpll(struct drm_i915_private *dev_priv,
325df0566a6SJani Nikula 			struct intel_shared_dpll *pll,
326df0566a6SJani Nikula 			bool state);
327df0566a6SJani Nikula #define assert_shared_dpll_enabled(d, p) assert_shared_dpll(d, p, true)
328df0566a6SJani Nikula #define assert_shared_dpll_disabled(d, p) assert_shared_dpll(d, p, false)
32992a02074SVille Syrjälä int intel_compute_shared_dplls(struct intel_atomic_state *state,
33092a02074SVille Syrjälä 			       struct intel_crtc *crtc,
33192a02074SVille Syrjälä 			       struct intel_encoder *encoder);
3329274229aSVille Syrjälä int intel_reserve_shared_dplls(struct intel_atomic_state *state,
333df0566a6SJani Nikula 			       struct intel_crtc *crtc,
334866955faSImre Deak 			       struct intel_encoder *encoder);
335866955faSImre Deak void intel_release_shared_dplls(struct intel_atomic_state *state,
336866955faSImre Deak 				struct intel_crtc *crtc);
337*7ff9a17eSImre Deak void intel_unreference_shared_dpll_crtc(const struct intel_crtc *crtc,
338*7ff9a17eSImre Deak 					const struct intel_shared_dpll *pll,
339*7ff9a17eSImre Deak 					struct intel_shared_dpll_state *shared_dpll_state);
340eea72c4cSImre Deak void icl_set_active_port_dpll(struct intel_crtc_state *crtc_state,
341eea72c4cSImre Deak 			      enum icl_port_dpll_id port_dpll_id);
34224a7bfe0SImre Deak void intel_update_active_dpll(struct intel_atomic_state *state,
34324a7bfe0SImre Deak 			      struct intel_crtc *crtc,
34424a7bfe0SImre Deak 			      struct intel_encoder *encoder);
345b953eb21SImre Deak int intel_dpll_get_freq(struct drm_i915_private *i915,
3463749de07SVille Syrjälä 			const struct intel_shared_dpll *pll,
3473749de07SVille Syrjälä 			const struct intel_dpll_hw_state *pll_state);
348fdbc5d68SVille Syrjälä bool intel_dpll_get_hw_state(struct drm_i915_private *i915,
349fdbc5d68SVille Syrjälä 			     struct intel_shared_dpll *pll,
350fdbc5d68SVille Syrjälä 			     struct intel_dpll_hw_state *hw_state);
351df0566a6SJani Nikula void intel_enable_shared_dpll(const struct intel_crtc_state *crtc_state);
352df0566a6SJani Nikula void intel_disable_shared_dpll(const struct intel_crtc_state *crtc_state);
35313d723a1SVille Syrjälä void intel_shared_dpll_swap_state(struct intel_atomic_state *state);
3548e272b3aSVille Syrjälä void intel_shared_dpll_init(struct drm_i915_private *dev_priv);
3557d3d8f85SVille Syrjälä void intel_dpll_update_ref_clks(struct drm_i915_private *dev_priv);
356830b2cdcSImre Deak void intel_dpll_readout_hw_state(struct drm_i915_private *dev_priv);
357830b2cdcSImre Deak void intel_dpll_sanitize_state(struct drm_i915_private *dev_priv);
358df0566a6SJani Nikula 
359df0566a6SJani Nikula void intel_dpll_dump_hw_state(struct drm_i915_private *dev_priv,
360df0566a6SJani Nikula 			      const struct intel_dpll_hw_state *hw_state);
361df0566a6SJani Nikula enum intel_dpll_id icl_tc_port_to_pll_id(enum tc_port tc_port);
362df0566a6SJani Nikula bool intel_dpll_is_combophy(enum intel_dpll_id id);
363df0566a6SJani Nikula 
364f0978e92SJani Nikula void intel_shared_dpll_state_verify(struct intel_crtc *crtc,
365f0978e92SJani Nikula 				    struct intel_crtc_state *old_crtc_state,
366f0978e92SJani Nikula 				    struct intel_crtc_state *new_crtc_state);
367f0978e92SJani Nikula void intel_shared_dpll_verify_disabled(struct drm_i915_private *i915);
368f0978e92SJani Nikula 
369df0566a6SJani Nikula #endif /* _INTEL_DPLL_MGR_H_ */
370