xref: /linux/drivers/gpu/drm/i915/display/intel_psr.c (revision 1c9982b4961334c1edb0745a04cabd34bc2de675)
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 <linux/debugfs.h>
25 
26 #include <drm/drm_atomic_helper.h>
27 #include <drm/drm_damage_helper.h>
28 #include <drm/drm_debugfs.h>
29 #include <drm/drm_print.h>
30 #include <drm/drm_vblank.h>
31 
32 #include "i915_reg.h"
33 #include "intel_alpm.h"
34 #include "intel_atomic.h"
35 #include "intel_crtc.h"
36 #include "intel_cursor_regs.h"
37 #include "intel_ddi.h"
38 #include "intel_de.h"
39 #include "intel_display_irq.h"
40 #include "intel_display_regs.h"
41 #include "intel_display_rpm.h"
42 #include "intel_display_types.h"
43 #include "intel_display_utils.h"
44 #include "intel_dmc.h"
45 #include "intel_dp.h"
46 #include "intel_dp_aux.h"
47 #include "intel_dsb.h"
48 #include "intel_frontbuffer.h"
49 #include "intel_hdmi.h"
50 #include "intel_psr.h"
51 #include "intel_psr_regs.h"
52 #include "intel_snps_phy.h"
53 #include "intel_step.h"
54 #include "intel_vblank.h"
55 #include "intel_vdsc.h"
56 #include "intel_vrr.h"
57 #include "skl_universal_plane.h"
58 
59 /**
60  * DOC: Panel Self Refresh (PSR/SRD)
61  *
62  * Since Haswell Display controller supports Panel Self-Refresh on display
63  * panels witch have a remote frame buffer (RFB) implemented according to PSR
64  * spec in eDP1.3. PSR feature allows the display to go to lower standby states
65  * when system is idle but display is on as it eliminates display refresh
66  * request to DDR memory completely as long as the frame buffer for that
67  * display is unchanged.
68  *
69  * Panel Self Refresh must be supported by both Hardware (source) and
70  * Panel (sink).
71  *
72  * PSR saves power by caching the framebuffer in the panel RFB, which allows us
73  * to power down the link and memory controller. For DSI panels the same idea
74  * is called "manual mode".
75  *
76  * The implementation uses the hardware-based PSR support which automatically
77  * enters/exits self-refresh mode. The hardware takes care of sending the
78  * required DP aux message and could even retrain the link (that part isn't
79  * enabled yet though). The hardware also keeps track of any frontbuffer
80  * changes to know when to exit self-refresh mode again. Unfortunately that
81  * part doesn't work too well, hence why the i915 PSR support uses the
82  * software frontbuffer tracking to make sure it doesn't miss a screen
83  * update. For this integration intel_psr_invalidate() and intel_psr_flush()
84  * get called by the frontbuffer tracking code. Note that because of locking
85  * issues the self-refresh re-enable code is done from a work queue, which
86  * must be correctly synchronized/cancelled when shutting down the pipe."
87  *
88  * DC3CO (DC3 clock off)
89  *
90  * On top of PSR2, GEN12 adds a intermediate power savings state that turns
91  * clock off automatically during PSR2 idle state.
92  * The smaller overhead of DC3co entry/exit vs. the overhead of PSR2 deep sleep
93  * entry/exit allows the HW to enter a low-power state even when page flipping
94  * periodically (for instance a 30fps video playback scenario).
95  *
96  * Every time a flips occurs PSR2 will get out of deep sleep state(if it was),
97  * so DC3CO is enabled and tgl_dc3co_disable_work is schedule to run after 6
98  * frames, if no other flip occurs and the function above is executed, DC3CO is
99  * disabled and PSR2 is configured to enter deep sleep, resetting again in case
100  * of another flip.
101  * Front buffer modifications do not trigger DC3CO activation on purpose as it
102  * would bring a lot of complexity and most of the moderns systems will only
103  * use page flips.
104  */
105 
106 /*
107  * Description of PSR mask bits:
108  *
109  * EDP_PSR_DEBUG[16]/EDP_PSR_DEBUG_MASK_DISP_REG_WRITE (hsw-skl):
110  *
111  *  When unmasked (nearly) all display register writes (eg. even
112  *  SWF) trigger a PSR exit. Some registers are excluded from this
113  *  and they have a more specific mask (described below). On icl+
114  *  this bit no longer exists and is effectively always set.
115  *
116  * PIPE_MISC[21]/PIPE_MISC_PSR_MASK_PIPE_REG_WRITE (skl+):
117  *
118  *  When unmasked (nearly) all pipe/plane register writes
119  *  trigger a PSR exit. Some plane registers are excluded from this
120  *  and they have a more specific mask (described below).
121  *
122  * CHICKEN_PIPESL_1[11]/SKL_PSR_MASK_PLANE_FLIP (skl+):
123  * PIPE_MISC[23]/PIPE_MISC_PSR_MASK_PRIMARY_FLIP (bdw):
124  * EDP_PSR_DEBUG[23]/EDP_PSR_DEBUG_MASK_PRIMARY_FLIP (hsw):
125  *
126  *  When unmasked PRI_SURF/PLANE_SURF writes trigger a PSR exit.
127  *  SPR_SURF/CURBASE are not included in this and instead are
128  *  controlled by PIPE_MISC_PSR_MASK_PIPE_REG_WRITE (skl+) or
129  *  EDP_PSR_DEBUG_MASK_DISP_REG_WRITE (hsw/bdw).
130  *
131  * PIPE_MISC[22]/PIPE_MISC_PSR_MASK_SPRITE_ENABLE (bdw):
132  * EDP_PSR_DEBUG[21]/EDP_PSR_DEBUG_MASK_SPRITE_ENABLE (hsw):
133  *
134  *  When unmasked PSR is blocked as long as the sprite
135  *  plane is enabled. skl+ with their universal planes no
136  *  longer have a mask bit like this, and no plane being
137  *  enabledb blocks PSR.
138  *
139  * PIPE_MISC[21]/PIPE_MISC_PSR_MASK_CURSOR_MOVE (bdw):
140  * EDP_PSR_DEBUG[20]/EDP_PSR_DEBUG_MASK_CURSOR_MOVE (hsw):
141  *
142  *  When umasked CURPOS writes trigger a PSR exit. On skl+
143  *  this doesn't exit but CURPOS is included in the
144  *  PIPE_MISC_PSR_MASK_PIPE_REG_WRITE mask.
145  *
146  * PIPE_MISC[20]/PIPE_MISC_PSR_MASK_VBLANK_VSYNC_INT (bdw+):
147  * EDP_PSR_DEBUG[19]/EDP_PSR_DEBUG_MASK_VBLANK_VSYNC_INT (hsw):
148  *
149  *  When unmasked PSR is blocked as long as vblank and/or vsync
150  *  interrupt is unmasked in IMR *and* enabled in IER.
151  *
152  * CHICKEN_TRANS[30]/SKL_UNMASK_VBL_TO_PIPE_IN_SRD (skl+):
153  * CHICKEN_PAR1_1[15]/HSW_MASK_VBL_TO_PIPE_IN_SRD (hsw/bdw):
154  *
155  *  Selectcs whether PSR exit generates an extra vblank before
156  *  the first frame is transmitted. Also note the opposite polarity
157  *  if the bit on hsw/bdw vs. skl+ (masked==generate the extra vblank,
158  *  unmasked==do not generate the extra vblank).
159  *
160  *  With DC states enabled the extra vblank happens after link training,
161  *  with DC states disabled it happens immediately upuon PSR exit trigger.
162  *  No idea as of now why there is a difference. HSW/BDW (which don't
163  *  even have DMC) always generate it after link training. Go figure.
164  *
165  *  Unfortunately CHICKEN_TRANS itself seems to be double buffered
166  *  and thus won't latch until the first vblank. So with DC states
167  *  enabled the register effectively uses the reset value during DC5
168  *  exit+PSR exit sequence, and thus the bit does nothing until
169  *  latched by the vblank that it was trying to prevent from being
170  *  generated in the first place. So we should probably call this
171  *  one a chicken/egg bit instead on skl+.
172  *
173  *  In standby mode (as opposed to link-off) this makes no difference
174  *  as the timing generator keeps running the whole time generating
175  *  normal periodic vblanks.
176  *
177  *  WaPsrDPAMaskVBlankInSRD asks us to set the bit on hsw/bdw,
178  *  and doing so makes the behaviour match the skl+ reset value.
179  *
180  * CHICKEN_PIPESL_1[0]/BDW_UNMASK_VBL_TO_REGS_IN_SRD (bdw):
181  * CHICKEN_PIPESL_1[15]/HSW_UNMASK_VBL_TO_REGS_IN_SRD (hsw):
182  *
183  *  On BDW without this bit is no vblanks whatsoever are
184  *  generated after PSR exit. On HSW this has no apparent effect.
185  *  WaPsrDPRSUnmaskVBlankInSRD says to set this.
186  *
187  * The rest of the bits are more self-explanatory and/or
188  * irrelevant for normal operation.
189  *
190  * Description of intel_crtc_state variables. has_psr, has_panel_replay and
191  * has_sel_update:
192  *
193  *  has_psr (alone):					PSR1
194  *  has_psr + has_sel_update:				PSR2
195  *  has_psr + has_panel_replay:				Panel Replay
196  *  has_psr + has_panel_replay + has_sel_update:	Panel Replay Selective Update
197  *
198  * Description of some intel_psr variables. enabled, panel_replay_enabled,
199  * sel_update_enabled
200  *
201  *  enabled (alone):						PSR1
202  *  enabled + sel_update_enabled:				PSR2
203  *  enabled + panel_replay_enabled:				Panel Replay
204  *  enabled + panel_replay_enabled + sel_update_enabled:	Panel Replay SU
205  */
206 
207 #define CAN_PSR(intel_dp) ((intel_dp)->psr.sink_support && \
208 			   (intel_dp)->psr.source_support)
209 
intel_encoder_can_psr(struct intel_encoder * encoder)210 bool intel_encoder_can_psr(struct intel_encoder *encoder)
211 {
212 	if (intel_encoder_is_dp(encoder) || encoder->type == INTEL_OUTPUT_DP_MST)
213 		return CAN_PSR(enc_to_intel_dp(encoder)) ||
214 		       CAN_PANEL_REPLAY(enc_to_intel_dp(encoder));
215 	else
216 		return false;
217 }
218 
intel_psr_needs_aux_io_power(struct intel_encoder * encoder,const struct intel_crtc_state * crtc_state)219 bool intel_psr_needs_aux_io_power(struct intel_encoder *encoder,
220 				  const struct intel_crtc_state *crtc_state)
221 {
222 	/*
223 	 * For PSR/PR modes only eDP requires the AUX IO power to be enabled whenever
224 	 * the output is enabled. For non-eDP outputs the main link is always
225 	 * on, hence it doesn't require the HW initiated AUX wake-up signaling used
226 	 * for eDP.
227 	 *
228 	 * TODO:
229 	 * - Consider leaving AUX IO disabled for eDP / PR as well, in case
230 	 *   the ALPM with main-link off mode is not enabled.
231 	 * - Leave AUX IO enabled for DP / PR, once support for ALPM with
232 	 *   main-link off mode is added for it and this mode gets enabled.
233 	 */
234 	return intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
235 	       intel_encoder_can_psr(encoder);
236 }
237 
psr_global_enabled(struct intel_dp * intel_dp)238 static bool psr_global_enabled(struct intel_dp *intel_dp)
239 {
240 	struct intel_connector *connector = intel_dp->attached_connector;
241 
242 	switch (intel_dp->psr.debug & I915_PSR_DEBUG_MODE_MASK) {
243 	case I915_PSR_DEBUG_DEFAULT:
244 		return intel_dp_is_edp(intel_dp) ?
245 			connector->panel.vbt.psr.enable : true;
246 	case I915_PSR_DEBUG_DISABLE:
247 		return false;
248 	default:
249 		return true;
250 	}
251 }
252 
sel_update_global_enabled(struct intel_dp * intel_dp)253 static bool sel_update_global_enabled(struct intel_dp *intel_dp)
254 {
255 	switch (intel_dp->psr.debug & I915_PSR_DEBUG_MODE_MASK) {
256 	case I915_PSR_DEBUG_DISABLE:
257 	case I915_PSR_DEBUG_FORCE_PSR1:
258 		return false;
259 	default:
260 		return true;
261 	}
262 }
263 
panel_replay_global_enabled(struct intel_dp * intel_dp)264 static bool panel_replay_global_enabled(struct intel_dp *intel_dp)
265 {
266 	struct intel_display *display = to_intel_display(intel_dp);
267 
268 	return !(intel_dp->psr.debug & I915_PSR_DEBUG_PANEL_REPLAY_DISABLE) &&
269 		display->params.enable_panel_replay;
270 }
271 
psr_irq_psr_error_bit_get(struct intel_dp * intel_dp)272 static u32 psr_irq_psr_error_bit_get(struct intel_dp *intel_dp)
273 {
274 	struct intel_display *display = to_intel_display(intel_dp);
275 
276 	return DISPLAY_VER(display) >= 12 ? TGL_PSR_ERROR :
277 		EDP_PSR_ERROR(intel_dp->psr.transcoder);
278 }
279 
psr_irq_post_exit_bit_get(struct intel_dp * intel_dp)280 static u32 psr_irq_post_exit_bit_get(struct intel_dp *intel_dp)
281 {
282 	struct intel_display *display = to_intel_display(intel_dp);
283 
284 	return DISPLAY_VER(display) >= 12 ? TGL_PSR_POST_EXIT :
285 		EDP_PSR_POST_EXIT(intel_dp->psr.transcoder);
286 }
287 
psr_irq_pre_entry_bit_get(struct intel_dp * intel_dp)288 static u32 psr_irq_pre_entry_bit_get(struct intel_dp *intel_dp)
289 {
290 	struct intel_display *display = to_intel_display(intel_dp);
291 
292 	return DISPLAY_VER(display) >= 12 ? TGL_PSR_PRE_ENTRY :
293 		EDP_PSR_PRE_ENTRY(intel_dp->psr.transcoder);
294 }
295 
psr_irq_mask_get(struct intel_dp * intel_dp)296 static u32 psr_irq_mask_get(struct intel_dp *intel_dp)
297 {
298 	struct intel_display *display = to_intel_display(intel_dp);
299 
300 	return DISPLAY_VER(display) >= 12 ? TGL_PSR_MASK :
301 		EDP_PSR_MASK(intel_dp->psr.transcoder);
302 }
303 
psr_ctl_reg(struct intel_display * display,enum transcoder cpu_transcoder)304 static i915_reg_t psr_ctl_reg(struct intel_display *display,
305 			      enum transcoder cpu_transcoder)
306 {
307 	if (DISPLAY_VER(display) >= 8)
308 		return EDP_PSR_CTL(display, cpu_transcoder);
309 	else
310 		return HSW_SRD_CTL;
311 }
312 
psr_debug_reg(struct intel_display * display,enum transcoder cpu_transcoder)313 static i915_reg_t psr_debug_reg(struct intel_display *display,
314 				enum transcoder cpu_transcoder)
315 {
316 	if (DISPLAY_VER(display) >= 8)
317 		return EDP_PSR_DEBUG(display, cpu_transcoder);
318 	else
319 		return HSW_SRD_DEBUG;
320 }
321 
psr_perf_cnt_reg(struct intel_display * display,enum transcoder cpu_transcoder)322 static i915_reg_t psr_perf_cnt_reg(struct intel_display *display,
323 				   enum transcoder cpu_transcoder)
324 {
325 	if (DISPLAY_VER(display) >= 8)
326 		return EDP_PSR_PERF_CNT(display, cpu_transcoder);
327 	else
328 		return HSW_SRD_PERF_CNT;
329 }
330 
psr_status_reg(struct intel_display * display,enum transcoder cpu_transcoder)331 static i915_reg_t psr_status_reg(struct intel_display *display,
332 				 enum transcoder cpu_transcoder)
333 {
334 	if (DISPLAY_VER(display) >= 8)
335 		return EDP_PSR_STATUS(display, cpu_transcoder);
336 	else
337 		return HSW_SRD_STATUS;
338 }
339 
psr_imr_reg(struct intel_display * display,enum transcoder cpu_transcoder)340 static i915_reg_t psr_imr_reg(struct intel_display *display,
341 			      enum transcoder cpu_transcoder)
342 {
343 	if (DISPLAY_VER(display) >= 12)
344 		return TRANS_PSR_IMR(display, cpu_transcoder);
345 	else
346 		return EDP_PSR_IMR;
347 }
348 
psr_iir_reg(struct intel_display * display,enum transcoder cpu_transcoder)349 static i915_reg_t psr_iir_reg(struct intel_display *display,
350 			      enum transcoder cpu_transcoder)
351 {
352 	if (DISPLAY_VER(display) >= 12)
353 		return TRANS_PSR_IIR(display, cpu_transcoder);
354 	else
355 		return EDP_PSR_IIR;
356 }
357 
psr_aux_ctl_reg(struct intel_display * display,enum transcoder cpu_transcoder)358 static i915_reg_t psr_aux_ctl_reg(struct intel_display *display,
359 				  enum transcoder cpu_transcoder)
360 {
361 	if (DISPLAY_VER(display) >= 8)
362 		return EDP_PSR_AUX_CTL(display, cpu_transcoder);
363 	else
364 		return HSW_SRD_AUX_CTL;
365 }
366 
psr_aux_data_reg(struct intel_display * display,enum transcoder cpu_transcoder,int i)367 static i915_reg_t psr_aux_data_reg(struct intel_display *display,
368 				   enum transcoder cpu_transcoder, int i)
369 {
370 	if (DISPLAY_VER(display) >= 8)
371 		return EDP_PSR_AUX_DATA(display, cpu_transcoder, i);
372 	else
373 		return HSW_SRD_AUX_DATA(i);
374 }
375 
psr_irq_control(struct intel_dp * intel_dp)376 static void psr_irq_control(struct intel_dp *intel_dp)
377 {
378 	struct intel_display *display = to_intel_display(intel_dp);
379 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
380 	u32 mask;
381 
382 	if (intel_dp->psr.panel_replay_enabled)
383 		return;
384 
385 	mask = psr_irq_psr_error_bit_get(intel_dp);
386 	if (intel_dp->psr.debug & I915_PSR_DEBUG_IRQ)
387 		mask |= psr_irq_post_exit_bit_get(intel_dp) |
388 			psr_irq_pre_entry_bit_get(intel_dp);
389 
390 	intel_de_rmw(display, psr_imr_reg(display, cpu_transcoder),
391 		     psr_irq_mask_get(intel_dp), ~mask);
392 }
393 
psr_event_print(struct intel_display * display,u32 val,bool sel_update_enabled)394 static void psr_event_print(struct intel_display *display,
395 			    u32 val, bool sel_update_enabled)
396 {
397 	drm_dbg_kms(display->drm, "PSR exit events: 0x%x\n", val);
398 	if (val & PSR_EVENT_PSR2_WD_TIMER_EXPIRE)
399 		drm_dbg_kms(display->drm, "\tPSR2 watchdog timer expired\n");
400 	if ((val & PSR_EVENT_PSR2_DISABLED) && sel_update_enabled)
401 		drm_dbg_kms(display->drm, "\tPSR2 disabled\n");
402 	if (val & PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN)
403 		drm_dbg_kms(display->drm, "\tSU dirty FIFO underrun\n");
404 	if (val & PSR_EVENT_SU_CRC_FIFO_UNDERRUN)
405 		drm_dbg_kms(display->drm, "\tSU CRC FIFO underrun\n");
406 	if (val & PSR_EVENT_GRAPHICS_RESET)
407 		drm_dbg_kms(display->drm, "\tGraphics reset\n");
408 	if (val & PSR_EVENT_PCH_INTERRUPT)
409 		drm_dbg_kms(display->drm, "\tPCH interrupt\n");
410 	if (val & PSR_EVENT_MEMORY_UP)
411 		drm_dbg_kms(display->drm, "\tMemory up\n");
412 	if (val & PSR_EVENT_FRONT_BUFFER_MODIFY)
413 		drm_dbg_kms(display->drm, "\tFront buffer modification\n");
414 	if (val & PSR_EVENT_WD_TIMER_EXPIRE)
415 		drm_dbg_kms(display->drm, "\tPSR watchdog timer expired\n");
416 	if (val & PSR_EVENT_PIPE_REGISTERS_UPDATE)
417 		drm_dbg_kms(display->drm, "\tPIPE registers updated\n");
418 	if (val & PSR_EVENT_REGISTER_UPDATE)
419 		drm_dbg_kms(display->drm, "\tRegister updated\n");
420 	if (val & PSR_EVENT_HDCP_ENABLE)
421 		drm_dbg_kms(display->drm, "\tHDCP enabled\n");
422 	if (val & PSR_EVENT_KVMR_SESSION_ENABLE)
423 		drm_dbg_kms(display->drm, "\tKVMR session enabled\n");
424 	if (val & PSR_EVENT_VBI_ENABLE)
425 		drm_dbg_kms(display->drm, "\tVBI enabled\n");
426 	if (val & PSR_EVENT_LPSP_MODE_EXIT)
427 		drm_dbg_kms(display->drm, "\tLPSP mode exited\n");
428 	if ((val & PSR_EVENT_PSR_DISABLE) && !sel_update_enabled)
429 		drm_dbg_kms(display->drm, "\tPSR disabled\n");
430 }
431 
intel_psr_irq_handler(struct intel_dp * intel_dp,u32 psr_iir)432 void intel_psr_irq_handler(struct intel_dp *intel_dp, u32 psr_iir)
433 {
434 	struct intel_display *display = to_intel_display(intel_dp);
435 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
436 	ktime_t time_ns =  ktime_get();
437 
438 	if (psr_iir & psr_irq_pre_entry_bit_get(intel_dp)) {
439 		intel_dp->psr.last_entry_attempt = time_ns;
440 		drm_dbg_kms(display->drm,
441 			    "[transcoder %s] PSR entry attempt in 2 vblanks\n",
442 			    transcoder_name(cpu_transcoder));
443 	}
444 
445 	if (psr_iir & psr_irq_post_exit_bit_get(intel_dp)) {
446 		intel_dp->psr.last_exit = time_ns;
447 		drm_dbg_kms(display->drm,
448 			    "[transcoder %s] PSR exit completed\n",
449 			    transcoder_name(cpu_transcoder));
450 
451 		if (DISPLAY_VER(display) >= 9) {
452 			u32 val;
453 
454 			val = intel_de_rmw(display,
455 					   PSR_EVENT(display, cpu_transcoder),
456 					   0, 0);
457 
458 			psr_event_print(display, val, intel_dp->psr.sel_update_enabled);
459 		}
460 	}
461 
462 	if (psr_iir & psr_irq_psr_error_bit_get(intel_dp)) {
463 		drm_warn(display->drm, "[transcoder %s] PSR aux error\n",
464 			 transcoder_name(cpu_transcoder));
465 
466 		intel_dp->psr.irq_aux_error = true;
467 
468 		/*
469 		 * If this interruption is not masked it will keep
470 		 * interrupting so fast that it prevents the scheduled
471 		 * work to run.
472 		 * Also after a PSR error, we don't want to arm PSR
473 		 * again so we don't care about unmask the interruption
474 		 * or unset irq_aux_error.
475 		 */
476 		intel_de_rmw(display, psr_imr_reg(display, cpu_transcoder),
477 			     0, psr_irq_psr_error_bit_get(intel_dp));
478 
479 		queue_work(display->wq.unordered, &intel_dp->psr.work);
480 	}
481 }
482 
intel_dp_get_sink_sync_latency(struct intel_dp * intel_dp)483 static u8 intel_dp_get_sink_sync_latency(struct intel_dp *intel_dp)
484 {
485 	struct intel_display *display = to_intel_display(intel_dp);
486 	u8 val = 8; /* assume the worst if we can't read the value */
487 
488 	if (drm_dp_dpcd_readb(&intel_dp->aux,
489 			      DP_SYNCHRONIZATION_LATENCY_IN_SINK, &val) == 1)
490 		val &= DP_MAX_RESYNC_FRAME_COUNT_MASK;
491 	else
492 		drm_dbg_kms(display->drm,
493 			    "Unable to get sink synchronization latency, assuming 8 frames\n");
494 	return val;
495 }
496 
_psr_compute_su_granularity(struct intel_dp * intel_dp,struct intel_connector * connector)497 static void _psr_compute_su_granularity(struct intel_dp *intel_dp,
498 					struct intel_connector *connector)
499 {
500 	struct intel_display *display = to_intel_display(intel_dp);
501 	ssize_t r;
502 	__le16 w;
503 	u8 y;
504 
505 	/*
506 	 * If sink don't have specific granularity requirements set legacy
507 	 * ones.
508 	 */
509 	if (!(connector->dp.psr_caps.dpcd[1] & DP_PSR2_SU_GRANULARITY_REQUIRED)) {
510 		/* As PSR2 HW sends full lines, we do not care about x granularity */
511 		w = cpu_to_le16(4);
512 		y = 4;
513 		goto exit;
514 	}
515 
516 	r = drm_dp_dpcd_read(&intel_dp->aux, DP_PSR2_SU_X_GRANULARITY, &w, sizeof(w));
517 	if (r != sizeof(w))
518 		drm_dbg_kms(display->drm,
519 			    "Unable to read selective update x granularity\n");
520 	/*
521 	 * Spec says that if the value read is 0 the default granularity should
522 	 * be used instead.
523 	 */
524 	if (r != sizeof(w) || w == 0)
525 		w = cpu_to_le16(4);
526 
527 	r = drm_dp_dpcd_read(&intel_dp->aux, DP_PSR2_SU_Y_GRANULARITY, &y, 1);
528 	if (r != 1) {
529 		drm_dbg_kms(display->drm,
530 			    "Unable to read selective update y granularity\n");
531 		y = 4;
532 	}
533 	if (y == 0)
534 		y = 1;
535 
536 exit:
537 	connector->dp.psr_caps.su_w_granularity = le16_to_cpu(w);
538 	connector->dp.psr_caps.su_y_granularity = y;
539 }
540 
541 static enum intel_panel_replay_dsc_support
compute_pr_dsc_support(struct intel_connector * connector)542 compute_pr_dsc_support(struct intel_connector *connector)
543 {
544 	u8 pr_dsc_mode;
545 	u8 val;
546 
547 	val = connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_CAPABILITY)];
548 	pr_dsc_mode = REG_FIELD_GET8(DP_PANEL_REPLAY_DSC_DECODE_CAPABILITY_IN_PR_MASK, val);
549 
550 	switch (pr_dsc_mode) {
551 	case DP_DSC_DECODE_CAPABILITY_IN_PR_FULL_FRAME_ONLY:
552 		return INTEL_DP_PANEL_REPLAY_DSC_FULL_FRAME_ONLY;
553 	case DP_DSC_DECODE_CAPABILITY_IN_PR_SUPPORTED:
554 		return INTEL_DP_PANEL_REPLAY_DSC_SELECTIVE_UPDATE;
555 	default:
556 		MISSING_CASE(pr_dsc_mode);
557 		fallthrough;
558 	case DP_DSC_DECODE_CAPABILITY_IN_PR_NOT_SUPPORTED:
559 	case DP_DSC_DECODE_CAPABILITY_IN_PR_RESERVED:
560 		return INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED;
561 	}
562 }
563 
panel_replay_dsc_support_str(enum intel_panel_replay_dsc_support dsc_support)564 static const char *panel_replay_dsc_support_str(enum intel_panel_replay_dsc_support dsc_support)
565 {
566 	switch (dsc_support) {
567 	case INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED:
568 		return "not supported";
569 	case INTEL_DP_PANEL_REPLAY_DSC_FULL_FRAME_ONLY:
570 		return "full frame only";
571 	case INTEL_DP_PANEL_REPLAY_DSC_SELECTIVE_UPDATE:
572 		return "selective update";
573 	default:
574 		MISSING_CASE(dsc_support);
575 		return "n/a";
576 	};
577 }
578 
_panel_replay_compute_su_granularity(struct intel_connector * connector)579 static void _panel_replay_compute_su_granularity(struct intel_connector *connector)
580 {
581 	u16 w;
582 	u8 y;
583 
584 	if (!(connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_CAPABILITY)] &
585 	       DP_PANEL_REPLAY_SU_GRANULARITY_REQUIRED)) {
586 		w = 4;
587 		y = 4;
588 		goto exit;
589 	}
590 
591 	/*
592 	 * Spec says that if the value read is 0 the default granularity should
593 	 * be used instead.
594 	 */
595 	w = le16_to_cpu(*(__le16 *)&connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_X_GRANULARITY)]) ? : 4;
596 	y = connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_Y_GRANULARITY)] ? : 1;
597 
598 exit:
599 	connector->dp.panel_replay_caps.su_w_granularity = w;
600 	connector->dp.panel_replay_caps.su_y_granularity = y;
601 }
602 
_panel_replay_init_dpcd(struct intel_dp * intel_dp,struct intel_connector * connector)603 static void _panel_replay_init_dpcd(struct intel_dp *intel_dp, struct intel_connector *connector)
604 {
605 	struct intel_display *display = to_intel_display(intel_dp);
606 	int ret;
607 
608 	/* TODO: Enable Panel Replay on MST once it's properly implemented. */
609 	if (intel_dp->mst_detect == DRM_DP_MST)
610 		return;
611 
612 	ret = drm_dp_dpcd_read_data(&intel_dp->aux, DP_PANEL_REPLAY_CAP_SUPPORT,
613 				    &connector->dp.panel_replay_caps.dpcd,
614 				    sizeof(connector->dp.panel_replay_caps.dpcd));
615 	if (ret < 0)
616 		return;
617 
618 	if (!(connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
619 	      DP_PANEL_REPLAY_SUPPORT))
620 		return;
621 
622 	if (intel_dp_is_edp(intel_dp)) {
623 		if (!intel_alpm_aux_less_wake_supported(intel_dp)) {
624 			drm_dbg_kms(display->drm,
625 				    "Panel doesn't support AUX-less ALPM, eDP Panel Replay not possible\n");
626 			return;
627 		}
628 
629 		if (!(connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
630 		      DP_PANEL_REPLAY_EARLY_TRANSPORT_SUPPORT)) {
631 			drm_dbg_kms(display->drm,
632 				    "Panel doesn't support early transport, eDP Panel Replay not possible\n");
633 			return;
634 		}
635 	}
636 
637 	connector->dp.panel_replay_caps.support = true;
638 	intel_dp->psr.sink_panel_replay_support = true;
639 
640 	if (connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
641 	    DP_PANEL_REPLAY_SU_SUPPORT) {
642 		connector->dp.panel_replay_caps.su_support = true;
643 
644 		_panel_replay_compute_su_granularity(connector);
645 	}
646 
647 	connector->dp.panel_replay_caps.dsc_support = compute_pr_dsc_support(connector);
648 
649 	drm_dbg_kms(display->drm,
650 		    "Panel replay %sis supported by panel (in DSC mode: %s)\n",
651 		    connector->dp.panel_replay_caps.su_support ?
652 		    "selective_update " : "",
653 		    panel_replay_dsc_support_str(connector->dp.panel_replay_caps.dsc_support));
654 }
655 
_psr_init_dpcd(struct intel_dp * intel_dp,struct intel_connector * connector)656 static void _psr_init_dpcd(struct intel_dp *intel_dp, struct intel_connector *connector)
657 {
658 	struct intel_display *display = to_intel_display(intel_dp);
659 	int ret;
660 
661 	ret = drm_dp_dpcd_read_data(&intel_dp->aux, DP_PSR_SUPPORT, connector->dp.psr_caps.dpcd,
662 				    sizeof(connector->dp.psr_caps.dpcd));
663 	if (ret < 0)
664 		return;
665 
666 	if (!connector->dp.psr_caps.dpcd[0])
667 		return;
668 
669 	drm_dbg_kms(display->drm, "eDP panel supports PSR version %x\n",
670 		    connector->dp.psr_caps.dpcd[0]);
671 
672 	if (drm_dp_has_quirk(&intel_dp->desc, DP_DPCD_QUIRK_NO_PSR)) {
673 		drm_dbg_kms(display->drm,
674 			    "PSR support not currently available for this panel\n");
675 		return;
676 	}
677 
678 	if (!(intel_dp->edp_dpcd[1] & DP_EDP_SET_POWER_CAP)) {
679 		drm_dbg_kms(display->drm,
680 			    "Panel lacks power state control, PSR cannot be enabled\n");
681 		return;
682 	}
683 
684 	connector->dp.psr_caps.support = true;
685 	intel_dp->psr.sink_support = true;
686 
687 	connector->dp.psr_caps.sync_latency = intel_dp_get_sink_sync_latency(intel_dp);
688 
689 	if (DISPLAY_VER(display) >= 9 &&
690 	    connector->dp.psr_caps.dpcd[0] >= DP_PSR2_WITH_Y_COORD_IS_SUPPORTED) {
691 		bool y_req = connector->dp.psr_caps.dpcd[1] &
692 			     DP_PSR2_SU_Y_COORDINATE_REQUIRED;
693 
694 		/*
695 		 * All panels that supports PSR version 03h (PSR2 +
696 		 * Y-coordinate) can handle Y-coordinates in VSC but we are
697 		 * only sure that it is going to be used when required by the
698 		 * panel. This way panel is capable to do selective update
699 		 * without a aux frame sync.
700 		 *
701 		 * To support PSR version 02h and PSR version 03h without
702 		 * Y-coordinate requirement panels we would need to enable
703 		 * GTC first.
704 		 */
705 		connector->dp.psr_caps.su_support = y_req &&
706 			intel_alpm_aux_wake_supported(intel_dp);
707 		drm_dbg_kms(display->drm, "PSR2 %ssupported\n",
708 			    connector->dp.psr_caps.su_support ? "" : "not ");
709 	}
710 
711 	if (connector->dp.psr_caps.su_support)
712 		_psr_compute_su_granularity(intel_dp, connector);
713 }
714 
intel_psr_init_dpcd(struct intel_dp * intel_dp,struct intel_connector * connector)715 void intel_psr_init_dpcd(struct intel_dp *intel_dp, struct intel_connector *connector)
716 {
717 	_psr_init_dpcd(intel_dp, connector);
718 
719 	_panel_replay_init_dpcd(intel_dp, connector);
720 }
721 
hsw_psr_setup_aux(struct intel_dp * intel_dp)722 static void hsw_psr_setup_aux(struct intel_dp *intel_dp)
723 {
724 	struct intel_display *display = to_intel_display(intel_dp);
725 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
726 	u32 aux_clock_divider, aux_ctl;
727 	/* write DP_SET_POWER=D0 */
728 	static const u8 aux_msg[] = {
729 		[0] = (DP_AUX_NATIVE_WRITE << 4) | ((DP_SET_POWER >> 16) & 0xf),
730 		[1] = (DP_SET_POWER >> 8) & 0xff,
731 		[2] = DP_SET_POWER & 0xff,
732 		[3] = 1 - 1,
733 		[4] = DP_SET_POWER_D0,
734 	};
735 	int i;
736 
737 	BUILD_BUG_ON(sizeof(aux_msg) > 20);
738 	for (i = 0; i < sizeof(aux_msg); i += 4)
739 		intel_de_write(display,
740 			       psr_aux_data_reg(display, cpu_transcoder, i >> 2),
741 			       intel_dp_aux_pack(&aux_msg[i], sizeof(aux_msg) - i));
742 
743 	aux_clock_divider = intel_dp->get_aux_clock_divider(intel_dp, 0);
744 
745 	/* Start with bits set for DDI_AUX_CTL register */
746 	aux_ctl = intel_dp->get_aux_send_ctl(intel_dp, sizeof(aux_msg),
747 					     aux_clock_divider);
748 
749 	/* Select only valid bits for SRD_AUX_CTL */
750 	aux_ctl &= EDP_PSR_AUX_CTL_TIME_OUT_MASK |
751 		EDP_PSR_AUX_CTL_MESSAGE_SIZE_MASK |
752 		EDP_PSR_AUX_CTL_PRECHARGE_2US_MASK |
753 		EDP_PSR_AUX_CTL_BIT_CLOCK_2X_MASK;
754 
755 	intel_de_write(display, psr_aux_ctl_reg(display, cpu_transcoder),
756 		       aux_ctl);
757 }
758 
psr2_su_region_et_valid(struct intel_connector * connector,bool panel_replay)759 static bool psr2_su_region_et_valid(struct intel_connector *connector, bool panel_replay)
760 {
761 	struct intel_dp *intel_dp = intel_attached_dp(connector);
762 	struct intel_display *display = to_intel_display(intel_dp);
763 
764 	if (DISPLAY_VER(display) < 20 || !intel_dp_is_edp(intel_dp) ||
765 	    intel_dp->psr.debug & I915_PSR_DEBUG_SU_REGION_ET_DISABLE)
766 		return false;
767 
768 	return panel_replay ?
769 		connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
770 		DP_PANEL_REPLAY_EARLY_TRANSPORT_SUPPORT :
771 		connector->dp.psr_caps.dpcd[0] == DP_PSR2_WITH_Y_COORD_ET_SUPPORTED;
772 }
773 
_panel_replay_enable_sink(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state)774 static void _panel_replay_enable_sink(struct intel_dp *intel_dp,
775 				      const struct intel_crtc_state *crtc_state)
776 {
777 	u8 val = DP_PANEL_REPLAY_ENABLE |
778 		DP_PANEL_REPLAY_VSC_SDP_CRC_EN |
779 		DP_PANEL_REPLAY_UNRECOVERABLE_ERROR_EN |
780 		DP_PANEL_REPLAY_RFB_STORAGE_ERROR_EN |
781 		DP_PANEL_REPLAY_ACTIVE_FRAME_CRC_ERROR_EN;
782 	u8 panel_replay_config2 = DP_PANEL_REPLAY_CRC_VERIFICATION;
783 
784 	if (crtc_state->has_sel_update)
785 		val |= DP_PANEL_REPLAY_SU_ENABLE;
786 
787 	if (crtc_state->enable_psr2_su_region_et)
788 		val |= DP_PANEL_REPLAY_ENABLE_SU_REGION_ET;
789 
790 	if (crtc_state->req_psr2_sdp_prior_scanline)
791 		panel_replay_config2 |=
792 			DP_PANEL_REPLAY_SU_REGION_SCANLINE_CAPTURE;
793 
794 	drm_dp_dpcd_writeb(&intel_dp->aux, PANEL_REPLAY_CONFIG, val);
795 
796 	drm_dp_dpcd_writeb(&intel_dp->aux, PANEL_REPLAY_CONFIG2,
797 			   panel_replay_config2);
798 }
799 
_psr_enable_sink(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state)800 static void _psr_enable_sink(struct intel_dp *intel_dp,
801 			     const struct intel_crtc_state *crtc_state)
802 {
803 	struct intel_display *display = to_intel_display(intel_dp);
804 	u8 val = 0;
805 
806 	if (crtc_state->has_sel_update) {
807 		val |= DP_PSR_ENABLE_PSR2 | DP_PSR_IRQ_HPD_WITH_CRC_ERRORS;
808 	} else {
809 		if (intel_dp->psr.link_standby)
810 			val |= DP_PSR_MAIN_LINK_ACTIVE;
811 
812 		if (DISPLAY_VER(display) >= 8)
813 			val |= DP_PSR_CRC_VERIFICATION;
814 	}
815 
816 	if (crtc_state->req_psr2_sdp_prior_scanline)
817 		val |= DP_PSR_SU_REGION_SCANLINE_CAPTURE;
818 
819 	if (crtc_state->enable_psr2_su_region_et)
820 		val |= DP_PANEL_REPLAY_ENABLE_SU_REGION_ET;
821 
822 	if (intel_dp->psr.entry_setup_frames > 0)
823 		val |= DP_PSR_FRAME_CAPTURE;
824 	drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, val);
825 
826 	val |= DP_PSR_ENABLE;
827 	drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, val);
828 }
829 
intel_psr_enable_sink(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state)830 static void intel_psr_enable_sink(struct intel_dp *intel_dp,
831 				  const struct intel_crtc_state *crtc_state)
832 {
833 	intel_alpm_enable_sink(intel_dp, crtc_state);
834 
835 	crtc_state->has_panel_replay ?
836 		_panel_replay_enable_sink(intel_dp, crtc_state) :
837 		_psr_enable_sink(intel_dp, crtc_state);
838 
839 	if (intel_dp_is_edp(intel_dp))
840 		drm_dp_dpcd_writeb(&intel_dp->aux, DP_SET_POWER, DP_SET_POWER_D0);
841 }
842 
intel_psr_panel_replay_enable_sink(struct intel_dp * intel_dp)843 void intel_psr_panel_replay_enable_sink(struct intel_dp *intel_dp)
844 {
845 	/*
846 	 * NOTE: We might want to trigger mode set when
847 	 * disabling/enabling Panel Replay via debugfs interface to
848 	 * ensure this bit is cleared/set accordingly.
849 	 */
850 	if (CAN_PANEL_REPLAY(intel_dp) && panel_replay_global_enabled(intel_dp))
851 		drm_dp_dpcd_writeb(&intel_dp->aux, PANEL_REPLAY_CONFIG,
852 				   DP_PANEL_REPLAY_ENABLE);
853 }
854 
intel_psr1_get_tp_time(struct intel_dp * intel_dp)855 static u32 intel_psr1_get_tp_time(struct intel_dp *intel_dp)
856 {
857 	struct intel_display *display = to_intel_display(intel_dp);
858 	struct intel_connector *connector = intel_dp->attached_connector;
859 	u32 val = 0;
860 
861 	if (DISPLAY_VER(display) >= 11)
862 		val |= EDP_PSR_TP4_TIME_0us;
863 
864 	if (display->params.psr_safest_params) {
865 		val |= EDP_PSR_TP1_TIME_2500us;
866 		val |= EDP_PSR_TP2_TP3_TIME_2500us;
867 		goto check_tp3_sel;
868 	}
869 
870 	if (connector->panel.vbt.psr.tp1_wakeup_time_us == 0)
871 		val |= EDP_PSR_TP1_TIME_0us;
872 	else if (connector->panel.vbt.psr.tp1_wakeup_time_us <= 100)
873 		val |= EDP_PSR_TP1_TIME_100us;
874 	else if (connector->panel.vbt.psr.tp1_wakeup_time_us <= 500)
875 		val |= EDP_PSR_TP1_TIME_500us;
876 	else
877 		val |= EDP_PSR_TP1_TIME_2500us;
878 
879 	if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us == 0)
880 		val |= EDP_PSR_TP2_TP3_TIME_0us;
881 	else if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us <= 100)
882 		val |= EDP_PSR_TP2_TP3_TIME_100us;
883 	else if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us <= 500)
884 		val |= EDP_PSR_TP2_TP3_TIME_500us;
885 	else
886 		val |= EDP_PSR_TP2_TP3_TIME_2500us;
887 
888 	/*
889 	 * WA 0479: hsw,bdw
890 	 * "Do not skip both TP1 and TP2/TP3"
891 	 */
892 	if (DISPLAY_VER(display) < 9 &&
893 	    connector->panel.vbt.psr.tp1_wakeup_time_us == 0 &&
894 	    connector->panel.vbt.psr.tp2_tp3_wakeup_time_us == 0)
895 		val |= EDP_PSR_TP2_TP3_TIME_100us;
896 
897 check_tp3_sel:
898 	if (intel_dp_source_supports_tps3(display) &&
899 	    drm_dp_tps3_supported(intel_dp->dpcd))
900 		val |= EDP_PSR_TP_TP1_TP3;
901 	else
902 		val |= EDP_PSR_TP_TP1_TP2;
903 
904 	return val;
905 }
906 
psr_compute_idle_frames(struct intel_dp * intel_dp)907 static u8 psr_compute_idle_frames(struct intel_dp *intel_dp)
908 {
909 	struct intel_display *display = to_intel_display(intel_dp);
910 	struct intel_connector *connector = intel_dp->attached_connector;
911 	int idle_frames;
912 
913 	/* Let's use 6 as the minimum to cover all known cases including the
914 	 * off-by-one issue that HW has in some cases.
915 	 */
916 	idle_frames = max(6, connector->panel.vbt.psr.idle_frames);
917 	idle_frames = max(idle_frames, connector->dp.psr_caps.sync_latency + 1);
918 
919 	if (drm_WARN_ON(display->drm, idle_frames > 0xf))
920 		idle_frames = 0xf;
921 
922 	return idle_frames;
923 }
924 
is_dc5_dc6_blocked(struct intel_dp * intel_dp)925 static bool is_dc5_dc6_blocked(struct intel_dp *intel_dp)
926 {
927 	struct intel_display *display = to_intel_display(intel_dp);
928 	u32 current_dc_state = intel_display_power_get_current_dc_state(display);
929 	struct intel_crtc *crtc = intel_crtc_for_pipe(display, intel_dp->psr.pipe);
930 	struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base);
931 
932 	return (current_dc_state != DC_STATE_EN_UPTO_DC5 &&
933 		current_dc_state != DC_STATE_EN_UPTO_DC6) ||
934 		intel_dp->psr.active_non_psr_pipes ||
935 		READ_ONCE(vblank->enabled);
936 }
937 
hsw_activate_psr1(struct intel_dp * intel_dp)938 static void hsw_activate_psr1(struct intel_dp *intel_dp)
939 {
940 	struct intel_display *display = to_intel_display(intel_dp);
941 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
942 	u32 max_sleep_time = 0x1f;
943 	u32 val = EDP_PSR_ENABLE;
944 
945 	val |= EDP_PSR_IDLE_FRAMES(psr_compute_idle_frames(intel_dp));
946 
947 	if (DISPLAY_VER(display) < 20)
948 		val |= EDP_PSR_MAX_SLEEP_TIME(max_sleep_time);
949 
950 	if (display->platform.haswell)
951 		val |= EDP_PSR_MIN_LINK_ENTRY_TIME_8_LINES;
952 
953 	if (intel_dp->psr.link_standby)
954 		val |= EDP_PSR_LINK_STANDBY;
955 
956 	val |= intel_psr1_get_tp_time(intel_dp);
957 
958 	if (DISPLAY_VER(display) >= 8)
959 		val |= EDP_PSR_CRC_ENABLE;
960 
961 	if (DISPLAY_VER(display) >= 20)
962 		val |= LNL_EDP_PSR_ENTRY_SETUP_FRAMES(intel_dp->psr.entry_setup_frames);
963 
964 	intel_de_rmw(display, psr_ctl_reg(display, cpu_transcoder),
965 		     ~EDP_PSR_RESTORE_PSR_ACTIVE_CTX_MASK, val);
966 
967 	/* Wa_16025596647 */
968 	if ((DISPLAY_VER(display) == 20 ||
969 	     IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0)) &&
970 	    is_dc5_dc6_blocked(intel_dp) && intel_dp->psr.pkg_c_latency_used)
971 		intel_dmc_start_pkgc_exit_at_start_of_undelayed_vblank(display,
972 								       intel_dp->psr.pipe,
973 								       true);
974 }
975 
intel_psr2_get_tp_time(struct intel_dp * intel_dp)976 static u32 intel_psr2_get_tp_time(struct intel_dp *intel_dp)
977 {
978 	struct intel_display *display = to_intel_display(intel_dp);
979 	struct intel_connector *connector = intel_dp->attached_connector;
980 	u32 val = 0;
981 
982 	if (display->params.psr_safest_params)
983 		return EDP_PSR2_TP2_TIME_2500us;
984 
985 	if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us >= 0 &&
986 	    connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <= 50)
987 		val |= EDP_PSR2_TP2_TIME_50us;
988 	else if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <= 100)
989 		val |= EDP_PSR2_TP2_TIME_100us;
990 	else if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <= 500)
991 		val |= EDP_PSR2_TP2_TIME_500us;
992 	else
993 		val |= EDP_PSR2_TP2_TIME_2500us;
994 
995 	return val;
996 }
997 
998 static int
psr2_block_count_lines(u8 io_wake_lines,u8 fast_wake_lines)999 psr2_block_count_lines(u8 io_wake_lines, u8 fast_wake_lines)
1000 {
1001 	return io_wake_lines < 9 && fast_wake_lines < 9 ? 8 : 12;
1002 }
1003 
psr2_block_count(struct intel_dp * intel_dp)1004 static int psr2_block_count(struct intel_dp *intel_dp)
1005 {
1006 	return psr2_block_count_lines(intel_dp->psr.io_wake_lines,
1007 				      intel_dp->psr.fast_wake_lines) / 4;
1008 }
1009 
frames_before_su_entry(struct intel_dp * intel_dp)1010 static u8 frames_before_su_entry(struct intel_dp *intel_dp)
1011 {
1012 	struct intel_connector *connector = intel_dp->attached_connector;
1013 	u8 frames_before_su_entry;
1014 
1015 	frames_before_su_entry = max_t(u8,
1016 				       connector->dp.psr_caps.sync_latency + 1,
1017 				       2);
1018 
1019 	/* Entry setup frames must be at least 1 less than frames before SU entry */
1020 	if (intel_dp->psr.entry_setup_frames >= frames_before_su_entry)
1021 		frames_before_su_entry = intel_dp->psr.entry_setup_frames + 1;
1022 
1023 	return frames_before_su_entry;
1024 }
1025 
dg2_activate_panel_replay(struct intel_dp * intel_dp)1026 static void dg2_activate_panel_replay(struct intel_dp *intel_dp)
1027 {
1028 	struct intel_display *display = to_intel_display(intel_dp);
1029 	struct intel_psr *psr = &intel_dp->psr;
1030 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1031 
1032 	if (intel_dp_is_edp(intel_dp) && psr->sel_update_enabled) {
1033 		u32 val = psr->su_region_et_enabled ?
1034 			LNL_EDP_PSR2_SU_REGION_ET_ENABLE : 0;
1035 
1036 		if (intel_dp->psr.req_psr2_sdp_prior_scanline)
1037 			val |= EDP_PSR2_SU_SDP_SCANLINE;
1038 
1039 		intel_de_write(display, EDP_PSR2_CTL(display, cpu_transcoder),
1040 			       val);
1041 	}
1042 
1043 	intel_de_rmw(display,
1044 		     PSR2_MAN_TRK_CTL(display, intel_dp->psr.transcoder),
1045 		     0, ADLP_PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME);
1046 
1047 	intel_de_rmw(display, TRANS_DP2_CTL(intel_dp->psr.transcoder), 0,
1048 		     TRANS_DP2_PANEL_REPLAY_ENABLE);
1049 }
1050 
hsw_activate_psr2(struct intel_dp * intel_dp)1051 static void hsw_activate_psr2(struct intel_dp *intel_dp)
1052 {
1053 	struct intel_display *display = to_intel_display(intel_dp);
1054 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1055 	u32 val = EDP_PSR2_ENABLE;
1056 	u32 psr_val = 0;
1057 	u8 idle_frames;
1058 
1059 	/* Wa_16025596647 */
1060 	if ((DISPLAY_VER(display) == 20 ||
1061 	     IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0)) &&
1062 	    is_dc5_dc6_blocked(intel_dp) && intel_dp->psr.pkg_c_latency_used)
1063 		idle_frames = 0;
1064 	else
1065 		idle_frames = psr_compute_idle_frames(intel_dp);
1066 	val |= EDP_PSR2_IDLE_FRAMES(idle_frames);
1067 
1068 	if (DISPLAY_VER(display) < 14 && !display->platform.alderlake_p)
1069 		val |= EDP_SU_TRACK_ENABLE;
1070 
1071 	if (DISPLAY_VER(display) >= 10 && DISPLAY_VER(display) < 13)
1072 		val |= EDP_Y_COORDINATE_ENABLE;
1073 
1074 	val |= EDP_PSR2_FRAME_BEFORE_SU(frames_before_su_entry(intel_dp));
1075 
1076 	val |= intel_psr2_get_tp_time(intel_dp);
1077 
1078 	if (DISPLAY_VER(display) >= 12 && DISPLAY_VER(display) < 20) {
1079 		if (psr2_block_count(intel_dp) > 2)
1080 			val |= TGL_EDP_PSR2_BLOCK_COUNT_NUM_3;
1081 		else
1082 			val |= TGL_EDP_PSR2_BLOCK_COUNT_NUM_2;
1083 	}
1084 
1085 	/* Wa_22012278275:adl-p */
1086 	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_E0)) {
1087 		static const u8 map[] = {
1088 			2, /* 5 lines */
1089 			1, /* 6 lines */
1090 			0, /* 7 lines */
1091 			3, /* 8 lines */
1092 			6, /* 9 lines */
1093 			5, /* 10 lines */
1094 			4, /* 11 lines */
1095 			7, /* 12 lines */
1096 		};
1097 		/*
1098 		 * Still using the default IO_BUFFER_WAKE and FAST_WAKE, see
1099 		 * comments below for more information
1100 		 */
1101 		int tmp;
1102 
1103 		tmp = map[intel_dp->psr.io_wake_lines -
1104 			  TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES];
1105 		val |= TGL_EDP_PSR2_IO_BUFFER_WAKE(tmp + TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES);
1106 
1107 		tmp = map[intel_dp->psr.fast_wake_lines - TGL_EDP_PSR2_FAST_WAKE_MIN_LINES];
1108 		val |= TGL_EDP_PSR2_FAST_WAKE(tmp + TGL_EDP_PSR2_FAST_WAKE_MIN_LINES);
1109 	} else if (DISPLAY_VER(display) >= 20) {
1110 		val |= LNL_EDP_PSR2_IO_BUFFER_WAKE(intel_dp->psr.io_wake_lines);
1111 	} else if (DISPLAY_VER(display) >= 12) {
1112 		val |= TGL_EDP_PSR2_IO_BUFFER_WAKE(intel_dp->psr.io_wake_lines);
1113 		val |= TGL_EDP_PSR2_FAST_WAKE(intel_dp->psr.fast_wake_lines);
1114 	} else if (DISPLAY_VER(display) >= 9) {
1115 		val |= EDP_PSR2_IO_BUFFER_WAKE(intel_dp->psr.io_wake_lines);
1116 		val |= EDP_PSR2_FAST_WAKE(intel_dp->psr.fast_wake_lines);
1117 	}
1118 
1119 	if (intel_dp->psr.req_psr2_sdp_prior_scanline)
1120 		val |= EDP_PSR2_SU_SDP_SCANLINE;
1121 
1122 	if (DISPLAY_VER(display) >= 20)
1123 		psr_val |= LNL_EDP_PSR_ENTRY_SETUP_FRAMES(intel_dp->psr.entry_setup_frames);
1124 
1125 	if (intel_dp->psr.psr2_sel_fetch_enabled) {
1126 		u32 tmp;
1127 
1128 		tmp = intel_de_read(display,
1129 				    PSR2_MAN_TRK_CTL(display, cpu_transcoder));
1130 		drm_WARN_ON(display->drm, !(tmp & PSR2_MAN_TRK_CTL_ENABLE));
1131 	} else if (HAS_PSR2_SEL_FETCH(display)) {
1132 		intel_de_write(display,
1133 			       PSR2_MAN_TRK_CTL(display, cpu_transcoder), 0);
1134 	}
1135 
1136 	if (intel_dp->psr.su_region_et_enabled)
1137 		val |= LNL_EDP_PSR2_SU_REGION_ET_ENABLE;
1138 
1139 	/*
1140 	 * PSR2 HW is incorrectly using EDP_PSR_TP1_TP3_SEL and BSpec is
1141 	 * recommending keep this bit unset while PSR2 is enabled.
1142 	 */
1143 	intel_de_write(display, psr_ctl_reg(display, cpu_transcoder), psr_val);
1144 
1145 	intel_de_write(display, EDP_PSR2_CTL(display, cpu_transcoder), val);
1146 }
1147 
1148 static bool
transcoder_has_psr2(struct intel_display * display,enum transcoder cpu_transcoder)1149 transcoder_has_psr2(struct intel_display *display, enum transcoder cpu_transcoder)
1150 {
1151 	if (display->platform.alderlake_p || DISPLAY_VER(display) >= 14)
1152 		return cpu_transcoder == TRANSCODER_A || cpu_transcoder == TRANSCODER_B;
1153 	else if (DISPLAY_VER(display) >= 12)
1154 		return cpu_transcoder == TRANSCODER_A;
1155 	else if (DISPLAY_VER(display) >= 9)
1156 		return cpu_transcoder == TRANSCODER_EDP;
1157 	else
1158 		return false;
1159 }
1160 
intel_get_frame_time_us(const struct intel_crtc_state * crtc_state)1161 static u32 intel_get_frame_time_us(const struct intel_crtc_state *crtc_state)
1162 {
1163 	if (!crtc_state->hw.active)
1164 		return 0;
1165 
1166 	return DIV_ROUND_UP(1000 * 1000,
1167 			    drm_mode_vrefresh(&crtc_state->hw.adjusted_mode));
1168 }
1169 
psr2_program_idle_frames(struct intel_dp * intel_dp,u32 idle_frames)1170 static void psr2_program_idle_frames(struct intel_dp *intel_dp,
1171 				     u32 idle_frames)
1172 {
1173 	struct intel_display *display = to_intel_display(intel_dp);
1174 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1175 
1176 	intel_de_rmw(display, EDP_PSR2_CTL(display, cpu_transcoder),
1177 		     EDP_PSR2_IDLE_FRAMES_MASK,
1178 		     EDP_PSR2_IDLE_FRAMES(idle_frames));
1179 }
1180 
tgl_psr2_enable_dc3co(struct intel_dp * intel_dp)1181 static void tgl_psr2_enable_dc3co(struct intel_dp *intel_dp)
1182 {
1183 	struct intel_display *display = to_intel_display(intel_dp);
1184 
1185 	psr2_program_idle_frames(intel_dp, 0);
1186 	intel_display_power_set_target_dc_state(display, DC_STATE_EN_DC3CO);
1187 }
1188 
tgl_psr2_disable_dc3co(struct intel_dp * intel_dp)1189 static void tgl_psr2_disable_dc3co(struct intel_dp *intel_dp)
1190 {
1191 	struct intel_display *display = to_intel_display(intel_dp);
1192 
1193 	intel_display_power_set_target_dc_state(display, DC_STATE_EN_UPTO_DC6);
1194 	psr2_program_idle_frames(intel_dp, psr_compute_idle_frames(intel_dp));
1195 }
1196 
tgl_dc3co_disable_work(struct work_struct * work)1197 static void tgl_dc3co_disable_work(struct work_struct *work)
1198 {
1199 	struct intel_dp *intel_dp =
1200 		container_of(work, typeof(*intel_dp), psr.dc3co_work.work);
1201 
1202 	mutex_lock(&intel_dp->psr.lock);
1203 	/* If delayed work is pending, it is not idle */
1204 	if (delayed_work_pending(&intel_dp->psr.dc3co_work))
1205 		goto unlock;
1206 
1207 	tgl_psr2_disable_dc3co(intel_dp);
1208 unlock:
1209 	mutex_unlock(&intel_dp->psr.lock);
1210 }
1211 
tgl_disallow_dc3co_on_psr2_exit(struct intel_dp * intel_dp)1212 static void tgl_disallow_dc3co_on_psr2_exit(struct intel_dp *intel_dp)
1213 {
1214 	if (!intel_dp->psr.dc3co_exitline)
1215 		return;
1216 
1217 	cancel_delayed_work(&intel_dp->psr.dc3co_work);
1218 	/* Before PSR2 exit disallow dc3co*/
1219 	tgl_psr2_disable_dc3co(intel_dp);
1220 }
1221 
1222 static bool
dc3co_is_pipe_port_compatible(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state)1223 dc3co_is_pipe_port_compatible(struct intel_dp *intel_dp,
1224 			      struct intel_crtc_state *crtc_state)
1225 {
1226 	struct intel_display *display = to_intel_display(intel_dp);
1227 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1228 	enum pipe pipe = to_intel_crtc(crtc_state->uapi.crtc)->pipe;
1229 	enum port port = dig_port->base.port;
1230 
1231 	if (display->platform.alderlake_p || DISPLAY_VER(display) >= 14)
1232 		return pipe <= PIPE_B && port <= PORT_B;
1233 	else
1234 		return pipe == PIPE_A && port == PORT_A;
1235 }
1236 
1237 static void
tgl_dc3co_exitline_compute_config(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state)1238 tgl_dc3co_exitline_compute_config(struct intel_dp *intel_dp,
1239 				  struct intel_crtc_state *crtc_state)
1240 {
1241 	struct intel_display *display = to_intel_display(intel_dp);
1242 	const u32 crtc_vdisplay = crtc_state->uapi.adjusted_mode.crtc_vdisplay;
1243 	struct i915_power_domains *power_domains = &display->power.domains;
1244 	u32 exit_scanlines;
1245 
1246 	/*
1247 	 * FIXME: Due to the changed sequence of activating/deactivating DC3CO,
1248 	 * disable DC3CO until the changed dc3co activating/deactivating sequence
1249 	 * is applied. B.Specs:49196
1250 	 */
1251 	return;
1252 
1253 	/*
1254 	 * DMC's DC3CO exit mechanism has an issue with Selective Fecth
1255 	 * TODO: when the issue is addressed, this restriction should be removed.
1256 	 */
1257 	if (crtc_state->enable_psr2_sel_fetch)
1258 		return;
1259 
1260 	if (!(power_domains->allowed_dc_mask & DC_STATE_EN_DC3CO))
1261 		return;
1262 
1263 	if (!dc3co_is_pipe_port_compatible(intel_dp, crtc_state))
1264 		return;
1265 
1266 	/* Wa_16011303918:adl-p */
1267 	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_B0))
1268 		return;
1269 
1270 	/*
1271 	 * DC3CO Exit time 200us B.Spec 49196
1272 	 * PSR2 transcoder Early Exit scanlines = ROUNDUP(200 / line time) + 1
1273 	 */
1274 	exit_scanlines =
1275 		intel_usecs_to_scanlines(&crtc_state->uapi.adjusted_mode, 200) + 1;
1276 
1277 	if (drm_WARN_ON(display->drm, exit_scanlines > crtc_vdisplay))
1278 		return;
1279 
1280 	crtc_state->dc3co_exitline = crtc_vdisplay - exit_scanlines;
1281 }
1282 
intel_psr2_sel_fetch_config_valid(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state)1283 static bool intel_psr2_sel_fetch_config_valid(struct intel_dp *intel_dp,
1284 					      struct intel_crtc_state *crtc_state)
1285 {
1286 	struct intel_display *display = to_intel_display(intel_dp);
1287 
1288 	if (!display->params.enable_psr2_sel_fetch &&
1289 	    intel_dp->psr.debug != I915_PSR_DEBUG_ENABLE_SEL_FETCH) {
1290 		drm_dbg_kms(display->drm,
1291 			    "PSR2 sel fetch not enabled, disabled by parameter\n");
1292 		return false;
1293 	}
1294 
1295 	return crtc_state->enable_psr2_sel_fetch = true;
1296 }
1297 
psr2_granularity_check(struct intel_crtc_state * crtc_state,struct intel_connector * connector)1298 static bool psr2_granularity_check(struct intel_crtc_state *crtc_state,
1299 				   struct intel_connector *connector)
1300 {
1301 	struct intel_dp *intel_dp = intel_attached_dp(connector);
1302 	struct intel_display *display = to_intel_display(intel_dp);
1303 	const struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config;
1304 	const int crtc_hdisplay = crtc_state->hw.adjusted_mode.crtc_hdisplay;
1305 	const int crtc_vdisplay = crtc_state->hw.adjusted_mode.crtc_vdisplay;
1306 	u16 y_granularity = 0;
1307 	u16 sink_y_granularity = crtc_state->has_panel_replay ?
1308 		connector->dp.panel_replay_caps.su_y_granularity :
1309 		connector->dp.psr_caps.su_y_granularity;
1310 	u16 sink_w_granularity;
1311 
1312 	if (crtc_state->has_panel_replay)
1313 		sink_w_granularity = connector->dp.panel_replay_caps.su_w_granularity ==
1314 			DP_PANEL_REPLAY_FULL_LINE_GRANULARITY ?
1315 			crtc_hdisplay : connector->dp.panel_replay_caps.su_w_granularity;
1316 	else
1317 		sink_w_granularity = connector->dp.psr_caps.su_w_granularity;
1318 
1319 	/* PSR2 HW only send full lines so we only need to validate the width */
1320 	if (crtc_hdisplay % sink_w_granularity)
1321 		return false;
1322 
1323 	if (crtc_vdisplay % sink_y_granularity)
1324 		return false;
1325 
1326 	/* HW tracking is only aligned to 4 lines */
1327 	if (!crtc_state->enable_psr2_sel_fetch)
1328 		return sink_y_granularity == 4;
1329 
1330 	/*
1331 	 * adl_p and mtl platforms have 1 line granularity.
1332 	 * For other platforms with SW tracking we can adjust the y coordinates
1333 	 * to match sink requirement if multiple of 4.
1334 	 */
1335 	if (display->platform.alderlake_p || DISPLAY_VER(display) >= 14)
1336 		y_granularity = sink_y_granularity;
1337 	else if (sink_y_granularity <= 2)
1338 		y_granularity = 4;
1339 	else if ((sink_y_granularity % 4) == 0)
1340 		y_granularity = sink_y_granularity;
1341 
1342 	if (y_granularity == 0 || crtc_vdisplay % y_granularity)
1343 		return false;
1344 
1345 	if (crtc_state->dsc.compression_enable &&
1346 	    vdsc_cfg->slice_height % y_granularity)
1347 		return false;
1348 
1349 	crtc_state->su_y_granularity = y_granularity;
1350 	return true;
1351 }
1352 
_compute_psr2_sdp_prior_scanline_indication(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state)1353 static bool _compute_psr2_sdp_prior_scanline_indication(struct intel_dp *intel_dp,
1354 							struct intel_crtc_state *crtc_state)
1355 {
1356 	struct intel_display *display = to_intel_display(intel_dp);
1357 	const struct drm_display_mode *adjusted_mode = &crtc_state->uapi.adjusted_mode;
1358 	u32 hblank_total, hblank_ns, req_ns;
1359 
1360 	hblank_total = adjusted_mode->crtc_hblank_end - adjusted_mode->crtc_hblank_start;
1361 	hblank_ns = div_u64(1000000ULL * hblank_total, adjusted_mode->crtc_clock);
1362 
1363 	/* From spec: ((60 / number of lanes) + 11) * 1000 / symbol clock frequency MHz */
1364 	req_ns = ((60 / crtc_state->lane_count) + 11) * 1000 / (crtc_state->port_clock / 1000);
1365 
1366 	if ((hblank_ns - req_ns) > 100)
1367 		return true;
1368 
1369 	/* Not supported <13 / Wa_22012279113:adl-p */
1370 	if (DISPLAY_VER(display) < 14 || intel_dp->edp_dpcd[0] < DP_EDP_14b)
1371 		return false;
1372 
1373 	crtc_state->req_psr2_sdp_prior_scanline = true;
1374 	return true;
1375 }
1376 
intel_psr_entry_setup_frames(struct intel_dp * intel_dp,struct drm_connector_state * conn_state,const struct drm_display_mode * adjusted_mode)1377 static int intel_psr_entry_setup_frames(struct intel_dp *intel_dp,
1378 					struct drm_connector_state *conn_state,
1379 					const struct drm_display_mode *adjusted_mode)
1380 {
1381 	struct intel_display *display = to_intel_display(intel_dp);
1382 	struct intel_connector *connector = to_intel_connector(conn_state->connector);
1383 	int psr_setup_time = drm_dp_psr_setup_time(connector->dp.psr_caps.dpcd);
1384 	int entry_setup_frames = 0;
1385 
1386 	if (psr_setup_time < 0) {
1387 		drm_dbg_kms(display->drm,
1388 			    "PSR condition failed: Invalid PSR setup time (0x%02x)\n",
1389 			    connector->dp.psr_caps.dpcd[1]);
1390 		return -ETIME;
1391 	}
1392 
1393 	if (intel_usecs_to_scanlines(adjusted_mode, psr_setup_time) >
1394 	    adjusted_mode->crtc_vtotal - adjusted_mode->crtc_vdisplay - 1) {
1395 		if (DISPLAY_VER(display) >= 20) {
1396 			/* setup entry frames can be up to 3 frames */
1397 			entry_setup_frames = 1;
1398 			drm_dbg_kms(display->drm,
1399 				    "PSR setup entry frames %d\n",
1400 				    entry_setup_frames);
1401 		} else {
1402 			drm_dbg_kms(display->drm,
1403 				    "PSR condition failed: PSR setup time (%d us) too long\n",
1404 				    psr_setup_time);
1405 			return -ETIME;
1406 		}
1407 	}
1408 
1409 	return entry_setup_frames;
1410 }
1411 
1412 static
_intel_psr_min_set_context_latency(const struct intel_crtc_state * crtc_state,bool needs_panel_replay,bool needs_sel_update)1413 int _intel_psr_min_set_context_latency(const struct intel_crtc_state *crtc_state,
1414 				       bool needs_panel_replay,
1415 				       bool needs_sel_update)
1416 {
1417 	struct intel_display *display = to_intel_display(crtc_state);
1418 
1419 	if (!crtc_state->has_psr)
1420 		return 0;
1421 
1422 	/* Wa_14015401596 */
1423 	if (intel_vrr_possible(crtc_state) && IS_DISPLAY_VER(display, 13, 14))
1424 		return 1;
1425 
1426 	/* Rest is for SRD_STATUS needed on LunarLake and onwards */
1427 	if (DISPLAY_VER(display) < 20)
1428 		return 0;
1429 
1430 	/*
1431 	 * Comment on SRD_STATUS register in Bspec for LunarLake and onwards:
1432 	 *
1433 	 * To deterministically capture the transition of the state machine
1434 	 * going from SRDOFFACK to IDLE, the delayed V. Blank should be at least
1435 	 * one line after the non-delayed V. Blank.
1436 	 *
1437 	 * Legacy TG: TRANS_SET_CONTEXT_LATENCY > 0
1438 	 * VRR TG: TRANS_VRR_CTL[ VRR Guardband ] < (TRANS_VRR_VMAX[ VRR Vmax ]
1439 	 * - TRANS_VTOTAL[ Vertical Active ])
1440 	 *
1441 	 * SRD_STATUS is used only by PSR1 on PantherLake.
1442 	 * SRD_STATUS is used by PSR1 and Panel Replay DP on LunarLake.
1443 	 */
1444 
1445 	if (DISPLAY_VER(display) >= 30 && (needs_panel_replay ||
1446 					   needs_sel_update))
1447 		return 0;
1448 	else if (DISPLAY_VER(display) < 30 && (needs_sel_update ||
1449 					       intel_crtc_has_type(crtc_state,
1450 								   INTEL_OUTPUT_EDP)))
1451 		return 0;
1452 	else
1453 		return 1;
1454 }
1455 
_wake_lines_fit_into_vblank(const struct intel_crtc_state * crtc_state,int vblank,int wake_lines)1456 static bool _wake_lines_fit_into_vblank(const struct intel_crtc_state *crtc_state,
1457 					int vblank,
1458 					int wake_lines)
1459 {
1460 	if (crtc_state->req_psr2_sdp_prior_scanline)
1461 		vblank -= 1;
1462 
1463 	/* Vblank >= PSR2_CTL Block Count Number maximum line count */
1464 	if (vblank < wake_lines)
1465 		return false;
1466 
1467 	return true;
1468 }
1469 
wake_lines_fit_into_vblank(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state,bool aux_less,bool needs_panel_replay,bool needs_sel_update)1470 static bool wake_lines_fit_into_vblank(struct intel_dp *intel_dp,
1471 				       const struct intel_crtc_state *crtc_state,
1472 				       bool aux_less,
1473 				       bool needs_panel_replay,
1474 				       bool needs_sel_update)
1475 {
1476 	struct intel_display *display = to_intel_display(intel_dp);
1477 	int vblank = crtc_state->hw.adjusted_mode.crtc_vblank_end -
1478 		crtc_state->hw.adjusted_mode.crtc_vblank_start;
1479 	int wake_lines;
1480 	int scl = _intel_psr_min_set_context_latency(crtc_state,
1481 						     needs_panel_replay,
1482 						     needs_sel_update);
1483 	vblank -= scl;
1484 
1485 	if (aux_less)
1486 		wake_lines = crtc_state->alpm_state.aux_less_wake_lines;
1487 	else
1488 		wake_lines = DISPLAY_VER(display) < 20 ?
1489 			psr2_block_count_lines(crtc_state->alpm_state.io_wake_lines,
1490 					       crtc_state->alpm_state.fast_wake_lines) :
1491 			crtc_state->alpm_state.io_wake_lines;
1492 
1493 	/*
1494 	 * Guardband has not been computed yet, so we conservatively check if the
1495 	 * full vblank duration is sufficient to accommodate wake line requirements
1496 	 * for PSR features like Panel Replay and Selective Update.
1497 	 *
1498 	 * Once the actual guardband is available, a more accurate validation is
1499 	 * performed in intel_psr_compute_config_late(), and PSR features are
1500 	 * disabled if wake lines exceed the available guardband.
1501 	 */
1502 	return _wake_lines_fit_into_vblank(crtc_state, vblank, wake_lines);
1503 }
1504 
alpm_config_valid(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state,bool aux_less,bool needs_panel_replay,bool needs_sel_update)1505 static bool alpm_config_valid(struct intel_dp *intel_dp,
1506 			      struct intel_crtc_state *crtc_state,
1507 			      bool aux_less,
1508 			      bool needs_panel_replay,
1509 			      bool needs_sel_update)
1510 {
1511 	struct intel_display *display = to_intel_display(intel_dp);
1512 
1513 	if (!intel_alpm_compute_params(intel_dp, crtc_state)) {
1514 		drm_dbg_kms(display->drm,
1515 			    "PSR2/Panel Replay  not enabled, Unable to use long enough wake times\n");
1516 		return false;
1517 	}
1518 
1519 	if (!wake_lines_fit_into_vblank(intel_dp, crtc_state, aux_less,
1520 					needs_panel_replay, needs_sel_update)) {
1521 		drm_dbg_kms(display->drm,
1522 			    "PSR2/Panel Replay not enabled, too short vblank time\n");
1523 		return false;
1524 	}
1525 
1526 	return true;
1527 }
1528 
intel_psr2_config_valid(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state,struct drm_connector_state * conn_state)1529 static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
1530 				    struct intel_crtc_state *crtc_state,
1531 				    struct drm_connector_state *conn_state)
1532 {
1533 	struct intel_display *display = to_intel_display(intel_dp);
1534 	struct intel_connector *connector = to_intel_connector(conn_state->connector);
1535 	int crtc_hdisplay = crtc_state->hw.adjusted_mode.crtc_hdisplay;
1536 	int crtc_vdisplay = crtc_state->hw.adjusted_mode.crtc_vdisplay;
1537 	int psr_max_h = 0, psr_max_v = 0, max_bpp = 0;
1538 
1539 	if (!connector->dp.psr_caps.su_support || display->params.enable_psr == 1)
1540 		return false;
1541 
1542 	/* JSL and EHL only supports eDP 1.3 */
1543 	if (display->platform.jasperlake || display->platform.elkhartlake) {
1544 		drm_dbg_kms(display->drm, "PSR2 not supported by phy\n");
1545 		return false;
1546 	}
1547 
1548 	/* Wa_16011181250 */
1549 	if (display->platform.rocketlake || display->platform.alderlake_s ||
1550 	    display->platform.dg2) {
1551 		drm_dbg_kms(display->drm,
1552 			    "PSR2 is defeatured for this platform\n");
1553 		return false;
1554 	}
1555 
1556 	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_B0)) {
1557 		drm_dbg_kms(display->drm,
1558 			    "PSR2 not completely functional in this stepping\n");
1559 		return false;
1560 	}
1561 
1562 	if (!transcoder_has_psr2(display, crtc_state->cpu_transcoder)) {
1563 		drm_dbg_kms(display->drm,
1564 			    "PSR2 not supported in transcoder %s\n",
1565 			    transcoder_name(crtc_state->cpu_transcoder));
1566 		return false;
1567 	}
1568 
1569 	/*
1570 	 * DSC and PSR2 cannot be enabled simultaneously. If a requested
1571 	 * resolution requires DSC to be enabled, priority is given to DSC
1572 	 * over PSR2.
1573 	 */
1574 	if (crtc_state->dsc.compression_enable &&
1575 	    (DISPLAY_VER(display) < 14 && !display->platform.alderlake_p)) {
1576 		drm_dbg_kms(display->drm,
1577 			    "PSR2 cannot be enabled since DSC is enabled\n");
1578 		return false;
1579 	}
1580 
1581 	if (DISPLAY_VER(display) >= 20) {
1582 		psr_max_h = crtc_hdisplay;
1583 		psr_max_v = crtc_vdisplay;
1584 		max_bpp = crtc_state->pipe_bpp;
1585 	} else if (IS_DISPLAY_VER(display, 12, 14)) {
1586 		psr_max_h = 5120;
1587 		psr_max_v = 3200;
1588 		max_bpp = 30;
1589 	} else if (IS_DISPLAY_VER(display, 10, 11)) {
1590 		psr_max_h = 4096;
1591 		psr_max_v = 2304;
1592 		max_bpp = 24;
1593 	} else if (DISPLAY_VER(display) == 9) {
1594 		psr_max_h = 3640;
1595 		psr_max_v = 2304;
1596 		max_bpp = 24;
1597 	}
1598 
1599 	if (crtc_state->pipe_bpp > max_bpp) {
1600 		drm_dbg_kms(display->drm,
1601 			    "PSR2 not enabled, pipe bpp %d > max supported %d\n",
1602 			    crtc_state->pipe_bpp, max_bpp);
1603 		return false;
1604 	}
1605 
1606 	/* Wa_16011303918:adl-p */
1607 	if (crtc_state->vrr.enable &&
1608 	    display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_B0)) {
1609 		drm_dbg_kms(display->drm,
1610 			    "PSR2 not enabled, not compatible with HW stepping + VRR\n");
1611 		return false;
1612 	}
1613 
1614 	if (!alpm_config_valid(intel_dp, crtc_state, false, false, true))
1615 		return false;
1616 
1617 	if (!crtc_state->enable_psr2_sel_fetch &&
1618 	    (crtc_hdisplay > psr_max_h || crtc_vdisplay > psr_max_v)) {
1619 		drm_dbg_kms(display->drm,
1620 			    "PSR2 not enabled, resolution %dx%d > max supported %dx%d\n",
1621 			    crtc_hdisplay, crtc_vdisplay,
1622 			    psr_max_h, psr_max_v);
1623 		return false;
1624 	}
1625 
1626 	tgl_dc3co_exitline_compute_config(intel_dp, crtc_state);
1627 
1628 	return true;
1629 }
1630 
intel_sel_update_config_valid(struct intel_crtc_state * crtc_state,struct drm_connector_state * conn_state)1631 static bool intel_sel_update_config_valid(struct intel_crtc_state *crtc_state,
1632 					  struct drm_connector_state *conn_state)
1633 {
1634 	struct intel_connector *connector = to_intel_connector(conn_state->connector);
1635 	struct intel_dp *intel_dp = intel_attached_dp(connector);
1636 	struct intel_display *display = to_intel_display(intel_dp);
1637 
1638 	if (HAS_PSR2_SEL_FETCH(display) &&
1639 	    !intel_psr2_sel_fetch_config_valid(intel_dp, crtc_state) &&
1640 	    !HAS_PSR_HW_TRACKING(display)) {
1641 		drm_dbg_kms(display->drm,
1642 			    "Selective update not enabled, selective fetch not valid and no HW tracking available\n");
1643 		goto unsupported;
1644 	}
1645 
1646 	if (!sel_update_global_enabled(intel_dp)) {
1647 		drm_dbg_kms(display->drm,
1648 			    "Selective update disabled by flag\n");
1649 		goto unsupported;
1650 	}
1651 
1652 	if (!crtc_state->has_panel_replay && !intel_psr2_config_valid(intel_dp, crtc_state,
1653 								      conn_state))
1654 		goto unsupported;
1655 
1656 	if (!_compute_psr2_sdp_prior_scanline_indication(intel_dp, crtc_state)) {
1657 		drm_dbg_kms(display->drm,
1658 			    "Selective update not enabled, SDP indication do not fit in hblank\n");
1659 		goto unsupported;
1660 	}
1661 
1662 	if (crtc_state->has_panel_replay) {
1663 		if (DISPLAY_VER(display) < 14)
1664 			goto unsupported;
1665 
1666 		if (!connector->dp.panel_replay_caps.su_support)
1667 			goto unsupported;
1668 
1669 		if (intel_dsc_enabled_on_link(crtc_state) &&
1670 		    connector->dp.panel_replay_caps.dsc_support !=
1671 		    INTEL_DP_PANEL_REPLAY_DSC_SELECTIVE_UPDATE) {
1672 			drm_dbg_kms(display->drm,
1673 				    "Selective update with Panel Replay not enabled because it's not supported with DSC\n");
1674 			goto unsupported;
1675 		}
1676 	}
1677 
1678 	if (crtc_state->crc_enabled) {
1679 		drm_dbg_kms(display->drm,
1680 			    "Selective update not enabled because it would inhibit pipe CRC calculation\n");
1681 		goto unsupported;
1682 	}
1683 
1684 	if (!psr2_granularity_check(crtc_state, connector)) {
1685 		drm_dbg_kms(display->drm,
1686 			    "Selective update not enabled, SU granularity not compatible\n");
1687 		goto unsupported;
1688 	}
1689 
1690 	crtc_state->enable_psr2_su_region_et = psr2_su_region_et_valid(connector,
1691 								       crtc_state->has_panel_replay);
1692 
1693 	return true;
1694 
1695 unsupported:
1696 	crtc_state->enable_psr2_sel_fetch = false;
1697 	return false;
1698 }
1699 
_psr_compute_config(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state,struct drm_connector_state * conn_state)1700 static bool _psr_compute_config(struct intel_dp *intel_dp,
1701 				struct intel_crtc_state *crtc_state,
1702 				struct drm_connector_state *conn_state)
1703 {
1704 	struct intel_display *display = to_intel_display(intel_dp);
1705 	const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
1706 	int entry_setup_frames;
1707 
1708 	if (!CAN_PSR(intel_dp) || !display->params.enable_psr)
1709 		return false;
1710 
1711 	/*
1712 	 * Currently PSR doesn't work reliably with VRR enabled.
1713 	 */
1714 	if (crtc_state->vrr.enable)
1715 		return false;
1716 
1717 	entry_setup_frames = intel_psr_entry_setup_frames(intel_dp, conn_state, adjusted_mode);
1718 
1719 	if (entry_setup_frames >= 0) {
1720 		intel_dp->psr.entry_setup_frames = entry_setup_frames;
1721 	} else {
1722 		crtc_state->no_psr_reason = "PSR setup timing not met";
1723 		drm_dbg_kms(display->drm,
1724 			    "PSR condition failed: PSR setup timing not met\n");
1725 		return false;
1726 	}
1727 
1728 	return true;
1729 }
1730 
compute_link_off_after_as_sdp_when_pr_active(struct intel_connector * connector)1731 static inline bool compute_link_off_after_as_sdp_when_pr_active(struct intel_connector *connector)
1732 {
1733 	return (connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_CAPABILITY)] &
1734 		DP_PANEL_REPLAY_LINK_OFF_SUPPORTED_IN_PR_AFTER_ADAPTIVE_SYNC_SDP);
1735 }
1736 
compute_disable_as_sdp_when_pr_active(struct intel_connector * connector)1737 static inline bool compute_disable_as_sdp_when_pr_active(struct intel_connector *connector)
1738 {
1739 	return !(connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_CAPABILITY)] &
1740 		 DP_PANEL_REPLAY_ASYNC_VIDEO_TIMING_NOT_SUPPORTED_IN_PR);
1741 }
1742 
_panel_replay_compute_config(struct intel_crtc_state * crtc_state,const struct drm_connector_state * conn_state)1743 static bool _panel_replay_compute_config(struct intel_crtc_state *crtc_state,
1744 					 const struct drm_connector_state *conn_state)
1745 {
1746 	struct intel_connector *connector =
1747 		to_intel_connector(conn_state->connector);
1748 	struct intel_dp *intel_dp = intel_attached_dp(connector);
1749 	struct intel_display *display = to_intel_display(intel_dp);
1750 	struct intel_hdcp *hdcp = &connector->hdcp;
1751 
1752 	if (!CAN_PANEL_REPLAY(intel_dp))
1753 		return false;
1754 
1755 	if (!connector->dp.panel_replay_caps.support)
1756 		return false;
1757 
1758 	if (!panel_replay_global_enabled(intel_dp)) {
1759 		drm_dbg_kms(display->drm, "Panel Replay disabled by flag\n");
1760 		return false;
1761 	}
1762 
1763 	if (crtc_state->crc_enabled) {
1764 		drm_dbg_kms(display->drm,
1765 			    "Panel Replay not enabled because it would inhibit pipe CRC calculation\n");
1766 		return false;
1767 	}
1768 
1769 	if (intel_dsc_enabled_on_link(crtc_state) &&
1770 	    connector->dp.panel_replay_caps.dsc_support ==
1771 	    INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED) {
1772 		drm_dbg_kms(display->drm,
1773 			    "Panel Replay not enabled because it's not supported with DSC\n");
1774 		return false;
1775 	}
1776 
1777 	crtc_state->link_off_after_as_sdp_when_pr_active = compute_link_off_after_as_sdp_when_pr_active(connector);
1778 	crtc_state->disable_as_sdp_when_pr_active = compute_disable_as_sdp_when_pr_active(connector);
1779 
1780 	if (!intel_dp_is_edp(intel_dp))
1781 		return true;
1782 
1783 	/* Remaining checks are for eDP only */
1784 
1785 	if (to_intel_crtc(crtc_state->uapi.crtc)->pipe != PIPE_A &&
1786 	    to_intel_crtc(crtc_state->uapi.crtc)->pipe != PIPE_B)
1787 		return false;
1788 
1789 	/* 128b/132b Panel Replay is not supported on eDP */
1790 	if (intel_dp_is_uhbr(crtc_state)) {
1791 		drm_dbg_kms(display->drm,
1792 			    "Panel Replay is not supported with 128b/132b\n");
1793 		return false;
1794 	}
1795 
1796 	/* HW will not allow Panel Replay on eDP when HDCP enabled */
1797 	if (conn_state->content_protection ==
1798 	    DRM_MODE_CONTENT_PROTECTION_DESIRED ||
1799 	    (conn_state->content_protection ==
1800 	     DRM_MODE_CONTENT_PROTECTION_ENABLED && hdcp->value ==
1801 	     DRM_MODE_CONTENT_PROTECTION_UNDESIRED)) {
1802 		drm_dbg_kms(display->drm,
1803 			    "Panel Replay is not supported with HDCP\n");
1804 		return false;
1805 	}
1806 
1807 	if (!alpm_config_valid(intel_dp, crtc_state, true, true, false))
1808 		return false;
1809 
1810 	return true;
1811 }
1812 
intel_psr_needs_wa_18037818876(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state)1813 static bool intel_psr_needs_wa_18037818876(struct intel_dp *intel_dp,
1814 					   struct intel_crtc_state *crtc_state)
1815 {
1816 	struct intel_display *display = to_intel_display(intel_dp);
1817 
1818 	return (DISPLAY_VER(display) == 20 && intel_dp->psr.entry_setup_frames > 0 &&
1819 		!crtc_state->has_sel_update);
1820 }
1821 
1822 static
intel_psr_set_non_psr_pipes(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state)1823 void intel_psr_set_non_psr_pipes(struct intel_dp *intel_dp,
1824 				 struct intel_crtc_state *crtc_state)
1825 {
1826 	struct intel_display *display = to_intel_display(intel_dp);
1827 	struct intel_atomic_state *state = to_intel_atomic_state(crtc_state->uapi.state);
1828 	struct intel_crtc *crtc;
1829 	u8 active_pipes = 0;
1830 
1831 	/* Wa_16025596647 */
1832 	if (DISPLAY_VER(display) != 20 &&
1833 	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
1834 		return;
1835 
1836 	/* Not needed by Panel Replay  */
1837 	if (crtc_state->has_panel_replay)
1838 		return;
1839 
1840 	/* We ignore possible secondary PSR/Panel Replay capable eDP */
1841 	for_each_intel_crtc(display->drm, crtc)
1842 		active_pipes |= crtc->active ? BIT(crtc->pipe) : 0;
1843 
1844 	active_pipes = intel_calc_active_pipes(state, active_pipes);
1845 
1846 	crtc_state->active_non_psr_pipes = active_pipes &
1847 		~BIT(to_intel_crtc(crtc_state->uapi.crtc)->pipe);
1848 }
1849 
intel_psr_compute_config(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state,struct drm_connector_state * conn_state)1850 void intel_psr_compute_config(struct intel_dp *intel_dp,
1851 			      struct intel_crtc_state *crtc_state,
1852 			      struct drm_connector_state *conn_state)
1853 {
1854 	struct intel_display *display = to_intel_display(intel_dp);
1855 	struct intel_connector *connector = to_intel_connector(conn_state->connector);
1856 	const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
1857 
1858 	if (!psr_global_enabled(intel_dp)) {
1859 		drm_dbg_kms(display->drm, "PSR disabled by flag\n");
1860 		return;
1861 	}
1862 
1863 	if (intel_dp->psr.sink_not_reliable) {
1864 		drm_dbg_kms(display->drm,
1865 			    "PSR sink implementation is not reliable\n");
1866 		return;
1867 	}
1868 
1869 	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
1870 		drm_dbg_kms(display->drm,
1871 			    "PSR condition failed: Interlaced mode enabled\n");
1872 		return;
1873 	}
1874 
1875 	/*
1876 	 * FIXME figure out what is wrong with PSR+joiner and
1877 	 * fix it. Presumably something related to the fact that
1878 	 * PSR is a transcoder level feature.
1879 	 */
1880 	if (crtc_state->joiner_pipes) {
1881 		drm_dbg_kms(display->drm,
1882 			    "PSR disabled due to joiner\n");
1883 		return;
1884 	}
1885 
1886 	/* Only used for state verification. */
1887 	crtc_state->panel_replay_dsc_support = connector->dp.panel_replay_caps.dsc_support;
1888 	crtc_state->has_panel_replay = _panel_replay_compute_config(crtc_state, conn_state);
1889 
1890 	crtc_state->has_psr = crtc_state->has_panel_replay ? true :
1891 		_psr_compute_config(intel_dp, crtc_state, conn_state);
1892 
1893 	if (!crtc_state->has_psr)
1894 		return;
1895 
1896 	crtc_state->has_sel_update = intel_sel_update_config_valid(crtc_state, conn_state);
1897 }
1898 
intel_psr_get_config(struct intel_encoder * encoder,struct intel_crtc_state * pipe_config)1899 void intel_psr_get_config(struct intel_encoder *encoder,
1900 			  struct intel_crtc_state *pipe_config)
1901 {
1902 	struct intel_display *display = to_intel_display(encoder);
1903 	struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
1904 	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
1905 	struct intel_dp *intel_dp;
1906 	u32 val;
1907 
1908 	if (!dig_port)
1909 		return;
1910 
1911 	intel_dp = &dig_port->dp;
1912 	if (!(CAN_PSR(intel_dp) || CAN_PANEL_REPLAY(intel_dp)))
1913 		return;
1914 
1915 	mutex_lock(&intel_dp->psr.lock);
1916 	if (!intel_dp->psr.enabled)
1917 		goto unlock;
1918 
1919 	if (intel_dp->psr.panel_replay_enabled) {
1920 		pipe_config->has_psr = pipe_config->has_panel_replay = true;
1921 	} else {
1922 		/*
1923 		 * Not possible to read EDP_PSR/PSR2_CTL registers as it is
1924 		 * enabled/disabled because of frontbuffer tracking and others.
1925 		 */
1926 		pipe_config->has_psr = true;
1927 	}
1928 
1929 	pipe_config->has_sel_update = intel_dp->psr.sel_update_enabled;
1930 	pipe_config->infoframes.enable |= intel_hdmi_infoframe_enable(DP_SDP_VSC);
1931 
1932 	if (!intel_dp->psr.sel_update_enabled)
1933 		goto unlock;
1934 
1935 	if (HAS_PSR2_SEL_FETCH(display)) {
1936 		val = intel_de_read(display,
1937 				    PSR2_MAN_TRK_CTL(display, cpu_transcoder));
1938 		if (val & PSR2_MAN_TRK_CTL_ENABLE)
1939 			pipe_config->enable_psr2_sel_fetch = true;
1940 	}
1941 
1942 	pipe_config->enable_psr2_su_region_et = intel_dp->psr.su_region_et_enabled;
1943 
1944 	if (DISPLAY_VER(display) >= 12) {
1945 		val = intel_de_read(display,
1946 				    TRANS_EXITLINE(display, cpu_transcoder));
1947 		pipe_config->dc3co_exitline = REG_FIELD_GET(EXITLINE_MASK, val);
1948 	}
1949 unlock:
1950 	mutex_unlock(&intel_dp->psr.lock);
1951 }
1952 
intel_psr_activate(struct intel_dp * intel_dp)1953 static void intel_psr_activate(struct intel_dp *intel_dp)
1954 {
1955 	struct intel_display *display = to_intel_display(intel_dp);
1956 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1957 
1958 	drm_WARN_ON(display->drm,
1959 		    transcoder_has_psr2(display, cpu_transcoder) &&
1960 		    intel_de_read(display, EDP_PSR2_CTL(display, cpu_transcoder)) & EDP_PSR2_ENABLE);
1961 
1962 	drm_WARN_ON(display->drm,
1963 		    intel_de_read(display, psr_ctl_reg(display, cpu_transcoder)) & EDP_PSR_ENABLE);
1964 
1965 	drm_WARN_ON(display->drm, intel_dp->psr.active);
1966 
1967 	drm_WARN_ON(display->drm, !intel_dp->psr.enabled);
1968 
1969 	lockdep_assert_held(&intel_dp->psr.lock);
1970 
1971 	/* psr1, psr2 and panel-replay are mutually exclusive.*/
1972 	if (intel_dp->psr.panel_replay_enabled)
1973 		dg2_activate_panel_replay(intel_dp);
1974 	else if (intel_dp->psr.sel_update_enabled)
1975 		hsw_activate_psr2(intel_dp);
1976 	else
1977 		hsw_activate_psr1(intel_dp);
1978 
1979 	intel_dp->psr.active = true;
1980 	intel_dp->psr.no_psr_reason = NULL;
1981 }
1982 
1983 /*
1984  * Wa_16013835468
1985  * Wa_14015648006
1986  */
wm_optimization_wa(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state)1987 static void wm_optimization_wa(struct intel_dp *intel_dp,
1988 			       const struct intel_crtc_state *crtc_state)
1989 {
1990 	struct intel_display *display = to_intel_display(intel_dp);
1991 	enum pipe pipe = intel_dp->psr.pipe;
1992 	bool activate = false;
1993 
1994 	/* Wa_14015648006 */
1995 	if (IS_DISPLAY_VER(display, 11, 14) && crtc_state->wm_level_disabled)
1996 		activate = true;
1997 
1998 	/* Wa_16013835468 */
1999 	if (DISPLAY_VER(display) == 12 &&
2000 	    crtc_state->hw.adjusted_mode.crtc_vblank_start !=
2001 	    crtc_state->hw.adjusted_mode.crtc_vdisplay)
2002 		activate = true;
2003 
2004 	if (activate)
2005 		intel_de_rmw(display, GEN8_CHICKEN_DCPR_1,
2006 			     0, LATENCY_REPORTING_REMOVED(pipe));
2007 	else
2008 		intel_de_rmw(display, GEN8_CHICKEN_DCPR_1,
2009 			     LATENCY_REPORTING_REMOVED(pipe), 0);
2010 }
2011 
intel_psr_enable_source(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state)2012 static void intel_psr_enable_source(struct intel_dp *intel_dp,
2013 				    const struct intel_crtc_state *crtc_state)
2014 {
2015 	struct intel_display *display = to_intel_display(intel_dp);
2016 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2017 	u32 mask = 0;
2018 
2019 	/*
2020 	 * Only HSW and BDW have PSR AUX registers that need to be setup.
2021 	 * SKL+ use hardcoded values PSR AUX transactions
2022 	 */
2023 	if (DISPLAY_VER(display) < 9)
2024 		hsw_psr_setup_aux(intel_dp);
2025 
2026 	/*
2027 	 * Per Spec: Avoid continuous PSR exit by masking MEMUP and HPD also
2028 	 * mask LPSP to avoid dependency on other drivers that might block
2029 	 * runtime_pm besides preventing  other hw tracking issues now we
2030 	 * can rely on frontbuffer tracking.
2031 	 *
2032 	 * From bspec prior LunarLake:
2033 	 * Only PSR_MASK[Mask FBC modify] and PSR_MASK[Mask Hotplug] are used in
2034 	 * panel replay mode.
2035 	 *
2036 	 * From bspec beyod LunarLake:
2037 	 * Panel Replay on DP: No bits are applicable
2038 	 * Panel Replay on eDP: All bits are applicable
2039 	 */
2040 	if (DISPLAY_VER(display) < 20 || intel_dp_is_edp(intel_dp))
2041 		mask = EDP_PSR_DEBUG_MASK_HPD;
2042 
2043 	if (intel_dp_is_edp(intel_dp)) {
2044 		mask |= EDP_PSR_DEBUG_MASK_MEMUP;
2045 
2046 		/*
2047 		 * For some unknown reason on HSW non-ULT (or at least on
2048 		 * Dell Latitude E6540) external displays start to flicker
2049 		 * when PSR is enabled on the eDP. SR/PC6 residency is much
2050 		 * higher than should be possible with an external display.
2051 		 * As a workaround leave LPSP unmasked to prevent PSR entry
2052 		 * when external displays are active.
2053 		 */
2054 		if (DISPLAY_VER(display) >= 8 || display->platform.haswell_ult)
2055 			mask |= EDP_PSR_DEBUG_MASK_LPSP;
2056 
2057 		if (DISPLAY_VER(display) < 20)
2058 			mask |= EDP_PSR_DEBUG_MASK_MAX_SLEEP;
2059 
2060 		/*
2061 		 * No separate pipe reg write mask on hsw/bdw, so have to unmask all
2062 		 * registers in order to keep the CURSURFLIVE tricks working :(
2063 		 */
2064 		if (IS_DISPLAY_VER(display, 9, 10))
2065 			mask |= EDP_PSR_DEBUG_MASK_DISP_REG_WRITE;
2066 
2067 		/* allow PSR with sprite enabled */
2068 		if (display->platform.haswell)
2069 			mask |= EDP_PSR_DEBUG_MASK_SPRITE_ENABLE;
2070 	}
2071 
2072 	intel_de_write(display, psr_debug_reg(display, cpu_transcoder), mask);
2073 
2074 	psr_irq_control(intel_dp);
2075 
2076 	/*
2077 	 * TODO: if future platforms supports DC3CO in more than one
2078 	 * transcoder, EXITLINE will need to be unset when disabling PSR
2079 	 */
2080 	if (intel_dp->psr.dc3co_exitline)
2081 		intel_de_rmw(display,
2082 			     TRANS_EXITLINE(display, cpu_transcoder),
2083 			     EXITLINE_MASK,
2084 			     intel_dp->psr.dc3co_exitline << EXITLINE_SHIFT | EXITLINE_ENABLE);
2085 
2086 	if (HAS_PSR_HW_TRACKING(display) && HAS_PSR2_SEL_FETCH(display))
2087 		intel_de_rmw(display, CHICKEN_PAR1_1, IGNORE_PSR2_HW_TRACKING,
2088 			     intel_dp->psr.psr2_sel_fetch_enabled ?
2089 			     IGNORE_PSR2_HW_TRACKING : 0);
2090 
2091 	/*
2092 	 * Wa_16013835468
2093 	 * Wa_14015648006
2094 	 */
2095 	wm_optimization_wa(intel_dp, crtc_state);
2096 
2097 	if (intel_dp->psr.sel_update_enabled) {
2098 		if (DISPLAY_VER(display) == 9)
2099 			intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder), 0,
2100 				     PSR2_VSC_ENABLE_PROG_HEADER |
2101 				     PSR2_ADD_VERTICAL_LINE_COUNT);
2102 
2103 		/*
2104 		 * Wa_16014451276:adlp,mtl[a0,b0]
2105 		 * All supported adlp panels have 1-based X granularity, this may
2106 		 * cause issues if non-supported panels are used.
2107 		 */
2108 		if (!intel_dp->psr.panel_replay_enabled &&
2109 		    (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_A0, STEP_B0) ||
2110 		     display->platform.alderlake_p))
2111 			intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder),
2112 				     0, ADLP_1_BASED_X_GRANULARITY);
2113 
2114 		/* Wa_16012604467:adlp,mtl[a0,b0] */
2115 		if (!intel_dp->psr.panel_replay_enabled &&
2116 		    IS_DISPLAY_VERx100_STEP(display, 1400, STEP_A0, STEP_B0))
2117 			intel_de_rmw(display,
2118 				     MTL_CLKGATE_DIS_TRANS(display, cpu_transcoder),
2119 				     0,
2120 				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
2121 		else if (display->platform.alderlake_p)
2122 			intel_de_rmw(display, CLKGATE_DIS_MISC, 0,
2123 				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
2124 	}
2125 
2126 	/* Wa_16025596647 */
2127 	if ((DISPLAY_VER(display) == 20 ||
2128 	     IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0)) &&
2129 	    !intel_dp->psr.panel_replay_enabled)
2130 		intel_dmc_block_pkgc(display, intel_dp->psr.pipe, true);
2131 
2132 	intel_alpm_configure(intel_dp, crtc_state);
2133 }
2134 
psr_interrupt_error_check(struct intel_dp * intel_dp)2135 static bool psr_interrupt_error_check(struct intel_dp *intel_dp)
2136 {
2137 	struct intel_display *display = to_intel_display(intel_dp);
2138 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2139 	u32 val;
2140 
2141 	if (intel_dp->psr.panel_replay_enabled)
2142 		goto no_err;
2143 
2144 	/*
2145 	 * If a PSR error happened and the driver is reloaded, the EDP_PSR_IIR
2146 	 * will still keep the error set even after the reset done in the
2147 	 * irq_preinstall and irq_uninstall hooks.
2148 	 * And enabling in this situation cause the screen to freeze in the
2149 	 * first time that PSR HW tries to activate so lets keep PSR disabled
2150 	 * to avoid any rendering problems.
2151 	 */
2152 	val = intel_de_read(display, psr_iir_reg(display, cpu_transcoder));
2153 	val &= psr_irq_psr_error_bit_get(intel_dp);
2154 	if (val) {
2155 		intel_dp->psr.sink_not_reliable = true;
2156 		drm_dbg_kms(display->drm,
2157 			    "PSR interruption error set, not enabling PSR\n");
2158 		return false;
2159 	}
2160 
2161 no_err:
2162 	return true;
2163 }
2164 
intel_psr_enable_locked(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state)2165 static void intel_psr_enable_locked(struct intel_dp *intel_dp,
2166 				    const struct intel_crtc_state *crtc_state)
2167 {
2168 	struct intel_display *display = to_intel_display(intel_dp);
2169 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
2170 	u32 val;
2171 
2172 	drm_WARN_ON(display->drm, intel_dp->psr.enabled);
2173 
2174 	intel_dp->psr.sel_update_enabled = crtc_state->has_sel_update;
2175 	intel_dp->psr.panel_replay_enabled = crtc_state->has_panel_replay;
2176 	intel_dp->psr.busy_frontbuffer_bits = 0;
2177 	intel_dp->psr.pipe = to_intel_crtc(crtc_state->uapi.crtc)->pipe;
2178 	intel_dp->psr.transcoder = crtc_state->cpu_transcoder;
2179 	/* DC5/DC6 requires at least 6 idle frames */
2180 	val = usecs_to_jiffies(intel_get_frame_time_us(crtc_state) * 6);
2181 	intel_dp->psr.dc3co_exit_delay = val;
2182 	intel_dp->psr.dc3co_exitline = crtc_state->dc3co_exitline;
2183 	intel_dp->psr.psr2_sel_fetch_enabled = crtc_state->enable_psr2_sel_fetch;
2184 	intel_dp->psr.su_region_et_enabled = crtc_state->enable_psr2_su_region_et;
2185 	intel_dp->psr.psr2_sel_fetch_cff_enabled = false;
2186 	intel_dp->psr.req_psr2_sdp_prior_scanline =
2187 		crtc_state->req_psr2_sdp_prior_scanline;
2188 	intel_dp->psr.active_non_psr_pipes = crtc_state->active_non_psr_pipes;
2189 	intel_dp->psr.pkg_c_latency_used = crtc_state->pkg_c_latency_used;
2190 	intel_dp->psr.io_wake_lines = crtc_state->alpm_state.io_wake_lines;
2191 	intel_dp->psr.fast_wake_lines = crtc_state->alpm_state.fast_wake_lines;
2192 
2193 	if (!psr_interrupt_error_check(intel_dp))
2194 		return;
2195 
2196 	if (intel_dp->psr.panel_replay_enabled)
2197 		drm_dbg_kms(display->drm, "Enabling Panel Replay\n");
2198 	else
2199 		drm_dbg_kms(display->drm, "Enabling PSR%s\n",
2200 			    intel_dp->psr.sel_update_enabled ? "2" : "1");
2201 
2202 	/*
2203 	 * Enabling sink PSR/Panel Replay here only for PSR. Panel Replay enable
2204 	 * bit is already written at this point. Sink ALPM is enabled here for
2205 	 * PSR and Panel Replay. See
2206 	 * intel_psr_panel_replay_enable_sink. Modifiers/options:
2207 	 *  - Selective Update
2208 	 *  - Region Early Transport
2209 	 *  - Selective Update Region Scanline Capture
2210 	 *  - VSC_SDP_CRC
2211 	 *  - HPD on different Errors
2212 	 *  - CRC verification
2213 	 * are written for PSR and Panel Replay here.
2214 	 */
2215 	intel_psr_enable_sink(intel_dp, crtc_state);
2216 
2217 	if (intel_dp_is_edp(intel_dp))
2218 		intel_snps_phy_update_psr_power_state(&dig_port->base, true);
2219 
2220 	intel_psr_enable_source(intel_dp, crtc_state);
2221 	intel_dp->psr.enabled = true;
2222 	intel_dp->psr.pause_counter = 0;
2223 
2224 	/*
2225 	 * Link_ok is sticky and set here on PSR enable. We can assume link
2226 	 * training is complete as we never continue to PSR enable with
2227 	 * untrained link. Link_ok is kept as set until first short pulse
2228 	 * interrupt. This is targeted to workaround panels stating bad link
2229 	 * after PSR is enabled.
2230 	 */
2231 	intel_dp->psr.link_ok = true;
2232 
2233 	intel_psr_activate(intel_dp);
2234 }
2235 
intel_psr_exit(struct intel_dp * intel_dp)2236 static void intel_psr_exit(struct intel_dp *intel_dp)
2237 {
2238 	struct intel_display *display = to_intel_display(intel_dp);
2239 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2240 	u32 val;
2241 
2242 	if (!intel_dp->psr.active) {
2243 		if (transcoder_has_psr2(display, cpu_transcoder)) {
2244 			val = intel_de_read(display,
2245 					    EDP_PSR2_CTL(display, cpu_transcoder));
2246 			drm_WARN_ON(display->drm, val & EDP_PSR2_ENABLE);
2247 		}
2248 
2249 		val = intel_de_read(display,
2250 				    psr_ctl_reg(display, cpu_transcoder));
2251 		drm_WARN_ON(display->drm, val & EDP_PSR_ENABLE);
2252 
2253 		return;
2254 	}
2255 
2256 	if (intel_dp->psr.panel_replay_enabled) {
2257 		intel_de_rmw(display, TRANS_DP2_CTL(intel_dp->psr.transcoder),
2258 			     TRANS_DP2_PANEL_REPLAY_ENABLE, 0);
2259 	} else if (intel_dp->psr.sel_update_enabled) {
2260 		tgl_disallow_dc3co_on_psr2_exit(intel_dp);
2261 
2262 		val = intel_de_rmw(display,
2263 				   EDP_PSR2_CTL(display, cpu_transcoder),
2264 				   EDP_PSR2_ENABLE, 0);
2265 
2266 		drm_WARN_ON(display->drm, !(val & EDP_PSR2_ENABLE));
2267 	} else {
2268 		if ((DISPLAY_VER(display) == 20 ||
2269 		     IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0)) &&
2270 			intel_dp->psr.pkg_c_latency_used)
2271 			intel_dmc_start_pkgc_exit_at_start_of_undelayed_vblank(display,
2272 								       intel_dp->psr.pipe,
2273 								       false);
2274 
2275 		val = intel_de_rmw(display,
2276 				   psr_ctl_reg(display, cpu_transcoder),
2277 				   EDP_PSR_ENABLE, 0);
2278 
2279 		drm_WARN_ON(display->drm, !(val & EDP_PSR_ENABLE));
2280 	}
2281 	intel_dp->psr.active = false;
2282 }
2283 
intel_psr_wait_exit_locked(struct intel_dp * intel_dp)2284 static void intel_psr_wait_exit_locked(struct intel_dp *intel_dp)
2285 {
2286 	struct intel_display *display = to_intel_display(intel_dp);
2287 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2288 	i915_reg_t psr_status;
2289 	u32 psr_status_mask;
2290 
2291 	if (intel_dp_is_edp(intel_dp) && (intel_dp->psr.sel_update_enabled ||
2292 					  intel_dp->psr.panel_replay_enabled)) {
2293 		psr_status = EDP_PSR2_STATUS(display, cpu_transcoder);
2294 		psr_status_mask = EDP_PSR2_STATUS_STATE_MASK;
2295 	} else {
2296 		psr_status = psr_status_reg(display, cpu_transcoder);
2297 		psr_status_mask = EDP_PSR_STATUS_STATE_MASK;
2298 	}
2299 
2300 	/* Wait till PSR is idle */
2301 	if (intel_de_wait_for_clear_ms(display, psr_status,
2302 				       psr_status_mask, 2000))
2303 		drm_err(display->drm, "Timed out waiting PSR idle state\n");
2304 }
2305 
intel_psr_disable_locked(struct intel_dp * intel_dp)2306 static void intel_psr_disable_locked(struct intel_dp *intel_dp)
2307 {
2308 	struct intel_display *display = to_intel_display(intel_dp);
2309 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
2310 
2311 	lockdep_assert_held(&intel_dp->psr.lock);
2312 
2313 	if (!intel_dp->psr.enabled)
2314 		return;
2315 
2316 	if (intel_dp->psr.panel_replay_enabled)
2317 		drm_dbg_kms(display->drm, "Disabling Panel Replay\n");
2318 	else
2319 		drm_dbg_kms(display->drm, "Disabling PSR%s\n",
2320 			    intel_dp->psr.sel_update_enabled ? "2" : "1");
2321 
2322 	intel_psr_exit(intel_dp);
2323 	intel_psr_wait_exit_locked(intel_dp);
2324 
2325 	/*
2326 	 * Wa_16013835468
2327 	 * Wa_14015648006
2328 	 */
2329 	if (DISPLAY_VER(display) >= 11)
2330 		intel_de_rmw(display, GEN8_CHICKEN_DCPR_1,
2331 			     LATENCY_REPORTING_REMOVED(intel_dp->psr.pipe), 0);
2332 
2333 	if (intel_dp->psr.sel_update_enabled) {
2334 		/* Wa_16012604467:adlp,mtl[a0,b0] */
2335 		if (!intel_dp->psr.panel_replay_enabled &&
2336 		    IS_DISPLAY_VERx100_STEP(display, 1400, STEP_A0, STEP_B0))
2337 			intel_de_rmw(display,
2338 				     MTL_CLKGATE_DIS_TRANS(display, cpu_transcoder),
2339 				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
2340 		else if (display->platform.alderlake_p)
2341 			intel_de_rmw(display, CLKGATE_DIS_MISC,
2342 				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
2343 	}
2344 
2345 	if (intel_dp_is_edp(intel_dp))
2346 		intel_snps_phy_update_psr_power_state(&dp_to_dig_port(intel_dp)->base, false);
2347 
2348 	if (intel_dp->psr.panel_replay_enabled && intel_dp_is_edp(intel_dp))
2349 		intel_alpm_disable(intel_dp);
2350 
2351 	/* Disable PSR on Sink */
2352 	if (!intel_dp->psr.panel_replay_enabled) {
2353 		drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, 0);
2354 
2355 		if (intel_dp->psr.sel_update_enabled)
2356 			drm_dp_dpcd_writeb(&intel_dp->aux,
2357 					   DP_RECEIVER_ALPM_CONFIG, 0);
2358 	}
2359 
2360 	/* Wa_16025596647 */
2361 	if ((DISPLAY_VER(display) == 20 ||
2362 	     IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0)) &&
2363 	    !intel_dp->psr.panel_replay_enabled)
2364 		intel_dmc_block_pkgc(display, intel_dp->psr.pipe, false);
2365 
2366 	intel_dp->psr.enabled = false;
2367 	intel_dp->psr.panel_replay_enabled = false;
2368 	intel_dp->psr.sel_update_enabled = false;
2369 	intel_dp->psr.psr2_sel_fetch_enabled = false;
2370 	intel_dp->psr.su_region_et_enabled = false;
2371 	intel_dp->psr.psr2_sel_fetch_cff_enabled = false;
2372 	intel_dp->psr.active_non_psr_pipes = 0;
2373 	intel_dp->psr.pkg_c_latency_used = 0;
2374 }
2375 
2376 /**
2377  * intel_psr_disable - Disable PSR
2378  * @intel_dp: Intel DP
2379  * @old_crtc_state: old CRTC state
2380  *
2381  * This function needs to be called before disabling pipe.
2382  */
intel_psr_disable(struct intel_dp * intel_dp,const struct intel_crtc_state * old_crtc_state)2383 void intel_psr_disable(struct intel_dp *intel_dp,
2384 		       const struct intel_crtc_state *old_crtc_state)
2385 {
2386 	struct intel_display *display = to_intel_display(intel_dp);
2387 
2388 	if (!old_crtc_state->has_psr)
2389 		return;
2390 
2391 	if (drm_WARN_ON(display->drm, !CAN_PSR(intel_dp) &&
2392 			!CAN_PANEL_REPLAY(intel_dp)))
2393 		return;
2394 
2395 	mutex_lock(&intel_dp->psr.lock);
2396 
2397 	intel_psr_disable_locked(intel_dp);
2398 
2399 	intel_dp->psr.link_ok = false;
2400 
2401 	mutex_unlock(&intel_dp->psr.lock);
2402 	cancel_work_sync(&intel_dp->psr.work);
2403 	cancel_delayed_work_sync(&intel_dp->psr.dc3co_work);
2404 }
2405 
2406 /**
2407  * intel_psr_pause - Pause PSR
2408  * @intel_dp: Intel DP
2409  *
2410  * This function need to be called after enabling psr.
2411  */
intel_psr_pause(struct intel_dp * intel_dp)2412 void intel_psr_pause(struct intel_dp *intel_dp)
2413 {
2414 	struct intel_psr *psr = &intel_dp->psr;
2415 
2416 	if (!CAN_PSR(intel_dp) && !CAN_PANEL_REPLAY(intel_dp))
2417 		return;
2418 
2419 	mutex_lock(&psr->lock);
2420 
2421 	if (!psr->enabled) {
2422 		mutex_unlock(&psr->lock);
2423 		return;
2424 	}
2425 
2426 	if (intel_dp->psr.pause_counter++ == 0) {
2427 		intel_psr_exit(intel_dp);
2428 		intel_psr_wait_exit_locked(intel_dp);
2429 	}
2430 
2431 	mutex_unlock(&psr->lock);
2432 
2433 	cancel_work_sync(&psr->work);
2434 	cancel_delayed_work_sync(&psr->dc3co_work);
2435 }
2436 
2437 /**
2438  * intel_psr_resume - Resume PSR
2439  * @intel_dp: Intel DP
2440  *
2441  * This function need to be called after pausing psr.
2442  */
intel_psr_resume(struct intel_dp * intel_dp)2443 void intel_psr_resume(struct intel_dp *intel_dp)
2444 {
2445 	struct intel_display *display = to_intel_display(intel_dp);
2446 	struct intel_psr *psr = &intel_dp->psr;
2447 
2448 	if (!CAN_PSR(intel_dp) && !CAN_PANEL_REPLAY(intel_dp))
2449 		return;
2450 
2451 	mutex_lock(&psr->lock);
2452 
2453 	if (!psr->enabled)
2454 		goto out;
2455 
2456 	if (!psr->pause_counter) {
2457 		drm_warn(display->drm, "Unbalanced PSR pause/resume!\n");
2458 		goto out;
2459 	}
2460 
2461 	if (--intel_dp->psr.pause_counter == 0)
2462 		intel_psr_activate(intel_dp);
2463 
2464 out:
2465 	mutex_unlock(&psr->lock);
2466 }
2467 
2468 /**
2469  * intel_psr_needs_vblank_notification - Check if PSR need vblank enable/disable
2470  * notification.
2471  * @crtc_state: CRTC status
2472  *
2473  * We need to block DC6 entry in case of Panel Replay as enabling VBI doesn't
2474  * prevent it in case of Panel Replay. Panel Replay switches main link off on
2475  * DC entry. This means vblank interrupts are not fired and is a problem if
2476  * user-space is polling for vblank events. Also Wa_16025596647 needs
2477  * information when vblank is enabled/disabled.
2478  */
intel_psr_needs_vblank_notification(const struct intel_crtc_state * crtc_state)2479 bool intel_psr_needs_vblank_notification(const struct intel_crtc_state *crtc_state)
2480 {
2481 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
2482 	struct intel_display *display = to_intel_display(crtc_state);
2483 	struct intel_encoder *encoder;
2484 
2485 	for_each_encoder_on_crtc(crtc->base.dev, &crtc->base, encoder) {
2486 		struct intel_dp *intel_dp;
2487 
2488 		if (!intel_encoder_is_dp(encoder))
2489 			continue;
2490 
2491 		intel_dp = enc_to_intel_dp(encoder);
2492 
2493 		if (!intel_dp_is_edp(intel_dp))
2494 			continue;
2495 
2496 		if (CAN_PANEL_REPLAY(intel_dp))
2497 			return true;
2498 
2499 		if ((DISPLAY_VER(display) == 20 ||
2500 		     IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0)) &&
2501 		    CAN_PSR(intel_dp))
2502 			return true;
2503 	}
2504 
2505 	return false;
2506 }
2507 
2508 /**
2509  * intel_psr_trigger_frame_change_event - Trigger "Frame Change" event
2510  * @dsb: DSB context
2511  * @state: the atomic state
2512  * @crtc: the CRTC
2513  *
2514  * Generate PSR "Frame Change" event.
2515  */
intel_psr_trigger_frame_change_event(struct intel_dsb * dsb,struct intel_atomic_state * state,struct intel_crtc * crtc)2516 void intel_psr_trigger_frame_change_event(struct intel_dsb *dsb,
2517 					  struct intel_atomic_state *state,
2518 					  struct intel_crtc *crtc)
2519 {
2520 	const struct intel_crtc_state *crtc_state =
2521 		intel_pre_commit_crtc_state(state, crtc);
2522 	struct intel_display *display = to_intel_display(crtc);
2523 
2524 	if (crtc_state->has_psr)
2525 		intel_de_write_dsb(display, dsb,
2526 				   CURSURFLIVE(display, crtc->pipe), 0);
2527 }
2528 
2529 /**
2530  * intel_psr_min_set_context_latency - Minimum 'set context latency' lines needed by PSR
2531  * @crtc_state: the crtc state
2532  *
2533  * Return minimum SCL lines/delay needed by PSR.
2534  */
intel_psr_min_set_context_latency(const struct intel_crtc_state * crtc_state)2535 int intel_psr_min_set_context_latency(const struct intel_crtc_state *crtc_state)
2536 {
2537 
2538 	return _intel_psr_min_set_context_latency(crtc_state,
2539 						  crtc_state->has_panel_replay,
2540 						  crtc_state->has_sel_update);
2541 }
2542 
man_trk_ctl_enable_bit_get(struct intel_display * display)2543 static u32 man_trk_ctl_enable_bit_get(struct intel_display *display)
2544 {
2545 	return display->platform.alderlake_p || DISPLAY_VER(display) >= 14 ? 0 :
2546 		PSR2_MAN_TRK_CTL_ENABLE;
2547 }
2548 
man_trk_ctl_single_full_frame_bit_get(struct intel_display * display)2549 static u32 man_trk_ctl_single_full_frame_bit_get(struct intel_display *display)
2550 {
2551 	return display->platform.alderlake_p || DISPLAY_VER(display) >= 14 ?
2552 	       ADLP_PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME :
2553 	       PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME;
2554 }
2555 
man_trk_ctl_partial_frame_bit_get(struct intel_display * display)2556 static u32 man_trk_ctl_partial_frame_bit_get(struct intel_display *display)
2557 {
2558 	return display->platform.alderlake_p || DISPLAY_VER(display) >= 14 ?
2559 	       ADLP_PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE :
2560 	       PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
2561 }
2562 
man_trk_ctl_continuos_full_frame(struct intel_display * display)2563 static u32 man_trk_ctl_continuos_full_frame(struct intel_display *display)
2564 {
2565 	return display->platform.alderlake_p || DISPLAY_VER(display) >= 14 ?
2566 	       ADLP_PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME :
2567 	       PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME;
2568 }
2569 
intel_psr_force_update(struct intel_dp * intel_dp)2570 static void intel_psr_force_update(struct intel_dp *intel_dp)
2571 {
2572 	struct intel_display *display = to_intel_display(intel_dp);
2573 
2574 	/*
2575 	 * Display WA #0884: skl+
2576 	 * This documented WA for bxt can be safely applied
2577 	 * broadly so we can force HW tracking to exit PSR
2578 	 * instead of disabling and re-enabling.
2579 	 * Workaround tells us to write 0 to CUR_SURFLIVE_A,
2580 	 * but it makes more sense write to the current active
2581 	 * pipe.
2582 	 *
2583 	 * This workaround do not exist for platforms with display 10 or newer
2584 	 * but testing proved that it works for up display 13, for newer
2585 	 * than that testing will be needed.
2586 	 */
2587 	intel_de_write(display, CURSURFLIVE(display, intel_dp->psr.pipe), 0);
2588 }
2589 
intel_psr2_program_trans_man_trk_ctl(struct intel_dsb * dsb,const struct intel_crtc_state * crtc_state)2590 void intel_psr2_program_trans_man_trk_ctl(struct intel_dsb *dsb,
2591 					  const struct intel_crtc_state *crtc_state)
2592 {
2593 	struct intel_display *display = to_intel_display(crtc_state);
2594 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
2595 	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
2596 	struct intel_encoder *encoder;
2597 
2598 	if (!crtc_state->enable_psr2_sel_fetch)
2599 		return;
2600 
2601 	for_each_intel_encoder_mask_with_psr(display->drm, encoder,
2602 					     crtc_state->uapi.encoder_mask) {
2603 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2604 
2605 		if (!dsb)
2606 			lockdep_assert_held(&intel_dp->psr.lock);
2607 
2608 		if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_cff_enabled)
2609 			return;
2610 		break;
2611 	}
2612 
2613 	intel_de_write_dsb(display, dsb,
2614 			   PSR2_MAN_TRK_CTL(display, cpu_transcoder),
2615 			   crtc_state->psr2_man_track_ctl);
2616 
2617 	if (!crtc_state->enable_psr2_su_region_et)
2618 		return;
2619 
2620 	intel_de_write_dsb(display, dsb, PIPE_SRCSZ_ERLY_TPT(crtc->pipe),
2621 			   crtc_state->pipe_srcsz_early_tpt);
2622 
2623 	if (!crtc_state->dsc.compression_enable)
2624 		return;
2625 
2626 	intel_dsc_su_et_parameters_configure(dsb, encoder, crtc_state,
2627 					     drm_rect_height(&crtc_state->psr2_su_area));
2628 }
2629 
psr2_man_trk_ctl_calc(struct intel_crtc_state * crtc_state,bool full_update)2630 static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
2631 				  bool full_update)
2632 {
2633 	struct intel_display *display = to_intel_display(crtc_state);
2634 	u32 val = man_trk_ctl_enable_bit_get(display);
2635 
2636 	/* SF partial frame enable has to be set even on full update */
2637 	val |= man_trk_ctl_partial_frame_bit_get(display);
2638 
2639 	if (full_update) {
2640 		val |= man_trk_ctl_continuos_full_frame(display);
2641 		goto exit;
2642 	}
2643 
2644 	if (crtc_state->psr2_su_area.y1 == -1)
2645 		goto exit;
2646 
2647 	if (display->platform.alderlake_p || DISPLAY_VER(display) >= 14) {
2648 		val |= ADLP_PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(crtc_state->psr2_su_area.y1);
2649 		val |= ADLP_PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(crtc_state->psr2_su_area.y2 - 1);
2650 	} else {
2651 		drm_WARN_ON(crtc_state->uapi.crtc->dev,
2652 			    crtc_state->psr2_su_area.y1 % 4 ||
2653 			    crtc_state->psr2_su_area.y2 % 4);
2654 
2655 		val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(
2656 			crtc_state->psr2_su_area.y1 / 4 + 1);
2657 		val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(
2658 			crtc_state->psr2_su_area.y2 / 4 + 1);
2659 	}
2660 exit:
2661 	crtc_state->psr2_man_track_ctl = val;
2662 }
2663 
psr2_pipe_srcsz_early_tpt_calc(struct intel_crtc_state * crtc_state,bool full_update)2664 static u32 psr2_pipe_srcsz_early_tpt_calc(struct intel_crtc_state *crtc_state,
2665 					  bool full_update)
2666 {
2667 	int width, height;
2668 
2669 	if (!crtc_state->enable_psr2_su_region_et || full_update)
2670 		return 0;
2671 
2672 	width = drm_rect_width(&crtc_state->psr2_su_area);
2673 	height = drm_rect_height(&crtc_state->psr2_su_area);
2674 
2675 	return PIPESRC_WIDTH(width - 1) | PIPESRC_HEIGHT(height - 1);
2676 }
2677 
clip_area_update(struct drm_rect * overlap_damage_area,struct drm_rect * damage_area,struct drm_rect * pipe_src)2678 static void clip_area_update(struct drm_rect *overlap_damage_area,
2679 			     struct drm_rect *damage_area,
2680 			     struct drm_rect *pipe_src)
2681 {
2682 	if (!drm_rect_intersect(damage_area, pipe_src))
2683 		return;
2684 
2685 	if (overlap_damage_area->y1 == -1) {
2686 		overlap_damage_area->y1 = damage_area->y1;
2687 		overlap_damage_area->y2 = damage_area->y2;
2688 		return;
2689 	}
2690 
2691 	if (damage_area->y1 < overlap_damage_area->y1)
2692 		overlap_damage_area->y1 = damage_area->y1;
2693 
2694 	if (damage_area->y2 > overlap_damage_area->y2)
2695 		overlap_damage_area->y2 = damage_area->y2;
2696 }
2697 
intel_psr2_sel_fetch_pipe_alignment(struct intel_crtc_state * crtc_state)2698 static bool intel_psr2_sel_fetch_pipe_alignment(struct intel_crtc_state *crtc_state)
2699 {
2700 	struct intel_display *display = to_intel_display(crtc_state);
2701 	const struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config;
2702 	u16 y_alignment;
2703 	bool su_area_changed = false;
2704 
2705 	/* ADLP aligns the SU region to vdsc slice height in case dsc is enabled */
2706 	if (crtc_state->dsc.compression_enable &&
2707 	    (display->platform.alderlake_p || DISPLAY_VER(display) >= 14))
2708 		y_alignment = vdsc_cfg->slice_height;
2709 	else
2710 		y_alignment = crtc_state->su_y_granularity;
2711 
2712 	if (crtc_state->psr2_su_area.y1 % y_alignment) {
2713 		crtc_state->psr2_su_area.y1 -= crtc_state->psr2_su_area.y1 % y_alignment;
2714 		su_area_changed = true;
2715 	}
2716 
2717 	if (crtc_state->psr2_su_area.y2 % y_alignment) {
2718 		crtc_state->psr2_su_area.y2 = ((crtc_state->psr2_su_area.y2 /
2719 						y_alignment) + 1) * y_alignment;
2720 		su_area_changed = true;
2721 	}
2722 
2723 	return su_area_changed;
2724 }
2725 
2726 /*
2727  * When early transport is in use we need to extend SU area to cover
2728  * cursor fully when cursor is in SU area.
2729  */
2730 static void
intel_psr2_sel_fetch_et_alignment(struct intel_atomic_state * state,struct intel_crtc * crtc,bool * cursor_in_su_area)2731 intel_psr2_sel_fetch_et_alignment(struct intel_atomic_state *state,
2732 				  struct intel_crtc *crtc,
2733 				  bool *cursor_in_su_area)
2734 {
2735 	struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
2736 	struct intel_plane_state *new_plane_state;
2737 	struct intel_plane *plane;
2738 	int i;
2739 
2740 	if (!crtc_state->enable_psr2_su_region_et)
2741 		return;
2742 
2743 	for_each_new_intel_plane_in_state(state, plane, new_plane_state, i) {
2744 		struct drm_rect inter;
2745 
2746 		if (new_plane_state->hw.crtc != crtc_state->uapi.crtc)
2747 			continue;
2748 
2749 		if (plane->id != PLANE_CURSOR)
2750 			continue;
2751 
2752 		if (!new_plane_state->uapi.visible)
2753 			continue;
2754 
2755 		inter = crtc_state->psr2_su_area;
2756 		if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
2757 			continue;
2758 
2759 		clip_area_update(&crtc_state->psr2_su_area, &new_plane_state->uapi.dst,
2760 				 &crtc_state->pipe_src);
2761 		*cursor_in_su_area = true;
2762 	}
2763 }
2764 
2765 /*
2766  * TODO: Not clear how to handle planes with negative position,
2767  * also planes are not updated if they have a negative X
2768  * position so for now doing a full update in this cases
2769  *
2770  * Plane scaling and rotation is not supported by selective fetch and both
2771  * properties can change without a modeset, so need to be check at every
2772  * atomic commit.
2773  */
psr2_sel_fetch_plane_state_supported(const struct intel_plane_state * plane_state)2774 static bool psr2_sel_fetch_plane_state_supported(const struct intel_plane_state *plane_state)
2775 {
2776 	if (plane_state->uapi.dst.y1 < 0 ||
2777 	    plane_state->uapi.dst.x1 < 0 ||
2778 	    plane_state->scaler_id >= 0 ||
2779 	    plane_state->hw.rotation != DRM_MODE_ROTATE_0)
2780 		return false;
2781 
2782 	return true;
2783 }
2784 
2785 /*
2786  * Check for pipe properties that is not supported by selective fetch.
2787  *
2788  * TODO: pipe scaling causes a modeset but skl_update_scaler_crtc() is executed
2789  * after intel_psr_compute_config(), so for now keeping PSR2 selective fetch
2790  * enabled and going to the full update path.
2791  */
psr2_sel_fetch_pipe_state_supported(const struct intel_crtc_state * crtc_state)2792 static bool psr2_sel_fetch_pipe_state_supported(const struct intel_crtc_state *crtc_state)
2793 {
2794 	if (crtc_state->scaler_state.scaler_id >= 0 ||
2795 	    crtc_state->async_flip_planes)
2796 		return false;
2797 
2798 	return true;
2799 }
2800 
2801 /* Wa 14019834836 */
intel_psr_apply_pr_link_on_su_wa(struct intel_crtc_state * crtc_state)2802 static void intel_psr_apply_pr_link_on_su_wa(struct intel_crtc_state *crtc_state)
2803 {
2804 	struct intel_display *display = to_intel_display(crtc_state);
2805 	struct intel_encoder *encoder;
2806 	int hactive_limit;
2807 
2808 	if (crtc_state->psr2_su_area.y1 != 0 ||
2809 	    crtc_state->psr2_su_area.y2 != 0)
2810 		return;
2811 
2812 	if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420)
2813 		hactive_limit = intel_dp_is_uhbr(crtc_state) ? 1230 : 546;
2814 	else
2815 		hactive_limit = intel_dp_is_uhbr(crtc_state) ? 615 : 273;
2816 
2817 	if (crtc_state->hw.adjusted_mode.hdisplay < hactive_limit)
2818 		return;
2819 
2820 	for_each_intel_encoder_mask_with_psr(display->drm, encoder,
2821 					     crtc_state->uapi.encoder_mask) {
2822 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2823 
2824 		if (!intel_dp_is_edp(intel_dp) &&
2825 		    intel_dp->psr.panel_replay_enabled &&
2826 		    intel_dp->psr.sel_update_enabled) {
2827 			crtc_state->psr2_su_area.y2++;
2828 			return;
2829 		}
2830 	}
2831 }
2832 
2833 static void
intel_psr_apply_su_area_workarounds(struct intel_crtc_state * crtc_state)2834 intel_psr_apply_su_area_workarounds(struct intel_crtc_state *crtc_state)
2835 {
2836 	struct intel_display *display = to_intel_display(crtc_state);
2837 
2838 	/* Wa_14014971492 */
2839 	if (!crtc_state->has_panel_replay &&
2840 	    ((IS_DISPLAY_VERx100_STEP(display, 1400, STEP_A0, STEP_B0) ||
2841 	      display->platform.alderlake_p || display->platform.tigerlake)) &&
2842 	    crtc_state->splitter.enable)
2843 		crtc_state->psr2_su_area.y1 = 0;
2844 
2845 	/* Wa 14019834836 */
2846 	if (DISPLAY_VER(display) == 30)
2847 		intel_psr_apply_pr_link_on_su_wa(crtc_state);
2848 }
2849 
intel_psr2_sel_fetch_update(struct intel_atomic_state * state,struct intel_crtc * crtc)2850 int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
2851 				struct intel_crtc *crtc)
2852 {
2853 	struct intel_display *display = to_intel_display(state);
2854 	struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
2855 	struct intel_plane_state *new_plane_state, *old_plane_state;
2856 	struct intel_plane *plane;
2857 	bool full_update = false, su_area_changed;
2858 	int i, ret;
2859 
2860 	if (!crtc_state->enable_psr2_sel_fetch)
2861 		return 0;
2862 
2863 	if (!psr2_sel_fetch_pipe_state_supported(crtc_state)) {
2864 		full_update = true;
2865 		goto skip_sel_fetch_set_loop;
2866 	}
2867 
2868 	crtc_state->psr2_su_area.x1 = 0;
2869 	crtc_state->psr2_su_area.y1 = -1;
2870 	crtc_state->psr2_su_area.x2 = drm_rect_width(&crtc_state->pipe_src);
2871 	crtc_state->psr2_su_area.y2 = -1;
2872 
2873 	/*
2874 	 * Calculate minimal selective fetch area of each plane and calculate
2875 	 * the pipe damaged area.
2876 	 * In the next loop the plane selective fetch area will actually be set
2877 	 * using whole pipe damaged area.
2878 	 */
2879 	for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
2880 					     new_plane_state, i) {
2881 		struct drm_rect src, damaged_area = { .x1 = 0, .y1 = -1,
2882 						      .x2 = INT_MAX };
2883 
2884 		if (new_plane_state->hw.crtc != crtc_state->uapi.crtc)
2885 			continue;
2886 
2887 		if (!new_plane_state->uapi.visible &&
2888 		    !old_plane_state->uapi.visible)
2889 			continue;
2890 
2891 		if (!psr2_sel_fetch_plane_state_supported(new_plane_state)) {
2892 			full_update = true;
2893 			break;
2894 		}
2895 
2896 		/*
2897 		 * If visibility or plane moved, mark the whole plane area as
2898 		 * damaged as it needs to be complete redraw in the new and old
2899 		 * position.
2900 		 */
2901 		if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
2902 		    !drm_rect_equals(&new_plane_state->uapi.dst,
2903 				     &old_plane_state->uapi.dst)) {
2904 			if (old_plane_state->uapi.visible) {
2905 				damaged_area.y1 = old_plane_state->uapi.dst.y1;
2906 				damaged_area.y2 = old_plane_state->uapi.dst.y2;
2907 				clip_area_update(&crtc_state->psr2_su_area, &damaged_area,
2908 						 &crtc_state->pipe_src);
2909 			}
2910 
2911 			if (new_plane_state->uapi.visible) {
2912 				damaged_area.y1 = new_plane_state->uapi.dst.y1;
2913 				damaged_area.y2 = new_plane_state->uapi.dst.y2;
2914 				clip_area_update(&crtc_state->psr2_su_area, &damaged_area,
2915 						 &crtc_state->pipe_src);
2916 			}
2917 			continue;
2918 		} else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha) {
2919 			/* If alpha changed mark the whole plane area as damaged */
2920 			damaged_area.y1 = new_plane_state->uapi.dst.y1;
2921 			damaged_area.y2 = new_plane_state->uapi.dst.y2;
2922 			clip_area_update(&crtc_state->psr2_su_area, &damaged_area,
2923 					 &crtc_state->pipe_src);
2924 			continue;
2925 		}
2926 
2927 		src = drm_plane_state_src(&new_plane_state->uapi);
2928 		drm_rect_fp_to_int(&src, &src);
2929 
2930 		if (!drm_atomic_helper_damage_merged(&old_plane_state->uapi,
2931 						     &new_plane_state->uapi, &damaged_area))
2932 			continue;
2933 
2934 		damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
2935 		damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
2936 		damaged_area.x1 += new_plane_state->uapi.dst.x1 - src.x1;
2937 		damaged_area.x2 += new_plane_state->uapi.dst.x1 - src.x1;
2938 
2939 		clip_area_update(&crtc_state->psr2_su_area, &damaged_area, &crtc_state->pipe_src);
2940 	}
2941 
2942 	/*
2943 	 * TODO: For now we are just using full update in case
2944 	 * selective fetch area calculation fails. To optimize this we
2945 	 * should identify cases where this happens and fix the area
2946 	 * calculation for those.
2947 	 */
2948 	if (crtc_state->psr2_su_area.y1 == -1) {
2949 		drm_info_once(display->drm,
2950 			      "Selective fetch area calculation failed in pipe %c\n",
2951 			      pipe_name(crtc->pipe));
2952 		full_update = true;
2953 	}
2954 
2955 	if (full_update)
2956 		goto skip_sel_fetch_set_loop;
2957 
2958 	intel_psr_apply_su_area_workarounds(crtc_state);
2959 
2960 	ret = drm_atomic_add_affected_planes(&state->base, &crtc->base);
2961 	if (ret)
2962 		return ret;
2963 
2964 	do {
2965 		bool cursor_in_su_area;
2966 
2967 		/*
2968 		 * Adjust su area to cover cursor fully as necessary
2969 		 * (early transport). This needs to be done after
2970 		 * drm_atomic_add_affected_planes to ensure visible
2971 		 * cursor is added into affected planes even when
2972 		 * cursor is not updated by itself.
2973 		 */
2974 		intel_psr2_sel_fetch_et_alignment(state, crtc, &cursor_in_su_area);
2975 
2976 		su_area_changed = intel_psr2_sel_fetch_pipe_alignment(crtc_state);
2977 
2978 		/*
2979 		 * If the cursor was outside the SU area before
2980 		 * alignment, the alignment step (which only expands
2981 		 * SU) may pull the cursor partially inside, so we
2982 		 * must run ET alignment again to fully cover it. But
2983 		 * if the cursor was already fully inside before
2984 		 * alignment, expanding the SU area won't change that,
2985 		 * so no further work is needed.
2986 		 */
2987 		if (cursor_in_su_area)
2988 			break;
2989 	} while (su_area_changed);
2990 
2991 	/*
2992 	 * Now that we have the pipe damaged area check if it intersect with
2993 	 * every plane, if it does set the plane selective fetch area.
2994 	 */
2995 	for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
2996 					     new_plane_state, i) {
2997 		struct drm_rect *sel_fetch_area, inter;
2998 		struct intel_plane *linked = new_plane_state->planar_linked_plane;
2999 
3000 		if (new_plane_state->hw.crtc != crtc_state->uapi.crtc ||
3001 		    !new_plane_state->uapi.visible)
3002 			continue;
3003 
3004 		inter = crtc_state->psr2_su_area;
3005 		sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
3006 		if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst)) {
3007 			sel_fetch_area->y1 = -1;
3008 			sel_fetch_area->y2 = -1;
3009 			/*
3010 			 * if plane sel fetch was previously enabled ->
3011 			 * disable it
3012 			 */
3013 			if (drm_rect_height(&old_plane_state->psr2_sel_fetch_area) > 0)
3014 				crtc_state->update_planes |= BIT(plane->id);
3015 
3016 			continue;
3017 		}
3018 
3019 		if (!psr2_sel_fetch_plane_state_supported(new_plane_state)) {
3020 			full_update = true;
3021 			break;
3022 		}
3023 
3024 		sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
3025 		sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
3026 		sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
3027 		crtc_state->update_planes |= BIT(plane->id);
3028 
3029 		/*
3030 		 * Sel_fetch_area is calculated for UV plane. Use
3031 		 * same area for Y plane as well.
3032 		 */
3033 		if (linked) {
3034 			struct intel_plane_state *linked_new_plane_state;
3035 			struct drm_rect *linked_sel_fetch_area;
3036 
3037 			linked_new_plane_state = intel_atomic_get_plane_state(state, linked);
3038 			if (IS_ERR(linked_new_plane_state))
3039 				return PTR_ERR(linked_new_plane_state);
3040 
3041 			linked_sel_fetch_area = &linked_new_plane_state->psr2_sel_fetch_area;
3042 			linked_sel_fetch_area->y1 = sel_fetch_area->y1;
3043 			linked_sel_fetch_area->y2 = sel_fetch_area->y2;
3044 			crtc_state->update_planes |= BIT(linked->id);
3045 		}
3046 	}
3047 
3048 skip_sel_fetch_set_loop:
3049 	if (full_update)
3050 		clip_area_update(&crtc_state->psr2_su_area, &crtc_state->pipe_src,
3051 				 &crtc_state->pipe_src);
3052 
3053 	psr2_man_trk_ctl_calc(crtc_state, full_update);
3054 	crtc_state->pipe_srcsz_early_tpt =
3055 		psr2_pipe_srcsz_early_tpt_calc(crtc_state, full_update);
3056 	return 0;
3057 }
3058 
intel_psr2_panic_force_full_update(const struct intel_crtc_state * crtc_state)3059 void intel_psr2_panic_force_full_update(const struct intel_crtc_state *crtc_state)
3060 {
3061 	struct intel_display *display = to_intel_display(crtc_state);
3062 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
3063 	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
3064 	u32 val = man_trk_ctl_enable_bit_get(display);
3065 
3066 	/* SF partial frame enable has to be set even on full update */
3067 	val |= man_trk_ctl_partial_frame_bit_get(display);
3068 	val |= man_trk_ctl_continuos_full_frame(display);
3069 
3070 	/* Directly write the register */
3071 	intel_de_write_fw(display, PSR2_MAN_TRK_CTL(display, cpu_transcoder), val);
3072 
3073 	if (!crtc_state->enable_psr2_su_region_et)
3074 		return;
3075 
3076 	intel_de_write_fw(display, PIPE_SRCSZ_ERLY_TPT(crtc->pipe), 0);
3077 }
3078 
intel_psr_pre_plane_update(struct intel_atomic_state * state,struct intel_crtc * crtc)3079 void intel_psr_pre_plane_update(struct intel_atomic_state *state,
3080 				struct intel_crtc *crtc)
3081 {
3082 	struct intel_display *display = to_intel_display(state);
3083 	const struct intel_crtc_state *old_crtc_state =
3084 		intel_atomic_get_old_crtc_state(state, crtc);
3085 	const struct intel_crtc_state *new_crtc_state =
3086 		intel_atomic_get_new_crtc_state(state, crtc);
3087 	struct intel_encoder *encoder;
3088 
3089 	if (!HAS_PSR(display))
3090 		return;
3091 
3092 	for_each_intel_encoder_mask_with_psr(state->base.dev, encoder,
3093 					     old_crtc_state->uapi.encoder_mask) {
3094 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3095 		struct intel_psr *psr = &intel_dp->psr;
3096 
3097 		mutex_lock(&psr->lock);
3098 
3099 		if (!new_crtc_state->has_psr)
3100 			psr->no_psr_reason = new_crtc_state->no_psr_reason;
3101 
3102 		if (psr->enabled) {
3103 			/*
3104 			 * Reasons to disable:
3105 			 * - PSR disabled in new state
3106 			 * - All planes will go inactive
3107 			 * - Changing between PSR versions
3108 			 * - Region Early Transport changing
3109 			 * - Display WA #1136: skl, bxt
3110 			 */
3111 			if (intel_crtc_needs_modeset(new_crtc_state) ||
3112 			    !new_crtc_state->has_psr ||
3113 			    !new_crtc_state->active_planes ||
3114 			    new_crtc_state->has_sel_update != psr->sel_update_enabled ||
3115 			    new_crtc_state->enable_psr2_su_region_et != psr->su_region_et_enabled ||
3116 			    new_crtc_state->has_panel_replay != psr->panel_replay_enabled ||
3117 			    (DISPLAY_VER(display) < 11 && new_crtc_state->wm_level_disabled))
3118 				intel_psr_disable_locked(intel_dp);
3119 			else if (new_crtc_state->wm_level_disabled)
3120 				/* Wa_14015648006 */
3121 				wm_optimization_wa(intel_dp, new_crtc_state);
3122 		}
3123 
3124 		mutex_unlock(&psr->lock);
3125 	}
3126 }
3127 
3128 static void
verify_panel_replay_dsc_state(const struct intel_crtc_state * crtc_state)3129 verify_panel_replay_dsc_state(const struct intel_crtc_state *crtc_state)
3130 {
3131 	struct intel_display *display = to_intel_display(crtc_state);
3132 
3133 	if (!crtc_state->has_panel_replay)
3134 		return;
3135 
3136 	drm_WARN_ON(display->drm,
3137 		    intel_dsc_enabled_on_link(crtc_state) &&
3138 		    crtc_state->panel_replay_dsc_support ==
3139 		    INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED);
3140 }
3141 
intel_psr_post_plane_update(struct intel_atomic_state * state,struct intel_crtc * crtc)3142 void intel_psr_post_plane_update(struct intel_atomic_state *state,
3143 				 struct intel_crtc *crtc)
3144 {
3145 	struct intel_display *display = to_intel_display(state);
3146 	const struct intel_crtc_state *crtc_state =
3147 		intel_atomic_get_new_crtc_state(state, crtc);
3148 	struct intel_encoder *encoder;
3149 
3150 	if (!crtc_state->has_psr)
3151 		return;
3152 
3153 	verify_panel_replay_dsc_state(crtc_state);
3154 
3155 	for_each_intel_encoder_mask_with_psr(state->base.dev, encoder,
3156 					     crtc_state->uapi.encoder_mask) {
3157 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3158 		struct intel_psr *psr = &intel_dp->psr;
3159 		bool keep_disabled = false;
3160 
3161 		mutex_lock(&psr->lock);
3162 
3163 		drm_WARN_ON(display->drm,
3164 			    psr->enabled && !crtc_state->active_planes);
3165 
3166 		if (psr->sink_not_reliable)
3167 			keep_disabled = true;
3168 
3169 		if (!crtc_state->active_planes) {
3170 			psr->no_psr_reason = "All planes inactive";
3171 			keep_disabled = true;
3172 		}
3173 
3174 		/* Display WA #1136: skl, bxt */
3175 		if (DISPLAY_VER(display) < 11 && crtc_state->wm_level_disabled) {
3176 			psr->no_psr_reason = "Workaround #1136 for skl, bxt";
3177 			keep_disabled = true;
3178 		}
3179 
3180 		if (!psr->enabled && !keep_disabled)
3181 			intel_psr_enable_locked(intel_dp, crtc_state);
3182 		else if (psr->enabled && !crtc_state->wm_level_disabled)
3183 			/* Wa_14015648006 */
3184 			wm_optimization_wa(intel_dp, crtc_state);
3185 
3186 		/* Force a PSR exit when enabling CRC to avoid CRC timeouts */
3187 		if (crtc_state->crc_enabled && psr->enabled)
3188 			intel_psr_force_update(intel_dp);
3189 
3190 		/*
3191 		 * Clear possible busy bits in case we have
3192 		 * invalidate -> flip -> flush sequence.
3193 		 */
3194 		intel_dp->psr.busy_frontbuffer_bits = 0;
3195 
3196 		mutex_unlock(&psr->lock);
3197 	}
3198 }
3199 
3200 /*
3201  * From bspec: Panel Self Refresh (BDW+)
3202  * Max. time for PSR to idle = Inverse of the refresh rate + 6 ms of
3203  * exit training time + 1.5 ms of aux channel handshake. 50 ms is
3204  * defensive enough to cover everything.
3205  */
3206 #define PSR_IDLE_TIMEOUT_MS 50
3207 
3208 static int
_psr2_ready_for_pipe_update_locked(const struct intel_crtc_state * new_crtc_state,struct intel_dsb * dsb)3209 _psr2_ready_for_pipe_update_locked(const struct intel_crtc_state *new_crtc_state,
3210 				   struct intel_dsb *dsb)
3211 {
3212 	struct intel_display *display = to_intel_display(new_crtc_state);
3213 	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
3214 
3215 	/*
3216 	 * Any state lower than EDP_PSR2_STATUS_STATE_DEEP_SLEEP is enough.
3217 	 * As all higher states has bit 4 of PSR2 state set we can just wait for
3218 	 * EDP_PSR2_STATUS_STATE_DEEP_SLEEP to be cleared.
3219 	 */
3220 	if (dsb) {
3221 		intel_dsb_poll(dsb, EDP_PSR2_STATUS(display, cpu_transcoder),
3222 			       EDP_PSR2_STATUS_STATE_DEEP_SLEEP, 0, 200,
3223 			       PSR_IDLE_TIMEOUT_MS * 1000 / 200);
3224 		return true;
3225 	}
3226 
3227 	return intel_de_wait_for_clear_ms(display,
3228 				       EDP_PSR2_STATUS(display, cpu_transcoder),
3229 				       EDP_PSR2_STATUS_STATE_DEEP_SLEEP,
3230 				       PSR_IDLE_TIMEOUT_MS);
3231 }
3232 
3233 static int
_psr1_ready_for_pipe_update_locked(const struct intel_crtc_state * new_crtc_state,struct intel_dsb * dsb)3234 _psr1_ready_for_pipe_update_locked(const struct intel_crtc_state *new_crtc_state,
3235 				   struct intel_dsb *dsb)
3236 {
3237 	struct intel_display *display = to_intel_display(new_crtc_state);
3238 	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
3239 
3240 	if (dsb) {
3241 		intel_dsb_poll(dsb, psr_status_reg(display, cpu_transcoder),
3242 			       EDP_PSR_STATUS_STATE_MASK, 0, 200,
3243 			       PSR_IDLE_TIMEOUT_MS * 1000 / 200);
3244 		return true;
3245 	}
3246 
3247 	return intel_de_wait_for_clear_ms(display,
3248 				       psr_status_reg(display, cpu_transcoder),
3249 				       EDP_PSR_STATUS_STATE_MASK,
3250 				       PSR_IDLE_TIMEOUT_MS);
3251 }
3252 
3253 /**
3254  * intel_psr_wait_for_idle_locked - wait for PSR be ready for a pipe update
3255  * @new_crtc_state: new CRTC state
3256  *
3257  * This function is expected to be called from pipe_update_start() where it is
3258  * not expected to race with PSR enable or disable.
3259  */
intel_psr_wait_for_idle_locked(const struct intel_crtc_state * new_crtc_state)3260 void intel_psr_wait_for_idle_locked(const struct intel_crtc_state *new_crtc_state)
3261 {
3262 	struct intel_display *display = to_intel_display(new_crtc_state);
3263 	struct intel_encoder *encoder;
3264 
3265 	if (!new_crtc_state->has_psr)
3266 		return;
3267 
3268 	for_each_intel_encoder_mask_with_psr(display->drm, encoder,
3269 					     new_crtc_state->uapi.encoder_mask) {
3270 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3271 		int ret;
3272 
3273 		lockdep_assert_held(&intel_dp->psr.lock);
3274 
3275 		if (!intel_dp->psr.enabled || intel_dp->psr.panel_replay_enabled)
3276 			continue;
3277 
3278 		if (intel_dp->psr.sel_update_enabled)
3279 			ret = _psr2_ready_for_pipe_update_locked(new_crtc_state,
3280 								 NULL);
3281 		else
3282 			ret = _psr1_ready_for_pipe_update_locked(new_crtc_state,
3283 								 NULL);
3284 
3285 		if (ret)
3286 			drm_err(display->drm,
3287 				"PSR wait timed out, atomic update may fail\n");
3288 	}
3289 }
3290 
intel_psr_wait_for_idle_dsb(struct intel_dsb * dsb,const struct intel_crtc_state * new_crtc_state)3291 void intel_psr_wait_for_idle_dsb(struct intel_dsb *dsb,
3292 				 const struct intel_crtc_state *new_crtc_state)
3293 {
3294 	if (!new_crtc_state->has_psr || new_crtc_state->has_panel_replay)
3295 		return;
3296 
3297 	if (new_crtc_state->has_sel_update)
3298 		_psr2_ready_for_pipe_update_locked(new_crtc_state, dsb);
3299 	else
3300 		_psr1_ready_for_pipe_update_locked(new_crtc_state, dsb);
3301 }
3302 
__psr_wait_for_idle_locked(struct intel_dp * intel_dp)3303 static bool __psr_wait_for_idle_locked(struct intel_dp *intel_dp)
3304 {
3305 	struct intel_display *display = to_intel_display(intel_dp);
3306 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
3307 	i915_reg_t reg;
3308 	u32 mask;
3309 	int err;
3310 
3311 	if (!intel_dp->psr.enabled)
3312 		return false;
3313 
3314 	if (intel_dp_is_edp(intel_dp) && (intel_dp->psr.sel_update_enabled ||
3315 					  intel_dp->psr.panel_replay_enabled)) {
3316 		reg = EDP_PSR2_STATUS(display, cpu_transcoder);
3317 		mask = EDP_PSR2_STATUS_STATE_MASK;
3318 	} else {
3319 		reg = psr_status_reg(display, cpu_transcoder);
3320 		mask = EDP_PSR_STATUS_STATE_MASK;
3321 	}
3322 
3323 	mutex_unlock(&intel_dp->psr.lock);
3324 
3325 	err = intel_de_wait_for_clear_ms(display, reg, mask, 50);
3326 	if (err)
3327 		drm_err(display->drm,
3328 			"Timed out waiting for PSR Idle for re-enable\n");
3329 
3330 	/* After the unlocked wait, verify that PSR is still wanted! */
3331 	mutex_lock(&intel_dp->psr.lock);
3332 	return err == 0 && intel_dp->psr.enabled && !intel_dp->psr.pause_counter;
3333 }
3334 
intel_psr_fastset_force(struct intel_display * display)3335 static int intel_psr_fastset_force(struct intel_display *display)
3336 {
3337 	struct drm_connector_list_iter conn_iter;
3338 	struct drm_modeset_acquire_ctx ctx;
3339 	struct drm_atomic_state *state;
3340 	struct drm_connector *conn;
3341 	int err = 0;
3342 
3343 	state = drm_atomic_state_alloc(display->drm);
3344 	if (!state)
3345 		return -ENOMEM;
3346 
3347 	drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
3348 
3349 	state->acquire_ctx = &ctx;
3350 	to_intel_atomic_state(state)->internal = true;
3351 
3352 retry:
3353 	drm_connector_list_iter_begin(display->drm, &conn_iter);
3354 	drm_for_each_connector_iter(conn, &conn_iter) {
3355 		struct drm_connector_state *conn_state;
3356 		struct drm_crtc_state *crtc_state;
3357 
3358 		if (conn->connector_type != DRM_MODE_CONNECTOR_eDP)
3359 			continue;
3360 
3361 		conn_state = drm_atomic_get_connector_state(state, conn);
3362 		if (IS_ERR(conn_state)) {
3363 			err = PTR_ERR(conn_state);
3364 			break;
3365 		}
3366 
3367 		if (!conn_state->crtc)
3368 			continue;
3369 
3370 		crtc_state = drm_atomic_get_crtc_state(state, conn_state->crtc);
3371 		if (IS_ERR(crtc_state)) {
3372 			err = PTR_ERR(crtc_state);
3373 			break;
3374 		}
3375 
3376 		/* Mark mode as changed to trigger a pipe->update() */
3377 		crtc_state->mode_changed = true;
3378 	}
3379 	drm_connector_list_iter_end(&conn_iter);
3380 
3381 	if (err == 0)
3382 		err = drm_atomic_commit(state);
3383 
3384 	if (err == -EDEADLK) {
3385 		drm_atomic_state_clear(state);
3386 		err = drm_modeset_backoff(&ctx);
3387 		if (!err)
3388 			goto retry;
3389 	}
3390 
3391 	drm_modeset_drop_locks(&ctx);
3392 	drm_modeset_acquire_fini(&ctx);
3393 	drm_atomic_state_put(state);
3394 
3395 	return err;
3396 }
3397 
intel_psr_debug_set(struct intel_dp * intel_dp,u64 val)3398 int intel_psr_debug_set(struct intel_dp *intel_dp, u64 val)
3399 {
3400 	struct intel_display *display = to_intel_display(intel_dp);
3401 	const u32 mode = val & I915_PSR_DEBUG_MODE_MASK;
3402 	const u32 disable_bits = val & (I915_PSR_DEBUG_SU_REGION_ET_DISABLE |
3403 					I915_PSR_DEBUG_PANEL_REPLAY_DISABLE);
3404 	u32 old_mode, old_disable_bits;
3405 	int ret;
3406 
3407 	if (val & ~(I915_PSR_DEBUG_IRQ | I915_PSR_DEBUG_SU_REGION_ET_DISABLE |
3408 		    I915_PSR_DEBUG_PANEL_REPLAY_DISABLE |
3409 		    I915_PSR_DEBUG_MODE_MASK) ||
3410 	    mode > I915_PSR_DEBUG_ENABLE_SEL_FETCH) {
3411 		drm_dbg_kms(display->drm, "Invalid debug mask %llx\n", val);
3412 		return -EINVAL;
3413 	}
3414 
3415 	ret = mutex_lock_interruptible(&intel_dp->psr.lock);
3416 	if (ret)
3417 		return ret;
3418 
3419 	old_mode = intel_dp->psr.debug & I915_PSR_DEBUG_MODE_MASK;
3420 	old_disable_bits = intel_dp->psr.debug &
3421 		(I915_PSR_DEBUG_SU_REGION_ET_DISABLE |
3422 		 I915_PSR_DEBUG_PANEL_REPLAY_DISABLE);
3423 
3424 	intel_dp->psr.debug = val;
3425 
3426 	/*
3427 	 * Do it right away if it's already enabled, otherwise it will be done
3428 	 * when enabling the source.
3429 	 */
3430 	if (intel_dp->psr.enabled)
3431 		psr_irq_control(intel_dp);
3432 
3433 	mutex_unlock(&intel_dp->psr.lock);
3434 
3435 	if (old_mode != mode || old_disable_bits != disable_bits)
3436 		ret = intel_psr_fastset_force(display);
3437 
3438 	return ret;
3439 }
3440 
intel_psr_handle_irq(struct intel_dp * intel_dp)3441 static void intel_psr_handle_irq(struct intel_dp *intel_dp)
3442 {
3443 	struct intel_psr *psr = &intel_dp->psr;
3444 
3445 	intel_psr_disable_locked(intel_dp);
3446 	psr->sink_not_reliable = true;
3447 	/* let's make sure that sink is awaken */
3448 	drm_dp_dpcd_writeb(&intel_dp->aux, DP_SET_POWER, DP_SET_POWER_D0);
3449 }
3450 
intel_psr_work(struct work_struct * work)3451 static void intel_psr_work(struct work_struct *work)
3452 {
3453 	struct intel_dp *intel_dp =
3454 		container_of(work, typeof(*intel_dp), psr.work);
3455 
3456 	mutex_lock(&intel_dp->psr.lock);
3457 
3458 	if (!intel_dp->psr.enabled)
3459 		goto unlock;
3460 
3461 	if (READ_ONCE(intel_dp->psr.irq_aux_error)) {
3462 		intel_psr_handle_irq(intel_dp);
3463 		goto unlock;
3464 	}
3465 
3466 	if (intel_dp->psr.pause_counter)
3467 		goto unlock;
3468 
3469 	/*
3470 	 * We have to make sure PSR is ready for re-enable
3471 	 * otherwise it keeps disabled until next full enable/disable cycle.
3472 	 * PSR might take some time to get fully disabled
3473 	 * and be ready for re-enable.
3474 	 */
3475 	if (!__psr_wait_for_idle_locked(intel_dp))
3476 		goto unlock;
3477 
3478 	/*
3479 	 * The delayed work can race with an invalidate hence we need to
3480 	 * recheck. Since psr_flush first clears this and then reschedules we
3481 	 * won't ever miss a flush when bailing out here.
3482 	 */
3483 	if (intel_dp->psr.busy_frontbuffer_bits || intel_dp->psr.active)
3484 		goto unlock;
3485 
3486 	intel_psr_activate(intel_dp);
3487 unlock:
3488 	mutex_unlock(&intel_dp->psr.lock);
3489 }
3490 
intel_psr_configure_full_frame_update(struct intel_dp * intel_dp)3491 static void intel_psr_configure_full_frame_update(struct intel_dp *intel_dp)
3492 {
3493 	struct intel_display *display = to_intel_display(intel_dp);
3494 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
3495 
3496 	if (!intel_dp->psr.psr2_sel_fetch_enabled)
3497 		return;
3498 
3499 	if (DISPLAY_VER(display) >= 20)
3500 		intel_de_write(display, LNL_SFF_CTL(cpu_transcoder),
3501 			       LNL_SFF_CTL_SF_SINGLE_FULL_FRAME);
3502 	else
3503 		intel_de_write(display,
3504 			       PSR2_MAN_TRK_CTL(display, cpu_transcoder),
3505 			       man_trk_ctl_enable_bit_get(display) |
3506 			       man_trk_ctl_partial_frame_bit_get(display) |
3507 			       man_trk_ctl_single_full_frame_bit_get(display) |
3508 			       man_trk_ctl_continuos_full_frame(display));
3509 }
3510 
_psr_invalidate_handle(struct intel_dp * intel_dp)3511 static void _psr_invalidate_handle(struct intel_dp *intel_dp)
3512 {
3513 	struct intel_display *display = to_intel_display(intel_dp);
3514 
3515 	if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_enabled) {
3516 		if (!intel_dp->psr.psr2_sel_fetch_cff_enabled) {
3517 			intel_dp->psr.psr2_sel_fetch_cff_enabled = true;
3518 			intel_psr_configure_full_frame_update(intel_dp);
3519 		}
3520 
3521 		intel_psr_force_update(intel_dp);
3522 	} else {
3523 		intel_psr_exit(intel_dp);
3524 	}
3525 }
3526 
3527 /**
3528  * intel_psr_invalidate - Invalidate PSR
3529  * @display: display device
3530  * @frontbuffer_bits: frontbuffer plane tracking bits
3531  * @origin: which operation caused the invalidate
3532  *
3533  * Since the hardware frontbuffer tracking has gaps we need to integrate
3534  * with the software frontbuffer tracking. This function gets called every
3535  * time frontbuffer rendering starts and a buffer gets dirtied. PSR must be
3536  * disabled if the frontbuffer mask contains a buffer relevant to PSR.
3537  *
3538  * Dirty frontbuffers relevant to PSR are tracked in busy_frontbuffer_bits."
3539  */
intel_psr_invalidate(struct intel_display * display,unsigned frontbuffer_bits,enum fb_op_origin origin)3540 void intel_psr_invalidate(struct intel_display *display,
3541 			  unsigned frontbuffer_bits, enum fb_op_origin origin)
3542 {
3543 	struct intel_encoder *encoder;
3544 
3545 	if (origin == ORIGIN_FLIP)
3546 		return;
3547 
3548 	for_each_intel_encoder_with_psr(display->drm, encoder) {
3549 		unsigned int pipe_frontbuffer_bits = frontbuffer_bits;
3550 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3551 
3552 		mutex_lock(&intel_dp->psr.lock);
3553 		if (!intel_dp->psr.enabled) {
3554 			mutex_unlock(&intel_dp->psr.lock);
3555 			continue;
3556 		}
3557 
3558 		pipe_frontbuffer_bits &=
3559 			INTEL_FRONTBUFFER_ALL_MASK(intel_dp->psr.pipe);
3560 		intel_dp->psr.busy_frontbuffer_bits |= pipe_frontbuffer_bits;
3561 
3562 		if (pipe_frontbuffer_bits)
3563 			_psr_invalidate_handle(intel_dp);
3564 
3565 		mutex_unlock(&intel_dp->psr.lock);
3566 	}
3567 }
3568 /*
3569  * When we will be completely rely on PSR2 S/W tracking in future,
3570  * intel_psr_flush() will invalidate and flush the PSR for ORIGIN_FLIP
3571  * event also therefore tgl_dc3co_flush_locked() require to be changed
3572  * accordingly in future.
3573  */
3574 static void
tgl_dc3co_flush_locked(struct intel_dp * intel_dp,unsigned int frontbuffer_bits,enum fb_op_origin origin)3575 tgl_dc3co_flush_locked(struct intel_dp *intel_dp, unsigned int frontbuffer_bits,
3576 		       enum fb_op_origin origin)
3577 {
3578 	struct intel_display *display = to_intel_display(intel_dp);
3579 
3580 	if (!intel_dp->psr.dc3co_exitline || !intel_dp->psr.sel_update_enabled ||
3581 	    !intel_dp->psr.active)
3582 		return;
3583 
3584 	/*
3585 	 * At every frontbuffer flush flip event modified delay of delayed work,
3586 	 * when delayed work schedules that means display has been idle.
3587 	 */
3588 	if (!(frontbuffer_bits &
3589 	    INTEL_FRONTBUFFER_ALL_MASK(intel_dp->psr.pipe)))
3590 		return;
3591 
3592 	tgl_psr2_enable_dc3co(intel_dp);
3593 	mod_delayed_work(display->wq.unordered, &intel_dp->psr.dc3co_work,
3594 			 intel_dp->psr.dc3co_exit_delay);
3595 }
3596 
_psr_flush_handle(struct intel_dp * intel_dp)3597 static void _psr_flush_handle(struct intel_dp *intel_dp)
3598 {
3599 	struct intel_display *display = to_intel_display(intel_dp);
3600 
3601 	if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_enabled) {
3602 		/* Selective fetch prior LNL */
3603 		if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
3604 			/* can we turn CFF off? */
3605 			if (intel_dp->psr.busy_frontbuffer_bits == 0)
3606 				intel_dp->psr.psr2_sel_fetch_cff_enabled = false;
3607 		}
3608 
3609 		/*
3610 		 * Still keep cff bit enabled as we don't have proper SU
3611 		 * configuration in case update is sent for any reason after
3612 		 * sff bit gets cleared by the HW on next vblank.
3613 		 *
3614 		 * NOTE: Setting cff bit is not needed for LunarLake onwards as
3615 		 * we have own register for SFF bit and we are not overwriting
3616 		 * existing SU configuration
3617 		 */
3618 		intel_psr_configure_full_frame_update(intel_dp);
3619 
3620 		intel_psr_force_update(intel_dp);
3621 	} else if (!intel_dp->psr.psr2_sel_fetch_enabled) {
3622 		/*
3623 		 * PSR1 on all platforms
3624 		 * PSR2 HW tracking
3625 		 * Panel Replay Full frame update
3626 		 */
3627 		intel_psr_force_update(intel_dp);
3628 	} else {
3629 		/* Selective update LNL onwards */
3630 		intel_psr_exit(intel_dp);
3631 	}
3632 
3633 	if (!intel_dp->psr.active && !intel_dp->psr.busy_frontbuffer_bits)
3634 		queue_work(display->wq.unordered, &intel_dp->psr.work);
3635 }
3636 
3637 /**
3638  * intel_psr_flush - Flush PSR
3639  * @display: display device
3640  * @frontbuffer_bits: frontbuffer plane tracking bits
3641  * @origin: which operation caused the flush
3642  *
3643  * Since the hardware frontbuffer tracking has gaps we need to integrate
3644  * with the software frontbuffer tracking. This function gets called every
3645  * time frontbuffer rendering has completed and flushed out to memory. PSR
3646  * can be enabled again if no other frontbuffer relevant to PSR is dirty.
3647  *
3648  * Dirty frontbuffers relevant to PSR are tracked in busy_frontbuffer_bits.
3649  */
intel_psr_flush(struct intel_display * display,unsigned frontbuffer_bits,enum fb_op_origin origin)3650 void intel_psr_flush(struct intel_display *display,
3651 		     unsigned frontbuffer_bits, enum fb_op_origin origin)
3652 {
3653 	struct intel_encoder *encoder;
3654 
3655 	for_each_intel_encoder_with_psr(display->drm, encoder) {
3656 		unsigned int pipe_frontbuffer_bits = frontbuffer_bits;
3657 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3658 
3659 		mutex_lock(&intel_dp->psr.lock);
3660 		if (!intel_dp->psr.enabled) {
3661 			mutex_unlock(&intel_dp->psr.lock);
3662 			continue;
3663 		}
3664 
3665 		pipe_frontbuffer_bits &=
3666 			INTEL_FRONTBUFFER_ALL_MASK(intel_dp->psr.pipe);
3667 		intel_dp->psr.busy_frontbuffer_bits &= ~pipe_frontbuffer_bits;
3668 
3669 		/*
3670 		 * If the PSR is paused by an explicit intel_psr_paused() call,
3671 		 * we have to ensure that the PSR is not activated until
3672 		 * intel_psr_resume() is called.
3673 		 */
3674 		if (intel_dp->psr.pause_counter)
3675 			goto unlock;
3676 
3677 		if (origin == ORIGIN_FLIP ||
3678 		    (origin == ORIGIN_CURSOR_UPDATE &&
3679 		     !intel_dp->psr.psr2_sel_fetch_enabled)) {
3680 			tgl_dc3co_flush_locked(intel_dp, frontbuffer_bits, origin);
3681 			goto unlock;
3682 		}
3683 
3684 		if (pipe_frontbuffer_bits == 0)
3685 			goto unlock;
3686 
3687 		/* By definition flush = invalidate + flush */
3688 		_psr_flush_handle(intel_dp);
3689 unlock:
3690 		mutex_unlock(&intel_dp->psr.lock);
3691 	}
3692 }
3693 
3694 /**
3695  * intel_psr_init - Init basic PSR work and mutex.
3696  * @intel_dp: Intel DP
3697  *
3698  * This function is called after the initializing connector.
3699  * (the initializing of connector treats the handling of connector capabilities)
3700  * And it initializes basic PSR stuff for each DP Encoder.
3701  */
intel_psr_init(struct intel_dp * intel_dp)3702 void intel_psr_init(struct intel_dp *intel_dp)
3703 {
3704 	struct intel_display *display = to_intel_display(intel_dp);
3705 	struct intel_connector *connector = intel_dp->attached_connector;
3706 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3707 
3708 	if (!(HAS_PSR(display) || HAS_DP20(display)))
3709 		return;
3710 
3711 	/*
3712 	 * HSW spec explicitly says PSR is tied to port A.
3713 	 * BDW+ platforms have a instance of PSR registers per transcoder but
3714 	 * BDW, GEN9 and GEN11 are not validated by HW team in other transcoder
3715 	 * than eDP one.
3716 	 * For now it only supports one instance of PSR for BDW, GEN9 and GEN11.
3717 	 * So lets keep it hardcoded to PORT_A for BDW, GEN9 and GEN11.
3718 	 * But GEN12 supports a instance of PSR registers per transcoder.
3719 	 */
3720 	if (DISPLAY_VER(display) < 12 && dig_port->base.port != PORT_A) {
3721 		drm_dbg_kms(display->drm,
3722 			    "PSR condition failed: Port not supported\n");
3723 		return;
3724 	}
3725 
3726 	if ((HAS_DP20(display) && !intel_dp_is_edp(intel_dp)) ||
3727 	    DISPLAY_VER(display) >= 20)
3728 		intel_dp->psr.source_panel_replay_support = true;
3729 
3730 	if (HAS_PSR(display) && intel_dp_is_edp(intel_dp))
3731 		intel_dp->psr.source_support = true;
3732 
3733 	/* Set link_standby x link_off defaults */
3734 	if (DISPLAY_VER(display) < 12)
3735 		/* For new platforms up to TGL let's respect VBT back again */
3736 		intel_dp->psr.link_standby = connector->panel.vbt.psr.full_link;
3737 
3738 	INIT_WORK(&intel_dp->psr.work, intel_psr_work);
3739 	INIT_DELAYED_WORK(&intel_dp->psr.dc3co_work, tgl_dc3co_disable_work);
3740 	mutex_init(&intel_dp->psr.lock);
3741 }
3742 
psr_get_status_and_error_status(struct intel_dp * intel_dp,u8 * status,u8 * error_status)3743 static int psr_get_status_and_error_status(struct intel_dp *intel_dp,
3744 					   u8 *status, u8 *error_status)
3745 {
3746 	struct drm_dp_aux *aux = &intel_dp->aux;
3747 	int ret;
3748 	unsigned int offset;
3749 
3750 	offset = intel_dp->psr.panel_replay_enabled ?
3751 		 DP_SINK_DEVICE_PR_AND_FRAME_LOCK_STATUS : DP_PSR_STATUS;
3752 
3753 	ret = drm_dp_dpcd_readb(aux, offset, status);
3754 	if (ret != 1)
3755 		return ret;
3756 
3757 	offset = intel_dp->psr.panel_replay_enabled ?
3758 		 DP_PANEL_REPLAY_ERROR_STATUS : DP_PSR_ERROR_STATUS;
3759 
3760 	ret = drm_dp_dpcd_readb(aux, offset, error_status);
3761 	if (ret != 1)
3762 		return ret;
3763 
3764 	*status = *status & DP_PSR_SINK_STATE_MASK;
3765 
3766 	return 0;
3767 }
3768 
psr_alpm_check(struct intel_dp * intel_dp)3769 static void psr_alpm_check(struct intel_dp *intel_dp)
3770 {
3771 	struct intel_psr *psr = &intel_dp->psr;
3772 
3773 	if (!psr->sel_update_enabled)
3774 		return;
3775 
3776 	if (intel_alpm_get_error(intel_dp)) {
3777 		intel_psr_disable_locked(intel_dp);
3778 		psr->sink_not_reliable = true;
3779 	}
3780 }
3781 
psr_capability_changed_check(struct intel_dp * intel_dp)3782 static void psr_capability_changed_check(struct intel_dp *intel_dp)
3783 {
3784 	struct intel_display *display = to_intel_display(intel_dp);
3785 	struct intel_psr *psr = &intel_dp->psr;
3786 	u8 val;
3787 	int r;
3788 
3789 	r = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_ESI, &val);
3790 	if (r != 1) {
3791 		drm_err(display->drm, "Error reading DP_PSR_ESI\n");
3792 		return;
3793 	}
3794 
3795 	if (val & DP_PSR_CAPS_CHANGE) {
3796 		intel_psr_disable_locked(intel_dp);
3797 		psr->sink_not_reliable = true;
3798 		drm_dbg_kms(display->drm,
3799 			    "Sink PSR capability changed, disabling PSR\n");
3800 
3801 		/* Clearing it */
3802 		drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_ESI, val);
3803 	}
3804 }
3805 
3806 /*
3807  * On common bits:
3808  * DP_PSR_RFB_STORAGE_ERROR == DP_PANEL_REPLAY_RFB_STORAGE_ERROR
3809  * DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR == DP_PANEL_REPLAY_VSC_SDP_UNCORRECTABLE_ERROR
3810  * DP_PSR_LINK_CRC_ERROR == DP_PANEL_REPLAY_LINK_CRC_ERROR
3811  * this function is relying on PSR definitions
3812  */
intel_psr_short_pulse(struct intel_dp * intel_dp)3813 void intel_psr_short_pulse(struct intel_dp *intel_dp)
3814 {
3815 	struct intel_display *display = to_intel_display(intel_dp);
3816 	struct intel_psr *psr = &intel_dp->psr;
3817 	u8 status, error_status;
3818 	const u8 errors = DP_PSR_RFB_STORAGE_ERROR |
3819 			  DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR |
3820 			  DP_PSR_LINK_CRC_ERROR;
3821 
3822 	if (!CAN_PSR(intel_dp) && !CAN_PANEL_REPLAY(intel_dp))
3823 		return;
3824 
3825 	mutex_lock(&psr->lock);
3826 
3827 	psr->link_ok = false;
3828 
3829 	if (!psr->enabled)
3830 		goto exit;
3831 
3832 	if (psr_get_status_and_error_status(intel_dp, &status, &error_status)) {
3833 		drm_err(display->drm,
3834 			"Error reading PSR status or error status\n");
3835 		goto exit;
3836 	}
3837 
3838 	if ((!psr->panel_replay_enabled && status == DP_PSR_SINK_INTERNAL_ERROR) ||
3839 	    (error_status & errors)) {
3840 		intel_psr_disable_locked(intel_dp);
3841 		psr->sink_not_reliable = true;
3842 	}
3843 
3844 	if (!psr->panel_replay_enabled && status == DP_PSR_SINK_INTERNAL_ERROR &&
3845 	    !error_status)
3846 		drm_dbg_kms(display->drm,
3847 			    "PSR sink internal error, disabling PSR\n");
3848 	if (error_status & DP_PSR_RFB_STORAGE_ERROR)
3849 		drm_dbg_kms(display->drm,
3850 			    "PSR RFB storage error, disabling PSR\n");
3851 	if (error_status & DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR)
3852 		drm_dbg_kms(display->drm,
3853 			    "PSR VSC SDP uncorrectable error, disabling PSR\n");
3854 	if (error_status & DP_PSR_LINK_CRC_ERROR)
3855 		drm_dbg_kms(display->drm,
3856 			    "PSR Link CRC error, disabling PSR\n");
3857 
3858 	if (error_status & ~errors)
3859 		drm_err(display->drm,
3860 			"PSR_ERROR_STATUS unhandled errors %x\n",
3861 			error_status & ~errors);
3862 	/* clear status register */
3863 	drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_ERROR_STATUS, error_status);
3864 
3865 	if (!psr->panel_replay_enabled) {
3866 		psr_alpm_check(intel_dp);
3867 		psr_capability_changed_check(intel_dp);
3868 	}
3869 
3870 exit:
3871 	mutex_unlock(&psr->lock);
3872 }
3873 
intel_psr_enabled(struct intel_dp * intel_dp)3874 bool intel_psr_enabled(struct intel_dp *intel_dp)
3875 {
3876 	bool ret;
3877 
3878 	if (!CAN_PSR(intel_dp))
3879 		return false;
3880 
3881 	mutex_lock(&intel_dp->psr.lock);
3882 	ret = intel_dp->psr.enabled;
3883 	mutex_unlock(&intel_dp->psr.lock);
3884 
3885 	return ret;
3886 }
3887 
3888 /**
3889  * intel_psr_link_ok - return psr->link_ok
3890  * @intel_dp: struct intel_dp
3891  *
3892  * We are seeing unexpected link re-trainings with some panels. This is caused
3893  * by panel stating bad link status after PSR is enabled. Code checking link
3894  * status can call this to ensure it can ignore bad link status stated by the
3895  * panel I.e. if panel is stating bad link and intel_psr_link_ok is stating link
3896  * is ok caller should rely on latter.
3897  *
3898  * Return value of link_ok
3899  */
intel_psr_link_ok(struct intel_dp * intel_dp)3900 bool intel_psr_link_ok(struct intel_dp *intel_dp)
3901 {
3902 	bool ret;
3903 
3904 	if ((!CAN_PSR(intel_dp) && !CAN_PANEL_REPLAY(intel_dp)) ||
3905 	    !intel_dp_is_edp(intel_dp))
3906 		return false;
3907 
3908 	mutex_lock(&intel_dp->psr.lock);
3909 	ret = intel_dp->psr.link_ok;
3910 	mutex_unlock(&intel_dp->psr.lock);
3911 
3912 	return ret;
3913 }
3914 
3915 /**
3916  * intel_psr_lock - grab PSR lock
3917  * @crtc_state: the crtc state
3918  *
3919  * This is initially meant to be used by around CRTC update, when
3920  * vblank sensitive registers are updated and we need grab the lock
3921  * before it to avoid vblank evasion.
3922  */
intel_psr_lock(const struct intel_crtc_state * crtc_state)3923 void intel_psr_lock(const struct intel_crtc_state *crtc_state)
3924 {
3925 	struct intel_display *display = to_intel_display(crtc_state);
3926 	struct intel_encoder *encoder;
3927 
3928 	if (!crtc_state->has_psr)
3929 		return;
3930 
3931 	for_each_intel_encoder_mask_with_psr(display->drm, encoder,
3932 					     crtc_state->uapi.encoder_mask) {
3933 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3934 
3935 		mutex_lock(&intel_dp->psr.lock);
3936 		break;
3937 	}
3938 }
3939 
3940 /**
3941  * intel_psr_unlock - release PSR lock
3942  * @crtc_state: the crtc state
3943  *
3944  * Release the PSR lock that was held during pipe update.
3945  */
intel_psr_unlock(const struct intel_crtc_state * crtc_state)3946 void intel_psr_unlock(const struct intel_crtc_state *crtc_state)
3947 {
3948 	struct intel_display *display = to_intel_display(crtc_state);
3949 	struct intel_encoder *encoder;
3950 
3951 	if (!crtc_state->has_psr)
3952 		return;
3953 
3954 	for_each_intel_encoder_mask_with_psr(display->drm, encoder,
3955 					     crtc_state->uapi.encoder_mask) {
3956 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3957 
3958 		mutex_unlock(&intel_dp->psr.lock);
3959 		break;
3960 	}
3961 }
3962 
3963 /* Wa_16025596647 */
intel_psr_apply_underrun_on_idle_wa_locked(struct intel_dp * intel_dp)3964 static void intel_psr_apply_underrun_on_idle_wa_locked(struct intel_dp *intel_dp)
3965 {
3966 	struct intel_display *display = to_intel_display(intel_dp);
3967 	bool dc5_dc6_blocked;
3968 
3969 	if (!intel_dp->psr.active || !intel_dp->psr.pkg_c_latency_used)
3970 		return;
3971 
3972 	dc5_dc6_blocked = is_dc5_dc6_blocked(intel_dp);
3973 
3974 	if (intel_dp->psr.sel_update_enabled)
3975 		psr2_program_idle_frames(intel_dp, dc5_dc6_blocked ? 0 :
3976 					 psr_compute_idle_frames(intel_dp));
3977 	else
3978 		intel_dmc_start_pkgc_exit_at_start_of_undelayed_vblank(display,
3979 								       intel_dp->psr.pipe,
3980 								       dc5_dc6_blocked);
3981 }
3982 
psr_dc5_dc6_wa_work(struct work_struct * work)3983 static void psr_dc5_dc6_wa_work(struct work_struct *work)
3984 {
3985 	struct intel_display *display = container_of(work, typeof(*display),
3986 						     psr_dc5_dc6_wa_work);
3987 	struct intel_encoder *encoder;
3988 
3989 	for_each_intel_encoder_with_psr(display->drm, encoder) {
3990 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
3991 
3992 		mutex_lock(&intel_dp->psr.lock);
3993 
3994 		if (intel_dp->psr.enabled && !intel_dp->psr.panel_replay_enabled &&
3995 		    !intel_dp->psr.pkg_c_latency_used)
3996 			intel_psr_apply_underrun_on_idle_wa_locked(intel_dp);
3997 
3998 		mutex_unlock(&intel_dp->psr.lock);
3999 	}
4000 }
4001 
4002 /**
4003  * intel_psr_notify_dc5_dc6 - Notify PSR about enable/disable dc5/dc6
4004  * @display: intel atomic state
4005  *
4006  * This is targeted for underrun on idle PSR HW bug (Wa_16025596647) to schedule
4007  * psr_dc5_dc6_wa_work used for applying/removing the workaround.
4008  */
intel_psr_notify_dc5_dc6(struct intel_display * display)4009 void intel_psr_notify_dc5_dc6(struct intel_display *display)
4010 {
4011 	if (DISPLAY_VER(display) != 20 &&
4012 	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
4013 		return;
4014 
4015 	schedule_work(&display->psr_dc5_dc6_wa_work);
4016 }
4017 
4018 /**
4019  * intel_psr_dc5_dc6_wa_init - Init work for underrun on idle PSR HW bug wa
4020  * @display: intel atomic state
4021  *
4022  * This is targeted for underrun on idle PSR HW bug (Wa_16025596647) to init
4023  * psr_dc5_dc6_wa_work used for applying the workaround.
4024  */
intel_psr_dc5_dc6_wa_init(struct intel_display * display)4025 void intel_psr_dc5_dc6_wa_init(struct intel_display *display)
4026 {
4027 	if (DISPLAY_VER(display) != 20 &&
4028 	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
4029 		return;
4030 
4031 	INIT_WORK(&display->psr_dc5_dc6_wa_work, psr_dc5_dc6_wa_work);
4032 }
4033 
4034 /**
4035  * intel_psr_notify_pipe_change - Notify PSR about enable/disable of a pipe
4036  * @state: intel atomic state
4037  * @crtc: intel crtc
4038  * @enable: enable/disable
4039  *
4040  * This is targeted for underrun on idle PSR HW bug (Wa_16025596647) to apply
4041  * remove the workaround when pipe is getting enabled/disabled
4042  */
intel_psr_notify_pipe_change(struct intel_atomic_state * state,struct intel_crtc * crtc,bool enable)4043 void intel_psr_notify_pipe_change(struct intel_atomic_state *state,
4044 				  struct intel_crtc *crtc, bool enable)
4045 {
4046 	struct intel_display *display = to_intel_display(state);
4047 	struct intel_encoder *encoder;
4048 
4049 	if (DISPLAY_VER(display) != 20 &&
4050 	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
4051 		return;
4052 
4053 	for_each_intel_encoder_with_psr(display->drm, encoder) {
4054 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
4055 		u8 active_non_psr_pipes;
4056 
4057 		mutex_lock(&intel_dp->psr.lock);
4058 
4059 		if (!intel_dp->psr.enabled || intel_dp->psr.panel_replay_enabled)
4060 			goto unlock;
4061 
4062 		active_non_psr_pipes = intel_dp->psr.active_non_psr_pipes;
4063 
4064 		if (enable)
4065 			active_non_psr_pipes |= BIT(crtc->pipe);
4066 		else
4067 			active_non_psr_pipes &= ~BIT(crtc->pipe);
4068 
4069 		if (active_non_psr_pipes == intel_dp->psr.active_non_psr_pipes)
4070 			goto unlock;
4071 
4072 		if ((enable && intel_dp->psr.active_non_psr_pipes) ||
4073 		    (!enable && !intel_dp->psr.active_non_psr_pipes) ||
4074 		    !intel_dp->psr.pkg_c_latency_used) {
4075 			intel_dp->psr.active_non_psr_pipes = active_non_psr_pipes;
4076 			goto unlock;
4077 		}
4078 
4079 		intel_dp->psr.active_non_psr_pipes = active_non_psr_pipes;
4080 
4081 		intel_psr_apply_underrun_on_idle_wa_locked(intel_dp);
4082 unlock:
4083 		mutex_unlock(&intel_dp->psr.lock);
4084 	}
4085 }
4086 
4087 /**
4088  * intel_psr_notify_vblank_enable_disable - Notify PSR about enable/disable of vblank
4089  * @display: intel display struct
4090  * @enable: enable/disable
4091  *
4092  * This is targeted for underrun on idle PSR HW bug (Wa_16025596647) to apply
4093  * remove the workaround when vblank is getting enabled/disabled
4094  */
intel_psr_notify_vblank_enable_disable(struct intel_display * display,bool enable)4095 void intel_psr_notify_vblank_enable_disable(struct intel_display *display,
4096 					    bool enable)
4097 {
4098 	struct intel_encoder *encoder;
4099 
4100 	for_each_intel_encoder_with_psr(display->drm, encoder) {
4101 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
4102 
4103 		mutex_lock(&intel_dp->psr.lock);
4104 		if (intel_dp->psr.panel_replay_enabled) {
4105 			mutex_unlock(&intel_dp->psr.lock);
4106 			break;
4107 		}
4108 
4109 		if (intel_dp->psr.enabled && intel_dp->psr.pkg_c_latency_used)
4110 			intel_psr_apply_underrun_on_idle_wa_locked(intel_dp);
4111 
4112 		mutex_unlock(&intel_dp->psr.lock);
4113 		return;
4114 	}
4115 
4116 	/*
4117 	 * NOTE: intel_display_power_set_target_dc_state is used
4118 	 * only by PSR * code for DC3CO handling. DC3CO target
4119 	 * state is currently disabled in * PSR code. If DC3CO
4120 	 * is taken into use we need take that into account here
4121 	 * as well.
4122 	 */
4123 	intel_display_power_set_target_dc_state(display, enable ? DC_STATE_DISABLE :
4124 						DC_STATE_EN_UPTO_DC6);
4125 }
4126 
4127 static void
psr_source_status(struct intel_dp * intel_dp,struct seq_file * m)4128 psr_source_status(struct intel_dp *intel_dp, struct seq_file *m)
4129 {
4130 	struct intel_display *display = to_intel_display(intel_dp);
4131 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
4132 	const char *status = "unknown";
4133 	u32 val, status_val;
4134 
4135 	if ((intel_dp_is_edp(intel_dp) || DISPLAY_VER(display) >= 30) &&
4136 	    (intel_dp->psr.sel_update_enabled || intel_dp->psr.panel_replay_enabled)) {
4137 		static const char * const live_status[] = {
4138 			"IDLE",
4139 			"CAPTURE",
4140 			"CAPTURE_FS",
4141 			"SLEEP",
4142 			"BUFON_FW",
4143 			"ML_UP",
4144 			"SU_STANDBY",
4145 			"FAST_SLEEP",
4146 			"DEEP_SLEEP",
4147 			"BUF_ON",
4148 			"TG_ON"
4149 		};
4150 		val = intel_de_read(display,
4151 				    EDP_PSR2_STATUS(display, cpu_transcoder));
4152 		status_val = REG_FIELD_GET(EDP_PSR2_STATUS_STATE_MASK, val);
4153 		if (status_val < ARRAY_SIZE(live_status))
4154 			status = live_status[status_val];
4155 	} else {
4156 		static const char * const live_status[] = {
4157 			"IDLE",
4158 			"SRDONACK",
4159 			"SRDENT",
4160 			"BUFOFF",
4161 			"BUFON",
4162 			"AUXACK",
4163 			"SRDOFFACK",
4164 			"SRDENT_ON",
4165 		};
4166 		val = intel_de_read(display,
4167 				    psr_status_reg(display, cpu_transcoder));
4168 		status_val = REG_FIELD_GET(EDP_PSR_STATUS_STATE_MASK, val);
4169 		if (status_val < ARRAY_SIZE(live_status))
4170 			status = live_status[status_val];
4171 	}
4172 
4173 	seq_printf(m, "Source PSR/PanelReplay status: %s [0x%08x]\n", status, val);
4174 }
4175 
intel_psr_sink_capability(struct intel_connector * connector,struct seq_file * m)4176 static void intel_psr_sink_capability(struct intel_connector *connector,
4177 				      struct seq_file *m)
4178 {
4179 	seq_printf(m, "Sink support: PSR = %s",
4180 		   str_yes_no(connector->dp.psr_caps.support));
4181 
4182 	if (connector->dp.psr_caps.support)
4183 		seq_printf(m, " [0x%02x]", connector->dp.psr_caps.dpcd[0]);
4184 	if (connector->dp.psr_caps.dpcd[0] == DP_PSR2_WITH_Y_COORD_ET_SUPPORTED)
4185 		seq_printf(m, " (Early Transport)");
4186 	seq_printf(m, ", Panel Replay = %s", str_yes_no(connector->dp.panel_replay_caps.support));
4187 	seq_printf(m, ", Panel Replay Selective Update = %s",
4188 		   str_yes_no(connector->dp.panel_replay_caps.su_support));
4189 	seq_printf(m, ", Panel Replay DSC support = %s",
4190 		   panel_replay_dsc_support_str(connector->dp.panel_replay_caps.dsc_support));
4191 	if (connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
4192 	    DP_PANEL_REPLAY_EARLY_TRANSPORT_SUPPORT)
4193 		seq_printf(m, " (Early Transport)");
4194 	seq_printf(m, "\n");
4195 }
4196 
intel_psr_print_mode(struct intel_dp * intel_dp,struct seq_file * m)4197 static void intel_psr_print_mode(struct intel_dp *intel_dp,
4198 				 struct seq_file *m)
4199 {
4200 	struct intel_psr *psr = &intel_dp->psr;
4201 	const char *status, *mode, *region_et;
4202 
4203 	if (psr->enabled)
4204 		status = " enabled";
4205 	else
4206 		status = "disabled";
4207 
4208 	if (psr->panel_replay_enabled && psr->sel_update_enabled)
4209 		mode = "Panel Replay Selective Update";
4210 	else if (psr->panel_replay_enabled)
4211 		mode = "Panel Replay";
4212 	else if (psr->sel_update_enabled)
4213 		mode = "PSR2";
4214 	else if (psr->enabled)
4215 		mode = "PSR1";
4216 	else
4217 		mode = "";
4218 
4219 	if (psr->su_region_et_enabled)
4220 		region_et = " (Early Transport)";
4221 	else
4222 		region_et = "";
4223 
4224 	seq_printf(m, "PSR mode: %s%s%s\n", mode, status, region_et);
4225 	if (psr->no_psr_reason)
4226 		seq_printf(m, "  %s\n", psr->no_psr_reason);
4227 }
4228 
intel_psr_status(struct seq_file * m,struct intel_dp * intel_dp,struct intel_connector * connector)4229 static int intel_psr_status(struct seq_file *m, struct intel_dp *intel_dp,
4230 			    struct intel_connector *connector)
4231 {
4232 	struct intel_display *display = to_intel_display(intel_dp);
4233 	enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
4234 	struct intel_psr *psr = &intel_dp->psr;
4235 	struct ref_tracker *wakeref;
4236 	bool enabled;
4237 	u32 val, psr2_ctl;
4238 
4239 	intel_psr_sink_capability(connector, m);
4240 
4241 	if (!(connector->dp.psr_caps.support || connector->dp.panel_replay_caps.support))
4242 		return 0;
4243 
4244 	wakeref = intel_display_rpm_get(display);
4245 	mutex_lock(&psr->lock);
4246 
4247 	intel_psr_print_mode(intel_dp, m);
4248 
4249 	if (!psr->enabled) {
4250 		seq_printf(m, "PSR sink not reliable: %s\n",
4251 			   str_yes_no(psr->sink_not_reliable));
4252 
4253 		goto unlock;
4254 	}
4255 
4256 	if (psr->panel_replay_enabled) {
4257 		val = intel_de_read(display, TRANS_DP2_CTL(cpu_transcoder));
4258 
4259 		if (intel_dp_is_edp(intel_dp))
4260 			psr2_ctl = intel_de_read(display,
4261 						 EDP_PSR2_CTL(display,
4262 							      cpu_transcoder));
4263 
4264 		enabled = val & TRANS_DP2_PANEL_REPLAY_ENABLE;
4265 	} else if (psr->sel_update_enabled) {
4266 		val = intel_de_read(display,
4267 				    EDP_PSR2_CTL(display, cpu_transcoder));
4268 		enabled = val & EDP_PSR2_ENABLE;
4269 	} else {
4270 		val = intel_de_read(display, psr_ctl_reg(display, cpu_transcoder));
4271 		enabled = val & EDP_PSR_ENABLE;
4272 	}
4273 	seq_printf(m, "Source PSR/PanelReplay ctl: %s [0x%08x]\n",
4274 		   str_enabled_disabled(enabled), val);
4275 	if (psr->panel_replay_enabled && intel_dp_is_edp(intel_dp))
4276 		seq_printf(m, "PSR2_CTL: 0x%08x\n",
4277 			   psr2_ctl);
4278 	psr_source_status(intel_dp, m);
4279 	seq_printf(m, "Busy frontbuffer bits: 0x%08x\n",
4280 		   psr->busy_frontbuffer_bits);
4281 
4282 	/*
4283 	 * SKL+ Perf counter is reset to 0 everytime DC state is entered
4284 	 */
4285 	val = intel_de_read(display, psr_perf_cnt_reg(display, cpu_transcoder));
4286 	seq_printf(m, "Performance counter: %u\n",
4287 		   REG_FIELD_GET(EDP_PSR_PERF_CNT_MASK, val));
4288 
4289 	if (psr->debug & I915_PSR_DEBUG_IRQ) {
4290 		seq_printf(m, "Last attempted entry at: %lld\n",
4291 			   psr->last_entry_attempt);
4292 		seq_printf(m, "Last exit at: %lld\n", psr->last_exit);
4293 	}
4294 
4295 	if (psr->sel_update_enabled) {
4296 		u32 su_frames_val[3];
4297 		int frame;
4298 
4299 		/*
4300 		 * PSR2_SU_STATUS register has been tied-off since DG2/ADL-P
4301 		 * (it returns zeros only) and it has been removed on Xe2_LPD.
4302 		 */
4303 		if (DISPLAY_VER(display) < 13) {
4304 			/*
4305 			 * Reading all 3 registers before hand to minimize crossing a
4306 			 * frame boundary between register reads
4307 			 */
4308 			for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame += 3) {
4309 				val = intel_de_read(display,
4310 						    PSR2_SU_STATUS(display, cpu_transcoder, frame));
4311 				su_frames_val[frame / 3] = val;
4312 			}
4313 
4314 			seq_puts(m, "Frame:\tPSR2 SU blocks:\n");
4315 
4316 			for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame++) {
4317 				u32 su_blocks;
4318 
4319 				su_blocks = su_frames_val[frame / 3] &
4320 					PSR2_SU_STATUS_MASK(frame);
4321 				su_blocks = su_blocks >> PSR2_SU_STATUS_SHIFT(frame);
4322 				seq_printf(m, "%d\t%d\n", frame, su_blocks);
4323 			}
4324 		}
4325 
4326 		seq_printf(m, "PSR2 selective fetch: %s\n",
4327 			   str_enabled_disabled(psr->psr2_sel_fetch_enabled));
4328 	}
4329 
4330 unlock:
4331 	mutex_unlock(&psr->lock);
4332 	intel_display_rpm_put(display, wakeref);
4333 
4334 	return 0;
4335 }
4336 
i915_edp_psr_status_show(struct seq_file * m,void * data)4337 static int i915_edp_psr_status_show(struct seq_file *m, void *data)
4338 {
4339 	struct intel_display *display = m->private;
4340 	struct intel_dp *intel_dp = NULL;
4341 	struct intel_encoder *encoder;
4342 
4343 	if (!HAS_PSR(display))
4344 		return -ENODEV;
4345 
4346 	/* Find the first EDP which supports PSR */
4347 	for_each_intel_encoder_with_psr(display->drm, encoder) {
4348 		intel_dp = enc_to_intel_dp(encoder);
4349 		break;
4350 	}
4351 
4352 	if (!intel_dp)
4353 		return -ENODEV;
4354 
4355 	return intel_psr_status(m, intel_dp, intel_dp->attached_connector);
4356 }
4357 DEFINE_SHOW_ATTRIBUTE(i915_edp_psr_status);
4358 
4359 static int
i915_edp_psr_debug_set(void * data,u64 val)4360 i915_edp_psr_debug_set(void *data, u64 val)
4361 {
4362 	struct intel_display *display = data;
4363 	struct intel_encoder *encoder;
4364 	int ret = -ENODEV;
4365 
4366 	if (!HAS_PSR(display))
4367 		return ret;
4368 
4369 	for_each_intel_encoder_with_psr(display->drm, encoder) {
4370 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
4371 
4372 		drm_dbg_kms(display->drm, "Setting PSR debug to %llx\n", val);
4373 
4374 		// TODO: split to each transcoder's PSR debug state
4375 		with_intel_display_rpm(display)
4376 			ret = intel_psr_debug_set(intel_dp, val);
4377 	}
4378 
4379 	return ret;
4380 }
4381 
4382 static int
i915_edp_psr_debug_get(void * data,u64 * val)4383 i915_edp_psr_debug_get(void *data, u64 *val)
4384 {
4385 	struct intel_display *display = data;
4386 	struct intel_encoder *encoder;
4387 
4388 	if (!HAS_PSR(display))
4389 		return -ENODEV;
4390 
4391 	for_each_intel_encoder_with_psr(display->drm, encoder) {
4392 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
4393 
4394 		// TODO: split to each transcoder's PSR debug state
4395 		*val = READ_ONCE(intel_dp->psr.debug);
4396 		return 0;
4397 	}
4398 
4399 	return -ENODEV;
4400 }
4401 
4402 DEFINE_SIMPLE_ATTRIBUTE(i915_edp_psr_debug_fops,
4403 			i915_edp_psr_debug_get, i915_edp_psr_debug_set,
4404 			"%llu\n");
4405 
intel_psr_debugfs_register(struct intel_display * display)4406 void intel_psr_debugfs_register(struct intel_display *display)
4407 {
4408 	struct dentry *debugfs_root = display->drm->debugfs_root;
4409 
4410 	debugfs_create_file("i915_edp_psr_debug", 0644, debugfs_root,
4411 			    display, &i915_edp_psr_debug_fops);
4412 
4413 	debugfs_create_file("i915_edp_psr_status", 0444, debugfs_root,
4414 			    display, &i915_edp_psr_status_fops);
4415 }
4416 
psr_mode_str(struct intel_dp * intel_dp)4417 static const char *psr_mode_str(struct intel_dp *intel_dp)
4418 {
4419 	if (intel_dp->psr.panel_replay_enabled)
4420 		return "PANEL-REPLAY";
4421 	else if (intel_dp->psr.enabled)
4422 		return "PSR";
4423 
4424 	return "unknown";
4425 }
4426 
i915_psr_sink_status_show(struct seq_file * m,void * data)4427 static int i915_psr_sink_status_show(struct seq_file *m, void *data)
4428 {
4429 	struct intel_connector *connector = m->private;
4430 	struct intel_dp *intel_dp = intel_attached_dp(connector);
4431 	static const char * const sink_status[] = {
4432 		"inactive",
4433 		"transition to active, capture and display",
4434 		"active, display from RFB",
4435 		"active, capture and display on sink device timings",
4436 		"transition to inactive, capture and display, timing re-sync",
4437 		"reserved",
4438 		"reserved",
4439 		"sink internal error",
4440 	};
4441 	const char *str;
4442 	int ret;
4443 	u8 status, error_status;
4444 
4445 	if (!(CAN_PSR(intel_dp) || CAN_PANEL_REPLAY(intel_dp))) {
4446 		seq_puts(m, "PSR/Panel-Replay Unsupported\n");
4447 		return -ENODEV;
4448 	}
4449 
4450 	if (connector->base.status != connector_status_connected)
4451 		return -ENODEV;
4452 
4453 	ret = psr_get_status_and_error_status(intel_dp, &status, &error_status);
4454 	if (ret)
4455 		return ret;
4456 
4457 	status &= DP_PSR_SINK_STATE_MASK;
4458 	if (status < ARRAY_SIZE(sink_status))
4459 		str = sink_status[status];
4460 	else
4461 		str = "unknown";
4462 
4463 	seq_printf(m, "Sink %s status: 0x%x [%s]\n", psr_mode_str(intel_dp), status, str);
4464 
4465 	seq_printf(m, "Sink %s error status: 0x%x", psr_mode_str(intel_dp), error_status);
4466 
4467 	if (error_status & (DP_PSR_RFB_STORAGE_ERROR |
4468 			    DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR |
4469 			    DP_PSR_LINK_CRC_ERROR))
4470 		seq_puts(m, ":\n");
4471 	else
4472 		seq_puts(m, "\n");
4473 	if (error_status & DP_PSR_RFB_STORAGE_ERROR)
4474 		seq_printf(m, "\t%s RFB storage error\n", psr_mode_str(intel_dp));
4475 	if (error_status & DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR)
4476 		seq_printf(m, "\t%s VSC SDP uncorrectable error\n", psr_mode_str(intel_dp));
4477 	if (error_status & DP_PSR_LINK_CRC_ERROR)
4478 		seq_printf(m, "\t%s Link CRC error\n", psr_mode_str(intel_dp));
4479 
4480 	return ret;
4481 }
4482 DEFINE_SHOW_ATTRIBUTE(i915_psr_sink_status);
4483 
i915_psr_status_show(struct seq_file * m,void * data)4484 static int i915_psr_status_show(struct seq_file *m, void *data)
4485 {
4486 	struct intel_connector *connector = m->private;
4487 	struct intel_dp *intel_dp = intel_attached_dp(connector);
4488 
4489 	return intel_psr_status(m, intel_dp, connector);
4490 }
4491 DEFINE_SHOW_ATTRIBUTE(i915_psr_status);
4492 
intel_psr_connector_debugfs_add(struct intel_connector * connector)4493 void intel_psr_connector_debugfs_add(struct intel_connector *connector)
4494 {
4495 	struct intel_display *display = to_intel_display(connector);
4496 	struct dentry *root = connector->base.debugfs_entry;
4497 
4498 	if (connector->base.connector_type != DRM_MODE_CONNECTOR_eDP &&
4499 	    connector->base.connector_type != DRM_MODE_CONNECTOR_DisplayPort)
4500 		return;
4501 
4502 	debugfs_create_file("i915_psr_sink_status", 0444, root,
4503 			    connector, &i915_psr_sink_status_fops);
4504 
4505 	if (HAS_PSR(display) || HAS_DP20(display))
4506 		debugfs_create_file("i915_psr_status", 0444, root,
4507 				    connector, &i915_psr_status_fops);
4508 }
4509 
intel_psr_needs_alpm(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state)4510 bool intel_psr_needs_alpm(struct intel_dp *intel_dp, const struct intel_crtc_state *crtc_state)
4511 {
4512 	/*
4513 	 * eDP Panel Replay uses always ALPM
4514 	 * PSR2 uses ALPM but PSR1 doesn't
4515 	 */
4516 	return intel_dp_is_edp(intel_dp) && (crtc_state->has_sel_update ||
4517 					     crtc_state->has_panel_replay);
4518 }
4519 
intel_psr_needs_alpm_aux_less(struct intel_dp * intel_dp,const struct intel_crtc_state * crtc_state)4520 bool intel_psr_needs_alpm_aux_less(struct intel_dp *intel_dp,
4521 				   const struct intel_crtc_state *crtc_state)
4522 {
4523 	return intel_dp_is_edp(intel_dp) && crtc_state->has_panel_replay;
4524 }
4525 
intel_psr_compute_config_late(struct intel_dp * intel_dp,struct intel_crtc_state * crtc_state)4526 void intel_psr_compute_config_late(struct intel_dp *intel_dp,
4527 				   struct intel_crtc_state *crtc_state)
4528 {
4529 	struct intel_display *display = to_intel_display(intel_dp);
4530 	int vblank = intel_crtc_vblank_length(crtc_state);
4531 	int wake_lines;
4532 
4533 	if (intel_psr_needs_alpm_aux_less(intel_dp, crtc_state))
4534 		wake_lines = crtc_state->alpm_state.aux_less_wake_lines;
4535 	else if (intel_psr_needs_alpm(intel_dp, crtc_state))
4536 		wake_lines = DISPLAY_VER(display) < 20 ?
4537 			     psr2_block_count_lines(crtc_state->alpm_state.io_wake_lines,
4538 						    crtc_state->alpm_state.fast_wake_lines) :
4539 			     crtc_state->alpm_state.io_wake_lines;
4540 	else
4541 		wake_lines = 0;
4542 
4543 	/*
4544 	 * Disable the PSR features if wake lines exceed the available vblank.
4545 	 * Though SCL is computed based on these PSR features, it is not reset
4546 	 * even if the PSR features are disabled to avoid changing vblank start
4547 	 * at this stage.
4548 	 */
4549 	if (wake_lines && !_wake_lines_fit_into_vblank(crtc_state, vblank, wake_lines)) {
4550 		drm_dbg_kms(display->drm,
4551 			    "Adjusting PSR/PR mode: vblank too short for wake lines = %d\n",
4552 			    wake_lines);
4553 
4554 		if (crtc_state->has_panel_replay) {
4555 			crtc_state->has_panel_replay = false;
4556 			/*
4557 			 * #TODO : Add fall back to PSR/PSR2
4558 			 * Since panel replay cannot be supported, we can fall back to PSR/PSR2.
4559 			 * This will require calling compute_config for psr and psr2 with check for
4560 			 * actual guardband instead of vblank_length.
4561 			 */
4562 			crtc_state->has_psr = false;
4563 		}
4564 
4565 		crtc_state->has_sel_update = false;
4566 		crtc_state->enable_psr2_su_region_et = false;
4567 		crtc_state->enable_psr2_sel_fetch = false;
4568 	}
4569 
4570 	/* Wa_18037818876 */
4571 	if (intel_psr_needs_wa_18037818876(intel_dp, crtc_state)) {
4572 		crtc_state->has_psr = false;
4573 		drm_dbg_kms(display->drm,
4574 			    "PSR disabled to workaround PSR FSM hang issue\n");
4575 	}
4576 
4577 	intel_psr_set_non_psr_pipes(intel_dp, crtc_state);
4578 }
4579 
intel_psr_min_guardband(struct intel_crtc_state * crtc_state)4580 int intel_psr_min_guardband(struct intel_crtc_state *crtc_state)
4581 {
4582 	struct intel_display *display = to_intel_display(crtc_state);
4583 	int psr_min_guardband;
4584 	int wake_lines;
4585 
4586 	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
4587 		return 0;
4588 
4589 	if (crtc_state->has_panel_replay)
4590 		wake_lines = crtc_state->alpm_state.aux_less_wake_lines;
4591 	else if (crtc_state->has_sel_update)
4592 		wake_lines = DISPLAY_VER(display) < 20 ?
4593 			     psr2_block_count_lines(crtc_state->alpm_state.io_wake_lines,
4594 						    crtc_state->alpm_state.fast_wake_lines) :
4595 			     crtc_state->alpm_state.io_wake_lines;
4596 	else
4597 		return 0;
4598 
4599 	psr_min_guardband = wake_lines + crtc_state->set_context_latency;
4600 
4601 	if (crtc_state->req_psr2_sdp_prior_scanline)
4602 		psr_min_guardband++;
4603 
4604 	return psr_min_guardband;
4605 }
4606