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