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