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