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