Merge tag 'rust-fixes-6.12' of https://github.com/Rust-for-Linux/linux
[linux-2.6-block.git] / drivers / gpu / drm / i915 / display / intel_pps.c
1 // SPDX-License-Identifier: MIT
2 /*
3  * Copyright © 2020 Intel Corporation
4  */
5
6 #include "g4x_dp.h"
7 #include "i915_drv.h"
8 #include "i915_reg.h"
9 #include "intel_de.h"
10 #include "intel_display_power_well.h"
11 #include "intel_display_types.h"
12 #include "intel_dp.h"
13 #include "intel_dpio_phy.h"
14 #include "intel_dpll.h"
15 #include "intel_lvds.h"
16 #include "intel_lvds_regs.h"
17 #include "intel_pps.h"
18 #include "intel_pps_regs.h"
19 #include "intel_quirks.h"
20
21 static void vlv_steal_power_sequencer(struct intel_display *display,
22                                       enum pipe pipe);
23
24 static void pps_init_delays(struct intel_dp *intel_dp);
25 static void pps_init_registers(struct intel_dp *intel_dp, bool force_disable_vdd);
26
27 static const char *pps_name(struct intel_dp *intel_dp)
28 {
29         struct intel_display *display = to_intel_display(intel_dp);
30         struct drm_i915_private *i915 = to_i915(display->drm);
31         struct intel_pps *pps = &intel_dp->pps;
32
33         if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) {
34                 switch (pps->pps_pipe) {
35                 case INVALID_PIPE:
36                         /*
37                          * FIXME would be nice if we can guarantee
38                          * to always have a valid PPS when calling this.
39                          */
40                         return "PPS <none>";
41                 case PIPE_A:
42                         return "PPS A";
43                 case PIPE_B:
44                         return "PPS B";
45                 default:
46                         MISSING_CASE(pps->pps_pipe);
47                         break;
48                 }
49         } else {
50                 switch (pps->pps_idx) {
51                 case 0:
52                         return "PPS 0";
53                 case 1:
54                         return "PPS 1";
55                 default:
56                         MISSING_CASE(pps->pps_idx);
57                         break;
58                 }
59         }
60
61         return "PPS <invalid>";
62 }
63
64 intel_wakeref_t intel_pps_lock(struct intel_dp *intel_dp)
65 {
66         struct intel_display *display = to_intel_display(intel_dp);
67         struct drm_i915_private *dev_priv = to_i915(display->drm);
68         intel_wakeref_t wakeref;
69
70         /*
71          * See intel_pps_reset_all() why we need a power domain reference here.
72          */
73         wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_DISPLAY_CORE);
74         mutex_lock(&display->pps.mutex);
75
76         return wakeref;
77 }
78
79 intel_wakeref_t intel_pps_unlock(struct intel_dp *intel_dp,
80                                  intel_wakeref_t wakeref)
81 {
82         struct intel_display *display = to_intel_display(intel_dp);
83         struct drm_i915_private *dev_priv = to_i915(display->drm);
84
85         mutex_unlock(&display->pps.mutex);
86         intel_display_power_put(dev_priv, POWER_DOMAIN_DISPLAY_CORE, wakeref);
87
88         return 0;
89 }
90
91 static void
92 vlv_power_sequencer_kick(struct intel_dp *intel_dp)
93 {
94         struct intel_display *display = to_intel_display(intel_dp);
95         struct drm_i915_private *dev_priv = to_i915(display->drm);
96         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
97         enum pipe pipe = intel_dp->pps.pps_pipe;
98         bool pll_enabled, release_cl_override = false;
99         enum dpio_phy phy = vlv_pipe_to_phy(pipe);
100         enum dpio_channel ch = vlv_pipe_to_channel(pipe);
101         u32 DP;
102
103         if (drm_WARN(display->drm,
104                      intel_de_read(display, intel_dp->output_reg) & DP_PORT_EN,
105                      "skipping %s kick due to [ENCODER:%d:%s] being active\n",
106                      pps_name(intel_dp),
107                      dig_port->base.base.base.id, dig_port->base.base.name))
108                 return;
109
110         drm_dbg_kms(display->drm,
111                     "kicking %s for [ENCODER:%d:%s]\n",
112                     pps_name(intel_dp),
113                     dig_port->base.base.base.id, dig_port->base.base.name);
114
115         /* Preserve the BIOS-computed detected bit. This is
116          * supposed to be read-only.
117          */
118         DP = intel_de_read(display, intel_dp->output_reg) & DP_DETECTED;
119         DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
120         DP |= DP_PORT_WIDTH(1);
121         DP |= DP_LINK_TRAIN_PAT_1;
122
123         if (IS_CHERRYVIEW(dev_priv))
124                 DP |= DP_PIPE_SEL_CHV(pipe);
125         else
126                 DP |= DP_PIPE_SEL(pipe);
127
128         pll_enabled = intel_de_read(display, DPLL(display, pipe)) & DPLL_VCO_ENABLE;
129
130         /*
131          * The DPLL for the pipe must be enabled for this to work.
132          * So enable temporarily it if it's not already enabled.
133          */
134         if (!pll_enabled) {
135                 release_cl_override = IS_CHERRYVIEW(dev_priv) &&
136                         !chv_phy_powergate_ch(dev_priv, phy, ch, true);
137
138                 if (vlv_force_pll_on(dev_priv, pipe, vlv_get_dpll(dev_priv))) {
139                         drm_err(display->drm,
140                                 "Failed to force on PLL for pipe %c!\n",
141                                 pipe_name(pipe));
142                         return;
143                 }
144         }
145
146         /*
147          * Similar magic as in intel_dp_enable_port().
148          * We _must_ do this port enable + disable trick
149          * to make this power sequencer lock onto the port.
150          * Otherwise even VDD force bit won't work.
151          */
152         intel_de_write(display, intel_dp->output_reg, DP);
153         intel_de_posting_read(display, intel_dp->output_reg);
154
155         intel_de_write(display, intel_dp->output_reg, DP | DP_PORT_EN);
156         intel_de_posting_read(display, intel_dp->output_reg);
157
158         intel_de_write(display, intel_dp->output_reg, DP & ~DP_PORT_EN);
159         intel_de_posting_read(display, intel_dp->output_reg);
160
161         if (!pll_enabled) {
162                 vlv_force_pll_off(dev_priv, pipe);
163
164                 if (release_cl_override)
165                         chv_phy_powergate_ch(dev_priv, phy, ch, false);
166         }
167 }
168
169 static enum pipe vlv_find_free_pps(struct intel_display *display)
170 {
171         struct intel_encoder *encoder;
172         unsigned int pipes = (1 << PIPE_A) | (1 << PIPE_B);
173
174         /*
175          * We don't have power sequencer currently.
176          * Pick one that's not used by other ports.
177          */
178         for_each_intel_dp(display->drm, encoder) {
179                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
180
181                 if (encoder->type == INTEL_OUTPUT_EDP) {
182                         drm_WARN_ON(display->drm,
183                                     intel_dp->pps.active_pipe != INVALID_PIPE &&
184                                     intel_dp->pps.active_pipe !=
185                                     intel_dp->pps.pps_pipe);
186
187                         if (intel_dp->pps.pps_pipe != INVALID_PIPE)
188                                 pipes &= ~(1 << intel_dp->pps.pps_pipe);
189                 } else {
190                         drm_WARN_ON(display->drm,
191                                     intel_dp->pps.pps_pipe != INVALID_PIPE);
192
193                         if (intel_dp->pps.active_pipe != INVALID_PIPE)
194                                 pipes &= ~(1 << intel_dp->pps.active_pipe);
195                 }
196         }
197
198         if (pipes == 0)
199                 return INVALID_PIPE;
200
201         return ffs(pipes) - 1;
202 }
203
204 static enum pipe
205 vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
206 {
207         struct intel_display *display = to_intel_display(intel_dp);
208         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
209         enum pipe pipe;
210
211         lockdep_assert_held(&display->pps.mutex);
212
213         /* We should never land here with regular DP ports */
214         drm_WARN_ON(display->drm, !intel_dp_is_edp(intel_dp));
215
216         drm_WARN_ON(display->drm, intel_dp->pps.active_pipe != INVALID_PIPE &&
217                     intel_dp->pps.active_pipe != intel_dp->pps.pps_pipe);
218
219         if (intel_dp->pps.pps_pipe != INVALID_PIPE)
220                 return intel_dp->pps.pps_pipe;
221
222         pipe = vlv_find_free_pps(display);
223
224         /*
225          * Didn't find one. This should not happen since there
226          * are two power sequencers and up to two eDP ports.
227          */
228         if (drm_WARN_ON(display->drm, pipe == INVALID_PIPE))
229                 pipe = PIPE_A;
230
231         vlv_steal_power_sequencer(display, pipe);
232         intel_dp->pps.pps_pipe = pipe;
233
234         drm_dbg_kms(display->drm,
235                     "picked %s for [ENCODER:%d:%s]\n",
236                     pps_name(intel_dp),
237                     dig_port->base.base.base.id, dig_port->base.base.name);
238
239         /* init power sequencer on this pipe and port */
240         pps_init_delays(intel_dp);
241         pps_init_registers(intel_dp, true);
242
243         /*
244          * Even vdd force doesn't work until we've made
245          * the power sequencer lock in on the port.
246          */
247         vlv_power_sequencer_kick(intel_dp);
248
249         return intel_dp->pps.pps_pipe;
250 }
251
252 static int
253 bxt_power_sequencer_idx(struct intel_dp *intel_dp)
254 {
255         struct intel_display *display = to_intel_display(intel_dp);
256         int pps_idx = intel_dp->pps.pps_idx;
257
258         lockdep_assert_held(&display->pps.mutex);
259
260         /* We should never land here with regular DP ports */
261         drm_WARN_ON(display->drm, !intel_dp_is_edp(intel_dp));
262
263         if (!intel_dp->pps.pps_reset)
264                 return pps_idx;
265
266         intel_dp->pps.pps_reset = false;
267
268         /*
269          * Only the HW needs to be reprogrammed, the SW state is fixed and
270          * has been setup during connector init.
271          */
272         pps_init_registers(intel_dp, false);
273
274         return pps_idx;
275 }
276
277 typedef bool (*pps_check)(struct intel_display *display, int pps_idx);
278
279 static bool pps_has_pp_on(struct intel_display *display, int pps_idx)
280 {
281         return intel_de_read(display, PP_STATUS(display, pps_idx)) & PP_ON;
282 }
283
284 static bool pps_has_vdd_on(struct intel_display *display, int pps_idx)
285 {
286         return intel_de_read(display, PP_CONTROL(display, pps_idx)) & EDP_FORCE_VDD;
287 }
288
289 static bool pps_any(struct intel_display *display, int pps_idx)
290 {
291         return true;
292 }
293
294 static enum pipe
295 vlv_initial_pps_pipe(struct intel_display *display,
296                      enum port port, pps_check check)
297 {
298         enum pipe pipe;
299
300         for (pipe = PIPE_A; pipe <= PIPE_B; pipe++) {
301                 u32 port_sel = intel_de_read(display,
302                                              PP_ON_DELAYS(display, pipe)) &
303                         PANEL_PORT_SELECT_MASK;
304
305                 if (port_sel != PANEL_PORT_SELECT_VLV(port))
306                         continue;
307
308                 if (!check(display, pipe))
309                         continue;
310
311                 return pipe;
312         }
313
314         return INVALID_PIPE;
315 }
316
317 static void
318 vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)
319 {
320         struct intel_display *display = to_intel_display(intel_dp);
321         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
322         enum port port = dig_port->base.port;
323
324         lockdep_assert_held(&display->pps.mutex);
325
326         /* try to find a pipe with this port selected */
327         /* first pick one where the panel is on */
328         intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(display, port,
329                                                       pps_has_pp_on);
330         /* didn't find one? pick one where vdd is on */
331         if (intel_dp->pps.pps_pipe == INVALID_PIPE)
332                 intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(display, port,
333                                                               pps_has_vdd_on);
334         /* didn't find one? pick one with just the correct port */
335         if (intel_dp->pps.pps_pipe == INVALID_PIPE)
336                 intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(display, port,
337                                                               pps_any);
338
339         /* didn't find one? just let vlv_power_sequencer_pipe() pick one when needed */
340         if (intel_dp->pps.pps_pipe == INVALID_PIPE) {
341                 drm_dbg_kms(display->drm,
342                             "[ENCODER:%d:%s] no initial power sequencer\n",
343                             dig_port->base.base.base.id, dig_port->base.base.name);
344                 return;
345         }
346
347         drm_dbg_kms(display->drm,
348                     "[ENCODER:%d:%s] initial power sequencer: %s\n",
349                     dig_port->base.base.base.id, dig_port->base.base.name,
350                     pps_name(intel_dp));
351 }
352
353 static int intel_num_pps(struct intel_display *display)
354 {
355         struct drm_i915_private *i915 = to_i915(display->drm);
356
357         if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
358                 return 2;
359
360         if (IS_GEMINILAKE(i915) || IS_BROXTON(i915))
361                 return 2;
362
363         if (INTEL_PCH_TYPE(i915) >= PCH_MTL)
364                 return 2;
365
366         if (INTEL_PCH_TYPE(i915) >= PCH_DG1)
367                 return 1;
368
369         if (INTEL_PCH_TYPE(i915) >= PCH_ICP)
370                 return 2;
371
372         return 1;
373 }
374
375 static bool intel_pps_is_valid(struct intel_dp *intel_dp)
376 {
377         struct intel_display *display = to_intel_display(intel_dp);
378         struct drm_i915_private *i915 = to_i915(display->drm);
379
380         if (intel_dp->pps.pps_idx == 1 &&
381             INTEL_PCH_TYPE(i915) >= PCH_ICP &&
382             INTEL_PCH_TYPE(i915) <= PCH_ADP)
383                 return intel_de_read(display, SOUTH_CHICKEN1) & ICP_SECOND_PPS_IO_SELECT;
384
385         return true;
386 }
387
388 static int
389 bxt_initial_pps_idx(struct intel_display *display, pps_check check)
390 {
391         int pps_idx, pps_num = intel_num_pps(display);
392
393         for (pps_idx = 0; pps_idx < pps_num; pps_idx++) {
394                 if (check(display, pps_idx))
395                         return pps_idx;
396         }
397
398         return -1;
399 }
400
401 static bool
402 pps_initial_setup(struct intel_dp *intel_dp)
403 {
404         struct intel_display *display = to_intel_display(intel_dp);
405         struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
406         struct intel_connector *connector = intel_dp->attached_connector;
407         struct drm_i915_private *i915 = to_i915(encoder->base.dev);
408
409         lockdep_assert_held(&display->pps.mutex);
410
411         if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) {
412                 vlv_initial_power_sequencer_setup(intel_dp);
413                 return true;
414         }
415
416         /* first ask the VBT */
417         if (intel_num_pps(display) > 1)
418                 intel_dp->pps.pps_idx = connector->panel.vbt.backlight.controller;
419         else
420                 intel_dp->pps.pps_idx = 0;
421
422         if (drm_WARN_ON(display->drm, intel_dp->pps.pps_idx >= intel_num_pps(display)))
423                 intel_dp->pps.pps_idx = -1;
424
425         /* VBT wasn't parsed yet? pick one where the panel is on */
426         if (intel_dp->pps.pps_idx < 0)
427                 intel_dp->pps.pps_idx = bxt_initial_pps_idx(display, pps_has_pp_on);
428         /* didn't find one? pick one where vdd is on */
429         if (intel_dp->pps.pps_idx < 0)
430                 intel_dp->pps.pps_idx = bxt_initial_pps_idx(display, pps_has_vdd_on);
431         /* didn't find one? pick any */
432         if (intel_dp->pps.pps_idx < 0) {
433                 intel_dp->pps.pps_idx = bxt_initial_pps_idx(display, pps_any);
434
435                 drm_dbg_kms(display->drm,
436                             "[ENCODER:%d:%s] no initial power sequencer, assuming %s\n",
437                             encoder->base.base.id, encoder->base.name,
438                             pps_name(intel_dp));
439         } else {
440                 drm_dbg_kms(display->drm,
441                             "[ENCODER:%d:%s] initial power sequencer: %s\n",
442                             encoder->base.base.id, encoder->base.name,
443                             pps_name(intel_dp));
444         }
445
446         return intel_pps_is_valid(intel_dp);
447 }
448
449 void intel_pps_reset_all(struct intel_display *display)
450 {
451         struct drm_i915_private *dev_priv = to_i915(display->drm);
452         struct intel_encoder *encoder;
453
454         if (drm_WARN_ON(display->drm, !IS_LP(dev_priv)))
455                 return;
456
457         if (!HAS_DISPLAY(display))
458                 return;
459
460         /*
461          * We can't grab pps_mutex here due to deadlock with power_domain
462          * mutex when power_domain functions are called while holding pps_mutex.
463          * That also means that in order to use pps_pipe the code needs to
464          * hold both a power domain reference and pps_mutex, and the power domain
465          * reference get/put must be done while _not_ holding pps_mutex.
466          * pps_{lock,unlock}() do these steps in the correct order, so one
467          * should use them always.
468          */
469
470         for_each_intel_dp(display->drm, encoder) {
471                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
472
473                 drm_WARN_ON(display->drm,
474                             intel_dp->pps.active_pipe != INVALID_PIPE);
475
476                 if (encoder->type != INTEL_OUTPUT_EDP)
477                         continue;
478
479                 if (DISPLAY_VER(display) >= 9)
480                         intel_dp->pps.pps_reset = true;
481                 else
482                         intel_dp->pps.pps_pipe = INVALID_PIPE;
483         }
484 }
485
486 struct pps_registers {
487         i915_reg_t pp_ctrl;
488         i915_reg_t pp_stat;
489         i915_reg_t pp_on;
490         i915_reg_t pp_off;
491         i915_reg_t pp_div;
492 };
493
494 static void intel_pps_get_registers(struct intel_dp *intel_dp,
495                                     struct pps_registers *regs)
496 {
497         struct intel_display *display = to_intel_display(intel_dp);
498         struct drm_i915_private *dev_priv = to_i915(display->drm);
499         int pps_idx;
500
501         memset(regs, 0, sizeof(*regs));
502
503         if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
504                 pps_idx = vlv_power_sequencer_pipe(intel_dp);
505         else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
506                 pps_idx = bxt_power_sequencer_idx(intel_dp);
507         else
508                 pps_idx = intel_dp->pps.pps_idx;
509
510         regs->pp_ctrl = PP_CONTROL(display, pps_idx);
511         regs->pp_stat = PP_STATUS(display, pps_idx);
512         regs->pp_on = PP_ON_DELAYS(display, pps_idx);
513         regs->pp_off = PP_OFF_DELAYS(display, pps_idx);
514
515         /* Cycle delay moved from PP_DIVISOR to PP_CONTROL */
516         if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv) ||
517             INTEL_PCH_TYPE(dev_priv) >= PCH_CNP)
518                 regs->pp_div = INVALID_MMIO_REG;
519         else
520                 regs->pp_div = PP_DIVISOR(display, pps_idx);
521 }
522
523 static i915_reg_t
524 _pp_ctrl_reg(struct intel_dp *intel_dp)
525 {
526         struct pps_registers regs;
527
528         intel_pps_get_registers(intel_dp, &regs);
529
530         return regs.pp_ctrl;
531 }
532
533 static i915_reg_t
534 _pp_stat_reg(struct intel_dp *intel_dp)
535 {
536         struct pps_registers regs;
537
538         intel_pps_get_registers(intel_dp, &regs);
539
540         return regs.pp_stat;
541 }
542
543 static bool edp_have_panel_power(struct intel_dp *intel_dp)
544 {
545         struct intel_display *display = to_intel_display(intel_dp);
546         struct drm_i915_private *dev_priv = to_i915(display->drm);
547
548         lockdep_assert_held(&display->pps.mutex);
549
550         if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
551             intel_dp->pps.pps_pipe == INVALID_PIPE)
552                 return false;
553
554         return (intel_de_read(display, _pp_stat_reg(intel_dp)) & PP_ON) != 0;
555 }
556
557 static bool edp_have_panel_vdd(struct intel_dp *intel_dp)
558 {
559         struct intel_display *display = to_intel_display(intel_dp);
560         struct drm_i915_private *dev_priv = to_i915(display->drm);
561
562         lockdep_assert_held(&display->pps.mutex);
563
564         if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
565             intel_dp->pps.pps_pipe == INVALID_PIPE)
566                 return false;
567
568         return intel_de_read(display, _pp_ctrl_reg(intel_dp)) & EDP_FORCE_VDD;
569 }
570
571 void intel_pps_check_power_unlocked(struct intel_dp *intel_dp)
572 {
573         struct intel_display *display = to_intel_display(intel_dp);
574         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
575
576         if (!intel_dp_is_edp(intel_dp))
577                 return;
578
579         if (!edp_have_panel_power(intel_dp) && !edp_have_panel_vdd(intel_dp)) {
580                 drm_WARN(display->drm, 1,
581                          "[ENCODER:%d:%s] %s powered off while attempting AUX CH communication.\n",
582                          dig_port->base.base.base.id, dig_port->base.base.name,
583                          pps_name(intel_dp));
584                 drm_dbg_kms(display->drm,
585                             "[ENCODER:%d:%s] %s PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
586                             dig_port->base.base.base.id, dig_port->base.base.name,
587                             pps_name(intel_dp),
588                             intel_de_read(display, _pp_stat_reg(intel_dp)),
589                             intel_de_read(display, _pp_ctrl_reg(intel_dp)));
590         }
591 }
592
593 #define IDLE_ON_MASK            (PP_ON | PP_SEQUENCE_MASK | 0                     | PP_SEQUENCE_STATE_MASK)
594 #define IDLE_ON_VALUE           (PP_ON | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_ON_IDLE)
595
596 #define IDLE_OFF_MASK           (PP_ON | PP_SEQUENCE_MASK | 0                     | 0)
597 #define IDLE_OFF_VALUE          (0     | PP_SEQUENCE_NONE | 0                     | 0)
598
599 #define IDLE_CYCLE_MASK         (PP_ON | PP_SEQUENCE_MASK | PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK)
600 #define IDLE_CYCLE_VALUE        (0     | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_OFF_IDLE)
601
602 static void intel_pps_verify_state(struct intel_dp *intel_dp);
603
604 static void wait_panel_status(struct intel_dp *intel_dp,
605                               u32 mask, u32 value)
606 {
607         struct intel_display *display = to_intel_display(intel_dp);
608         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
609         i915_reg_t pp_stat_reg, pp_ctrl_reg;
610
611         lockdep_assert_held(&display->pps.mutex);
612
613         intel_pps_verify_state(intel_dp);
614
615         pp_stat_reg = _pp_stat_reg(intel_dp);
616         pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
617
618         drm_dbg_kms(display->drm,
619                     "[ENCODER:%d:%s] %s mask: 0x%08x value: 0x%08x PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
620                     dig_port->base.base.base.id, dig_port->base.base.name,
621                     pps_name(intel_dp),
622                     mask, value,
623                     intel_de_read(display, pp_stat_reg),
624                     intel_de_read(display, pp_ctrl_reg));
625
626         if (intel_de_wait(display, pp_stat_reg, mask, value, 5000))
627                 drm_err(display->drm,
628                         "[ENCODER:%d:%s] %s panel status timeout: PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
629                         dig_port->base.base.base.id, dig_port->base.base.name,
630                         pps_name(intel_dp),
631                         intel_de_read(display, pp_stat_reg),
632                         intel_de_read(display, pp_ctrl_reg));
633
634         drm_dbg_kms(display->drm, "Wait complete\n");
635 }
636
637 static void wait_panel_on(struct intel_dp *intel_dp)
638 {
639         struct intel_display *display = to_intel_display(intel_dp);
640         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
641
642         drm_dbg_kms(display->drm,
643                     "[ENCODER:%d:%s] %s wait for panel power on\n",
644                     dig_port->base.base.base.id, dig_port->base.base.name,
645                     pps_name(intel_dp));
646         wait_panel_status(intel_dp, IDLE_ON_MASK, IDLE_ON_VALUE);
647 }
648
649 static void wait_panel_off(struct intel_dp *intel_dp)
650 {
651         struct intel_display *display = to_intel_display(intel_dp);
652         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
653
654         drm_dbg_kms(display->drm,
655                     "[ENCODER:%d:%s] %s wait for panel power off time\n",
656                     dig_port->base.base.base.id, dig_port->base.base.name,
657                     pps_name(intel_dp));
658         wait_panel_status(intel_dp, IDLE_OFF_MASK, IDLE_OFF_VALUE);
659 }
660
661 static void wait_panel_power_cycle(struct intel_dp *intel_dp)
662 {
663         struct intel_display *display = to_intel_display(intel_dp);
664         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
665         ktime_t panel_power_on_time;
666         s64 panel_power_off_duration;
667
668         drm_dbg_kms(display->drm,
669                     "[ENCODER:%d:%s] %s wait for panel power cycle\n",
670                     dig_port->base.base.base.id, dig_port->base.base.name,
671                     pps_name(intel_dp));
672
673         /* take the difference of current time and panel power off time
674          * and then make panel wait for t11_t12 if needed. */
675         panel_power_on_time = ktime_get_boottime();
676         panel_power_off_duration = ktime_ms_delta(panel_power_on_time, intel_dp->pps.panel_power_off_time);
677
678         /* When we disable the VDD override bit last we have to do the manual
679          * wait. */
680         if (panel_power_off_duration < (s64)intel_dp->pps.panel_power_cycle_delay)
681                 wait_remaining_ms_from_jiffies(jiffies,
682                                        intel_dp->pps.panel_power_cycle_delay - panel_power_off_duration);
683
684         wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE);
685 }
686
687 void intel_pps_wait_power_cycle(struct intel_dp *intel_dp)
688 {
689         intel_wakeref_t wakeref;
690
691         if (!intel_dp_is_edp(intel_dp))
692                 return;
693
694         with_intel_pps_lock(intel_dp, wakeref)
695                 wait_panel_power_cycle(intel_dp);
696 }
697
698 static void wait_backlight_on(struct intel_dp *intel_dp)
699 {
700         wait_remaining_ms_from_jiffies(intel_dp->pps.last_power_on,
701                                        intel_dp->pps.backlight_on_delay);
702 }
703
704 static void edp_wait_backlight_off(struct intel_dp *intel_dp)
705 {
706         wait_remaining_ms_from_jiffies(intel_dp->pps.last_backlight_off,
707                                        intel_dp->pps.backlight_off_delay);
708 }
709
710 /* Read the current pp_control value, unlocking the register if it
711  * is locked
712  */
713
714 static  u32 ilk_get_pp_control(struct intel_dp *intel_dp)
715 {
716         struct intel_display *display = to_intel_display(intel_dp);
717         u32 control;
718
719         lockdep_assert_held(&display->pps.mutex);
720
721         control = intel_de_read(display, _pp_ctrl_reg(intel_dp));
722         if (drm_WARN_ON(display->drm, !HAS_DDI(display) &&
723                         (control & PANEL_UNLOCK_MASK) != PANEL_UNLOCK_REGS)) {
724                 control &= ~PANEL_UNLOCK_MASK;
725                 control |= PANEL_UNLOCK_REGS;
726         }
727         return control;
728 }
729
730 /*
731  * Must be paired with intel_pps_vdd_off_unlocked().
732  * Must hold pps_mutex around the whole on/off sequence.
733  * Can be nested with intel_pps_vdd_{on,off}() calls.
734  */
735 bool intel_pps_vdd_on_unlocked(struct intel_dp *intel_dp)
736 {
737         struct intel_display *display = to_intel_display(intel_dp);
738         struct drm_i915_private *dev_priv = to_i915(display->drm);
739         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
740         u32 pp;
741         i915_reg_t pp_stat_reg, pp_ctrl_reg;
742         bool need_to_disable = !intel_dp->pps.want_panel_vdd;
743
744         lockdep_assert_held(&display->pps.mutex);
745
746         if (!intel_dp_is_edp(intel_dp))
747                 return false;
748
749         cancel_delayed_work(&intel_dp->pps.panel_vdd_work);
750         intel_dp->pps.want_panel_vdd = true;
751
752         if (edp_have_panel_vdd(intel_dp))
753                 return need_to_disable;
754
755         drm_WARN_ON(display->drm, intel_dp->pps.vdd_wakeref);
756         intel_dp->pps.vdd_wakeref = intel_display_power_get(dev_priv,
757                                                             intel_aux_power_domain(dig_port));
758
759         pp_stat_reg = _pp_stat_reg(intel_dp);
760         pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
761
762         drm_dbg_kms(display->drm, "[ENCODER:%d:%s] %s turning VDD on\n",
763                     dig_port->base.base.base.id, dig_port->base.base.name,
764                     pps_name(intel_dp));
765
766         if (!edp_have_panel_power(intel_dp))
767                 wait_panel_power_cycle(intel_dp);
768
769         pp = ilk_get_pp_control(intel_dp);
770         pp |= EDP_FORCE_VDD;
771
772         intel_de_write(display, pp_ctrl_reg, pp);
773         intel_de_posting_read(display, pp_ctrl_reg);
774         drm_dbg_kms(display->drm,
775                     "[ENCODER:%d:%s] %s PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
776                     dig_port->base.base.base.id, dig_port->base.base.name,
777                     pps_name(intel_dp),
778                     intel_de_read(display, pp_stat_reg),
779                     intel_de_read(display, pp_ctrl_reg));
780         /*
781          * If the panel wasn't on, delay before accessing aux channel
782          */
783         if (!edp_have_panel_power(intel_dp)) {
784                 drm_dbg_kms(display->drm,
785                             "[ENCODER:%d:%s] %s panel power wasn't enabled\n",
786                             dig_port->base.base.base.id, dig_port->base.base.name,
787                             pps_name(intel_dp));
788                 msleep(intel_dp->pps.panel_power_up_delay);
789         }
790
791         return need_to_disable;
792 }
793
794 /*
795  * Must be paired with intel_pps_off().
796  * Nested calls to these functions are not allowed since
797  * we drop the lock. Caller must use some higher level
798  * locking to prevent nested calls from other threads.
799  */
800 void intel_pps_vdd_on(struct intel_dp *intel_dp)
801 {
802         struct intel_display *display = to_intel_display(intel_dp);
803         struct drm_i915_private *i915 = to_i915(display->drm);
804         intel_wakeref_t wakeref;
805         bool vdd;
806
807         if (!intel_dp_is_edp(intel_dp))
808                 return;
809
810         vdd = false;
811         with_intel_pps_lock(intel_dp, wakeref)
812                 vdd = intel_pps_vdd_on_unlocked(intel_dp);
813         I915_STATE_WARN(i915, !vdd, "[ENCODER:%d:%s] %s VDD already requested on\n",
814                         dp_to_dig_port(intel_dp)->base.base.base.id,
815                         dp_to_dig_port(intel_dp)->base.base.name,
816                         pps_name(intel_dp));
817 }
818
819 static void intel_pps_vdd_off_sync_unlocked(struct intel_dp *intel_dp)
820 {
821         struct intel_display *display = to_intel_display(intel_dp);
822         struct drm_i915_private *dev_priv = to_i915(display->drm);
823         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
824         u32 pp;
825         i915_reg_t pp_stat_reg, pp_ctrl_reg;
826
827         lockdep_assert_held(&display->pps.mutex);
828
829         drm_WARN_ON(display->drm, intel_dp->pps.want_panel_vdd);
830
831         if (!edp_have_panel_vdd(intel_dp))
832                 return;
833
834         drm_dbg_kms(display->drm, "[ENCODER:%d:%s] %s turning VDD off\n",
835                     dig_port->base.base.base.id, dig_port->base.base.name,
836                     pps_name(intel_dp));
837
838         pp = ilk_get_pp_control(intel_dp);
839         pp &= ~EDP_FORCE_VDD;
840
841         pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
842         pp_stat_reg = _pp_stat_reg(intel_dp);
843
844         intel_de_write(display, pp_ctrl_reg, pp);
845         intel_de_posting_read(display, pp_ctrl_reg);
846
847         /* Make sure sequencer is idle before allowing subsequent activity */
848         drm_dbg_kms(display->drm,
849                     "[ENCODER:%d:%s] %s PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
850                     dig_port->base.base.base.id, dig_port->base.base.name,
851                     pps_name(intel_dp),
852                     intel_de_read(display, pp_stat_reg),
853                     intel_de_read(display, pp_ctrl_reg));
854
855         if ((pp & PANEL_POWER_ON) == 0)
856                 intel_dp->pps.panel_power_off_time = ktime_get_boottime();
857
858         intel_display_power_put(dev_priv,
859                                 intel_aux_power_domain(dig_port),
860                                 fetch_and_zero(&intel_dp->pps.vdd_wakeref));
861 }
862
863 void intel_pps_vdd_off_sync(struct intel_dp *intel_dp)
864 {
865         intel_wakeref_t wakeref;
866
867         if (!intel_dp_is_edp(intel_dp))
868                 return;
869
870         cancel_delayed_work_sync(&intel_dp->pps.panel_vdd_work);
871         /*
872          * vdd might still be enabled due to the delayed vdd off.
873          * Make sure vdd is actually turned off here.
874          */
875         with_intel_pps_lock(intel_dp, wakeref)
876                 intel_pps_vdd_off_sync_unlocked(intel_dp);
877 }
878
879 static void edp_panel_vdd_work(struct work_struct *__work)
880 {
881         struct intel_pps *pps = container_of(to_delayed_work(__work),
882                                              struct intel_pps, panel_vdd_work);
883         struct intel_dp *intel_dp = container_of(pps, struct intel_dp, pps);
884         intel_wakeref_t wakeref;
885
886         with_intel_pps_lock(intel_dp, wakeref) {
887                 if (!intel_dp->pps.want_panel_vdd)
888                         intel_pps_vdd_off_sync_unlocked(intel_dp);
889         }
890 }
891
892 static void edp_panel_vdd_schedule_off(struct intel_dp *intel_dp)
893 {
894         struct intel_display *display = to_intel_display(intel_dp);
895         struct drm_i915_private *i915 = to_i915(display->drm);
896         unsigned long delay;
897
898         /*
899          * We may not yet know the real power sequencing delays,
900          * so keep VDD enabled until we're done with init.
901          */
902         if (intel_dp->pps.initializing)
903                 return;
904
905         /*
906          * Queue the timer to fire a long time from now (relative to the power
907          * down delay) to keep the panel power up across a sequence of
908          * operations.
909          */
910         delay = msecs_to_jiffies(intel_dp->pps.panel_power_cycle_delay * 5);
911         queue_delayed_work(i915->unordered_wq,
912                            &intel_dp->pps.panel_vdd_work, delay);
913 }
914
915 /*
916  * Must be paired with edp_panel_vdd_on().
917  * Must hold pps_mutex around the whole on/off sequence.
918  * Can be nested with intel_pps_vdd_{on,off}() calls.
919  */
920 void intel_pps_vdd_off_unlocked(struct intel_dp *intel_dp, bool sync)
921 {
922         struct intel_display *display = to_intel_display(intel_dp);
923         struct drm_i915_private *dev_priv = to_i915(display->drm);
924
925         lockdep_assert_held(&display->pps.mutex);
926
927         if (!intel_dp_is_edp(intel_dp))
928                 return;
929
930         I915_STATE_WARN(dev_priv, !intel_dp->pps.want_panel_vdd,
931                         "[ENCODER:%d:%s] %s VDD not forced on",
932                         dp_to_dig_port(intel_dp)->base.base.base.id,
933                         dp_to_dig_port(intel_dp)->base.base.name,
934                         pps_name(intel_dp));
935
936         intel_dp->pps.want_panel_vdd = false;
937
938         if (sync)
939                 intel_pps_vdd_off_sync_unlocked(intel_dp);
940         else
941                 edp_panel_vdd_schedule_off(intel_dp);
942 }
943
944 void intel_pps_on_unlocked(struct intel_dp *intel_dp)
945 {
946         struct intel_display *display = to_intel_display(intel_dp);
947         struct drm_i915_private *dev_priv = to_i915(display->drm);
948         u32 pp;
949         i915_reg_t pp_ctrl_reg;
950
951         lockdep_assert_held(&display->pps.mutex);
952
953         if (!intel_dp_is_edp(intel_dp))
954                 return;
955
956         drm_dbg_kms(display->drm, "[ENCODER:%d:%s] %s turn panel power on\n",
957                     dp_to_dig_port(intel_dp)->base.base.base.id,
958                     dp_to_dig_port(intel_dp)->base.base.name,
959                     pps_name(intel_dp));
960
961         if (drm_WARN(display->drm, edp_have_panel_power(intel_dp),
962                      "[ENCODER:%d:%s] %s panel power already on\n",
963                      dp_to_dig_port(intel_dp)->base.base.base.id,
964                      dp_to_dig_port(intel_dp)->base.base.name,
965                      pps_name(intel_dp)))
966                 return;
967
968         wait_panel_power_cycle(intel_dp);
969
970         pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
971         pp = ilk_get_pp_control(intel_dp);
972         if (IS_IRONLAKE(dev_priv)) {
973                 /* ILK workaround: disable reset around power sequence */
974                 pp &= ~PANEL_POWER_RESET;
975                 intel_de_write(display, pp_ctrl_reg, pp);
976                 intel_de_posting_read(display, pp_ctrl_reg);
977         }
978
979         /*
980          * WA: 22019252566
981          * Disable DPLS gating around power sequence.
982          */
983         if (IS_DISPLAY_VER(display, 13, 14))
984                 intel_de_rmw(display, SOUTH_DSPCLK_GATE_D,
985                              0, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);
986
987         pp |= PANEL_POWER_ON;
988         if (!IS_IRONLAKE(dev_priv))
989                 pp |= PANEL_POWER_RESET;
990
991         intel_de_write(display, pp_ctrl_reg, pp);
992         intel_de_posting_read(display, pp_ctrl_reg);
993
994         wait_panel_on(intel_dp);
995         intel_dp->pps.last_power_on = jiffies;
996
997         if (IS_DISPLAY_VER(display, 13, 14))
998                 intel_de_rmw(display, SOUTH_DSPCLK_GATE_D,
999                              PCH_DPLSUNIT_CLOCK_GATE_DISABLE, 0);
1000
1001         if (IS_IRONLAKE(dev_priv)) {
1002                 pp |= PANEL_POWER_RESET; /* restore panel reset bit */
1003                 intel_de_write(display, pp_ctrl_reg, pp);
1004                 intel_de_posting_read(display, pp_ctrl_reg);
1005         }
1006 }
1007
1008 void intel_pps_on(struct intel_dp *intel_dp)
1009 {
1010         intel_wakeref_t wakeref;
1011
1012         if (!intel_dp_is_edp(intel_dp))
1013                 return;
1014
1015         with_intel_pps_lock(intel_dp, wakeref)
1016                 intel_pps_on_unlocked(intel_dp);
1017 }
1018
1019 void intel_pps_off_unlocked(struct intel_dp *intel_dp)
1020 {
1021         struct intel_display *display = to_intel_display(intel_dp);
1022         struct drm_i915_private *dev_priv = to_i915(display->drm);
1023         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1024         u32 pp;
1025         i915_reg_t pp_ctrl_reg;
1026
1027         lockdep_assert_held(&display->pps.mutex);
1028
1029         if (!intel_dp_is_edp(intel_dp))
1030                 return;
1031
1032         drm_dbg_kms(display->drm, "[ENCODER:%d:%s] %s turn panel power off\n",
1033                     dig_port->base.base.base.id, dig_port->base.base.name,
1034                     pps_name(intel_dp));
1035
1036         drm_WARN(display->drm, !intel_dp->pps.want_panel_vdd,
1037                  "[ENCODER:%d:%s] %s need VDD to turn off panel\n",
1038                  dig_port->base.base.base.id, dig_port->base.base.name,
1039                  pps_name(intel_dp));
1040
1041         pp = ilk_get_pp_control(intel_dp);
1042         /* We need to switch off panel power _and_ force vdd, for otherwise some
1043          * panels get very unhappy and cease to work. */
1044         pp &= ~(PANEL_POWER_ON | PANEL_POWER_RESET | EDP_FORCE_VDD |
1045                 EDP_BLC_ENABLE);
1046
1047         pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
1048
1049         intel_dp->pps.want_panel_vdd = false;
1050
1051         intel_de_write(display, pp_ctrl_reg, pp);
1052         intel_de_posting_read(display, pp_ctrl_reg);
1053
1054         wait_panel_off(intel_dp);
1055         intel_dp->pps.panel_power_off_time = ktime_get_boottime();
1056
1057         /* We got a reference when we enabled the VDD. */
1058         intel_display_power_put(dev_priv,
1059                                 intel_aux_power_domain(dig_port),
1060                                 fetch_and_zero(&intel_dp->pps.vdd_wakeref));
1061 }
1062
1063 void intel_pps_off(struct intel_dp *intel_dp)
1064 {
1065         intel_wakeref_t wakeref;
1066
1067         if (!intel_dp_is_edp(intel_dp))
1068                 return;
1069
1070         with_intel_pps_lock(intel_dp, wakeref)
1071                 intel_pps_off_unlocked(intel_dp);
1072 }
1073
1074 /* Enable backlight in the panel power control. */
1075 void intel_pps_backlight_on(struct intel_dp *intel_dp)
1076 {
1077         struct intel_display *display = to_intel_display(intel_dp);
1078         intel_wakeref_t wakeref;
1079
1080         /*
1081          * If we enable the backlight right away following a panel power
1082          * on, we may see slight flicker as the panel syncs with the eDP
1083          * link.  So delay a bit to make sure the image is solid before
1084          * allowing it to appear.
1085          */
1086         wait_backlight_on(intel_dp);
1087
1088         with_intel_pps_lock(intel_dp, wakeref) {
1089                 i915_reg_t pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
1090                 u32 pp;
1091
1092                 pp = ilk_get_pp_control(intel_dp);
1093                 pp |= EDP_BLC_ENABLE;
1094
1095                 intel_de_write(display, pp_ctrl_reg, pp);
1096                 intel_de_posting_read(display, pp_ctrl_reg);
1097         }
1098 }
1099
1100 /* Disable backlight in the panel power control. */
1101 void intel_pps_backlight_off(struct intel_dp *intel_dp)
1102 {
1103         struct intel_display *display = to_intel_display(intel_dp);
1104         intel_wakeref_t wakeref;
1105
1106         if (!intel_dp_is_edp(intel_dp))
1107                 return;
1108
1109         with_intel_pps_lock(intel_dp, wakeref) {
1110                 i915_reg_t pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
1111                 u32 pp;
1112
1113                 pp = ilk_get_pp_control(intel_dp);
1114                 pp &= ~EDP_BLC_ENABLE;
1115
1116                 intel_de_write(display, pp_ctrl_reg, pp);
1117                 intel_de_posting_read(display, pp_ctrl_reg);
1118         }
1119
1120         intel_dp->pps.last_backlight_off = jiffies;
1121         edp_wait_backlight_off(intel_dp);
1122 }
1123
1124 /*
1125  * Hook for controlling the panel power control backlight through the bl_power
1126  * sysfs attribute. Take care to handle multiple calls.
1127  */
1128 void intel_pps_backlight_power(struct intel_connector *connector, bool enable)
1129 {
1130         struct intel_display *display = to_intel_display(connector);
1131         struct intel_dp *intel_dp = intel_attached_dp(connector);
1132         intel_wakeref_t wakeref;
1133         bool is_enabled;
1134
1135         is_enabled = false;
1136         with_intel_pps_lock(intel_dp, wakeref)
1137                 is_enabled = ilk_get_pp_control(intel_dp) & EDP_BLC_ENABLE;
1138         if (is_enabled == enable)
1139                 return;
1140
1141         drm_dbg_kms(display->drm, "panel power control backlight %s\n",
1142                     enable ? "enable" : "disable");
1143
1144         if (enable)
1145                 intel_pps_backlight_on(intel_dp);
1146         else
1147                 intel_pps_backlight_off(intel_dp);
1148 }
1149
1150 static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)
1151 {
1152         struct intel_display *display = to_intel_display(intel_dp);
1153         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1154         enum pipe pipe = intel_dp->pps.pps_pipe;
1155         i915_reg_t pp_on_reg = PP_ON_DELAYS(display, pipe);
1156
1157         drm_WARN_ON(display->drm, intel_dp->pps.active_pipe != INVALID_PIPE);
1158
1159         if (drm_WARN_ON(display->drm, pipe != PIPE_A && pipe != PIPE_B))
1160                 return;
1161
1162         intel_pps_vdd_off_sync_unlocked(intel_dp);
1163
1164         /*
1165          * VLV seems to get confused when multiple power sequencers
1166          * have the same port selected (even if only one has power/vdd
1167          * enabled). The failure manifests as vlv_wait_port_ready() failing
1168          * CHV on the other hand doesn't seem to mind having the same port
1169          * selected in multiple power sequencers, but let's clear the
1170          * port select always when logically disconnecting a power sequencer
1171          * from a port.
1172          */
1173         drm_dbg_kms(display->drm,
1174                     "detaching %s from [ENCODER:%d:%s]\n",
1175                     pps_name(intel_dp),
1176                     dig_port->base.base.base.id, dig_port->base.base.name);
1177         intel_de_write(display, pp_on_reg, 0);
1178         intel_de_posting_read(display, pp_on_reg);
1179
1180         intel_dp->pps.pps_pipe = INVALID_PIPE;
1181 }
1182
1183 static void vlv_steal_power_sequencer(struct intel_display *display,
1184                                       enum pipe pipe)
1185 {
1186         struct intel_encoder *encoder;
1187
1188         lockdep_assert_held(&display->pps.mutex);
1189
1190         for_each_intel_dp(display->drm, encoder) {
1191                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1192
1193                 drm_WARN(display->drm, intel_dp->pps.active_pipe == pipe,
1194                          "stealing PPS %c from active [ENCODER:%d:%s]\n",
1195                          pipe_name(pipe), encoder->base.base.id,
1196                          encoder->base.name);
1197
1198                 if (intel_dp->pps.pps_pipe != pipe)
1199                         continue;
1200
1201                 drm_dbg_kms(display->drm,
1202                             "stealing PPS %c from [ENCODER:%d:%s]\n",
1203                             pipe_name(pipe), encoder->base.base.id,
1204                             encoder->base.name);
1205
1206                 /* make sure vdd is off before we steal it */
1207                 vlv_detach_power_sequencer(intel_dp);
1208         }
1209 }
1210
1211 void vlv_pps_init(struct intel_encoder *encoder,
1212                   const struct intel_crtc_state *crtc_state)
1213 {
1214         struct intel_display *display = to_intel_display(encoder);
1215         struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1216         struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
1217
1218         lockdep_assert_held(&display->pps.mutex);
1219
1220         drm_WARN_ON(display->drm, intel_dp->pps.active_pipe != INVALID_PIPE);
1221
1222         if (intel_dp->pps.pps_pipe != INVALID_PIPE &&
1223             intel_dp->pps.pps_pipe != crtc->pipe) {
1224                 /*
1225                  * If another power sequencer was being used on this
1226                  * port previously make sure to turn off vdd there while
1227                  * we still have control of it.
1228                  */
1229                 vlv_detach_power_sequencer(intel_dp);
1230         }
1231
1232         /*
1233          * We may be stealing the power
1234          * sequencer from another port.
1235          */
1236         vlv_steal_power_sequencer(display, crtc->pipe);
1237
1238         intel_dp->pps.active_pipe = crtc->pipe;
1239
1240         if (!intel_dp_is_edp(intel_dp))
1241                 return;
1242
1243         /* now it's all ours */
1244         intel_dp->pps.pps_pipe = crtc->pipe;
1245
1246         drm_dbg_kms(display->drm,
1247                     "initializing %s for [ENCODER:%d:%s]\n",
1248                     pps_name(intel_dp),
1249                     encoder->base.base.id, encoder->base.name);
1250
1251         /* init power sequencer on this pipe and port */
1252         pps_init_delays(intel_dp);
1253         pps_init_registers(intel_dp, true);
1254 }
1255
1256 static void pps_vdd_init(struct intel_dp *intel_dp)
1257 {
1258         struct intel_display *display = to_intel_display(intel_dp);
1259         struct drm_i915_private *dev_priv = to_i915(display->drm);
1260         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1261
1262         lockdep_assert_held(&display->pps.mutex);
1263
1264         if (!edp_have_panel_vdd(intel_dp))
1265                 return;
1266
1267         /*
1268          * The VDD bit needs a power domain reference, so if the bit is
1269          * already enabled when we boot or resume, grab this reference and
1270          * schedule a vdd off, so we don't hold on to the reference
1271          * indefinitely.
1272          */
1273         drm_dbg_kms(display->drm,
1274                     "[ENCODER:%d:%s] %s VDD left on by BIOS, adjusting state tracking\n",
1275                     dig_port->base.base.base.id, dig_port->base.base.name,
1276                     pps_name(intel_dp));
1277         drm_WARN_ON(display->drm, intel_dp->pps.vdd_wakeref);
1278         intel_dp->pps.vdd_wakeref = intel_display_power_get(dev_priv,
1279                                                             intel_aux_power_domain(dig_port));
1280 }
1281
1282 bool intel_pps_have_panel_power_or_vdd(struct intel_dp *intel_dp)
1283 {
1284         intel_wakeref_t wakeref;
1285         bool have_power = false;
1286
1287         with_intel_pps_lock(intel_dp, wakeref) {
1288                 have_power = edp_have_panel_power(intel_dp) ||
1289                              edp_have_panel_vdd(intel_dp);
1290         }
1291
1292         return have_power;
1293 }
1294
1295 static void pps_init_timestamps(struct intel_dp *intel_dp)
1296 {
1297         /*
1298          * Initialize panel power off time to 0, assuming panel power could have
1299          * been toggled between kernel boot and now only by a previously loaded
1300          * and removed i915, which has already ensured sufficient power off
1301          * delay at module remove.
1302          */
1303         intel_dp->pps.panel_power_off_time = 0;
1304         intel_dp->pps.last_power_on = jiffies;
1305         intel_dp->pps.last_backlight_off = jiffies;
1306 }
1307
1308 static void
1309 intel_pps_readout_hw_state(struct intel_dp *intel_dp, struct edp_power_seq *seq)
1310 {
1311         struct intel_display *display = to_intel_display(intel_dp);
1312         u32 pp_on, pp_off, pp_ctl;
1313         struct pps_registers regs;
1314
1315         intel_pps_get_registers(intel_dp, &regs);
1316
1317         pp_ctl = ilk_get_pp_control(intel_dp);
1318
1319         /* Ensure PPS is unlocked */
1320         if (!HAS_DDI(display))
1321                 intel_de_write(display, regs.pp_ctrl, pp_ctl);
1322
1323         pp_on = intel_de_read(display, regs.pp_on);
1324         pp_off = intel_de_read(display, regs.pp_off);
1325
1326         /* Pull timing values out of registers */
1327         seq->t1_t3 = REG_FIELD_GET(PANEL_POWER_UP_DELAY_MASK, pp_on);
1328         seq->t8 = REG_FIELD_GET(PANEL_LIGHT_ON_DELAY_MASK, pp_on);
1329         seq->t9 = REG_FIELD_GET(PANEL_LIGHT_OFF_DELAY_MASK, pp_off);
1330         seq->t10 = REG_FIELD_GET(PANEL_POWER_DOWN_DELAY_MASK, pp_off);
1331
1332         if (i915_mmio_reg_valid(regs.pp_div)) {
1333                 u32 pp_div;
1334
1335                 pp_div = intel_de_read(display, regs.pp_div);
1336
1337                 seq->t11_t12 = REG_FIELD_GET(PANEL_POWER_CYCLE_DELAY_MASK, pp_div) * 1000;
1338         } else {
1339                 seq->t11_t12 = REG_FIELD_GET(BXT_POWER_CYCLE_DELAY_MASK, pp_ctl) * 1000;
1340         }
1341 }
1342
1343 static void
1344 intel_pps_dump_state(struct intel_dp *intel_dp, const char *state_name,
1345                      const struct edp_power_seq *seq)
1346 {
1347         struct intel_display *display = to_intel_display(intel_dp);
1348
1349         drm_dbg_kms(display->drm,
1350                     "%s t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
1351                     state_name,
1352                     seq->t1_t3, seq->t8, seq->t9, seq->t10, seq->t11_t12);
1353 }
1354
1355 static void
1356 intel_pps_verify_state(struct intel_dp *intel_dp)
1357 {
1358         struct intel_display *display = to_intel_display(intel_dp);
1359         struct edp_power_seq hw;
1360         struct edp_power_seq *sw = &intel_dp->pps.pps_delays;
1361
1362         intel_pps_readout_hw_state(intel_dp, &hw);
1363
1364         if (hw.t1_t3 != sw->t1_t3 || hw.t8 != sw->t8 || hw.t9 != sw->t9 ||
1365             hw.t10 != sw->t10 || hw.t11_t12 != sw->t11_t12) {
1366                 drm_err(display->drm, "PPS state mismatch\n");
1367                 intel_pps_dump_state(intel_dp, "sw", sw);
1368                 intel_pps_dump_state(intel_dp, "hw", &hw);
1369         }
1370 }
1371
1372 static bool pps_delays_valid(struct edp_power_seq *delays)
1373 {
1374         return delays->t1_t3 || delays->t8 || delays->t9 ||
1375                 delays->t10 || delays->t11_t12;
1376 }
1377
1378 static void pps_init_delays_bios(struct intel_dp *intel_dp,
1379                                  struct edp_power_seq *bios)
1380 {
1381         struct intel_display *display = to_intel_display(intel_dp);
1382
1383         lockdep_assert_held(&display->pps.mutex);
1384
1385         if (!pps_delays_valid(&intel_dp->pps.bios_pps_delays))
1386                 intel_pps_readout_hw_state(intel_dp, &intel_dp->pps.bios_pps_delays);
1387
1388         *bios = intel_dp->pps.bios_pps_delays;
1389
1390         intel_pps_dump_state(intel_dp, "bios", bios);
1391 }
1392
1393 static void pps_init_delays_vbt(struct intel_dp *intel_dp,
1394                                 struct edp_power_seq *vbt)
1395 {
1396         struct intel_display *display = to_intel_display(intel_dp);
1397         struct intel_connector *connector = intel_dp->attached_connector;
1398
1399         *vbt = connector->panel.vbt.edp.pps;
1400
1401         if (!pps_delays_valid(vbt))
1402                 return;
1403
1404         /* On Toshiba Satellite P50-C-18C system the VBT T12 delay
1405          * of 500ms appears to be too short. Ocassionally the panel
1406          * just fails to power back on. Increasing the delay to 800ms
1407          * seems sufficient to avoid this problem.
1408          */
1409         if (intel_has_quirk(display, QUIRK_INCREASE_T12_DELAY)) {
1410                 vbt->t11_t12 = max_t(u16, vbt->t11_t12, 1300 * 10);
1411                 drm_dbg_kms(display->drm,
1412                             "Increasing T12 panel delay as per the quirk to %d\n",
1413                             vbt->t11_t12);
1414         }
1415
1416         /* T11_T12 delay is special and actually in units of 100ms, but zero
1417          * based in the hw (so we need to add 100 ms). But the sw vbt
1418          * table multiplies it with 1000 to make it in units of 100usec,
1419          * too. */
1420         vbt->t11_t12 += 100 * 10;
1421
1422         intel_pps_dump_state(intel_dp, "vbt", vbt);
1423 }
1424
1425 static void pps_init_delays_spec(struct intel_dp *intel_dp,
1426                                  struct edp_power_seq *spec)
1427 {
1428         struct intel_display *display = to_intel_display(intel_dp);
1429
1430         lockdep_assert_held(&display->pps.mutex);
1431
1432         /* Upper limits from eDP 1.3 spec. Note that we use the clunky units of
1433          * our hw here, which are all in 100usec. */
1434         spec->t1_t3 = 210 * 10;
1435         spec->t8 = 50 * 10; /* no limit for t8, use t7 instead */
1436         spec->t9 = 50 * 10; /* no limit for t9, make it symmetric with t8 */
1437         spec->t10 = 500 * 10;
1438         /* This one is special and actually in units of 100ms, but zero
1439          * based in the hw (so we need to add 100 ms). But the sw vbt
1440          * table multiplies it with 1000 to make it in units of 100usec,
1441          * too. */
1442         spec->t11_t12 = (510 + 100) * 10;
1443
1444         intel_pps_dump_state(intel_dp, "spec", spec);
1445 }
1446
1447 static void pps_init_delays(struct intel_dp *intel_dp)
1448 {
1449         struct intel_display *display = to_intel_display(intel_dp);
1450         struct edp_power_seq cur, vbt, spec,
1451                 *final = &intel_dp->pps.pps_delays;
1452
1453         lockdep_assert_held(&display->pps.mutex);
1454
1455         /* already initialized? */
1456         if (pps_delays_valid(final))
1457                 return;
1458
1459         pps_init_delays_bios(intel_dp, &cur);
1460         pps_init_delays_vbt(intel_dp, &vbt);
1461         pps_init_delays_spec(intel_dp, &spec);
1462
1463         /* Use the max of the register settings and vbt. If both are
1464          * unset, fall back to the spec limits. */
1465 #define assign_final(field)     final->field = (max(cur.field, vbt.field) == 0 ? \
1466                                        spec.field : \
1467                                        max(cur.field, vbt.field))
1468         assign_final(t1_t3);
1469         assign_final(t8);
1470         assign_final(t9);
1471         assign_final(t10);
1472         assign_final(t11_t12);
1473 #undef assign_final
1474
1475 #define get_delay(field)        (DIV_ROUND_UP(final->field, 10))
1476         intel_dp->pps.panel_power_up_delay = get_delay(t1_t3);
1477         intel_dp->pps.backlight_on_delay = get_delay(t8);
1478         intel_dp->pps.backlight_off_delay = get_delay(t9);
1479         intel_dp->pps.panel_power_down_delay = get_delay(t10);
1480         intel_dp->pps.panel_power_cycle_delay = get_delay(t11_t12);
1481 #undef get_delay
1482
1483         drm_dbg_kms(display->drm,
1484                     "panel power up delay %d, power down delay %d, power cycle delay %d\n",
1485                     intel_dp->pps.panel_power_up_delay,
1486                     intel_dp->pps.panel_power_down_delay,
1487                     intel_dp->pps.panel_power_cycle_delay);
1488
1489         drm_dbg_kms(display->drm, "backlight on delay %d, off delay %d\n",
1490                     intel_dp->pps.backlight_on_delay,
1491                     intel_dp->pps.backlight_off_delay);
1492
1493         /*
1494          * We override the HW backlight delays to 1 because we do manual waits
1495          * on them. For T8, even BSpec recommends doing it. For T9, if we
1496          * don't do this, we'll end up waiting for the backlight off delay
1497          * twice: once when we do the manual sleep, and once when we disable
1498          * the panel and wait for the PP_STATUS bit to become zero.
1499          */
1500         final->t8 = 1;
1501         final->t9 = 1;
1502
1503         /*
1504          * HW has only a 100msec granularity for t11_t12 so round it up
1505          * accordingly.
1506          */
1507         final->t11_t12 = roundup(final->t11_t12, 100 * 10);
1508 }
1509
1510 static void pps_init_registers(struct intel_dp *intel_dp, bool force_disable_vdd)
1511 {
1512         struct intel_display *display = to_intel_display(intel_dp);
1513         struct drm_i915_private *dev_priv = to_i915(display->drm);
1514         u32 pp_on, pp_off, port_sel = 0;
1515         int div = DISPLAY_RUNTIME_INFO(display)->rawclk_freq / 1000;
1516         struct pps_registers regs;
1517         enum port port = dp_to_dig_port(intel_dp)->base.port;
1518         const struct edp_power_seq *seq = &intel_dp->pps.pps_delays;
1519
1520         lockdep_assert_held(&display->pps.mutex);
1521
1522         intel_pps_get_registers(intel_dp, &regs);
1523
1524         /*
1525          * On some VLV machines the BIOS can leave the VDD
1526          * enabled even on power sequencers which aren't
1527          * hooked up to any port. This would mess up the
1528          * power domain tracking the first time we pick
1529          * one of these power sequencers for use since
1530          * intel_pps_vdd_on_unlocked() would notice that the VDD was
1531          * already on and therefore wouldn't grab the power
1532          * domain reference. Disable VDD first to avoid this.
1533          * This also avoids spuriously turning the VDD on as
1534          * soon as the new power sequencer gets initialized.
1535          */
1536         if (force_disable_vdd) {
1537                 u32 pp = ilk_get_pp_control(intel_dp);
1538
1539                 drm_WARN(display->drm, pp & PANEL_POWER_ON,
1540                          "Panel power already on\n");
1541
1542                 if (pp & EDP_FORCE_VDD)
1543                         drm_dbg_kms(display->drm,
1544                                     "VDD already on, disabling first\n");
1545
1546                 pp &= ~EDP_FORCE_VDD;
1547
1548                 intel_de_write(display, regs.pp_ctrl, pp);
1549         }
1550
1551         pp_on = REG_FIELD_PREP(PANEL_POWER_UP_DELAY_MASK, seq->t1_t3) |
1552                 REG_FIELD_PREP(PANEL_LIGHT_ON_DELAY_MASK, seq->t8);
1553         pp_off = REG_FIELD_PREP(PANEL_LIGHT_OFF_DELAY_MASK, seq->t9) |
1554                 REG_FIELD_PREP(PANEL_POWER_DOWN_DELAY_MASK, seq->t10);
1555
1556         /* Haswell doesn't have any port selection bits for the panel
1557          * power sequencer any more. */
1558         if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
1559                 port_sel = PANEL_PORT_SELECT_VLV(port);
1560         } else if (HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv)) {
1561                 switch (port) {
1562                 case PORT_A:
1563                         port_sel = PANEL_PORT_SELECT_DPA;
1564                         break;
1565                 case PORT_C:
1566                         port_sel = PANEL_PORT_SELECT_DPC;
1567                         break;
1568                 case PORT_D:
1569                         port_sel = PANEL_PORT_SELECT_DPD;
1570                         break;
1571                 default:
1572                         MISSING_CASE(port);
1573                         break;
1574                 }
1575         }
1576
1577         pp_on |= port_sel;
1578
1579         intel_de_write(display, regs.pp_on, pp_on);
1580         intel_de_write(display, regs.pp_off, pp_off);
1581
1582         /*
1583          * Compute the divisor for the pp clock, simply match the Bspec formula.
1584          */
1585         if (i915_mmio_reg_valid(regs.pp_div))
1586                 intel_de_write(display, regs.pp_div,
1587                                REG_FIELD_PREP(PP_REFERENCE_DIVIDER_MASK, (100 * div) / 2 - 1) | REG_FIELD_PREP(PANEL_POWER_CYCLE_DELAY_MASK, DIV_ROUND_UP(seq->t11_t12, 1000)));
1588         else
1589                 intel_de_rmw(display, regs.pp_ctrl, BXT_POWER_CYCLE_DELAY_MASK,
1590                              REG_FIELD_PREP(BXT_POWER_CYCLE_DELAY_MASK,
1591                                             DIV_ROUND_UP(seq->t11_t12, 1000)));
1592
1593         drm_dbg_kms(display->drm,
1594                     "panel power sequencer register settings: PP_ON %#x, PP_OFF %#x, PP_DIV %#x\n",
1595                     intel_de_read(display, regs.pp_on),
1596                     intel_de_read(display, regs.pp_off),
1597                     i915_mmio_reg_valid(regs.pp_div) ?
1598                     intel_de_read(display, regs.pp_div) :
1599                     (intel_de_read(display, regs.pp_ctrl) & BXT_POWER_CYCLE_DELAY_MASK));
1600 }
1601
1602 void intel_pps_encoder_reset(struct intel_dp *intel_dp)
1603 {
1604         struct intel_display *display = to_intel_display(intel_dp);
1605         struct drm_i915_private *i915 = to_i915(display->drm);
1606         intel_wakeref_t wakeref;
1607
1608         if (!intel_dp_is_edp(intel_dp))
1609                 return;
1610
1611         with_intel_pps_lock(intel_dp, wakeref) {
1612                 /*
1613                  * Reinit the power sequencer also on the resume path, in case
1614                  * BIOS did something nasty with it.
1615                  */
1616                 if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
1617                         vlv_initial_power_sequencer_setup(intel_dp);
1618
1619                 pps_init_delays(intel_dp);
1620                 pps_init_registers(intel_dp, false);
1621                 pps_vdd_init(intel_dp);
1622
1623                 if (edp_have_panel_vdd(intel_dp))
1624                         edp_panel_vdd_schedule_off(intel_dp);
1625         }
1626 }
1627
1628 bool intel_pps_init(struct intel_dp *intel_dp)
1629 {
1630         intel_wakeref_t wakeref;
1631         bool ret;
1632
1633         intel_dp->pps.initializing = true;
1634         INIT_DELAYED_WORK(&intel_dp->pps.panel_vdd_work, edp_panel_vdd_work);
1635
1636         pps_init_timestamps(intel_dp);
1637
1638         with_intel_pps_lock(intel_dp, wakeref) {
1639                 ret = pps_initial_setup(intel_dp);
1640
1641                 pps_init_delays(intel_dp);
1642                 pps_init_registers(intel_dp, false);
1643                 pps_vdd_init(intel_dp);
1644         }
1645
1646         return ret;
1647 }
1648
1649 static void pps_init_late(struct intel_dp *intel_dp)
1650 {
1651         struct intel_display *display = to_intel_display(intel_dp);
1652         struct drm_i915_private *i915 = to_i915(display->drm);
1653         struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
1654         struct intel_connector *connector = intel_dp->attached_connector;
1655
1656         if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
1657                 return;
1658
1659         if (intel_num_pps(display) < 2)
1660                 return;
1661
1662         drm_WARN(display->drm,
1663                  connector->panel.vbt.backlight.controller >= 0 &&
1664                  intel_dp->pps.pps_idx != connector->panel.vbt.backlight.controller,
1665                  "[ENCODER:%d:%s] power sequencer mismatch: %d (initial) vs. %d (VBT)\n",
1666                  encoder->base.base.id, encoder->base.name,
1667                  intel_dp->pps.pps_idx, connector->panel.vbt.backlight.controller);
1668
1669         if (connector->panel.vbt.backlight.controller >= 0)
1670                 intel_dp->pps.pps_idx = connector->panel.vbt.backlight.controller;
1671 }
1672
1673 void intel_pps_init_late(struct intel_dp *intel_dp)
1674 {
1675         intel_wakeref_t wakeref;
1676
1677         with_intel_pps_lock(intel_dp, wakeref) {
1678                 /* Reinit delays after per-panel info has been parsed from VBT */
1679                 pps_init_late(intel_dp);
1680
1681                 memset(&intel_dp->pps.pps_delays, 0, sizeof(intel_dp->pps.pps_delays));
1682                 pps_init_delays(intel_dp);
1683                 pps_init_registers(intel_dp, false);
1684
1685                 intel_dp->pps.initializing = false;
1686
1687                 if (edp_have_panel_vdd(intel_dp))
1688                         edp_panel_vdd_schedule_off(intel_dp);
1689         }
1690 }
1691
1692 void intel_pps_unlock_regs_wa(struct intel_display *display)
1693 {
1694         int pps_num;
1695         int pps_idx;
1696
1697         if (!HAS_DISPLAY(display) || HAS_DDI(display))
1698                 return;
1699         /*
1700          * This w/a is needed at least on CPT/PPT, but to be sure apply it
1701          * everywhere where registers can be write protected.
1702          */
1703         pps_num = intel_num_pps(display);
1704
1705         for (pps_idx = 0; pps_idx < pps_num; pps_idx++)
1706                 intel_de_rmw(display, PP_CONTROL(display, pps_idx),
1707                              PANEL_UNLOCK_MASK, PANEL_UNLOCK_REGS);
1708 }
1709
1710 void intel_pps_setup(struct intel_display *display)
1711 {
1712         struct drm_i915_private *i915 = to_i915(display->drm);
1713
1714         if (HAS_PCH_SPLIT(i915) || IS_GEMINILAKE(i915) || IS_BROXTON(i915))
1715                 display->pps.mmio_base = PCH_PPS_BASE;
1716         else if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
1717                 display->pps.mmio_base = VLV_PPS_BASE;
1718         else
1719                 display->pps.mmio_base = PPS_BASE;
1720 }
1721
1722 static int intel_pps_show(struct seq_file *m, void *data)
1723 {
1724         struct intel_connector *connector = m->private;
1725         struct intel_dp *intel_dp = intel_attached_dp(connector);
1726
1727         if (connector->base.status != connector_status_connected)
1728                 return -ENODEV;
1729
1730         seq_printf(m, "Panel power up delay: %d\n",
1731                    intel_dp->pps.panel_power_up_delay);
1732         seq_printf(m, "Panel power down delay: %d\n",
1733                    intel_dp->pps.panel_power_down_delay);
1734         seq_printf(m, "Backlight on delay: %d\n",
1735                    intel_dp->pps.backlight_on_delay);
1736         seq_printf(m, "Backlight off delay: %d\n",
1737                    intel_dp->pps.backlight_off_delay);
1738
1739         return 0;
1740 }
1741 DEFINE_SHOW_ATTRIBUTE(intel_pps);
1742
1743 void intel_pps_connector_debugfs_add(struct intel_connector *connector)
1744 {
1745         struct dentry *root = connector->base.debugfs_entry;
1746         int connector_type = connector->base.connector_type;
1747
1748         if (connector_type == DRM_MODE_CONNECTOR_eDP)
1749                 debugfs_create_file("i915_panel_timings", 0444, root,
1750                                     connector, &intel_pps_fops);
1751 }
1752
1753 void assert_pps_unlocked(struct intel_display *display, enum pipe pipe)
1754 {
1755         struct drm_i915_private *dev_priv = to_i915(display->drm);
1756         i915_reg_t pp_reg;
1757         u32 val;
1758         enum pipe panel_pipe = INVALID_PIPE;
1759         bool locked = true;
1760
1761         if (drm_WARN_ON(display->drm, HAS_DDI(display)))
1762                 return;
1763
1764         if (HAS_PCH_SPLIT(dev_priv)) {
1765                 u32 port_sel;
1766
1767                 pp_reg = PP_CONTROL(display, 0);
1768                 port_sel = intel_de_read(display, PP_ON_DELAYS(display, 0)) &
1769                         PANEL_PORT_SELECT_MASK;
1770
1771                 switch (port_sel) {
1772                 case PANEL_PORT_SELECT_LVDS:
1773                         intel_lvds_port_enabled(dev_priv, PCH_LVDS, &panel_pipe);
1774                         break;
1775                 case PANEL_PORT_SELECT_DPA:
1776                         g4x_dp_port_enabled(dev_priv, DP_A, PORT_A, &panel_pipe);
1777                         break;
1778                 case PANEL_PORT_SELECT_DPC:
1779                         g4x_dp_port_enabled(dev_priv, PCH_DP_C, PORT_C, &panel_pipe);
1780                         break;
1781                 case PANEL_PORT_SELECT_DPD:
1782                         g4x_dp_port_enabled(dev_priv, PCH_DP_D, PORT_D, &panel_pipe);
1783                         break;
1784                 default:
1785                         MISSING_CASE(port_sel);
1786                         break;
1787                 }
1788         } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
1789                 /* presumably write lock depends on pipe, not port select */
1790                 pp_reg = PP_CONTROL(display, pipe);
1791                 panel_pipe = pipe;
1792         } else {
1793                 u32 port_sel;
1794
1795                 pp_reg = PP_CONTROL(display, 0);
1796                 port_sel = intel_de_read(display, PP_ON_DELAYS(display, 0)) &
1797                         PANEL_PORT_SELECT_MASK;
1798
1799                 drm_WARN_ON(display->drm,
1800                             port_sel != PANEL_PORT_SELECT_LVDS);
1801                 intel_lvds_port_enabled(dev_priv, LVDS, &panel_pipe);
1802         }
1803
1804         val = intel_de_read(display, pp_reg);
1805         if (!(val & PANEL_POWER_ON) ||
1806             ((val & PANEL_UNLOCK_MASK) == PANEL_UNLOCK_REGS))
1807                 locked = false;
1808
1809         I915_STATE_WARN(dev_priv, panel_pipe == pipe && locked,
1810                         "panel assertion failure, pipe %c regs locked\n",
1811                         pipe_name(pipe));
1812 }