zonefs: convert zonefs to use the new mount api
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / display / intel_psr.c
1 /*
2  * Copyright © 2014 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23
24 #include <drm/drm_atomic_helper.h>
25 #include <drm/drm_damage_helper.h>
26 #include <drm/drm_debugfs.h>
27
28 #include "i915_drv.h"
29 #include "i915_reg.h"
30 #include "intel_atomic.h"
31 #include "intel_crtc.h"
32 #include "intel_ddi.h"
33 #include "intel_de.h"
34 #include "intel_display_types.h"
35 #include "intel_dp.h"
36 #include "intel_dp_aux.h"
37 #include "intel_frontbuffer.h"
38 #include "intel_hdmi.h"
39 #include "intel_psr.h"
40 #include "intel_psr_regs.h"
41 #include "intel_snps_phy.h"
42 #include "skl_universal_plane.h"
43
44 /**
45  * DOC: Panel Self Refresh (PSR/SRD)
46  *
47  * Since Haswell Display controller supports Panel Self-Refresh on display
48  * panels witch have a remote frame buffer (RFB) implemented according to PSR
49  * spec in eDP1.3. PSR feature allows the display to go to lower standby states
50  * when system is idle but display is on as it eliminates display refresh
51  * request to DDR memory completely as long as the frame buffer for that
52  * display is unchanged.
53  *
54  * Panel Self Refresh must be supported by both Hardware (source) and
55  * Panel (sink).
56  *
57  * PSR saves power by caching the framebuffer in the panel RFB, which allows us
58  * to power down the link and memory controller. For DSI panels the same idea
59  * is called "manual mode".
60  *
61  * The implementation uses the hardware-based PSR support which automatically
62  * enters/exits self-refresh mode. The hardware takes care of sending the
63  * required DP aux message and could even retrain the link (that part isn't
64  * enabled yet though). The hardware also keeps track of any frontbuffer
65  * changes to know when to exit self-refresh mode again. Unfortunately that
66  * part doesn't work too well, hence why the i915 PSR support uses the
67  * software frontbuffer tracking to make sure it doesn't miss a screen
68  * update. For this integration intel_psr_invalidate() and intel_psr_flush()
69  * get called by the frontbuffer tracking code. Note that because of locking
70  * issues the self-refresh re-enable code is done from a work queue, which
71  * must be correctly synchronized/cancelled when shutting down the pipe."
72  *
73  * DC3CO (DC3 clock off)
74  *
75  * On top of PSR2, GEN12 adds a intermediate power savings state that turns
76  * clock off automatically during PSR2 idle state.
77  * The smaller overhead of DC3co entry/exit vs. the overhead of PSR2 deep sleep
78  * entry/exit allows the HW to enter a low-power state even when page flipping
79  * periodically (for instance a 30fps video playback scenario).
80  *
81  * Every time a flips occurs PSR2 will get out of deep sleep state(if it was),
82  * so DC3CO is enabled and tgl_dc3co_disable_work is schedule to run after 6
83  * frames, if no other flip occurs and the function above is executed, DC3CO is
84  * disabled and PSR2 is configured to enter deep sleep, resetting again in case
85  * of another flip.
86  * Front buffer modifications do not trigger DC3CO activation on purpose as it
87  * would bring a lot of complexity and most of the moderns systems will only
88  * use page flips.
89  */
90
91 /*
92  * Description of PSR mask bits:
93  *
94  * EDP_PSR_DEBUG[16]/EDP_PSR_DEBUG_MASK_DISP_REG_WRITE (hsw-skl):
95  *
96  *  When unmasked (nearly) all display register writes (eg. even
97  *  SWF) trigger a PSR exit. Some registers are excluded from this
98  *  and they have a more specific mask (described below). On icl+
99  *  this bit no longer exists and is effectively always set.
100  *
101  * PIPE_MISC[21]/PIPE_MISC_PSR_MASK_PIPE_REG_WRITE (skl+):
102  *
103  *  When unmasked (nearly) all pipe/plane register writes
104  *  trigger a PSR exit. Some plane registers are excluded from this
105  *  and they have a more specific mask (described below).
106  *
107  * CHICKEN_PIPESL_1[11]/SKL_PSR_MASK_PLANE_FLIP (skl+):
108  * PIPE_MISC[23]/PIPE_MISC_PSR_MASK_PRIMARY_FLIP (bdw):
109  * EDP_PSR_DEBUG[23]/EDP_PSR_DEBUG_MASK_PRIMARY_FLIP (hsw):
110  *
111  *  When unmasked PRI_SURF/PLANE_SURF writes trigger a PSR exit.
112  *  SPR_SURF/CURBASE are not included in this and instead are
113  *  controlled by PIPE_MISC_PSR_MASK_PIPE_REG_WRITE (skl+) or
114  *  EDP_PSR_DEBUG_MASK_DISP_REG_WRITE (hsw/bdw).
115  *
116  * PIPE_MISC[22]/PIPE_MISC_PSR_MASK_SPRITE_ENABLE (bdw):
117  * EDP_PSR_DEBUG[21]/EDP_PSR_DEBUG_MASK_SPRITE_ENABLE (hsw):
118  *
119  *  When unmasked PSR is blocked as long as the sprite
120  *  plane is enabled. skl+ with their universal planes no
121  *  longer have a mask bit like this, and no plane being
122  *  enabledb blocks PSR.
123  *
124  * PIPE_MISC[21]/PIPE_MISC_PSR_MASK_CURSOR_MOVE (bdw):
125  * EDP_PSR_DEBUG[20]/EDP_PSR_DEBUG_MASK_CURSOR_MOVE (hsw):
126  *
127  *  When umasked CURPOS writes trigger a PSR exit. On skl+
128  *  this doesn't exit but CURPOS is included in the
129  *  PIPE_MISC_PSR_MASK_PIPE_REG_WRITE mask.
130  *
131  * PIPE_MISC[20]/PIPE_MISC_PSR_MASK_VBLANK_VSYNC_INT (bdw+):
132  * EDP_PSR_DEBUG[19]/EDP_PSR_DEBUG_MASK_VBLANK_VSYNC_INT (hsw):
133  *
134  *  When unmasked PSR is blocked as long as vblank and/or vsync
135  *  interrupt is unmasked in IMR *and* enabled in IER.
136  *
137  * CHICKEN_TRANS[30]/SKL_UNMASK_VBL_TO_PIPE_IN_SRD (skl+):
138  * CHICKEN_PAR1_1[15]/HSW_MASK_VBL_TO_PIPE_IN_SRD (hsw/bdw):
139  *
140  *  Selectcs whether PSR exit generates an extra vblank before
141  *  the first frame is transmitted. Also note the opposite polarity
142  *  if the bit on hsw/bdw vs. skl+ (masked==generate the extra vblank,
143  *  unmasked==do not generate the extra vblank).
144  *
145  *  With DC states enabled the extra vblank happens after link training,
146  *  with DC states disabled it happens immediately upuon PSR exit trigger.
147  *  No idea as of now why there is a difference. HSW/BDW (which don't
148  *  even have DMC) always generate it after link training. Go figure.
149  *
150  *  Unfortunately CHICKEN_TRANS itself seems to be double buffered
151  *  and thus won't latch until the first vblank. So with DC states
152  *  enabled the register effctively uses the reset value during DC5
153  *  exit+PSR exit sequence, and thus the bit does nothing until
154  *  latched by the vblank that it was trying to prevent from being
155  *  generated in the first place. So we should probably call this
156  *  one a chicken/egg bit instead on skl+.
157  *
158  *  In standby mode (as opposed to link-off) this makes no difference
159  *  as the timing generator keeps running the whole time generating
160  *  normal periodic vblanks.
161  *
162  *  WaPsrDPAMaskVBlankInSRD asks us to set the bit on hsw/bdw,
163  *  and doing so makes the behaviour match the skl+ reset value.
164  *
165  * CHICKEN_PIPESL_1[0]/BDW_UNMASK_VBL_TO_REGS_IN_SRD (bdw):
166  * CHICKEN_PIPESL_1[15]/HSW_UNMASK_VBL_TO_REGS_IN_SRD (hsw):
167  *
168  *  On BDW without this bit is no vblanks whatsoever are
169  *  generated after PSR exit. On HSW this has no apparant effect.
170  *  WaPsrDPRSUnmaskVBlankInSRD says to set this.
171  *
172  * The rest of the bits are more self-explanatory and/or
173  * irrelevant for normal operation.
174  */
175
176 bool intel_encoder_can_psr(struct intel_encoder *encoder)
177 {
178         if (intel_encoder_is_dp(encoder) || encoder->type == INTEL_OUTPUT_DP_MST)
179                 return CAN_PSR(enc_to_intel_dp(encoder)) ||
180                        CAN_PANEL_REPLAY(enc_to_intel_dp(encoder));
181         else
182                 return false;
183 }
184
185 static bool psr_global_enabled(struct intel_dp *intel_dp)
186 {
187         struct intel_connector *connector = intel_dp->attached_connector;
188         struct drm_i915_private *i915 = dp_to_i915(intel_dp);
189
190         switch (intel_dp->psr.debug & I915_PSR_DEBUG_MODE_MASK) {
191         case I915_PSR_DEBUG_DEFAULT:
192                 if (i915->display.params.enable_psr == -1)
193                         return connector->panel.vbt.psr.enable;
194                 return i915->display.params.enable_psr;
195         case I915_PSR_DEBUG_DISABLE:
196                 return false;
197         default:
198                 return true;
199         }
200 }
201
202 static bool psr2_global_enabled(struct intel_dp *intel_dp)
203 {
204         struct drm_i915_private *i915 = dp_to_i915(intel_dp);
205
206         switch (intel_dp->psr.debug & I915_PSR_DEBUG_MODE_MASK) {
207         case I915_PSR_DEBUG_DISABLE:
208         case I915_PSR_DEBUG_FORCE_PSR1:
209                 return false;
210         default:
211                 if (i915->display.params.enable_psr == 1)
212                         return false;
213                 return true;
214         }
215 }
216
217 static u32 psr_irq_psr_error_bit_get(struct intel_dp *intel_dp)
218 {
219         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
220
221         return DISPLAY_VER(dev_priv) >= 12 ? TGL_PSR_ERROR :
222                 EDP_PSR_ERROR(intel_dp->psr.transcoder);
223 }
224
225 static u32 psr_irq_post_exit_bit_get(struct intel_dp *intel_dp)
226 {
227         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
228
229         return DISPLAY_VER(dev_priv) >= 12 ? TGL_PSR_POST_EXIT :
230                 EDP_PSR_POST_EXIT(intel_dp->psr.transcoder);
231 }
232
233 static u32 psr_irq_pre_entry_bit_get(struct intel_dp *intel_dp)
234 {
235         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
236
237         return DISPLAY_VER(dev_priv) >= 12 ? TGL_PSR_PRE_ENTRY :
238                 EDP_PSR_PRE_ENTRY(intel_dp->psr.transcoder);
239 }
240
241 static u32 psr_irq_mask_get(struct intel_dp *intel_dp)
242 {
243         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
244
245         return DISPLAY_VER(dev_priv) >= 12 ? TGL_PSR_MASK :
246                 EDP_PSR_MASK(intel_dp->psr.transcoder);
247 }
248
249 static i915_reg_t psr_ctl_reg(struct drm_i915_private *dev_priv,
250                               enum transcoder cpu_transcoder)
251 {
252         if (DISPLAY_VER(dev_priv) >= 8)
253                 return EDP_PSR_CTL(cpu_transcoder);
254         else
255                 return HSW_SRD_CTL;
256 }
257
258 static i915_reg_t psr_debug_reg(struct drm_i915_private *dev_priv,
259                                 enum transcoder cpu_transcoder)
260 {
261         if (DISPLAY_VER(dev_priv) >= 8)
262                 return EDP_PSR_DEBUG(cpu_transcoder);
263         else
264                 return HSW_SRD_DEBUG;
265 }
266
267 static i915_reg_t psr_perf_cnt_reg(struct drm_i915_private *dev_priv,
268                                    enum transcoder cpu_transcoder)
269 {
270         if (DISPLAY_VER(dev_priv) >= 8)
271                 return EDP_PSR_PERF_CNT(cpu_transcoder);
272         else
273                 return HSW_SRD_PERF_CNT;
274 }
275
276 static i915_reg_t psr_status_reg(struct drm_i915_private *dev_priv,
277                                  enum transcoder cpu_transcoder)
278 {
279         if (DISPLAY_VER(dev_priv) >= 8)
280                 return EDP_PSR_STATUS(cpu_transcoder);
281         else
282                 return HSW_SRD_STATUS;
283 }
284
285 static i915_reg_t psr_imr_reg(struct drm_i915_private *dev_priv,
286                               enum transcoder cpu_transcoder)
287 {
288         if (DISPLAY_VER(dev_priv) >= 12)
289                 return TRANS_PSR_IMR(cpu_transcoder);
290         else
291                 return EDP_PSR_IMR;
292 }
293
294 static i915_reg_t psr_iir_reg(struct drm_i915_private *dev_priv,
295                               enum transcoder cpu_transcoder)
296 {
297         if (DISPLAY_VER(dev_priv) >= 12)
298                 return TRANS_PSR_IIR(cpu_transcoder);
299         else
300                 return EDP_PSR_IIR;
301 }
302
303 static i915_reg_t psr_aux_ctl_reg(struct drm_i915_private *dev_priv,
304                                   enum transcoder cpu_transcoder)
305 {
306         if (DISPLAY_VER(dev_priv) >= 8)
307                 return EDP_PSR_AUX_CTL(cpu_transcoder);
308         else
309                 return HSW_SRD_AUX_CTL;
310 }
311
312 static i915_reg_t psr_aux_data_reg(struct drm_i915_private *dev_priv,
313                                    enum transcoder cpu_transcoder, int i)
314 {
315         if (DISPLAY_VER(dev_priv) >= 8)
316                 return EDP_PSR_AUX_DATA(cpu_transcoder, i);
317         else
318                 return HSW_SRD_AUX_DATA(i);
319 }
320
321 static void psr_irq_control(struct intel_dp *intel_dp)
322 {
323         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
324         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
325         u32 mask;
326
327         mask = psr_irq_psr_error_bit_get(intel_dp);
328         if (intel_dp->psr.debug & I915_PSR_DEBUG_IRQ)
329                 mask |= psr_irq_post_exit_bit_get(intel_dp) |
330                         psr_irq_pre_entry_bit_get(intel_dp);
331
332         intel_de_rmw(dev_priv, psr_imr_reg(dev_priv, cpu_transcoder),
333                      psr_irq_mask_get(intel_dp), ~mask);
334 }
335
336 static void psr_event_print(struct drm_i915_private *i915,
337                             u32 val, bool psr2_enabled)
338 {
339         drm_dbg_kms(&i915->drm, "PSR exit events: 0x%x\n", val);
340         if (val & PSR_EVENT_PSR2_WD_TIMER_EXPIRE)
341                 drm_dbg_kms(&i915->drm, "\tPSR2 watchdog timer expired\n");
342         if ((val & PSR_EVENT_PSR2_DISABLED) && psr2_enabled)
343                 drm_dbg_kms(&i915->drm, "\tPSR2 disabled\n");
344         if (val & PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN)
345                 drm_dbg_kms(&i915->drm, "\tSU dirty FIFO underrun\n");
346         if (val & PSR_EVENT_SU_CRC_FIFO_UNDERRUN)
347                 drm_dbg_kms(&i915->drm, "\tSU CRC FIFO underrun\n");
348         if (val & PSR_EVENT_GRAPHICS_RESET)
349                 drm_dbg_kms(&i915->drm, "\tGraphics reset\n");
350         if (val & PSR_EVENT_PCH_INTERRUPT)
351                 drm_dbg_kms(&i915->drm, "\tPCH interrupt\n");
352         if (val & PSR_EVENT_MEMORY_UP)
353                 drm_dbg_kms(&i915->drm, "\tMemory up\n");
354         if (val & PSR_EVENT_FRONT_BUFFER_MODIFY)
355                 drm_dbg_kms(&i915->drm, "\tFront buffer modification\n");
356         if (val & PSR_EVENT_WD_TIMER_EXPIRE)
357                 drm_dbg_kms(&i915->drm, "\tPSR watchdog timer expired\n");
358         if (val & PSR_EVENT_PIPE_REGISTERS_UPDATE)
359                 drm_dbg_kms(&i915->drm, "\tPIPE registers updated\n");
360         if (val & PSR_EVENT_REGISTER_UPDATE)
361                 drm_dbg_kms(&i915->drm, "\tRegister updated\n");
362         if (val & PSR_EVENT_HDCP_ENABLE)
363                 drm_dbg_kms(&i915->drm, "\tHDCP enabled\n");
364         if (val & PSR_EVENT_KVMR_SESSION_ENABLE)
365                 drm_dbg_kms(&i915->drm, "\tKVMR session enabled\n");
366         if (val & PSR_EVENT_VBI_ENABLE)
367                 drm_dbg_kms(&i915->drm, "\tVBI enabled\n");
368         if (val & PSR_EVENT_LPSP_MODE_EXIT)
369                 drm_dbg_kms(&i915->drm, "\tLPSP mode exited\n");
370         if ((val & PSR_EVENT_PSR_DISABLE) && !psr2_enabled)
371                 drm_dbg_kms(&i915->drm, "\tPSR disabled\n");
372 }
373
374 void intel_psr_irq_handler(struct intel_dp *intel_dp, u32 psr_iir)
375 {
376         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
377         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
378         ktime_t time_ns =  ktime_get();
379
380         if (psr_iir & psr_irq_pre_entry_bit_get(intel_dp)) {
381                 intel_dp->psr.last_entry_attempt = time_ns;
382                 drm_dbg_kms(&dev_priv->drm,
383                             "[transcoder %s] PSR entry attempt in 2 vblanks\n",
384                             transcoder_name(cpu_transcoder));
385         }
386
387         if (psr_iir & psr_irq_post_exit_bit_get(intel_dp)) {
388                 intel_dp->psr.last_exit = time_ns;
389                 drm_dbg_kms(&dev_priv->drm,
390                             "[transcoder %s] PSR exit completed\n",
391                             transcoder_name(cpu_transcoder));
392
393                 if (DISPLAY_VER(dev_priv) >= 9) {
394                         u32 val;
395
396                         val = intel_de_rmw(dev_priv, PSR_EVENT(cpu_transcoder), 0, 0);
397
398                         psr_event_print(dev_priv, val, intel_dp->psr.psr2_enabled);
399                 }
400         }
401
402         if (psr_iir & psr_irq_psr_error_bit_get(intel_dp)) {
403                 drm_warn(&dev_priv->drm, "[transcoder %s] PSR aux error\n",
404                          transcoder_name(cpu_transcoder));
405
406                 intel_dp->psr.irq_aux_error = true;
407
408                 /*
409                  * If this interruption is not masked it will keep
410                  * interrupting so fast that it prevents the scheduled
411                  * work to run.
412                  * Also after a PSR error, we don't want to arm PSR
413                  * again so we don't care about unmask the interruption
414                  * or unset irq_aux_error.
415                  */
416                 intel_de_rmw(dev_priv, psr_imr_reg(dev_priv, cpu_transcoder),
417                              0, psr_irq_psr_error_bit_get(intel_dp));
418
419                 queue_work(dev_priv->unordered_wq, &intel_dp->psr.work);
420         }
421 }
422
423 static bool intel_dp_get_alpm_status(struct intel_dp *intel_dp)
424 {
425         u8 alpm_caps = 0;
426
427         if (drm_dp_dpcd_readb(&intel_dp->aux, DP_RECEIVER_ALPM_CAP,
428                               &alpm_caps) != 1)
429                 return false;
430         return alpm_caps & DP_ALPM_CAP;
431 }
432
433 static u8 intel_dp_get_sink_sync_latency(struct intel_dp *intel_dp)
434 {
435         struct drm_i915_private *i915 = dp_to_i915(intel_dp);
436         u8 val = 8; /* assume the worst if we can't read the value */
437
438         if (drm_dp_dpcd_readb(&intel_dp->aux,
439                               DP_SYNCHRONIZATION_LATENCY_IN_SINK, &val) == 1)
440                 val &= DP_MAX_RESYNC_FRAME_COUNT_MASK;
441         else
442                 drm_dbg_kms(&i915->drm,
443                             "Unable to get sink synchronization latency, assuming 8 frames\n");
444         return val;
445 }
446
447 static void intel_dp_get_su_granularity(struct intel_dp *intel_dp)
448 {
449         struct drm_i915_private *i915 = dp_to_i915(intel_dp);
450         ssize_t r;
451         u16 w;
452         u8 y;
453
454         /* If sink don't have specific granularity requirements set legacy ones */
455         if (!(intel_dp->psr_dpcd[1] & DP_PSR2_SU_GRANULARITY_REQUIRED)) {
456                 /* As PSR2 HW sends full lines, we do not care about x granularity */
457                 w = 4;
458                 y = 4;
459                 goto exit;
460         }
461
462         r = drm_dp_dpcd_read(&intel_dp->aux, DP_PSR2_SU_X_GRANULARITY, &w, 2);
463         if (r != 2)
464                 drm_dbg_kms(&i915->drm,
465                             "Unable to read DP_PSR2_SU_X_GRANULARITY\n");
466         /*
467          * Spec says that if the value read is 0 the default granularity should
468          * be used instead.
469          */
470         if (r != 2 || w == 0)
471                 w = 4;
472
473         r = drm_dp_dpcd_read(&intel_dp->aux, DP_PSR2_SU_Y_GRANULARITY, &y, 1);
474         if (r != 1) {
475                 drm_dbg_kms(&i915->drm,
476                             "Unable to read DP_PSR2_SU_Y_GRANULARITY\n");
477                 y = 4;
478         }
479         if (y == 0)
480                 y = 1;
481
482 exit:
483         intel_dp->psr.su_w_granularity = w;
484         intel_dp->psr.su_y_granularity = y;
485 }
486
487 static void _panel_replay_init_dpcd(struct intel_dp *intel_dp)
488 {
489         struct drm_i915_private *i915 = dp_to_i915(intel_dp);
490         u8 pr_dpcd = 0;
491
492         intel_dp->psr.sink_panel_replay_support = false;
493         drm_dp_dpcd_readb(&intel_dp->aux, DP_PANEL_REPLAY_CAP, &pr_dpcd);
494
495         if (!(pr_dpcd & DP_PANEL_REPLAY_SUPPORT)) {
496                 drm_dbg_kms(&i915->drm,
497                             "Panel replay is not supported by panel\n");
498                 return;
499         }
500
501         drm_dbg_kms(&i915->drm,
502                     "Panel replay is supported by panel\n");
503         intel_dp->psr.sink_panel_replay_support = true;
504 }
505
506 static void _psr_init_dpcd(struct intel_dp *intel_dp)
507 {
508         struct drm_i915_private *i915 =
509                 to_i915(dp_to_dig_port(intel_dp)->base.base.dev);
510
511         drm_dbg_kms(&i915->drm, "eDP panel supports PSR version %x\n",
512                     intel_dp->psr_dpcd[0]);
513
514         if (drm_dp_has_quirk(&intel_dp->desc, DP_DPCD_QUIRK_NO_PSR)) {
515                 drm_dbg_kms(&i915->drm,
516                             "PSR support not currently available for this panel\n");
517                 return;
518         }
519
520         if (!(intel_dp->edp_dpcd[1] & DP_EDP_SET_POWER_CAP)) {
521                 drm_dbg_kms(&i915->drm,
522                             "Panel lacks power state control, PSR cannot be enabled\n");
523                 return;
524         }
525
526         intel_dp->psr.sink_support = true;
527         intel_dp->psr.sink_sync_latency =
528                 intel_dp_get_sink_sync_latency(intel_dp);
529
530         if (DISPLAY_VER(i915) >= 9 &&
531             intel_dp->psr_dpcd[0] == DP_PSR2_WITH_Y_COORD_IS_SUPPORTED) {
532                 bool y_req = intel_dp->psr_dpcd[1] &
533                              DP_PSR2_SU_Y_COORDINATE_REQUIRED;
534                 bool alpm = intel_dp_get_alpm_status(intel_dp);
535
536                 /*
537                  * All panels that supports PSR version 03h (PSR2 +
538                  * Y-coordinate) can handle Y-coordinates in VSC but we are
539                  * only sure that it is going to be used when required by the
540                  * panel. This way panel is capable to do selective update
541                  * without a aux frame sync.
542                  *
543                  * To support PSR version 02h and PSR version 03h without
544                  * Y-coordinate requirement panels we would need to enable
545                  * GTC first.
546                  */
547                 intel_dp->psr.sink_psr2_support = y_req && alpm;
548                 drm_dbg_kms(&i915->drm, "PSR2 %ssupported\n",
549                             intel_dp->psr.sink_psr2_support ? "" : "not ");
550         }
551 }
552
553 void intel_psr_init_dpcd(struct intel_dp *intel_dp)
554 {
555         _panel_replay_init_dpcd(intel_dp);
556
557         drm_dp_dpcd_read(&intel_dp->aux, DP_PSR_SUPPORT, intel_dp->psr_dpcd,
558                          sizeof(intel_dp->psr_dpcd));
559
560         if (intel_dp->psr_dpcd[0])
561                 _psr_init_dpcd(intel_dp);
562
563         if (intel_dp->psr.sink_psr2_support) {
564                 intel_dp->psr.colorimetry_support =
565                         intel_dp_get_colorimetry_status(intel_dp);
566                 intel_dp_get_su_granularity(intel_dp);
567         }
568 }
569
570 static void hsw_psr_setup_aux(struct intel_dp *intel_dp)
571 {
572         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
573         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
574         u32 aux_clock_divider, aux_ctl;
575         /* write DP_SET_POWER=D0 */
576         static const u8 aux_msg[] = {
577                 [0] = (DP_AUX_NATIVE_WRITE << 4) | ((DP_SET_POWER >> 16) & 0xf),
578                 [1] = (DP_SET_POWER >> 8) & 0xff,
579                 [2] = DP_SET_POWER & 0xff,
580                 [3] = 1 - 1,
581                 [4] = DP_SET_POWER_D0,
582         };
583         int i;
584
585         BUILD_BUG_ON(sizeof(aux_msg) > 20);
586         for (i = 0; i < sizeof(aux_msg); i += 4)
587                 intel_de_write(dev_priv,
588                                psr_aux_data_reg(dev_priv, cpu_transcoder, i >> 2),
589                                intel_dp_aux_pack(&aux_msg[i], sizeof(aux_msg) - i));
590
591         aux_clock_divider = intel_dp->get_aux_clock_divider(intel_dp, 0);
592
593         /* Start with bits set for DDI_AUX_CTL register */
594         aux_ctl = intel_dp->get_aux_send_ctl(intel_dp, sizeof(aux_msg),
595                                              aux_clock_divider);
596
597         /* Select only valid bits for SRD_AUX_CTL */
598         aux_ctl &= EDP_PSR_AUX_CTL_TIME_OUT_MASK |
599                 EDP_PSR_AUX_CTL_MESSAGE_SIZE_MASK |
600                 EDP_PSR_AUX_CTL_PRECHARGE_2US_MASK |
601                 EDP_PSR_AUX_CTL_BIT_CLOCK_2X_MASK;
602
603         intel_de_write(dev_priv, psr_aux_ctl_reg(dev_priv, cpu_transcoder),
604                        aux_ctl);
605 }
606
607 static void intel_psr_enable_sink(struct intel_dp *intel_dp)
608 {
609         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
610         u8 dpcd_val = DP_PSR_ENABLE;
611
612         if (intel_dp->psr.panel_replay_enabled)
613                 return;
614
615         if (intel_dp->psr.psr2_enabled) {
616                 /* Enable ALPM at sink for psr2 */
617                 drm_dp_dpcd_writeb(&intel_dp->aux, DP_RECEIVER_ALPM_CONFIG,
618                                    DP_ALPM_ENABLE |
619                                    DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE);
620
621                 dpcd_val |= DP_PSR_ENABLE_PSR2 | DP_PSR_IRQ_HPD_WITH_CRC_ERRORS;
622         } else {
623                 if (intel_dp->psr.link_standby)
624                         dpcd_val |= DP_PSR_MAIN_LINK_ACTIVE;
625
626                 if (DISPLAY_VER(dev_priv) >= 8)
627                         dpcd_val |= DP_PSR_CRC_VERIFICATION;
628         }
629
630         if (intel_dp->psr.req_psr2_sdp_prior_scanline)
631                 dpcd_val |= DP_PSR_SU_REGION_SCANLINE_CAPTURE;
632
633         if (intel_dp->psr.entry_setup_frames > 0)
634                 dpcd_val |= DP_PSR_FRAME_CAPTURE;
635
636         drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, dpcd_val);
637
638         drm_dp_dpcd_writeb(&intel_dp->aux, DP_SET_POWER, DP_SET_POWER_D0);
639 }
640
641 static u32 intel_psr1_get_tp_time(struct intel_dp *intel_dp)
642 {
643         struct intel_connector *connector = intel_dp->attached_connector;
644         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
645         u32 val = 0;
646
647         if (DISPLAY_VER(dev_priv) >= 11)
648                 val |= EDP_PSR_TP4_TIME_0us;
649
650         if (dev_priv->display.params.psr_safest_params) {
651                 val |= EDP_PSR_TP1_TIME_2500us;
652                 val |= EDP_PSR_TP2_TP3_TIME_2500us;
653                 goto check_tp3_sel;
654         }
655
656         if (connector->panel.vbt.psr.tp1_wakeup_time_us == 0)
657                 val |= EDP_PSR_TP1_TIME_0us;
658         else if (connector->panel.vbt.psr.tp1_wakeup_time_us <= 100)
659                 val |= EDP_PSR_TP1_TIME_100us;
660         else if (connector->panel.vbt.psr.tp1_wakeup_time_us <= 500)
661                 val |= EDP_PSR_TP1_TIME_500us;
662         else
663                 val |= EDP_PSR_TP1_TIME_2500us;
664
665         if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us == 0)
666                 val |= EDP_PSR_TP2_TP3_TIME_0us;
667         else if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us <= 100)
668                 val |= EDP_PSR_TP2_TP3_TIME_100us;
669         else if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us <= 500)
670                 val |= EDP_PSR_TP2_TP3_TIME_500us;
671         else
672                 val |= EDP_PSR_TP2_TP3_TIME_2500us;
673
674         /*
675          * WA 0479: hsw,bdw
676          * "Do not skip both TP1 and TP2/TP3"
677          */
678         if (DISPLAY_VER(dev_priv) < 9 &&
679             connector->panel.vbt.psr.tp1_wakeup_time_us == 0 &&
680             connector->panel.vbt.psr.tp2_tp3_wakeup_time_us == 0)
681                 val |= EDP_PSR_TP2_TP3_TIME_100us;
682
683 check_tp3_sel:
684         if (intel_dp_source_supports_tps3(dev_priv) &&
685             drm_dp_tps3_supported(intel_dp->dpcd))
686                 val |= EDP_PSR_TP_TP1_TP3;
687         else
688                 val |= EDP_PSR_TP_TP1_TP2;
689
690         return val;
691 }
692
693 static u8 psr_compute_idle_frames(struct intel_dp *intel_dp)
694 {
695         struct intel_connector *connector = intel_dp->attached_connector;
696         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
697         int idle_frames;
698
699         /* Let's use 6 as the minimum to cover all known cases including the
700          * off-by-one issue that HW has in some cases.
701          */
702         idle_frames = max(6, connector->panel.vbt.psr.idle_frames);
703         idle_frames = max(idle_frames, intel_dp->psr.sink_sync_latency + 1);
704
705         if (drm_WARN_ON(&dev_priv->drm, idle_frames > 0xf))
706                 idle_frames = 0xf;
707
708         return idle_frames;
709 }
710
711 static void hsw_activate_psr1(struct intel_dp *intel_dp)
712 {
713         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
714         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
715         u32 max_sleep_time = 0x1f;
716         u32 val = EDP_PSR_ENABLE;
717
718         val |= EDP_PSR_IDLE_FRAMES(psr_compute_idle_frames(intel_dp));
719
720         if (DISPLAY_VER(dev_priv) < 20)
721                 val |= EDP_PSR_MAX_SLEEP_TIME(max_sleep_time);
722
723         if (IS_HASWELL(dev_priv))
724                 val |= EDP_PSR_MIN_LINK_ENTRY_TIME_8_LINES;
725
726         if (intel_dp->psr.link_standby)
727                 val |= EDP_PSR_LINK_STANDBY;
728
729         val |= intel_psr1_get_tp_time(intel_dp);
730
731         if (DISPLAY_VER(dev_priv) >= 8)
732                 val |= EDP_PSR_CRC_ENABLE;
733
734         if (DISPLAY_VER(dev_priv) >= 20)
735                 val |= LNL_EDP_PSR_ENTRY_SETUP_FRAMES(intel_dp->psr.entry_setup_frames);
736
737         intel_de_rmw(dev_priv, psr_ctl_reg(dev_priv, cpu_transcoder),
738                      ~EDP_PSR_RESTORE_PSR_ACTIVE_CTX_MASK, val);
739 }
740
741 static u32 intel_psr2_get_tp_time(struct intel_dp *intel_dp)
742 {
743         struct intel_connector *connector = intel_dp->attached_connector;
744         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
745         u32 val = 0;
746
747         if (dev_priv->display.params.psr_safest_params)
748                 return EDP_PSR2_TP2_TIME_2500us;
749
750         if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us >= 0 &&
751             connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <= 50)
752                 val |= EDP_PSR2_TP2_TIME_50us;
753         else if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <= 100)
754                 val |= EDP_PSR2_TP2_TIME_100us;
755         else if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <= 500)
756                 val |= EDP_PSR2_TP2_TIME_500us;
757         else
758                 val |= EDP_PSR2_TP2_TIME_2500us;
759
760         return val;
761 }
762
763 static int psr2_block_count_lines(struct intel_dp *intel_dp)
764 {
765         return intel_dp->psr.io_wake_lines < 9 &&
766                 intel_dp->psr.fast_wake_lines < 9 ? 8 : 12;
767 }
768
769 static int psr2_block_count(struct intel_dp *intel_dp)
770 {
771         return psr2_block_count_lines(intel_dp) / 4;
772 }
773
774 static u8 frames_before_su_entry(struct intel_dp *intel_dp)
775 {
776         u8 frames_before_su_entry;
777
778         frames_before_su_entry = max_t(u8,
779                                        intel_dp->psr.sink_sync_latency + 1,
780                                        2);
781
782         /* Entry setup frames must be at least 1 less than frames before SU entry */
783         if (intel_dp->psr.entry_setup_frames >= frames_before_su_entry)
784                 frames_before_su_entry = intel_dp->psr.entry_setup_frames + 1;
785
786         return frames_before_su_entry;
787 }
788
789 static void dg2_activate_panel_replay(struct intel_dp *intel_dp)
790 {
791         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
792
793         intel_de_rmw(dev_priv, PSR2_MAN_TRK_CTL(intel_dp->psr.transcoder),
794                      0, ADLP_PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME);
795
796         intel_de_rmw(dev_priv, TRANS_DP2_CTL(intel_dp->psr.transcoder), 0,
797                      TRANS_DP2_PANEL_REPLAY_ENABLE);
798 }
799
800 static void hsw_activate_psr2(struct intel_dp *intel_dp)
801 {
802         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
803         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
804         u32 val = EDP_PSR2_ENABLE;
805         u32 psr_val = 0;
806
807         val |= EDP_PSR2_IDLE_FRAMES(psr_compute_idle_frames(intel_dp));
808
809         if (DISPLAY_VER(dev_priv) < 14 && !IS_ALDERLAKE_P(dev_priv))
810                 val |= EDP_SU_TRACK_ENABLE;
811
812         if (DISPLAY_VER(dev_priv) >= 10 && DISPLAY_VER(dev_priv) < 13)
813                 val |= EDP_Y_COORDINATE_ENABLE;
814
815         val |= EDP_PSR2_FRAME_BEFORE_SU(frames_before_su_entry(intel_dp));
816
817         val |= intel_psr2_get_tp_time(intel_dp);
818
819         if (DISPLAY_VER(dev_priv) >= 12) {
820                 if (psr2_block_count(intel_dp) > 2)
821                         val |= TGL_EDP_PSR2_BLOCK_COUNT_NUM_3;
822                 else
823                         val |= TGL_EDP_PSR2_BLOCK_COUNT_NUM_2;
824         }
825
826         /* Wa_22012278275:adl-p */
827         if (IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_E0)) {
828                 static const u8 map[] = {
829                         2, /* 5 lines */
830                         1, /* 6 lines */
831                         0, /* 7 lines */
832                         3, /* 8 lines */
833                         6, /* 9 lines */
834                         5, /* 10 lines */
835                         4, /* 11 lines */
836                         7, /* 12 lines */
837                 };
838                 /*
839                  * Still using the default IO_BUFFER_WAKE and FAST_WAKE, see
840                  * comments bellow for more information
841                  */
842                 int tmp;
843
844                 tmp = map[intel_dp->psr.io_wake_lines - TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES];
845                 val |= TGL_EDP_PSR2_IO_BUFFER_WAKE(tmp + TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES);
846
847                 tmp = map[intel_dp->psr.fast_wake_lines - TGL_EDP_PSR2_FAST_WAKE_MIN_LINES];
848                 val |= TGL_EDP_PSR2_FAST_WAKE(tmp + TGL_EDP_PSR2_FAST_WAKE_MIN_LINES);
849         } else if (DISPLAY_VER(dev_priv) >= 12) {
850                 val |= TGL_EDP_PSR2_IO_BUFFER_WAKE(intel_dp->psr.io_wake_lines);
851                 val |= TGL_EDP_PSR2_FAST_WAKE(intel_dp->psr.fast_wake_lines);
852         } else if (DISPLAY_VER(dev_priv) >= 9) {
853                 val |= EDP_PSR2_IO_BUFFER_WAKE(intel_dp->psr.io_wake_lines);
854                 val |= EDP_PSR2_FAST_WAKE(intel_dp->psr.fast_wake_lines);
855         }
856
857         if (intel_dp->psr.req_psr2_sdp_prior_scanline)
858                 val |= EDP_PSR2_SU_SDP_SCANLINE;
859
860         if (DISPLAY_VER(dev_priv) >= 20)
861                 psr_val |= LNL_EDP_PSR_ENTRY_SETUP_FRAMES(intel_dp->psr.entry_setup_frames);
862
863         if (intel_dp->psr.psr2_sel_fetch_enabled) {
864                 u32 tmp;
865
866                 tmp = intel_de_read(dev_priv, PSR2_MAN_TRK_CTL(cpu_transcoder));
867                 drm_WARN_ON(&dev_priv->drm, !(tmp & PSR2_MAN_TRK_CTL_ENABLE));
868         } else if (HAS_PSR2_SEL_FETCH(dev_priv)) {
869                 intel_de_write(dev_priv, PSR2_MAN_TRK_CTL(cpu_transcoder), 0);
870         }
871
872         /*
873          * PSR2 HW is incorrectly using EDP_PSR_TP1_TP3_SEL and BSpec is
874          * recommending keep this bit unset while PSR2 is enabled.
875          */
876         intel_de_write(dev_priv, psr_ctl_reg(dev_priv, cpu_transcoder), psr_val);
877
878         intel_de_write(dev_priv, EDP_PSR2_CTL(cpu_transcoder), val);
879 }
880
881 static bool
882 transcoder_has_psr2(struct drm_i915_private *dev_priv, enum transcoder cpu_transcoder)
883 {
884         if (IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14)
885                 return cpu_transcoder == TRANSCODER_A || cpu_transcoder == TRANSCODER_B;
886         else if (DISPLAY_VER(dev_priv) >= 12)
887                 return cpu_transcoder == TRANSCODER_A;
888         else if (DISPLAY_VER(dev_priv) >= 9)
889                 return cpu_transcoder == TRANSCODER_EDP;
890         else
891                 return false;
892 }
893
894 static u32 intel_get_frame_time_us(const struct intel_crtc_state *crtc_state)
895 {
896         if (!crtc_state->hw.active)
897                 return 0;
898
899         return DIV_ROUND_UP(1000 * 1000,
900                             drm_mode_vrefresh(&crtc_state->hw.adjusted_mode));
901 }
902
903 static void psr2_program_idle_frames(struct intel_dp *intel_dp,
904                                      u32 idle_frames)
905 {
906         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
907         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
908
909         intel_de_rmw(dev_priv, EDP_PSR2_CTL(cpu_transcoder),
910                      EDP_PSR2_IDLE_FRAMES_MASK,
911                      EDP_PSR2_IDLE_FRAMES(idle_frames));
912 }
913
914 static void tgl_psr2_enable_dc3co(struct intel_dp *intel_dp)
915 {
916         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
917
918         psr2_program_idle_frames(intel_dp, 0);
919         intel_display_power_set_target_dc_state(dev_priv, DC_STATE_EN_DC3CO);
920 }
921
922 static void tgl_psr2_disable_dc3co(struct intel_dp *intel_dp)
923 {
924         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
925
926         intel_display_power_set_target_dc_state(dev_priv, DC_STATE_EN_UPTO_DC6);
927         psr2_program_idle_frames(intel_dp, psr_compute_idle_frames(intel_dp));
928 }
929
930 static void tgl_dc3co_disable_work(struct work_struct *work)
931 {
932         struct intel_dp *intel_dp =
933                 container_of(work, typeof(*intel_dp), psr.dc3co_work.work);
934
935         mutex_lock(&intel_dp->psr.lock);
936         /* If delayed work is pending, it is not idle */
937         if (delayed_work_pending(&intel_dp->psr.dc3co_work))
938                 goto unlock;
939
940         tgl_psr2_disable_dc3co(intel_dp);
941 unlock:
942         mutex_unlock(&intel_dp->psr.lock);
943 }
944
945 static void tgl_disallow_dc3co_on_psr2_exit(struct intel_dp *intel_dp)
946 {
947         if (!intel_dp->psr.dc3co_exitline)
948                 return;
949
950         cancel_delayed_work(&intel_dp->psr.dc3co_work);
951         /* Before PSR2 exit disallow dc3co*/
952         tgl_psr2_disable_dc3co(intel_dp);
953 }
954
955 static bool
956 dc3co_is_pipe_port_compatible(struct intel_dp *intel_dp,
957                               struct intel_crtc_state *crtc_state)
958 {
959         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
960         enum pipe pipe = to_intel_crtc(crtc_state->uapi.crtc)->pipe;
961         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
962         enum port port = dig_port->base.port;
963
964         if (IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14)
965                 return pipe <= PIPE_B && port <= PORT_B;
966         else
967                 return pipe == PIPE_A && port == PORT_A;
968 }
969
970 static void
971 tgl_dc3co_exitline_compute_config(struct intel_dp *intel_dp,
972                                   struct intel_crtc_state *crtc_state)
973 {
974         const u32 crtc_vdisplay = crtc_state->uapi.adjusted_mode.crtc_vdisplay;
975         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
976         struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
977         u32 exit_scanlines;
978
979         /*
980          * FIXME: Due to the changed sequence of activating/deactivating DC3CO,
981          * disable DC3CO until the changed dc3co activating/deactivating sequence
982          * is applied. B.Specs:49196
983          */
984         return;
985
986         /*
987          * DMC's DC3CO exit mechanism has an issue with Selective Fecth
988          * TODO: when the issue is addressed, this restriction should be removed.
989          */
990         if (crtc_state->enable_psr2_sel_fetch)
991                 return;
992
993         if (!(power_domains->allowed_dc_mask & DC_STATE_EN_DC3CO))
994                 return;
995
996         if (!dc3co_is_pipe_port_compatible(intel_dp, crtc_state))
997                 return;
998
999         /* Wa_16011303918:adl-p */
1000         if (IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
1001                 return;
1002
1003         /*
1004          * DC3CO Exit time 200us B.Spec 49196
1005          * PSR2 transcoder Early Exit scanlines = ROUNDUP(200 / line time) + 1
1006          */
1007         exit_scanlines =
1008                 intel_usecs_to_scanlines(&crtc_state->uapi.adjusted_mode, 200) + 1;
1009
1010         if (drm_WARN_ON(&dev_priv->drm, exit_scanlines > crtc_vdisplay))
1011                 return;
1012
1013         crtc_state->dc3co_exitline = crtc_vdisplay - exit_scanlines;
1014 }
1015
1016 static bool intel_psr2_sel_fetch_config_valid(struct intel_dp *intel_dp,
1017                                               struct intel_crtc_state *crtc_state)
1018 {
1019         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1020
1021         if (!dev_priv->display.params.enable_psr2_sel_fetch &&
1022             intel_dp->psr.debug != I915_PSR_DEBUG_ENABLE_SEL_FETCH) {
1023                 drm_dbg_kms(&dev_priv->drm,
1024                             "PSR2 sel fetch not enabled, disabled by parameter\n");
1025                 return false;
1026         }
1027
1028         if (crtc_state->uapi.async_flip) {
1029                 drm_dbg_kms(&dev_priv->drm,
1030                             "PSR2 sel fetch not enabled, async flip enabled\n");
1031                 return false;
1032         }
1033
1034         return crtc_state->enable_psr2_sel_fetch = true;
1035 }
1036
1037 static bool psr2_granularity_check(struct intel_dp *intel_dp,
1038                                    struct intel_crtc_state *crtc_state)
1039 {
1040         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1041         const struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config;
1042         const int crtc_hdisplay = crtc_state->hw.adjusted_mode.crtc_hdisplay;
1043         const int crtc_vdisplay = crtc_state->hw.adjusted_mode.crtc_vdisplay;
1044         u16 y_granularity = 0;
1045
1046         /* PSR2 HW only send full lines so we only need to validate the width */
1047         if (crtc_hdisplay % intel_dp->psr.su_w_granularity)
1048                 return false;
1049
1050         if (crtc_vdisplay % intel_dp->psr.su_y_granularity)
1051                 return false;
1052
1053         /* HW tracking is only aligned to 4 lines */
1054         if (!crtc_state->enable_psr2_sel_fetch)
1055                 return intel_dp->psr.su_y_granularity == 4;
1056
1057         /*
1058          * adl_p and mtl platforms have 1 line granularity.
1059          * For other platforms with SW tracking we can adjust the y coordinates
1060          * to match sink requirement if multiple of 4.
1061          */
1062         if (IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14)
1063                 y_granularity = intel_dp->psr.su_y_granularity;
1064         else if (intel_dp->psr.su_y_granularity <= 2)
1065                 y_granularity = 4;
1066         else if ((intel_dp->psr.su_y_granularity % 4) == 0)
1067                 y_granularity = intel_dp->psr.su_y_granularity;
1068
1069         if (y_granularity == 0 || crtc_vdisplay % y_granularity)
1070                 return false;
1071
1072         if (crtc_state->dsc.compression_enable &&
1073             vdsc_cfg->slice_height % y_granularity)
1074                 return false;
1075
1076         crtc_state->su_y_granularity = y_granularity;
1077         return true;
1078 }
1079
1080 static bool _compute_psr2_sdp_prior_scanline_indication(struct intel_dp *intel_dp,
1081                                                         struct intel_crtc_state *crtc_state)
1082 {
1083         const struct drm_display_mode *adjusted_mode = &crtc_state->uapi.adjusted_mode;
1084         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1085         u32 hblank_total, hblank_ns, req_ns;
1086
1087         hblank_total = adjusted_mode->crtc_hblank_end - adjusted_mode->crtc_hblank_start;
1088         hblank_ns = div_u64(1000000ULL * hblank_total, adjusted_mode->crtc_clock);
1089
1090         /* From spec: ((60 / number of lanes) + 11) * 1000 / symbol clock frequency MHz */
1091         req_ns = ((60 / crtc_state->lane_count) + 11) * 1000 / (crtc_state->port_clock / 1000);
1092
1093         if ((hblank_ns - req_ns) > 100)
1094                 return true;
1095
1096         /* Not supported <13 / Wa_22012279113:adl-p */
1097         if (DISPLAY_VER(dev_priv) < 14 || intel_dp->edp_dpcd[0] < DP_EDP_14b)
1098                 return false;
1099
1100         crtc_state->req_psr2_sdp_prior_scanline = true;
1101         return true;
1102 }
1103
1104 static bool _compute_psr2_wake_times(struct intel_dp *intel_dp,
1105                                      struct intel_crtc_state *crtc_state)
1106 {
1107         struct drm_i915_private *i915 = dp_to_i915(intel_dp);
1108         int io_wake_lines, io_wake_time, fast_wake_lines, fast_wake_time;
1109         u8 max_wake_lines;
1110
1111         if (DISPLAY_VER(i915) >= 12) {
1112                 io_wake_time = 42;
1113                 /*
1114                  * According to Bspec it's 42us, but based on testing
1115                  * it is not enough -> use 45 us.
1116                  */
1117                 fast_wake_time = 45;
1118                 max_wake_lines = 12;
1119         } else {
1120                 io_wake_time = 50;
1121                 fast_wake_time = 32;
1122                 max_wake_lines = 8;
1123         }
1124
1125         io_wake_lines = intel_usecs_to_scanlines(
1126                 &crtc_state->hw.adjusted_mode, io_wake_time);
1127         fast_wake_lines = intel_usecs_to_scanlines(
1128                 &crtc_state->hw.adjusted_mode, fast_wake_time);
1129
1130         if (io_wake_lines > max_wake_lines ||
1131             fast_wake_lines > max_wake_lines)
1132                 return false;
1133
1134         if (i915->display.params.psr_safest_params)
1135                 io_wake_lines = fast_wake_lines = max_wake_lines;
1136
1137         /* According to Bspec lower limit should be set as 7 lines. */
1138         intel_dp->psr.io_wake_lines = max(io_wake_lines, 7);
1139         intel_dp->psr.fast_wake_lines = max(fast_wake_lines, 7);
1140
1141         return true;
1142 }
1143
1144 static int intel_psr_entry_setup_frames(struct intel_dp *intel_dp,
1145                                         const struct drm_display_mode *adjusted_mode)
1146 {
1147         struct drm_i915_private *i915 = dp_to_i915(intel_dp);
1148         int psr_setup_time = drm_dp_psr_setup_time(intel_dp->psr_dpcd);
1149         int entry_setup_frames = 0;
1150
1151         if (psr_setup_time < 0) {
1152                 drm_dbg_kms(&i915->drm,
1153                             "PSR condition failed: Invalid PSR setup time (0x%02x)\n",
1154                             intel_dp->psr_dpcd[1]);
1155                 return -ETIME;
1156         }
1157
1158         if (intel_usecs_to_scanlines(adjusted_mode, psr_setup_time) >
1159             adjusted_mode->crtc_vtotal - adjusted_mode->crtc_vdisplay - 1) {
1160                 if (DISPLAY_VER(i915) >= 20) {
1161                         /* setup entry frames can be up to 3 frames */
1162                         entry_setup_frames = 1;
1163                         drm_dbg_kms(&i915->drm,
1164                                     "PSR setup entry frames %d\n",
1165                                     entry_setup_frames);
1166                 } else {
1167                         drm_dbg_kms(&i915->drm,
1168                                     "PSR condition failed: PSR setup time (%d us) too long\n",
1169                                     psr_setup_time);
1170                         return -ETIME;
1171                 }
1172         }
1173
1174         return entry_setup_frames;
1175 }
1176
1177 static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
1178                                     struct intel_crtc_state *crtc_state)
1179 {
1180         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1181         int crtc_hdisplay = crtc_state->hw.adjusted_mode.crtc_hdisplay;
1182         int crtc_vdisplay = crtc_state->hw.adjusted_mode.crtc_vdisplay;
1183         int psr_max_h = 0, psr_max_v = 0, max_bpp = 0;
1184
1185         if (!intel_dp->psr.sink_psr2_support)
1186                 return false;
1187
1188         /* JSL and EHL only supports eDP 1.3 */
1189         if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
1190                 drm_dbg_kms(&dev_priv->drm, "PSR2 not supported by phy\n");
1191                 return false;
1192         }
1193
1194         /* Wa_16011181250 */
1195         if (IS_ROCKETLAKE(dev_priv) || IS_ALDERLAKE_S(dev_priv) ||
1196             IS_DG2(dev_priv)) {
1197                 drm_dbg_kms(&dev_priv->drm, "PSR2 is defeatured for this platform\n");
1198                 return false;
1199         }
1200
1201         if (IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
1202                 drm_dbg_kms(&dev_priv->drm, "PSR2 not completely functional in this stepping\n");
1203                 return false;
1204         }
1205
1206         if (!transcoder_has_psr2(dev_priv, crtc_state->cpu_transcoder)) {
1207                 drm_dbg_kms(&dev_priv->drm,
1208                             "PSR2 not supported in transcoder %s\n",
1209                             transcoder_name(crtc_state->cpu_transcoder));
1210                 return false;
1211         }
1212
1213         if (!psr2_global_enabled(intel_dp)) {
1214                 drm_dbg_kms(&dev_priv->drm, "PSR2 disabled by flag\n");
1215                 return false;
1216         }
1217
1218         /*
1219          * DSC and PSR2 cannot be enabled simultaneously. If a requested
1220          * resolution requires DSC to be enabled, priority is given to DSC
1221          * over PSR2.
1222          */
1223         if (crtc_state->dsc.compression_enable &&
1224             (DISPLAY_VER(dev_priv) < 14 && !IS_ALDERLAKE_P(dev_priv))) {
1225                 drm_dbg_kms(&dev_priv->drm,
1226                             "PSR2 cannot be enabled since DSC is enabled\n");
1227                 return false;
1228         }
1229
1230         if (crtc_state->crc_enabled) {
1231                 drm_dbg_kms(&dev_priv->drm,
1232                             "PSR2 not enabled because it would inhibit pipe CRC calculation\n");
1233                 return false;
1234         }
1235
1236         if (DISPLAY_VER(dev_priv) >= 12) {
1237                 psr_max_h = 5120;
1238                 psr_max_v = 3200;
1239                 max_bpp = 30;
1240         } else if (DISPLAY_VER(dev_priv) >= 10) {
1241                 psr_max_h = 4096;
1242                 psr_max_v = 2304;
1243                 max_bpp = 24;
1244         } else if (DISPLAY_VER(dev_priv) == 9) {
1245                 psr_max_h = 3640;
1246                 psr_max_v = 2304;
1247                 max_bpp = 24;
1248         }
1249
1250         if (crtc_state->pipe_bpp > max_bpp) {
1251                 drm_dbg_kms(&dev_priv->drm,
1252                             "PSR2 not enabled, pipe bpp %d > max supported %d\n",
1253                             crtc_state->pipe_bpp, max_bpp);
1254                 return false;
1255         }
1256
1257         /* Wa_16011303918:adl-p */
1258         if (crtc_state->vrr.enable &&
1259             IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
1260                 drm_dbg_kms(&dev_priv->drm,
1261                             "PSR2 not enabled, not compatible with HW stepping + VRR\n");
1262                 return false;
1263         }
1264
1265         if (!_compute_psr2_sdp_prior_scanline_indication(intel_dp, crtc_state)) {
1266                 drm_dbg_kms(&dev_priv->drm,
1267                             "PSR2 not enabled, PSR2 SDP indication do not fit in hblank\n");
1268                 return false;
1269         }
1270
1271         if (!_compute_psr2_wake_times(intel_dp, crtc_state)) {
1272                 drm_dbg_kms(&dev_priv->drm,
1273                             "PSR2 not enabled, Unable to use long enough wake times\n");
1274                 return false;
1275         }
1276
1277         /* Vblank >= PSR2_CTL Block Count Number maximum line count */
1278         if (crtc_state->hw.adjusted_mode.crtc_vblank_end -
1279             crtc_state->hw.adjusted_mode.crtc_vblank_start <
1280             psr2_block_count_lines(intel_dp)) {
1281                 drm_dbg_kms(&dev_priv->drm,
1282                             "PSR2 not enabled, too short vblank time\n");
1283                 return false;
1284         }
1285
1286         if (HAS_PSR2_SEL_FETCH(dev_priv)) {
1287                 if (!intel_psr2_sel_fetch_config_valid(intel_dp, crtc_state) &&
1288                     !HAS_PSR_HW_TRACKING(dev_priv)) {
1289                         drm_dbg_kms(&dev_priv->drm,
1290                                     "PSR2 not enabled, selective fetch not valid and no HW tracking available\n");
1291                         return false;
1292                 }
1293         }
1294
1295         if (!psr2_granularity_check(intel_dp, crtc_state)) {
1296                 drm_dbg_kms(&dev_priv->drm, "PSR2 not enabled, SU granularity not compatible\n");
1297                 goto unsupported;
1298         }
1299
1300         if (!crtc_state->enable_psr2_sel_fetch &&
1301             (crtc_hdisplay > psr_max_h || crtc_vdisplay > psr_max_v)) {
1302                 drm_dbg_kms(&dev_priv->drm,
1303                             "PSR2 not enabled, resolution %dx%d > max supported %dx%d\n",
1304                             crtc_hdisplay, crtc_vdisplay,
1305                             psr_max_h, psr_max_v);
1306                 goto unsupported;
1307         }
1308
1309         tgl_dc3co_exitline_compute_config(intel_dp, crtc_state);
1310         return true;
1311
1312 unsupported:
1313         crtc_state->enable_psr2_sel_fetch = false;
1314         return false;
1315 }
1316
1317 static bool _psr_compute_config(struct intel_dp *intel_dp,
1318                                 struct intel_crtc_state *crtc_state)
1319 {
1320         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1321         const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
1322         int entry_setup_frames;
1323
1324         /*
1325          * Current PSR panels don't work reliably with VRR enabled
1326          * So if VRR is enabled, do not enable PSR.
1327          */
1328         if (crtc_state->vrr.enable)
1329                 return false;
1330
1331         if (!CAN_PSR(intel_dp))
1332                 return false;
1333
1334         entry_setup_frames = intel_psr_entry_setup_frames(intel_dp, adjusted_mode);
1335
1336         if (entry_setup_frames >= 0) {
1337                 intel_dp->psr.entry_setup_frames = entry_setup_frames;
1338         } else {
1339                 drm_dbg_kms(&dev_priv->drm,
1340                             "PSR condition failed: PSR setup timing not met\n");
1341                 return false;
1342         }
1343
1344         return true;
1345 }
1346
1347 void intel_psr_compute_config(struct intel_dp *intel_dp,
1348                               struct intel_crtc_state *crtc_state,
1349                               struct drm_connector_state *conn_state)
1350 {
1351         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1352         const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
1353
1354         if (!psr_global_enabled(intel_dp)) {
1355                 drm_dbg_kms(&dev_priv->drm, "PSR disabled by flag\n");
1356                 return;
1357         }
1358
1359         if (intel_dp->psr.sink_not_reliable) {
1360                 drm_dbg_kms(&dev_priv->drm,
1361                             "PSR sink implementation is not reliable\n");
1362                 return;
1363         }
1364
1365         if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
1366                 drm_dbg_kms(&dev_priv->drm,
1367                             "PSR condition failed: Interlaced mode enabled\n");
1368                 return;
1369         }
1370
1371         if (CAN_PANEL_REPLAY(intel_dp))
1372                 crtc_state->has_panel_replay = true;
1373         else
1374                 crtc_state->has_psr = _psr_compute_config(intel_dp, crtc_state);
1375
1376         if (!(crtc_state->has_panel_replay || crtc_state->has_psr))
1377                 return;
1378
1379         crtc_state->has_psr2 = intel_psr2_config_valid(intel_dp, crtc_state);
1380
1381         crtc_state->infoframes.enable |= intel_hdmi_infoframe_enable(DP_SDP_VSC);
1382         intel_dp_compute_psr_vsc_sdp(intel_dp, crtc_state, conn_state,
1383                                      &crtc_state->psr_vsc);
1384 }
1385
1386 void intel_psr_get_config(struct intel_encoder *encoder,
1387                           struct intel_crtc_state *pipe_config)
1388 {
1389         struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1390         struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
1391         enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
1392         struct intel_dp *intel_dp;
1393         u32 val;
1394
1395         if (!dig_port)
1396                 return;
1397
1398         intel_dp = &dig_port->dp;
1399         if (!(CAN_PSR(intel_dp) || CAN_PANEL_REPLAY(intel_dp)))
1400                 return;
1401
1402         mutex_lock(&intel_dp->psr.lock);
1403         if (!intel_dp->psr.enabled)
1404                 goto unlock;
1405
1406         if (intel_dp->psr.panel_replay_enabled) {
1407                 pipe_config->has_panel_replay = true;
1408         } else {
1409                 /*
1410                  * Not possible to read EDP_PSR/PSR2_CTL registers as it is
1411                  * enabled/disabled because of frontbuffer tracking and others.
1412                  */
1413                 pipe_config->has_psr = true;
1414         }
1415
1416         pipe_config->has_psr2 = intel_dp->psr.psr2_enabled;
1417         pipe_config->infoframes.enable |= intel_hdmi_infoframe_enable(DP_SDP_VSC);
1418
1419         if (!intel_dp->psr.psr2_enabled)
1420                 goto unlock;
1421
1422         if (HAS_PSR2_SEL_FETCH(dev_priv)) {
1423                 val = intel_de_read(dev_priv, PSR2_MAN_TRK_CTL(cpu_transcoder));
1424                 if (val & PSR2_MAN_TRK_CTL_ENABLE)
1425                         pipe_config->enable_psr2_sel_fetch = true;
1426         }
1427
1428         if (DISPLAY_VER(dev_priv) >= 12) {
1429                 val = intel_de_read(dev_priv, TRANS_EXITLINE(cpu_transcoder));
1430                 pipe_config->dc3co_exitline = REG_FIELD_GET(EXITLINE_MASK, val);
1431         }
1432 unlock:
1433         mutex_unlock(&intel_dp->psr.lock);
1434 }
1435
1436 static void intel_psr_activate(struct intel_dp *intel_dp)
1437 {
1438         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1439         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1440
1441         drm_WARN_ON(&dev_priv->drm,
1442                     transcoder_has_psr2(dev_priv, cpu_transcoder) &&
1443                     intel_de_read(dev_priv, EDP_PSR2_CTL(cpu_transcoder)) & EDP_PSR2_ENABLE);
1444
1445         drm_WARN_ON(&dev_priv->drm,
1446                     intel_de_read(dev_priv, psr_ctl_reg(dev_priv, cpu_transcoder)) & EDP_PSR_ENABLE);
1447
1448         drm_WARN_ON(&dev_priv->drm, intel_dp->psr.active);
1449
1450         lockdep_assert_held(&intel_dp->psr.lock);
1451
1452         /* psr1, psr2 and panel-replay are mutually exclusive.*/
1453         if (intel_dp->psr.panel_replay_enabled)
1454                 dg2_activate_panel_replay(intel_dp);
1455         else if (intel_dp->psr.psr2_enabled)
1456                 hsw_activate_psr2(intel_dp);
1457         else
1458                 hsw_activate_psr1(intel_dp);
1459
1460         intel_dp->psr.active = true;
1461 }
1462
1463 static u32 wa_16013835468_bit_get(struct intel_dp *intel_dp)
1464 {
1465         switch (intel_dp->psr.pipe) {
1466         case PIPE_A:
1467                 return LATENCY_REPORTING_REMOVED_PIPE_A;
1468         case PIPE_B:
1469                 return LATENCY_REPORTING_REMOVED_PIPE_B;
1470         case PIPE_C:
1471                 return LATENCY_REPORTING_REMOVED_PIPE_C;
1472         case PIPE_D:
1473                 return LATENCY_REPORTING_REMOVED_PIPE_D;
1474         default:
1475                 MISSING_CASE(intel_dp->psr.pipe);
1476                 return 0;
1477         }
1478 }
1479
1480 /*
1481  * Wa_16013835468
1482  * Wa_14015648006
1483  */
1484 static void wm_optimization_wa(struct intel_dp *intel_dp,
1485                                const struct intel_crtc_state *crtc_state)
1486 {
1487         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1488         bool set_wa_bit = false;
1489
1490         /* Wa_14015648006 */
1491         if (IS_DISPLAY_VER(dev_priv, 11, 14))
1492                 set_wa_bit |= crtc_state->wm_level_disabled;
1493
1494         /* Wa_16013835468 */
1495         if (DISPLAY_VER(dev_priv) == 12)
1496                 set_wa_bit |= crtc_state->hw.adjusted_mode.crtc_vblank_start !=
1497                         crtc_state->hw.adjusted_mode.crtc_vdisplay;
1498
1499         if (set_wa_bit)
1500                 intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
1501                              0, wa_16013835468_bit_get(intel_dp));
1502         else
1503                 intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
1504                              wa_16013835468_bit_get(intel_dp), 0);
1505 }
1506
1507 static void intel_psr_enable_source(struct intel_dp *intel_dp,
1508                                     const struct intel_crtc_state *crtc_state)
1509 {
1510         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1511         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1512         u32 mask;
1513
1514         /*
1515          * Only HSW and BDW have PSR AUX registers that need to be setup.
1516          * SKL+ use hardcoded values PSR AUX transactions
1517          */
1518         if (DISPLAY_VER(dev_priv) < 9)
1519                 hsw_psr_setup_aux(intel_dp);
1520
1521         /*
1522          * Per Spec: Avoid continuous PSR exit by masking MEMUP and HPD also
1523          * mask LPSP to avoid dependency on other drivers that might block
1524          * runtime_pm besides preventing  other hw tracking issues now we
1525          * can rely on frontbuffer tracking.
1526          */
1527         mask = EDP_PSR_DEBUG_MASK_MEMUP |
1528                EDP_PSR_DEBUG_MASK_HPD;
1529
1530         /*
1531          * For some unknown reason on HSW non-ULT (or at least on
1532          * Dell Latitude E6540) external displays start to flicker
1533          * when PSR is enabled on the eDP. SR/PC6 residency is much
1534          * higher than should be possible with an external display.
1535          * As a workaround leave LPSP unmasked to prevent PSR entry
1536          * when external displays are active.
1537          */
1538         if (DISPLAY_VER(dev_priv) >= 8 || IS_HASWELL_ULT(dev_priv))
1539                 mask |= EDP_PSR_DEBUG_MASK_LPSP;
1540
1541         if (DISPLAY_VER(dev_priv) < 20)
1542                 mask |= EDP_PSR_DEBUG_MASK_MAX_SLEEP;
1543
1544         /*
1545          * No separate pipe reg write mask on hsw/bdw, so have to unmask all
1546          * registers in order to keep the CURSURFLIVE tricks working :(
1547          */
1548         if (IS_DISPLAY_VER(dev_priv, 9, 10))
1549                 mask |= EDP_PSR_DEBUG_MASK_DISP_REG_WRITE;
1550
1551         /* allow PSR with sprite enabled */
1552         if (IS_HASWELL(dev_priv))
1553                 mask |= EDP_PSR_DEBUG_MASK_SPRITE_ENABLE;
1554
1555         intel_de_write(dev_priv, psr_debug_reg(dev_priv, cpu_transcoder), mask);
1556
1557         psr_irq_control(intel_dp);
1558
1559         /*
1560          * TODO: if future platforms supports DC3CO in more than one
1561          * transcoder, EXITLINE will need to be unset when disabling PSR
1562          */
1563         if (intel_dp->psr.dc3co_exitline)
1564                 intel_de_rmw(dev_priv, TRANS_EXITLINE(cpu_transcoder), EXITLINE_MASK,
1565                              intel_dp->psr.dc3co_exitline << EXITLINE_SHIFT | EXITLINE_ENABLE);
1566
1567         if (HAS_PSR_HW_TRACKING(dev_priv) && HAS_PSR2_SEL_FETCH(dev_priv))
1568                 intel_de_rmw(dev_priv, CHICKEN_PAR1_1, IGNORE_PSR2_HW_TRACKING,
1569                              intel_dp->psr.psr2_sel_fetch_enabled ?
1570                              IGNORE_PSR2_HW_TRACKING : 0);
1571
1572         /*
1573          * Wa_16013835468
1574          * Wa_14015648006
1575          */
1576         wm_optimization_wa(intel_dp, crtc_state);
1577
1578         if (intel_dp->psr.psr2_enabled) {
1579                 if (DISPLAY_VER(dev_priv) == 9)
1580                         intel_de_rmw(dev_priv, CHICKEN_TRANS(cpu_transcoder), 0,
1581                                      PSR2_VSC_ENABLE_PROG_HEADER |
1582                                      PSR2_ADD_VERTICAL_LINE_COUNT);
1583
1584                 /*
1585                  * Wa_16014451276:adlp,mtl[a0,b0]
1586                  * All supported adlp panels have 1-based X granularity, this may
1587                  * cause issues if non-supported panels are used.
1588                  */
1589                 if (IS_DISPLAY_IP_STEP(dev_priv, IP_VER(14, 0), STEP_A0, STEP_B0) ||
1590                     IS_ALDERLAKE_P(dev_priv))
1591                         intel_de_rmw(dev_priv, hsw_chicken_trans_reg(dev_priv, cpu_transcoder),
1592                                      0, ADLP_1_BASED_X_GRANULARITY);
1593
1594                 /* Wa_16012604467:adlp,mtl[a0,b0] */
1595                 if (IS_DISPLAY_IP_STEP(dev_priv, IP_VER(14, 0), STEP_A0, STEP_B0))
1596                         intel_de_rmw(dev_priv,
1597                                      MTL_CLKGATE_DIS_TRANS(cpu_transcoder), 0,
1598                                      MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
1599                 else if (IS_ALDERLAKE_P(dev_priv))
1600                         intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
1601                                      CLKGATE_DIS_MISC_DMASC_GATING_DIS);
1602         }
1603 }
1604
1605 static bool psr_interrupt_error_check(struct intel_dp *intel_dp)
1606 {
1607         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1608         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1609         u32 val;
1610
1611         /*
1612          * If a PSR error happened and the driver is reloaded, the EDP_PSR_IIR
1613          * will still keep the error set even after the reset done in the
1614          * irq_preinstall and irq_uninstall hooks.
1615          * And enabling in this situation cause the screen to freeze in the
1616          * first time that PSR HW tries to activate so lets keep PSR disabled
1617          * to avoid any rendering problems.
1618          */
1619         val = intel_de_read(dev_priv, psr_iir_reg(dev_priv, cpu_transcoder));
1620         val &= psr_irq_psr_error_bit_get(intel_dp);
1621         if (val) {
1622                 intel_dp->psr.sink_not_reliable = true;
1623                 drm_dbg_kms(&dev_priv->drm,
1624                             "PSR interruption error set, not enabling PSR\n");
1625                 return false;
1626         }
1627
1628         return true;
1629 }
1630
1631 static void intel_psr_enable_locked(struct intel_dp *intel_dp,
1632                                     const struct intel_crtc_state *crtc_state)
1633 {
1634         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1635         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1636         enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port);
1637         struct intel_encoder *encoder = &dig_port->base;
1638         u32 val;
1639
1640         drm_WARN_ON(&dev_priv->drm, intel_dp->psr.enabled);
1641
1642         intel_dp->psr.psr2_enabled = crtc_state->has_psr2;
1643         intel_dp->psr.panel_replay_enabled = crtc_state->has_panel_replay;
1644         intel_dp->psr.busy_frontbuffer_bits = 0;
1645         intel_dp->psr.pipe = to_intel_crtc(crtc_state->uapi.crtc)->pipe;
1646         intel_dp->psr.transcoder = crtc_state->cpu_transcoder;
1647         /* DC5/DC6 requires at least 6 idle frames */
1648         val = usecs_to_jiffies(intel_get_frame_time_us(crtc_state) * 6);
1649         intel_dp->psr.dc3co_exit_delay = val;
1650         intel_dp->psr.dc3co_exitline = crtc_state->dc3co_exitline;
1651         intel_dp->psr.psr2_sel_fetch_enabled = crtc_state->enable_psr2_sel_fetch;
1652         intel_dp->psr.psr2_sel_fetch_cff_enabled = false;
1653         intel_dp->psr.req_psr2_sdp_prior_scanline =
1654                 crtc_state->req_psr2_sdp_prior_scanline;
1655
1656         if (!psr_interrupt_error_check(intel_dp))
1657                 return;
1658
1659         if (intel_dp->psr.panel_replay_enabled)
1660                 drm_dbg_kms(&dev_priv->drm, "Enabling Panel Replay\n");
1661         else
1662                 drm_dbg_kms(&dev_priv->drm, "Enabling PSR%s\n",
1663                             intel_dp->psr.psr2_enabled ? "2" : "1");
1664
1665         intel_write_dp_vsc_sdp(encoder, crtc_state, &crtc_state->psr_vsc);
1666         intel_snps_phy_update_psr_power_state(dev_priv, phy, true);
1667         intel_psr_enable_sink(intel_dp);
1668         intel_psr_enable_source(intel_dp, crtc_state);
1669         intel_dp->psr.enabled = true;
1670         intel_dp->psr.paused = false;
1671
1672         intel_psr_activate(intel_dp);
1673 }
1674
1675 static void intel_psr_exit(struct intel_dp *intel_dp)
1676 {
1677         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1678         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1679         u32 val;
1680
1681         if (!intel_dp->psr.active) {
1682                 if (transcoder_has_psr2(dev_priv, cpu_transcoder)) {
1683                         val = intel_de_read(dev_priv, EDP_PSR2_CTL(cpu_transcoder));
1684                         drm_WARN_ON(&dev_priv->drm, val & EDP_PSR2_ENABLE);
1685                 }
1686
1687                 val = intel_de_read(dev_priv, psr_ctl_reg(dev_priv, cpu_transcoder));
1688                 drm_WARN_ON(&dev_priv->drm, val & EDP_PSR_ENABLE);
1689
1690                 return;
1691         }
1692
1693         if (intel_dp->psr.panel_replay_enabled) {
1694                 intel_de_rmw(dev_priv, TRANS_DP2_CTL(intel_dp->psr.transcoder),
1695                              TRANS_DP2_PANEL_REPLAY_ENABLE, 0);
1696         } else if (intel_dp->psr.psr2_enabled) {
1697                 tgl_disallow_dc3co_on_psr2_exit(intel_dp);
1698
1699                 val = intel_de_rmw(dev_priv, EDP_PSR2_CTL(cpu_transcoder),
1700                                    EDP_PSR2_ENABLE, 0);
1701
1702                 drm_WARN_ON(&dev_priv->drm, !(val & EDP_PSR2_ENABLE));
1703         } else {
1704                 val = intel_de_rmw(dev_priv, psr_ctl_reg(dev_priv, cpu_transcoder),
1705                                    EDP_PSR_ENABLE, 0);
1706
1707                 drm_WARN_ON(&dev_priv->drm, !(val & EDP_PSR_ENABLE));
1708         }
1709         intel_dp->psr.active = false;
1710 }
1711
1712 static void intel_psr_wait_exit_locked(struct intel_dp *intel_dp)
1713 {
1714         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1715         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1716         i915_reg_t psr_status;
1717         u32 psr_status_mask;
1718
1719         if (intel_dp->psr.psr2_enabled) {
1720                 psr_status = EDP_PSR2_STATUS(cpu_transcoder);
1721                 psr_status_mask = EDP_PSR2_STATUS_STATE_MASK;
1722         } else {
1723                 psr_status = psr_status_reg(dev_priv, cpu_transcoder);
1724                 psr_status_mask = EDP_PSR_STATUS_STATE_MASK;
1725         }
1726
1727         /* Wait till PSR is idle */
1728         if (intel_de_wait_for_clear(dev_priv, psr_status,
1729                                     psr_status_mask, 2000))
1730                 drm_err(&dev_priv->drm, "Timed out waiting PSR idle state\n");
1731 }
1732
1733 static void intel_psr_disable_locked(struct intel_dp *intel_dp)
1734 {
1735         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1736         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1737         enum phy phy = intel_port_to_phy(dev_priv,
1738                                          dp_to_dig_port(intel_dp)->base.port);
1739
1740         lockdep_assert_held(&intel_dp->psr.lock);
1741
1742         if (!intel_dp->psr.enabled)
1743                 return;
1744
1745         if (intel_dp->psr.panel_replay_enabled)
1746                 drm_dbg_kms(&dev_priv->drm, "Disabling Panel Replay\n");
1747         else
1748                 drm_dbg_kms(&dev_priv->drm, "Disabling PSR%s\n",
1749                             intel_dp->psr.psr2_enabled ? "2" : "1");
1750
1751         intel_psr_exit(intel_dp);
1752         intel_psr_wait_exit_locked(intel_dp);
1753
1754         /*
1755          * Wa_16013835468
1756          * Wa_14015648006
1757          */
1758         if (DISPLAY_VER(dev_priv) >= 11)
1759                 intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
1760                              wa_16013835468_bit_get(intel_dp), 0);
1761
1762         if (intel_dp->psr.psr2_enabled) {
1763                 /* Wa_16012604467:adlp,mtl[a0,b0] */
1764                 if (IS_DISPLAY_IP_STEP(dev_priv, IP_VER(14, 0), STEP_A0, STEP_B0))
1765                         intel_de_rmw(dev_priv,
1766                                      MTL_CLKGATE_DIS_TRANS(cpu_transcoder),
1767                                      MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
1768                 else if (IS_ALDERLAKE_P(dev_priv))
1769                         intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
1770                                      CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
1771         }
1772
1773         intel_snps_phy_update_psr_power_state(dev_priv, phy, false);
1774
1775         /* Disable PSR on Sink */
1776         drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, 0);
1777
1778         if (intel_dp->psr.psr2_enabled)
1779                 drm_dp_dpcd_writeb(&intel_dp->aux, DP_RECEIVER_ALPM_CONFIG, 0);
1780
1781         intel_dp->psr.enabled = false;
1782         intel_dp->psr.panel_replay_enabled = false;
1783         intel_dp->psr.psr2_enabled = false;
1784         intel_dp->psr.psr2_sel_fetch_enabled = false;
1785         intel_dp->psr.psr2_sel_fetch_cff_enabled = false;
1786 }
1787
1788 /**
1789  * intel_psr_disable - Disable PSR
1790  * @intel_dp: Intel DP
1791  * @old_crtc_state: old CRTC state
1792  *
1793  * This function needs to be called before disabling pipe.
1794  */
1795 void intel_psr_disable(struct intel_dp *intel_dp,
1796                        const struct intel_crtc_state *old_crtc_state)
1797 {
1798         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1799
1800         if (!old_crtc_state->has_psr)
1801                 return;
1802
1803         if (drm_WARN_ON(&dev_priv->drm, !CAN_PSR(intel_dp)))
1804                 return;
1805
1806         mutex_lock(&intel_dp->psr.lock);
1807
1808         intel_psr_disable_locked(intel_dp);
1809
1810         mutex_unlock(&intel_dp->psr.lock);
1811         cancel_work_sync(&intel_dp->psr.work);
1812         cancel_delayed_work_sync(&intel_dp->psr.dc3co_work);
1813 }
1814
1815 /**
1816  * intel_psr_pause - Pause PSR
1817  * @intel_dp: Intel DP
1818  *
1819  * This function need to be called after enabling psr.
1820  */
1821 void intel_psr_pause(struct intel_dp *intel_dp)
1822 {
1823         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1824         struct intel_psr *psr = &intel_dp->psr;
1825
1826         if (!CAN_PSR(intel_dp))
1827                 return;
1828
1829         mutex_lock(&psr->lock);
1830
1831         if (!psr->enabled) {
1832                 mutex_unlock(&psr->lock);
1833                 return;
1834         }
1835
1836         /* If we ever hit this, we will need to add refcount to pause/resume */
1837         drm_WARN_ON(&dev_priv->drm, psr->paused);
1838
1839         intel_psr_exit(intel_dp);
1840         intel_psr_wait_exit_locked(intel_dp);
1841         psr->paused = true;
1842
1843         mutex_unlock(&psr->lock);
1844
1845         cancel_work_sync(&psr->work);
1846         cancel_delayed_work_sync(&psr->dc3co_work);
1847 }
1848
1849 /**
1850  * intel_psr_resume - Resume PSR
1851  * @intel_dp: Intel DP
1852  *
1853  * This function need to be called after pausing psr.
1854  */
1855 void intel_psr_resume(struct intel_dp *intel_dp)
1856 {
1857         struct intel_psr *psr = &intel_dp->psr;
1858
1859         if (!CAN_PSR(intel_dp))
1860                 return;
1861
1862         mutex_lock(&psr->lock);
1863
1864         if (!psr->paused)
1865                 goto unlock;
1866
1867         psr->paused = false;
1868         intel_psr_activate(intel_dp);
1869
1870 unlock:
1871         mutex_unlock(&psr->lock);
1872 }
1873
1874 static u32 man_trk_ctl_enable_bit_get(struct drm_i915_private *dev_priv)
1875 {
1876         return IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14 ? 0 :
1877                 PSR2_MAN_TRK_CTL_ENABLE;
1878 }
1879
1880 static u32 man_trk_ctl_single_full_frame_bit_get(struct drm_i915_private *dev_priv)
1881 {
1882         return IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14 ?
1883                ADLP_PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME :
1884                PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME;
1885 }
1886
1887 static u32 man_trk_ctl_partial_frame_bit_get(struct drm_i915_private *dev_priv)
1888 {
1889         return IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14 ?
1890                ADLP_PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE :
1891                PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
1892 }
1893
1894 static u32 man_trk_ctl_continuos_full_frame(struct drm_i915_private *dev_priv)
1895 {
1896         return IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14 ?
1897                ADLP_PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME :
1898                PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME;
1899 }
1900
1901 static void psr_force_hw_tracking_exit(struct intel_dp *intel_dp)
1902 {
1903         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1904         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1905
1906         if (intel_dp->psr.psr2_sel_fetch_enabled)
1907                 intel_de_write(dev_priv,
1908                                PSR2_MAN_TRK_CTL(cpu_transcoder),
1909                                man_trk_ctl_enable_bit_get(dev_priv) |
1910                                man_trk_ctl_partial_frame_bit_get(dev_priv) |
1911                                man_trk_ctl_single_full_frame_bit_get(dev_priv) |
1912                                man_trk_ctl_continuos_full_frame(dev_priv));
1913
1914         /*
1915          * Display WA #0884: skl+
1916          * This documented WA for bxt can be safely applied
1917          * broadly so we can force HW tracking to exit PSR
1918          * instead of disabling and re-enabling.
1919          * Workaround tells us to write 0 to CUR_SURFLIVE_A,
1920          * but it makes more sense write to the current active
1921          * pipe.
1922          *
1923          * This workaround do not exist for platforms with display 10 or newer
1924          * but testing proved that it works for up display 13, for newer
1925          * than that testing will be needed.
1926          */
1927         intel_de_write(dev_priv, CURSURFLIVE(intel_dp->psr.pipe), 0);
1928 }
1929
1930 void intel_psr2_program_trans_man_trk_ctl(const struct intel_crtc_state *crtc_state)
1931 {
1932         struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
1933         enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
1934         struct intel_encoder *encoder;
1935
1936         if (!crtc_state->enable_psr2_sel_fetch)
1937                 return;
1938
1939         for_each_intel_encoder_mask_with_psr(&dev_priv->drm, encoder,
1940                                              crtc_state->uapi.encoder_mask) {
1941                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1942
1943                 lockdep_assert_held(&intel_dp->psr.lock);
1944                 if (intel_dp->psr.psr2_sel_fetch_cff_enabled)
1945                         return;
1946                 break;
1947         }
1948
1949         intel_de_write(dev_priv, PSR2_MAN_TRK_CTL(cpu_transcoder),
1950                        crtc_state->psr2_man_track_ctl);
1951 }
1952
1953 static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
1954                                   struct drm_rect *clip, bool full_update)
1955 {
1956         struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
1957         struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1958         u32 val = man_trk_ctl_enable_bit_get(dev_priv);
1959
1960         /* SF partial frame enable has to be set even on full update */
1961         val |= man_trk_ctl_partial_frame_bit_get(dev_priv);
1962
1963         if (full_update) {
1964                 val |= man_trk_ctl_single_full_frame_bit_get(dev_priv);
1965                 val |= man_trk_ctl_continuos_full_frame(dev_priv);
1966                 goto exit;
1967         }
1968
1969         if (clip->y1 == -1)
1970                 goto exit;
1971
1972         if (IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14) {
1973                 val |= ADLP_PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1);
1974                 val |= ADLP_PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 - 1);
1975         } else {
1976                 drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
1977
1978                 val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
1979                 val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
1980         }
1981 exit:
1982         crtc_state->psr2_man_track_ctl = val;
1983 }
1984
1985 static void clip_area_update(struct drm_rect *overlap_damage_area,
1986                              struct drm_rect *damage_area,
1987                              struct drm_rect *pipe_src)
1988 {
1989         if (!drm_rect_intersect(damage_area, pipe_src))
1990                 return;
1991
1992         if (overlap_damage_area->y1 == -1) {
1993                 overlap_damage_area->y1 = damage_area->y1;
1994                 overlap_damage_area->y2 = damage_area->y2;
1995                 return;
1996         }
1997
1998         if (damage_area->y1 < overlap_damage_area->y1)
1999                 overlap_damage_area->y1 = damage_area->y1;
2000
2001         if (damage_area->y2 > overlap_damage_area->y2)
2002                 overlap_damage_area->y2 = damage_area->y2;
2003 }
2004
2005 static void intel_psr2_sel_fetch_pipe_alignment(const struct intel_crtc_state *crtc_state,
2006                                                 struct drm_rect *pipe_clip)
2007 {
2008         struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
2009         const struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config;
2010         u16 y_alignment;
2011
2012         /* ADLP aligns the SU region to vdsc slice height in case dsc is enabled */
2013         if (crtc_state->dsc.compression_enable &&
2014             (IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14))
2015                 y_alignment = vdsc_cfg->slice_height;
2016         else
2017                 y_alignment = crtc_state->su_y_granularity;
2018
2019         pipe_clip->y1 -= pipe_clip->y1 % y_alignment;
2020         if (pipe_clip->y2 % y_alignment)
2021                 pipe_clip->y2 = ((pipe_clip->y2 / y_alignment) + 1) * y_alignment;
2022 }
2023
2024 /*
2025  * TODO: Not clear how to handle planes with negative position,
2026  * also planes are not updated if they have a negative X
2027  * position so for now doing a full update in this cases
2028  *
2029  * Plane scaling and rotation is not supported by selective fetch and both
2030  * properties can change without a modeset, so need to be check at every
2031  * atomic commit.
2032  */
2033 static bool psr2_sel_fetch_plane_state_supported(const struct intel_plane_state *plane_state)
2034 {
2035         if (plane_state->uapi.dst.y1 < 0 ||
2036             plane_state->uapi.dst.x1 < 0 ||
2037             plane_state->scaler_id >= 0 ||
2038             plane_state->uapi.rotation != DRM_MODE_ROTATE_0)
2039                 return false;
2040
2041         return true;
2042 }
2043
2044 /*
2045  * Check for pipe properties that is not supported by selective fetch.
2046  *
2047  * TODO: pipe scaling causes a modeset but skl_update_scaler_crtc() is executed
2048  * after intel_psr_compute_config(), so for now keeping PSR2 selective fetch
2049  * enabled and going to the full update path.
2050  */
2051 static bool psr2_sel_fetch_pipe_state_supported(const struct intel_crtc_state *crtc_state)
2052 {
2053         if (crtc_state->scaler_state.scaler_id >= 0)
2054                 return false;
2055
2056         return true;
2057 }
2058
2059 int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
2060                                 struct intel_crtc *crtc)
2061 {
2062         struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2063         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
2064         struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
2065         struct intel_plane_state *new_plane_state, *old_plane_state;
2066         struct intel_plane *plane;
2067         bool full_update = false;
2068         int i, ret;
2069
2070         if (!crtc_state->enable_psr2_sel_fetch)
2071                 return 0;
2072
2073         if (!psr2_sel_fetch_pipe_state_supported(crtc_state)) {
2074                 full_update = true;
2075                 goto skip_sel_fetch_set_loop;
2076         }
2077
2078         /*
2079          * Calculate minimal selective fetch area of each plane and calculate
2080          * the pipe damaged area.
2081          * In the next loop the plane selective fetch area will actually be set
2082          * using whole pipe damaged area.
2083          */
2084         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
2085                                              new_plane_state, i) {
2086                 struct drm_rect src, damaged_area = { .x1 = 0, .y1 = -1,
2087                                                       .x2 = INT_MAX };
2088
2089                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
2090                         continue;
2091
2092                 if (!new_plane_state->uapi.visible &&
2093                     !old_plane_state->uapi.visible)
2094                         continue;
2095
2096                 if (!psr2_sel_fetch_plane_state_supported(new_plane_state)) {
2097                         full_update = true;
2098                         break;
2099                 }
2100
2101                 /*
2102                  * If visibility or plane moved, mark the whole plane area as
2103                  * damaged as it needs to be complete redraw in the new and old
2104                  * position.
2105                  */
2106                 if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
2107                     !drm_rect_equals(&new_plane_state->uapi.dst,
2108                                      &old_plane_state->uapi.dst)) {
2109                         if (old_plane_state->uapi.visible) {
2110                                 damaged_area.y1 = old_plane_state->uapi.dst.y1;
2111                                 damaged_area.y2 = old_plane_state->uapi.dst.y2;
2112                                 clip_area_update(&pipe_clip, &damaged_area,
2113                                                  &crtc_state->pipe_src);
2114                         }
2115
2116                         if (new_plane_state->uapi.visible) {
2117                                 damaged_area.y1 = new_plane_state->uapi.dst.y1;
2118                                 damaged_area.y2 = new_plane_state->uapi.dst.y2;
2119                                 clip_area_update(&pipe_clip, &damaged_area,
2120                                                  &crtc_state->pipe_src);
2121                         }
2122                         continue;
2123                 } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha) {
2124                         /* If alpha changed mark the whole plane area as damaged */
2125                         damaged_area.y1 = new_plane_state->uapi.dst.y1;
2126                         damaged_area.y2 = new_plane_state->uapi.dst.y2;
2127                         clip_area_update(&pipe_clip, &damaged_area,
2128                                          &crtc_state->pipe_src);
2129                         continue;
2130                 }
2131
2132                 src = drm_plane_state_src(&new_plane_state->uapi);
2133                 drm_rect_fp_to_int(&src, &src);
2134
2135                 if (!drm_atomic_helper_damage_merged(&old_plane_state->uapi,
2136                                                      &new_plane_state->uapi, &damaged_area))
2137                         continue;
2138
2139                 damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
2140                 damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
2141                 damaged_area.x1 += new_plane_state->uapi.dst.x1 - src.x1;
2142                 damaged_area.x2 += new_plane_state->uapi.dst.x1 - src.x1;
2143
2144                 clip_area_update(&pipe_clip, &damaged_area, &crtc_state->pipe_src);
2145         }
2146
2147         /*
2148          * TODO: For now we are just using full update in case
2149          * selective fetch area calculation fails. To optimize this we
2150          * should identify cases where this happens and fix the area
2151          * calculation for those.
2152          */
2153         if (pipe_clip.y1 == -1) {
2154                 drm_info_once(&dev_priv->drm,
2155                               "Selective fetch area calculation failed in pipe %c\n",
2156                               pipe_name(crtc->pipe));
2157                 full_update = true;
2158         }
2159
2160         if (full_update)
2161                 goto skip_sel_fetch_set_loop;
2162
2163         /* Wa_14014971492 */
2164         if ((IS_DISPLAY_IP_STEP(dev_priv, IP_VER(14, 0), STEP_A0, STEP_B0) ||
2165              IS_ALDERLAKE_P(dev_priv) || IS_TIGERLAKE(dev_priv)) &&
2166             crtc_state->splitter.enable)
2167                 pipe_clip.y1 = 0;
2168
2169         ret = drm_atomic_add_affected_planes(&state->base, &crtc->base);
2170         if (ret)
2171                 return ret;
2172
2173         intel_psr2_sel_fetch_pipe_alignment(crtc_state, &pipe_clip);
2174
2175         /*
2176          * Now that we have the pipe damaged area check if it intersect with
2177          * every plane, if it does set the plane selective fetch area.
2178          */
2179         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
2180                                              new_plane_state, i) {
2181                 struct drm_rect *sel_fetch_area, inter;
2182                 struct intel_plane *linked = new_plane_state->planar_linked_plane;
2183
2184                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
2185                     !new_plane_state->uapi.visible)
2186                         continue;
2187
2188                 inter = pipe_clip;
2189                 sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
2190                 if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst)) {
2191                         sel_fetch_area->y1 = -1;
2192                         sel_fetch_area->y2 = -1;
2193                         /*
2194                          * if plane sel fetch was previously enabled ->
2195                          * disable it
2196                          */
2197                         if (drm_rect_height(&old_plane_state->psr2_sel_fetch_area) > 0)
2198                                 crtc_state->update_planes |= BIT(plane->id);
2199
2200                         continue;
2201                 }
2202
2203                 if (!psr2_sel_fetch_plane_state_supported(new_plane_state)) {
2204                         full_update = true;
2205                         break;
2206                 }
2207
2208                 sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
2209                 sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
2210                 sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
2211                 crtc_state->update_planes |= BIT(plane->id);
2212
2213                 /*
2214                  * Sel_fetch_area is calculated for UV plane. Use
2215                  * same area for Y plane as well.
2216                  */
2217                 if (linked) {
2218                         struct intel_plane_state *linked_new_plane_state;
2219                         struct drm_rect *linked_sel_fetch_area;
2220
2221                         linked_new_plane_state = intel_atomic_get_plane_state(state, linked);
2222                         if (IS_ERR(linked_new_plane_state))
2223                                 return PTR_ERR(linked_new_plane_state);
2224
2225                         linked_sel_fetch_area = &linked_new_plane_state->psr2_sel_fetch_area;
2226                         linked_sel_fetch_area->y1 = sel_fetch_area->y1;
2227                         linked_sel_fetch_area->y2 = sel_fetch_area->y2;
2228                         crtc_state->update_planes |= BIT(linked->id);
2229                 }
2230         }
2231
2232 skip_sel_fetch_set_loop:
2233         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
2234         return 0;
2235 }
2236
2237 void intel_psr_pre_plane_update(struct intel_atomic_state *state,
2238                                 struct intel_crtc *crtc)
2239 {
2240         struct drm_i915_private *i915 = to_i915(state->base.dev);
2241         const struct intel_crtc_state *old_crtc_state =
2242                 intel_atomic_get_old_crtc_state(state, crtc);
2243         const struct intel_crtc_state *new_crtc_state =
2244                 intel_atomic_get_new_crtc_state(state, crtc);
2245         struct intel_encoder *encoder;
2246
2247         if (!HAS_PSR(i915))
2248                 return;
2249
2250         for_each_intel_encoder_mask_with_psr(state->base.dev, encoder,
2251                                              old_crtc_state->uapi.encoder_mask) {
2252                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2253                 struct intel_psr *psr = &intel_dp->psr;
2254                 bool needs_to_disable = false;
2255
2256                 mutex_lock(&psr->lock);
2257
2258                 /*
2259                  * Reasons to disable:
2260                  * - PSR disabled in new state
2261                  * - All planes will go inactive
2262                  * - Changing between PSR versions
2263                  * - Display WA #1136: skl, bxt
2264                  */
2265                 needs_to_disable |= intel_crtc_needs_modeset(new_crtc_state);
2266                 needs_to_disable |= !new_crtc_state->has_psr;
2267                 needs_to_disable |= !new_crtc_state->active_planes;
2268                 needs_to_disable |= new_crtc_state->has_psr2 != psr->psr2_enabled;
2269                 needs_to_disable |= DISPLAY_VER(i915) < 11 &&
2270                         new_crtc_state->wm_level_disabled;
2271
2272                 if (psr->enabled && needs_to_disable)
2273                         intel_psr_disable_locked(intel_dp);
2274                 else if (psr->enabled && new_crtc_state->wm_level_disabled)
2275                         /* Wa_14015648006 */
2276                         wm_optimization_wa(intel_dp, new_crtc_state);
2277
2278                 mutex_unlock(&psr->lock);
2279         }
2280 }
2281
2282 void intel_psr_post_plane_update(struct intel_atomic_state *state,
2283                                  struct intel_crtc *crtc)
2284 {
2285         struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2286         const struct intel_crtc_state *crtc_state =
2287                 intel_atomic_get_new_crtc_state(state, crtc);
2288         struct intel_encoder *encoder;
2289
2290         if (!(crtc_state->has_psr || crtc_state->has_panel_replay))
2291                 return;
2292
2293         for_each_intel_encoder_mask_with_psr(state->base.dev, encoder,
2294                                              crtc_state->uapi.encoder_mask) {
2295                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2296                 struct intel_psr *psr = &intel_dp->psr;
2297                 bool keep_disabled = false;
2298
2299                 mutex_lock(&psr->lock);
2300
2301                 drm_WARN_ON(&dev_priv->drm, psr->enabled && !crtc_state->active_planes);
2302
2303                 keep_disabled |= psr->sink_not_reliable;
2304                 keep_disabled |= !crtc_state->active_planes;
2305
2306                 /* Display WA #1136: skl, bxt */
2307                 keep_disabled |= DISPLAY_VER(dev_priv) < 11 &&
2308                         crtc_state->wm_level_disabled;
2309
2310                 if (!psr->enabled && !keep_disabled)
2311                         intel_psr_enable_locked(intel_dp, crtc_state);
2312                 else if (psr->enabled && !crtc_state->wm_level_disabled)
2313                         /* Wa_14015648006 */
2314                         wm_optimization_wa(intel_dp, crtc_state);
2315
2316                 /* Force a PSR exit when enabling CRC to avoid CRC timeouts */
2317                 if (crtc_state->crc_enabled && psr->enabled)
2318                         psr_force_hw_tracking_exit(intel_dp);
2319
2320                 /*
2321                  * Clear possible busy bits in case we have
2322                  * invalidate -> flip -> flush sequence.
2323                  */
2324                 intel_dp->psr.busy_frontbuffer_bits = 0;
2325
2326                 mutex_unlock(&psr->lock);
2327         }
2328 }
2329
2330 static int _psr2_ready_for_pipe_update_locked(struct intel_dp *intel_dp)
2331 {
2332         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2333         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2334
2335         /*
2336          * Any state lower than EDP_PSR2_STATUS_STATE_DEEP_SLEEP is enough.
2337          * As all higher states has bit 4 of PSR2 state set we can just wait for
2338          * EDP_PSR2_STATUS_STATE_DEEP_SLEEP to be cleared.
2339          */
2340         return intel_de_wait_for_clear(dev_priv,
2341                                        EDP_PSR2_STATUS(cpu_transcoder),
2342                                        EDP_PSR2_STATUS_STATE_DEEP_SLEEP, 50);
2343 }
2344
2345 static int _psr1_ready_for_pipe_update_locked(struct intel_dp *intel_dp)
2346 {
2347         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2348         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2349
2350         /*
2351          * From bspec: Panel Self Refresh (BDW+)
2352          * Max. time for PSR to idle = Inverse of the refresh rate + 6 ms of
2353          * exit training time + 1.5 ms of aux channel handshake. 50 ms is
2354          * defensive enough to cover everything.
2355          */
2356         return intel_de_wait_for_clear(dev_priv,
2357                                        psr_status_reg(dev_priv, cpu_transcoder),
2358                                        EDP_PSR_STATUS_STATE_MASK, 50);
2359 }
2360
2361 /**
2362  * intel_psr_wait_for_idle_locked - wait for PSR be ready for a pipe update
2363  * @new_crtc_state: new CRTC state
2364  *
2365  * This function is expected to be called from pipe_update_start() where it is
2366  * not expected to race with PSR enable or disable.
2367  */
2368 void intel_psr_wait_for_idle_locked(const struct intel_crtc_state *new_crtc_state)
2369 {
2370         struct drm_i915_private *dev_priv = to_i915(new_crtc_state->uapi.crtc->dev);
2371         struct intel_encoder *encoder;
2372
2373         if (!new_crtc_state->has_psr)
2374                 return;
2375
2376         for_each_intel_encoder_mask_with_psr(&dev_priv->drm, encoder,
2377                                              new_crtc_state->uapi.encoder_mask) {
2378                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2379                 int ret;
2380
2381                 lockdep_assert_held(&intel_dp->psr.lock);
2382
2383                 if (!intel_dp->psr.enabled)
2384                         continue;
2385
2386                 if (intel_dp->psr.psr2_enabled)
2387                         ret = _psr2_ready_for_pipe_update_locked(intel_dp);
2388                 else
2389                         ret = _psr1_ready_for_pipe_update_locked(intel_dp);
2390
2391                 if (ret)
2392                         drm_err(&dev_priv->drm, "PSR wait timed out, atomic update may fail\n");
2393         }
2394 }
2395
2396 static bool __psr_wait_for_idle_locked(struct intel_dp *intel_dp)
2397 {
2398         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2399         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2400         i915_reg_t reg;
2401         u32 mask;
2402         int err;
2403
2404         if (!intel_dp->psr.enabled)
2405                 return false;
2406
2407         if (intel_dp->psr.psr2_enabled) {
2408                 reg = EDP_PSR2_STATUS(cpu_transcoder);
2409                 mask = EDP_PSR2_STATUS_STATE_MASK;
2410         } else {
2411                 reg = psr_status_reg(dev_priv, cpu_transcoder);
2412                 mask = EDP_PSR_STATUS_STATE_MASK;
2413         }
2414
2415         mutex_unlock(&intel_dp->psr.lock);
2416
2417         err = intel_de_wait_for_clear(dev_priv, reg, mask, 50);
2418         if (err)
2419                 drm_err(&dev_priv->drm,
2420                         "Timed out waiting for PSR Idle for re-enable\n");
2421
2422         /* After the unlocked wait, verify that PSR is still wanted! */
2423         mutex_lock(&intel_dp->psr.lock);
2424         return err == 0 && intel_dp->psr.enabled;
2425 }
2426
2427 static int intel_psr_fastset_force(struct drm_i915_private *dev_priv)
2428 {
2429         struct drm_connector_list_iter conn_iter;
2430         struct drm_modeset_acquire_ctx ctx;
2431         struct drm_atomic_state *state;
2432         struct drm_connector *conn;
2433         int err = 0;
2434
2435         state = drm_atomic_state_alloc(&dev_priv->drm);
2436         if (!state)
2437                 return -ENOMEM;
2438
2439         drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
2440
2441         state->acquire_ctx = &ctx;
2442         to_intel_atomic_state(state)->internal = true;
2443
2444 retry:
2445         drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
2446         drm_for_each_connector_iter(conn, &conn_iter) {
2447                 struct drm_connector_state *conn_state;
2448                 struct drm_crtc_state *crtc_state;
2449
2450                 if (conn->connector_type != DRM_MODE_CONNECTOR_eDP)
2451                         continue;
2452
2453                 conn_state = drm_atomic_get_connector_state(state, conn);
2454                 if (IS_ERR(conn_state)) {
2455                         err = PTR_ERR(conn_state);
2456                         break;
2457                 }
2458
2459                 if (!conn_state->crtc)
2460                         continue;
2461
2462                 crtc_state = drm_atomic_get_crtc_state(state, conn_state->crtc);
2463                 if (IS_ERR(crtc_state)) {
2464                         err = PTR_ERR(crtc_state);
2465                         break;
2466                 }
2467
2468                 /* Mark mode as changed to trigger a pipe->update() */
2469                 crtc_state->mode_changed = true;
2470         }
2471         drm_connector_list_iter_end(&conn_iter);
2472
2473         if (err == 0)
2474                 err = drm_atomic_commit(state);
2475
2476         if (err == -EDEADLK) {
2477                 drm_atomic_state_clear(state);
2478                 err = drm_modeset_backoff(&ctx);
2479                 if (!err)
2480                         goto retry;
2481         }
2482
2483         drm_modeset_drop_locks(&ctx);
2484         drm_modeset_acquire_fini(&ctx);
2485         drm_atomic_state_put(state);
2486
2487         return err;
2488 }
2489
2490 int intel_psr_debug_set(struct intel_dp *intel_dp, u64 val)
2491 {
2492         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2493         const u32 mode = val & I915_PSR_DEBUG_MODE_MASK;
2494         u32 old_mode;
2495         int ret;
2496
2497         if (val & ~(I915_PSR_DEBUG_IRQ | I915_PSR_DEBUG_MODE_MASK) ||
2498             mode > I915_PSR_DEBUG_ENABLE_SEL_FETCH) {
2499                 drm_dbg_kms(&dev_priv->drm, "Invalid debug mask %llx\n", val);
2500                 return -EINVAL;
2501         }
2502
2503         ret = mutex_lock_interruptible(&intel_dp->psr.lock);
2504         if (ret)
2505                 return ret;
2506
2507         old_mode = intel_dp->psr.debug & I915_PSR_DEBUG_MODE_MASK;
2508         intel_dp->psr.debug = val;
2509
2510         /*
2511          * Do it right away if it's already enabled, otherwise it will be done
2512          * when enabling the source.
2513          */
2514         if (intel_dp->psr.enabled)
2515                 psr_irq_control(intel_dp);
2516
2517         mutex_unlock(&intel_dp->psr.lock);
2518
2519         if (old_mode != mode)
2520                 ret = intel_psr_fastset_force(dev_priv);
2521
2522         return ret;
2523 }
2524
2525 static void intel_psr_handle_irq(struct intel_dp *intel_dp)
2526 {
2527         struct intel_psr *psr = &intel_dp->psr;
2528
2529         intel_psr_disable_locked(intel_dp);
2530         psr->sink_not_reliable = true;
2531         /* let's make sure that sink is awaken */
2532         drm_dp_dpcd_writeb(&intel_dp->aux, DP_SET_POWER, DP_SET_POWER_D0);
2533 }
2534
2535 static void intel_psr_work(struct work_struct *work)
2536 {
2537         struct intel_dp *intel_dp =
2538                 container_of(work, typeof(*intel_dp), psr.work);
2539
2540         mutex_lock(&intel_dp->psr.lock);
2541
2542         if (!intel_dp->psr.enabled)
2543                 goto unlock;
2544
2545         if (READ_ONCE(intel_dp->psr.irq_aux_error))
2546                 intel_psr_handle_irq(intel_dp);
2547
2548         /*
2549          * We have to make sure PSR is ready for re-enable
2550          * otherwise it keeps disabled until next full enable/disable cycle.
2551          * PSR might take some time to get fully disabled
2552          * and be ready for re-enable.
2553          */
2554         if (!__psr_wait_for_idle_locked(intel_dp))
2555                 goto unlock;
2556
2557         /*
2558          * The delayed work can race with an invalidate hence we need to
2559          * recheck. Since psr_flush first clears this and then reschedules we
2560          * won't ever miss a flush when bailing out here.
2561          */
2562         if (intel_dp->psr.busy_frontbuffer_bits || intel_dp->psr.active)
2563                 goto unlock;
2564
2565         intel_psr_activate(intel_dp);
2566 unlock:
2567         mutex_unlock(&intel_dp->psr.lock);
2568 }
2569
2570 static void _psr_invalidate_handle(struct intel_dp *intel_dp)
2571 {
2572         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2573         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2574
2575         if (intel_dp->psr.psr2_sel_fetch_enabled) {
2576                 u32 val;
2577
2578                 if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
2579                         /* Send one update otherwise lag is observed in screen */
2580                         intel_de_write(dev_priv, CURSURFLIVE(intel_dp->psr.pipe), 0);
2581                         return;
2582                 }
2583
2584                 val = man_trk_ctl_enable_bit_get(dev_priv) |
2585                       man_trk_ctl_partial_frame_bit_get(dev_priv) |
2586                       man_trk_ctl_continuos_full_frame(dev_priv);
2587                 intel_de_write(dev_priv, PSR2_MAN_TRK_CTL(cpu_transcoder), val);
2588                 intel_de_write(dev_priv, CURSURFLIVE(intel_dp->psr.pipe), 0);
2589                 intel_dp->psr.psr2_sel_fetch_cff_enabled = true;
2590         } else {
2591                 intel_psr_exit(intel_dp);
2592         }
2593 }
2594
2595 /**
2596  * intel_psr_invalidate - Invalidate PSR
2597  * @dev_priv: i915 device
2598  * @frontbuffer_bits: frontbuffer plane tracking bits
2599  * @origin: which operation caused the invalidate
2600  *
2601  * Since the hardware frontbuffer tracking has gaps we need to integrate
2602  * with the software frontbuffer tracking. This function gets called every
2603  * time frontbuffer rendering starts and a buffer gets dirtied. PSR must be
2604  * disabled if the frontbuffer mask contains a buffer relevant to PSR.
2605  *
2606  * Dirty frontbuffers relevant to PSR are tracked in busy_frontbuffer_bits."
2607  */
2608 void intel_psr_invalidate(struct drm_i915_private *dev_priv,
2609                           unsigned frontbuffer_bits, enum fb_op_origin origin)
2610 {
2611         struct intel_encoder *encoder;
2612
2613         if (origin == ORIGIN_FLIP)
2614                 return;
2615
2616         for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
2617                 unsigned int pipe_frontbuffer_bits = frontbuffer_bits;
2618                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2619
2620                 mutex_lock(&intel_dp->psr.lock);
2621                 if (!intel_dp->psr.enabled) {
2622                         mutex_unlock(&intel_dp->psr.lock);
2623                         continue;
2624                 }
2625
2626                 pipe_frontbuffer_bits &=
2627                         INTEL_FRONTBUFFER_ALL_MASK(intel_dp->psr.pipe);
2628                 intel_dp->psr.busy_frontbuffer_bits |= pipe_frontbuffer_bits;
2629
2630                 if (pipe_frontbuffer_bits)
2631                         _psr_invalidate_handle(intel_dp);
2632
2633                 mutex_unlock(&intel_dp->psr.lock);
2634         }
2635 }
2636 /*
2637  * When we will be completely rely on PSR2 S/W tracking in future,
2638  * intel_psr_flush() will invalidate and flush the PSR for ORIGIN_FLIP
2639  * event also therefore tgl_dc3co_flush_locked() require to be changed
2640  * accordingly in future.
2641  */
2642 static void
2643 tgl_dc3co_flush_locked(struct intel_dp *intel_dp, unsigned int frontbuffer_bits,
2644                        enum fb_op_origin origin)
2645 {
2646         struct drm_i915_private *i915 = dp_to_i915(intel_dp);
2647
2648         if (!intel_dp->psr.dc3co_exitline || !intel_dp->psr.psr2_enabled ||
2649             !intel_dp->psr.active)
2650                 return;
2651
2652         /*
2653          * At every frontbuffer flush flip event modified delay of delayed work,
2654          * when delayed work schedules that means display has been idle.
2655          */
2656         if (!(frontbuffer_bits &
2657             INTEL_FRONTBUFFER_ALL_MASK(intel_dp->psr.pipe)))
2658                 return;
2659
2660         tgl_psr2_enable_dc3co(intel_dp);
2661         mod_delayed_work(i915->unordered_wq, &intel_dp->psr.dc3co_work,
2662                          intel_dp->psr.dc3co_exit_delay);
2663 }
2664
2665 static void _psr_flush_handle(struct intel_dp *intel_dp)
2666 {
2667         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2668         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2669
2670         if (intel_dp->psr.psr2_sel_fetch_enabled) {
2671                 if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
2672                         /* can we turn CFF off? */
2673                         if (intel_dp->psr.busy_frontbuffer_bits == 0) {
2674                                 u32 val = man_trk_ctl_enable_bit_get(dev_priv) |
2675                                         man_trk_ctl_partial_frame_bit_get(dev_priv) |
2676                                         man_trk_ctl_single_full_frame_bit_get(dev_priv) |
2677                                         man_trk_ctl_continuos_full_frame(dev_priv);
2678
2679                                 /*
2680                                  * Set psr2_sel_fetch_cff_enabled as false to allow selective
2681                                  * updates. Still keep cff bit enabled as we don't have proper
2682                                  * SU configuration in case update is sent for any reason after
2683                                  * sff bit gets cleared by the HW on next vblank.
2684                                  */
2685                                 intel_de_write(dev_priv, PSR2_MAN_TRK_CTL(cpu_transcoder),
2686                                                val);
2687                                 intel_de_write(dev_priv, CURSURFLIVE(intel_dp->psr.pipe), 0);
2688                                 intel_dp->psr.psr2_sel_fetch_cff_enabled = false;
2689                         }
2690                 } else {
2691                         /*
2692                          * continuous full frame is disabled, only a single full
2693                          * frame is required
2694                          */
2695                         psr_force_hw_tracking_exit(intel_dp);
2696                 }
2697         } else {
2698                 psr_force_hw_tracking_exit(intel_dp);
2699
2700                 if (!intel_dp->psr.active && !intel_dp->psr.busy_frontbuffer_bits)
2701                         queue_work(dev_priv->unordered_wq, &intel_dp->psr.work);
2702         }
2703 }
2704
2705 /**
2706  * intel_psr_flush - Flush PSR
2707  * @dev_priv: i915 device
2708  * @frontbuffer_bits: frontbuffer plane tracking bits
2709  * @origin: which operation caused the flush
2710  *
2711  * Since the hardware frontbuffer tracking has gaps we need to integrate
2712  * with the software frontbuffer tracking. This function gets called every
2713  * time frontbuffer rendering has completed and flushed out to memory. PSR
2714  * can be enabled again if no other frontbuffer relevant to PSR is dirty.
2715  *
2716  * Dirty frontbuffers relevant to PSR are tracked in busy_frontbuffer_bits.
2717  */
2718 void intel_psr_flush(struct drm_i915_private *dev_priv,
2719                      unsigned frontbuffer_bits, enum fb_op_origin origin)
2720 {
2721         struct intel_encoder *encoder;
2722
2723         for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
2724                 unsigned int pipe_frontbuffer_bits = frontbuffer_bits;
2725                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2726
2727                 mutex_lock(&intel_dp->psr.lock);
2728                 if (!intel_dp->psr.enabled) {
2729                         mutex_unlock(&intel_dp->psr.lock);
2730                         continue;
2731                 }
2732
2733                 pipe_frontbuffer_bits &=
2734                         INTEL_FRONTBUFFER_ALL_MASK(intel_dp->psr.pipe);
2735                 intel_dp->psr.busy_frontbuffer_bits &= ~pipe_frontbuffer_bits;
2736
2737                 /*
2738                  * If the PSR is paused by an explicit intel_psr_paused() call,
2739                  * we have to ensure that the PSR is not activated until
2740                  * intel_psr_resume() is called.
2741                  */
2742                 if (intel_dp->psr.paused)
2743                         goto unlock;
2744
2745                 if (origin == ORIGIN_FLIP ||
2746                     (origin == ORIGIN_CURSOR_UPDATE &&
2747                      !intel_dp->psr.psr2_sel_fetch_enabled)) {
2748                         tgl_dc3co_flush_locked(intel_dp, frontbuffer_bits, origin);
2749                         goto unlock;
2750                 }
2751
2752                 if (pipe_frontbuffer_bits == 0)
2753                         goto unlock;
2754
2755                 /* By definition flush = invalidate + flush */
2756                 _psr_flush_handle(intel_dp);
2757 unlock:
2758                 mutex_unlock(&intel_dp->psr.lock);
2759         }
2760 }
2761
2762 /**
2763  * intel_psr_init - Init basic PSR work and mutex.
2764  * @intel_dp: Intel DP
2765  *
2766  * This function is called after the initializing connector.
2767  * (the initializing of connector treats the handling of connector capabilities)
2768  * And it initializes basic PSR stuff for each DP Encoder.
2769  */
2770 void intel_psr_init(struct intel_dp *intel_dp)
2771 {
2772         struct intel_connector *connector = intel_dp->attached_connector;
2773         struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
2774         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2775
2776         if (!(HAS_PSR(dev_priv) || HAS_DP20(dev_priv)))
2777                 return;
2778
2779         if (!intel_dp_is_edp(intel_dp))
2780                 intel_psr_init_dpcd(intel_dp);
2781
2782         /*
2783          * HSW spec explicitly says PSR is tied to port A.
2784          * BDW+ platforms have a instance of PSR registers per transcoder but
2785          * BDW, GEN9 and GEN11 are not validated by HW team in other transcoder
2786          * than eDP one.
2787          * For now it only supports one instance of PSR for BDW, GEN9 and GEN11.
2788          * So lets keep it hardcoded to PORT_A for BDW, GEN9 and GEN11.
2789          * But GEN12 supports a instance of PSR registers per transcoder.
2790          */
2791         if (DISPLAY_VER(dev_priv) < 12 && dig_port->base.port != PORT_A) {
2792                 drm_dbg_kms(&dev_priv->drm,
2793                             "PSR condition failed: Port not supported\n");
2794                 return;
2795         }
2796
2797         if (HAS_DP20(dev_priv) && !intel_dp_is_edp(intel_dp))
2798                 intel_dp->psr.source_panel_replay_support = true;
2799         else
2800                 intel_dp->psr.source_support = true;
2801
2802         /* Set link_standby x link_off defaults */
2803         if (DISPLAY_VER(dev_priv) < 12)
2804                 /* For new platforms up to TGL let's respect VBT back again */
2805                 intel_dp->psr.link_standby = connector->panel.vbt.psr.full_link;
2806
2807         INIT_WORK(&intel_dp->psr.work, intel_psr_work);
2808         INIT_DELAYED_WORK(&intel_dp->psr.dc3co_work, tgl_dc3co_disable_work);
2809         mutex_init(&intel_dp->psr.lock);
2810 }
2811
2812 static int psr_get_status_and_error_status(struct intel_dp *intel_dp,
2813                                            u8 *status, u8 *error_status)
2814 {
2815         struct drm_dp_aux *aux = &intel_dp->aux;
2816         int ret;
2817         unsigned int offset;
2818
2819         offset = intel_dp->psr.panel_replay_enabled ?
2820                  DP_SINK_DEVICE_PR_AND_FRAME_LOCK_STATUS : DP_PSR_STATUS;
2821
2822         ret = drm_dp_dpcd_readb(aux, offset, status);
2823         if (ret != 1)
2824                 return ret;
2825
2826         offset = intel_dp->psr.panel_replay_enabled ?
2827                  DP_PANEL_REPLAY_ERROR_STATUS : DP_PSR_ERROR_STATUS;
2828
2829         ret = drm_dp_dpcd_readb(aux, offset, error_status);
2830         if (ret != 1)
2831                 return ret;
2832
2833         *status = *status & DP_PSR_SINK_STATE_MASK;
2834
2835         return 0;
2836 }
2837
2838 static void psr_alpm_check(struct intel_dp *intel_dp)
2839 {
2840         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2841         struct drm_dp_aux *aux = &intel_dp->aux;
2842         struct intel_psr *psr = &intel_dp->psr;
2843         u8 val;
2844         int r;
2845
2846         if (!psr->psr2_enabled)
2847                 return;
2848
2849         r = drm_dp_dpcd_readb(aux, DP_RECEIVER_ALPM_STATUS, &val);
2850         if (r != 1) {
2851                 drm_err(&dev_priv->drm, "Error reading ALPM status\n");
2852                 return;
2853         }
2854
2855         if (val & DP_ALPM_LOCK_TIMEOUT_ERROR) {
2856                 intel_psr_disable_locked(intel_dp);
2857                 psr->sink_not_reliable = true;
2858                 drm_dbg_kms(&dev_priv->drm,
2859                             "ALPM lock timeout error, disabling PSR\n");
2860
2861                 /* Clearing error */
2862                 drm_dp_dpcd_writeb(aux, DP_RECEIVER_ALPM_STATUS, val);
2863         }
2864 }
2865
2866 static void psr_capability_changed_check(struct intel_dp *intel_dp)
2867 {
2868         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2869         struct intel_psr *psr = &intel_dp->psr;
2870         u8 val;
2871         int r;
2872
2873         r = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_ESI, &val);
2874         if (r != 1) {
2875                 drm_err(&dev_priv->drm, "Error reading DP_PSR_ESI\n");
2876                 return;
2877         }
2878
2879         if (val & DP_PSR_CAPS_CHANGE) {
2880                 intel_psr_disable_locked(intel_dp);
2881                 psr->sink_not_reliable = true;
2882                 drm_dbg_kms(&dev_priv->drm,
2883                             "Sink PSR capability changed, disabling PSR\n");
2884
2885                 /* Clearing it */
2886                 drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_ESI, val);
2887         }
2888 }
2889
2890 void intel_psr_short_pulse(struct intel_dp *intel_dp)
2891 {
2892         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
2893         struct intel_psr *psr = &intel_dp->psr;
2894         u8 status, error_status;
2895         const u8 errors = DP_PSR_RFB_STORAGE_ERROR |
2896                           DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR |
2897                           DP_PSR_LINK_CRC_ERROR;
2898
2899         if (!CAN_PSR(intel_dp))
2900                 return;
2901
2902         mutex_lock(&psr->lock);
2903
2904         if (!psr->enabled)
2905                 goto exit;
2906
2907         if (psr_get_status_and_error_status(intel_dp, &status, &error_status)) {
2908                 drm_err(&dev_priv->drm,
2909                         "Error reading PSR status or error status\n");
2910                 goto exit;
2911         }
2912
2913         if (status == DP_PSR_SINK_INTERNAL_ERROR || (error_status & errors)) {
2914                 intel_psr_disable_locked(intel_dp);
2915                 psr->sink_not_reliable = true;
2916         }
2917
2918         if (status == DP_PSR_SINK_INTERNAL_ERROR && !error_status)
2919                 drm_dbg_kms(&dev_priv->drm,
2920                             "PSR sink internal error, disabling PSR\n");
2921         if (error_status & DP_PSR_RFB_STORAGE_ERROR)
2922                 drm_dbg_kms(&dev_priv->drm,
2923                             "PSR RFB storage error, disabling PSR\n");
2924         if (error_status & DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR)
2925                 drm_dbg_kms(&dev_priv->drm,
2926                             "PSR VSC SDP uncorrectable error, disabling PSR\n");
2927         if (error_status & DP_PSR_LINK_CRC_ERROR)
2928                 drm_dbg_kms(&dev_priv->drm,
2929                             "PSR Link CRC error, disabling PSR\n");
2930
2931         if (error_status & ~errors)
2932                 drm_err(&dev_priv->drm,
2933                         "PSR_ERROR_STATUS unhandled errors %x\n",
2934                         error_status & ~errors);
2935         /* clear status register */
2936         drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_ERROR_STATUS, error_status);
2937
2938         psr_alpm_check(intel_dp);
2939         psr_capability_changed_check(intel_dp);
2940
2941 exit:
2942         mutex_unlock(&psr->lock);
2943 }
2944
2945 bool intel_psr_enabled(struct intel_dp *intel_dp)
2946 {
2947         bool ret;
2948
2949         if (!CAN_PSR(intel_dp))
2950                 return false;
2951
2952         mutex_lock(&intel_dp->psr.lock);
2953         ret = intel_dp->psr.enabled;
2954         mutex_unlock(&intel_dp->psr.lock);
2955
2956         return ret;
2957 }
2958
2959 /**
2960  * intel_psr_lock - grab PSR lock
2961  * @crtc_state: the crtc state
2962  *
2963  * This is initially meant to be used by around CRTC update, when
2964  * vblank sensitive registers are updated and we need grab the lock
2965  * before it to avoid vblank evasion.
2966  */
2967 void intel_psr_lock(const struct intel_crtc_state *crtc_state)
2968 {
2969         struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
2970         struct intel_encoder *encoder;
2971
2972         if (!crtc_state->has_psr)
2973                 return;
2974
2975         for_each_intel_encoder_mask_with_psr(&i915->drm, encoder,
2976                                              crtc_state->uapi.encoder_mask) {
2977                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2978
2979                 mutex_lock(&intel_dp->psr.lock);
2980                 break;
2981         }
2982 }
2983
2984 /**
2985  * intel_psr_unlock - release PSR lock
2986  * @crtc_state: the crtc state
2987  *
2988  * Release the PSR lock that was held during pipe update.
2989  */
2990 void intel_psr_unlock(const struct intel_crtc_state *crtc_state)
2991 {
2992         struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
2993         struct intel_encoder *encoder;
2994
2995         if (!crtc_state->has_psr)
2996                 return;
2997
2998         for_each_intel_encoder_mask_with_psr(&i915->drm, encoder,
2999                                              crtc_state->uapi.encoder_mask) {
3000                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3001
3002                 mutex_unlock(&intel_dp->psr.lock);
3003                 break;
3004         }
3005 }
3006
3007 static void
3008 psr_source_status(struct intel_dp *intel_dp, struct seq_file *m)
3009 {
3010         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
3011         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
3012         const char *status = "unknown";
3013         u32 val, status_val;
3014
3015         if (intel_dp->psr.psr2_enabled) {
3016                 static const char * const live_status[] = {
3017                         "IDLE",
3018                         "CAPTURE",
3019                         "CAPTURE_FS",
3020                         "SLEEP",
3021                         "BUFON_FW",
3022                         "ML_UP",
3023                         "SU_STANDBY",
3024                         "FAST_SLEEP",
3025                         "DEEP_SLEEP",
3026                         "BUF_ON",
3027                         "TG_ON"
3028                 };
3029                 val = intel_de_read(dev_priv, EDP_PSR2_STATUS(cpu_transcoder));
3030                 status_val = REG_FIELD_GET(EDP_PSR2_STATUS_STATE_MASK, val);
3031                 if (status_val < ARRAY_SIZE(live_status))
3032                         status = live_status[status_val];
3033         } else {
3034                 static const char * const live_status[] = {
3035                         "IDLE",
3036                         "SRDONACK",
3037                         "SRDENT",
3038                         "BUFOFF",
3039                         "BUFON",
3040                         "AUXACK",
3041                         "SRDOFFACK",
3042                         "SRDENT_ON",
3043                 };
3044                 val = intel_de_read(dev_priv, psr_status_reg(dev_priv, cpu_transcoder));
3045                 status_val = REG_FIELD_GET(EDP_PSR_STATUS_STATE_MASK, val);
3046                 if (status_val < ARRAY_SIZE(live_status))
3047                         status = live_status[status_val];
3048         }
3049
3050         seq_printf(m, "Source PSR/PanelReplay status: %s [0x%08x]\n", status, val);
3051 }
3052
3053 static int intel_psr_status(struct seq_file *m, struct intel_dp *intel_dp)
3054 {
3055         struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
3056         enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
3057         struct intel_psr *psr = &intel_dp->psr;
3058         intel_wakeref_t wakeref;
3059         const char *status;
3060         bool enabled;
3061         u32 val;
3062
3063         seq_printf(m, "Sink support: PSR = %s",
3064                    str_yes_no(psr->sink_support));
3065
3066         if (psr->sink_support)
3067                 seq_printf(m, " [0x%02x]", intel_dp->psr_dpcd[0]);
3068         seq_printf(m, ", Panel Replay = %s\n", str_yes_no(psr->sink_panel_replay_support));
3069
3070         if (!(psr->sink_support || psr->sink_panel_replay_support))
3071                 return 0;
3072
3073         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
3074         mutex_lock(&psr->lock);
3075
3076         if (psr->panel_replay_enabled)
3077                 status = "Panel Replay Enabled";
3078         else if (psr->enabled)
3079                 status = psr->psr2_enabled ? "PSR2 enabled" : "PSR1 enabled";
3080         else
3081                 status = "disabled";
3082         seq_printf(m, "PSR mode: %s\n", status);
3083
3084         if (!psr->enabled) {
3085                 seq_printf(m, "PSR sink not reliable: %s\n",
3086                            str_yes_no(psr->sink_not_reliable));
3087
3088                 goto unlock;
3089         }
3090
3091         if (psr->panel_replay_enabled) {
3092                 val = intel_de_read(dev_priv, TRANS_DP2_CTL(cpu_transcoder));
3093                 enabled = val & TRANS_DP2_PANEL_REPLAY_ENABLE;
3094         } else if (psr->psr2_enabled) {
3095                 val = intel_de_read(dev_priv, EDP_PSR2_CTL(cpu_transcoder));
3096                 enabled = val & EDP_PSR2_ENABLE;
3097         } else {
3098                 val = intel_de_read(dev_priv, psr_ctl_reg(dev_priv, cpu_transcoder));
3099                 enabled = val & EDP_PSR_ENABLE;
3100         }
3101         seq_printf(m, "Source PSR/PanelReplay ctl: %s [0x%08x]\n",
3102                    str_enabled_disabled(enabled), val);
3103         psr_source_status(intel_dp, m);
3104         seq_printf(m, "Busy frontbuffer bits: 0x%08x\n",
3105                    psr->busy_frontbuffer_bits);
3106
3107         /*
3108          * SKL+ Perf counter is reset to 0 everytime DC state is entered
3109          */
3110         val = intel_de_read(dev_priv, psr_perf_cnt_reg(dev_priv, cpu_transcoder));
3111         seq_printf(m, "Performance counter: %u\n",
3112                    REG_FIELD_GET(EDP_PSR_PERF_CNT_MASK, val));
3113
3114         if (psr->debug & I915_PSR_DEBUG_IRQ) {
3115                 seq_printf(m, "Last attempted entry at: %lld\n",
3116                            psr->last_entry_attempt);
3117                 seq_printf(m, "Last exit at: %lld\n", psr->last_exit);
3118         }
3119
3120         if (psr->psr2_enabled) {
3121                 u32 su_frames_val[3];
3122                 int frame;
3123
3124                 /*
3125                  * Reading all 3 registers before hand to minimize crossing a
3126                  * frame boundary between register reads
3127                  */
3128                 for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame += 3) {
3129                         val = intel_de_read(dev_priv, PSR2_SU_STATUS(cpu_transcoder, frame));
3130                         su_frames_val[frame / 3] = val;
3131                 }
3132
3133                 seq_puts(m, "Frame:\tPSR2 SU blocks:\n");
3134
3135                 for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame++) {
3136                         u32 su_blocks;
3137
3138                         su_blocks = su_frames_val[frame / 3] &
3139                                     PSR2_SU_STATUS_MASK(frame);
3140                         su_blocks = su_blocks >> PSR2_SU_STATUS_SHIFT(frame);
3141                         seq_printf(m, "%d\t%d\n", frame, su_blocks);
3142                 }
3143
3144                 seq_printf(m, "PSR2 selective fetch: %s\n",
3145                            str_enabled_disabled(psr->psr2_sel_fetch_enabled));
3146         }
3147
3148 unlock:
3149         mutex_unlock(&psr->lock);
3150         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
3151
3152         return 0;
3153 }
3154
3155 static int i915_edp_psr_status_show(struct seq_file *m, void *data)
3156 {
3157         struct drm_i915_private *dev_priv = m->private;
3158         struct intel_dp *intel_dp = NULL;
3159         struct intel_encoder *encoder;
3160
3161         if (!HAS_PSR(dev_priv))
3162                 return -ENODEV;
3163
3164         /* Find the first EDP which supports PSR */
3165         for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
3166                 intel_dp = enc_to_intel_dp(encoder);
3167                 break;
3168         }
3169
3170         if (!intel_dp)
3171                 return -ENODEV;
3172
3173         return intel_psr_status(m, intel_dp);
3174 }
3175 DEFINE_SHOW_ATTRIBUTE(i915_edp_psr_status);
3176
3177 static int
3178 i915_edp_psr_debug_set(void *data, u64 val)
3179 {
3180         struct drm_i915_private *dev_priv = data;
3181         struct intel_encoder *encoder;
3182         intel_wakeref_t wakeref;
3183         int ret = -ENODEV;
3184
3185         if (!HAS_PSR(dev_priv))
3186                 return ret;
3187
3188         for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
3189                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3190
3191                 drm_dbg_kms(&dev_priv->drm, "Setting PSR debug to %llx\n", val);
3192
3193                 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
3194
3195                 // TODO: split to each transcoder's PSR debug state
3196                 ret = intel_psr_debug_set(intel_dp, val);
3197
3198                 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
3199         }
3200
3201         return ret;
3202 }
3203
3204 static int
3205 i915_edp_psr_debug_get(void *data, u64 *val)
3206 {
3207         struct drm_i915_private *dev_priv = data;
3208         struct intel_encoder *encoder;
3209
3210         if (!HAS_PSR(dev_priv))
3211                 return -ENODEV;
3212
3213         for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
3214                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3215
3216                 // TODO: split to each transcoder's PSR debug state
3217                 *val = READ_ONCE(intel_dp->psr.debug);
3218                 return 0;
3219         }
3220
3221         return -ENODEV;
3222 }
3223
3224 DEFINE_SIMPLE_ATTRIBUTE(i915_edp_psr_debug_fops,
3225                         i915_edp_psr_debug_get, i915_edp_psr_debug_set,
3226                         "%llu\n");
3227
3228 void intel_psr_debugfs_register(struct drm_i915_private *i915)
3229 {
3230         struct drm_minor *minor = i915->drm.primary;
3231
3232         debugfs_create_file("i915_edp_psr_debug", 0644, minor->debugfs_root,
3233                             i915, &i915_edp_psr_debug_fops);
3234
3235         debugfs_create_file("i915_edp_psr_status", 0444, minor->debugfs_root,
3236                             i915, &i915_edp_psr_status_fops);
3237 }
3238
3239 static const char *psr_mode_str(struct intel_dp *intel_dp)
3240 {
3241         if (intel_dp->psr.panel_replay_enabled)
3242                 return "PANEL-REPLAY";
3243         else if (intel_dp->psr.enabled)
3244                 return "PSR";
3245
3246         return "unknown";
3247 }
3248
3249 static int i915_psr_sink_status_show(struct seq_file *m, void *data)
3250 {
3251         struct intel_connector *connector = m->private;
3252         struct intel_dp *intel_dp = intel_attached_dp(connector);
3253         static const char * const sink_status[] = {
3254                 "inactive",
3255                 "transition to active, capture and display",
3256                 "active, display from RFB",
3257                 "active, capture and display on sink device timings",
3258                 "transition to inactive, capture and display, timing re-sync",
3259                 "reserved",
3260                 "reserved",
3261                 "sink internal error",
3262         };
3263         static const char * const panel_replay_status[] = {
3264                 "Sink device frame is locked to the Source device",
3265                 "Sink device is coasting, using the VTotal target",
3266                 "Sink device is governing the frame rate (frame rate unlock is granted)",
3267                 "Sink device in the process of re-locking with the Source device",
3268         };
3269         const char *str;
3270         int ret;
3271         u8 status, error_status;
3272         u32 idx;
3273
3274         if (!(CAN_PSR(intel_dp) || CAN_PANEL_REPLAY(intel_dp))) {
3275                 seq_puts(m, "PSR/Panel-Replay Unsupported\n");
3276                 return -ENODEV;
3277         }
3278
3279         if (connector->base.status != connector_status_connected)
3280                 return -ENODEV;
3281
3282         ret = psr_get_status_and_error_status(intel_dp, &status, &error_status);
3283         if (ret)
3284                 return ret;
3285
3286         str = "unknown";
3287         if (intel_dp->psr.panel_replay_enabled) {
3288                 idx = (status & DP_SINK_FRAME_LOCKED_MASK) >> DP_SINK_FRAME_LOCKED_SHIFT;
3289                 if (idx < ARRAY_SIZE(panel_replay_status))
3290                         str = panel_replay_status[idx];
3291         } else if (intel_dp->psr.enabled) {
3292                 idx = status & DP_PSR_SINK_STATE_MASK;
3293                 if (idx < ARRAY_SIZE(sink_status))
3294                         str = sink_status[idx];
3295         }
3296
3297         seq_printf(m, "Sink %s status: 0x%x [%s]\n", psr_mode_str(intel_dp), status, str);
3298
3299         seq_printf(m, "Sink %s error status: 0x%x", psr_mode_str(intel_dp), error_status);
3300
3301         if (error_status & (DP_PSR_RFB_STORAGE_ERROR |
3302                             DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR |
3303                             DP_PSR_LINK_CRC_ERROR))
3304                 seq_puts(m, ":\n");
3305         else
3306                 seq_puts(m, "\n");
3307         if (error_status & DP_PSR_RFB_STORAGE_ERROR)
3308                 seq_printf(m, "\t%s RFB storage error\n", psr_mode_str(intel_dp));
3309         if (error_status & DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR)
3310                 seq_printf(m, "\t%s VSC SDP uncorrectable error\n", psr_mode_str(intel_dp));
3311         if (error_status & DP_PSR_LINK_CRC_ERROR)
3312                 seq_printf(m, "\t%s Link CRC error\n", psr_mode_str(intel_dp));
3313
3314         return ret;
3315 }
3316 DEFINE_SHOW_ATTRIBUTE(i915_psr_sink_status);
3317
3318 static int i915_psr_status_show(struct seq_file *m, void *data)
3319 {
3320         struct intel_connector *connector = m->private;
3321         struct intel_dp *intel_dp = intel_attached_dp(connector);
3322
3323         return intel_psr_status(m, intel_dp);
3324 }
3325 DEFINE_SHOW_ATTRIBUTE(i915_psr_status);
3326
3327 void intel_psr_connector_debugfs_add(struct intel_connector *connector)
3328 {
3329         struct drm_i915_private *i915 = to_i915(connector->base.dev);
3330         struct dentry *root = connector->base.debugfs_entry;
3331
3332         /* TODO: Add support for MST connectors as well. */
3333         if ((connector->base.connector_type != DRM_MODE_CONNECTOR_eDP &&
3334              connector->base.connector_type != DRM_MODE_CONNECTOR_DisplayPort) ||
3335             connector->mst_port)
3336                 return;
3337
3338         debugfs_create_file("i915_psr_sink_status", 0444, root,
3339                             connector, &i915_psr_sink_status_fops);
3340
3341         if (HAS_PSR(i915) || HAS_DP20(i915))
3342                 debugfs_create_file("i915_psr_status", 0444, root,
3343                                     connector, &i915_psr_status_fops);
3344 }