1
2
3
4
5
6#include <drm/drm_debugfs.h>
7#include <drm/drm_fourcc.h>
8
9#include "i915_debugfs.h"
10#include "intel_de.h"
11#include "intel_display_debugfs.h"
12#include "intel_display_power.h"
13#include "intel_display_types.h"
14#include "intel_dmc.h"
15#include "intel_dp.h"
16#include "intel_dp_mst.h"
17#include "intel_drrs.h"
18#include "intel_fbc.h"
19#include "intel_hdcp.h"
20#include "intel_hdmi.h"
21#include "intel_pm.h"
22#include "intel_psr.h"
23#include "intel_sprite.h"
24
25static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
26{
27 return to_i915(node->minor->dev);
28}
29
30static int i915_frontbuffer_tracking(struct seq_file *m, void *unused)
31{
32 struct drm_i915_private *dev_priv = node_to_i915(m->private);
33
34 seq_printf(m, "FB tracking busy bits: 0x%08x\n",
35 dev_priv->fb_tracking.busy_bits);
36
37 seq_printf(m, "FB tracking flip bits: 0x%08x\n",
38 dev_priv->fb_tracking.flip_bits);
39
40 return 0;
41}
42
43static int i915_fbc_status(struct seq_file *m, void *unused)
44{
45 struct drm_i915_private *dev_priv = node_to_i915(m->private);
46 struct intel_fbc *fbc = &dev_priv->fbc;
47 intel_wakeref_t wakeref;
48
49 if (!HAS_FBC(dev_priv))
50 return -ENODEV;
51
52 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
53 mutex_lock(&fbc->lock);
54
55 if (intel_fbc_is_active(dev_priv))
56 seq_puts(m, "FBC enabled\n");
57 else
58 seq_printf(m, "FBC disabled: %s\n", fbc->no_fbc_reason);
59
60 if (intel_fbc_is_active(dev_priv)) {
61 u32 mask;
62
63 if (DISPLAY_VER(dev_priv) >= 8)
64 mask = intel_de_read(dev_priv, IVB_FBC_STATUS2) & BDW_FBC_COMP_SEG_MASK;
65 else if (DISPLAY_VER(dev_priv) >= 7)
66 mask = intel_de_read(dev_priv, IVB_FBC_STATUS2) & IVB_FBC_COMP_SEG_MASK;
67 else if (DISPLAY_VER(dev_priv) >= 5)
68 mask = intel_de_read(dev_priv, ILK_DPFC_STATUS) & ILK_DPFC_COMP_SEG_MASK;
69 else if (IS_G4X(dev_priv))
70 mask = intel_de_read(dev_priv, DPFC_STATUS) & DPFC_COMP_SEG_MASK;
71 else
72 mask = intel_de_read(dev_priv, FBC_STATUS) &
73 (FBC_STAT_COMPRESSING | FBC_STAT_COMPRESSED);
74
75 seq_printf(m, "Compressing: %s\n", yesno(mask));
76 }
77
78 mutex_unlock(&fbc->lock);
79 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
80
81 return 0;
82}
83
84static int i915_fbc_false_color_get(void *data, u64 *val)
85{
86 struct drm_i915_private *dev_priv = data;
87
88 if (DISPLAY_VER(dev_priv) < 7 || !HAS_FBC(dev_priv))
89 return -ENODEV;
90
91 *val = dev_priv->fbc.false_color;
92
93 return 0;
94}
95
96static int i915_fbc_false_color_set(void *data, u64 val)
97{
98 struct drm_i915_private *dev_priv = data;
99 u32 reg;
100
101 if (DISPLAY_VER(dev_priv) < 7 || !HAS_FBC(dev_priv))
102 return -ENODEV;
103
104 mutex_lock(&dev_priv->fbc.lock);
105
106 reg = intel_de_read(dev_priv, ILK_DPFC_CONTROL);
107 dev_priv->fbc.false_color = val;
108
109 intel_de_write(dev_priv, ILK_DPFC_CONTROL,
110 val ? (reg | FBC_CTL_FALSE_COLOR) : (reg & ~FBC_CTL_FALSE_COLOR));
111
112 mutex_unlock(&dev_priv->fbc.lock);
113 return 0;
114}
115
116DEFINE_SIMPLE_ATTRIBUTE(i915_fbc_false_color_fops,
117 i915_fbc_false_color_get, i915_fbc_false_color_set,
118 "%llu\n");
119
120static int i915_ips_status(struct seq_file *m, void *unused)
121{
122 struct drm_i915_private *dev_priv = node_to_i915(m->private);
123 intel_wakeref_t wakeref;
124
125 if (!HAS_IPS(dev_priv))
126 return -ENODEV;
127
128 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
129
130 seq_printf(m, "Enabled by kernel parameter: %s\n",
131 yesno(dev_priv->params.enable_ips));
132
133 if (DISPLAY_VER(dev_priv) >= 8) {
134 seq_puts(m, "Currently: unknown\n");
135 } else {
136 if (intel_de_read(dev_priv, IPS_CTL) & IPS_ENABLE)
137 seq_puts(m, "Currently: enabled\n");
138 else
139 seq_puts(m, "Currently: disabled\n");
140 }
141
142 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
143
144 return 0;
145}
146
147static int i915_sr_status(struct seq_file *m, void *unused)
148{
149 struct drm_i915_private *dev_priv = node_to_i915(m->private);
150 intel_wakeref_t wakeref;
151 bool sr_enabled = false;
152
153 wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
154
155 if (DISPLAY_VER(dev_priv) >= 9)
156 ;
157 else if (HAS_PCH_SPLIT(dev_priv))
158 sr_enabled = intel_de_read(dev_priv, WM1_LP_ILK) & WM1_LP_SR_EN;
159 else if (IS_I965GM(dev_priv) || IS_G4X(dev_priv) ||
160 IS_I945G(dev_priv) || IS_I945GM(dev_priv))
161 sr_enabled = intel_de_read(dev_priv, FW_BLC_SELF) & FW_BLC_SELF_EN;
162 else if (IS_I915GM(dev_priv))
163 sr_enabled = intel_de_read(dev_priv, INSTPM) & INSTPM_SELF_EN;
164 else if (IS_PINEVIEW(dev_priv))
165 sr_enabled = intel_de_read(dev_priv, DSPFW3) & PINEVIEW_SELF_REFRESH_EN;
166 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
167 sr_enabled = intel_de_read(dev_priv, FW_BLC_SELF_VLV) & FW_CSPWRDWNEN;
168
169 intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, wakeref);
170
171 seq_printf(m, "self-refresh: %s\n", enableddisabled(sr_enabled));
172
173 return 0;
174}
175
176static int i915_opregion(struct seq_file *m, void *unused)
177{
178 struct intel_opregion *opregion = &node_to_i915(m->private)->opregion;
179
180 if (opregion->header)
181 seq_write(m, opregion->header, OPREGION_SIZE);
182
183 return 0;
184}
185
186static int i915_vbt(struct seq_file *m, void *unused)
187{
188 struct intel_opregion *opregion = &node_to_i915(m->private)->opregion;
189
190 if (opregion->vbt)
191 seq_write(m, opregion->vbt, opregion->vbt_size);
192
193 return 0;
194}
195
196static int i915_gem_framebuffer_info(struct seq_file *m, void *data)
197{
198 struct drm_i915_private *dev_priv = node_to_i915(m->private);
199 struct drm_device *dev = &dev_priv->drm;
200 struct intel_framebuffer *fbdev_fb = NULL;
201 struct drm_framebuffer *drm_fb;
202
203#ifdef CONFIG_DRM_FBDEV_EMULATION
204 if (dev_priv->fbdev && dev_priv->fbdev->helper.fb) {
205 fbdev_fb = to_intel_framebuffer(dev_priv->fbdev->helper.fb);
206
207 seq_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
208 fbdev_fb->base.width,
209 fbdev_fb->base.height,
210 fbdev_fb->base.format->depth,
211 fbdev_fb->base.format->cpp[0] * 8,
212 fbdev_fb->base.modifier,
213 drm_framebuffer_read_refcount(&fbdev_fb->base));
214 i915_debugfs_describe_obj(m, intel_fb_obj(&fbdev_fb->base));
215 seq_putc(m, '\n');
216 }
217#endif
218
219 mutex_lock(&dev->mode_config.fb_lock);
220 drm_for_each_fb(drm_fb, dev) {
221 struct intel_framebuffer *fb = to_intel_framebuffer(drm_fb);
222 if (fb == fbdev_fb)
223 continue;
224
225 seq_printf(m, "user size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
226 fb->base.width,
227 fb->base.height,
228 fb->base.format->depth,
229 fb->base.format->cpp[0] * 8,
230 fb->base.modifier,
231 drm_framebuffer_read_refcount(&fb->base));
232 i915_debugfs_describe_obj(m, intel_fb_obj(&fb->base));
233 seq_putc(m, '\n');
234 }
235 mutex_unlock(&dev->mode_config.fb_lock);
236
237 return 0;
238}
239
240static int i915_psr_sink_status_show(struct seq_file *m, void *data)
241{
242 u8 val;
243 static const char * const sink_status[] = {
244 "inactive",
245 "transition to active, capture and display",
246 "active, display from RFB",
247 "active, capture and display on sink device timings",
248 "transition to inactive, capture and display, timing re-sync",
249 "reserved",
250 "reserved",
251 "sink internal error",
252 };
253 struct drm_connector *connector = m->private;
254 struct intel_dp *intel_dp =
255 intel_attached_dp(to_intel_connector(connector));
256 int ret;
257
258 if (!CAN_PSR(intel_dp)) {
259 seq_puts(m, "PSR Unsupported\n");
260 return -ENODEV;
261 }
262
263 if (connector->status != connector_status_connected)
264 return -ENODEV;
265
266 ret = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_STATUS, &val);
267
268 if (ret == 1) {
269 const char *str = "unknown";
270
271 val &= DP_PSR_SINK_STATE_MASK;
272 if (val < ARRAY_SIZE(sink_status))
273 str = sink_status[val];
274 seq_printf(m, "Sink PSR status: 0x%x [%s]\n", val, str);
275 } else {
276 return ret;
277 }
278
279 return 0;
280}
281DEFINE_SHOW_ATTRIBUTE(i915_psr_sink_status);
282
283static void
284psr_source_status(struct intel_dp *intel_dp, struct seq_file *m)
285{
286 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
287 const char *status = "unknown";
288 u32 val, status_val;
289
290 if (intel_dp->psr.psr2_enabled) {
291 static const char * const live_status[] = {
292 "IDLE",
293 "CAPTURE",
294 "CAPTURE_FS",
295 "SLEEP",
296 "BUFON_FW",
297 "ML_UP",
298 "SU_STANDBY",
299 "FAST_SLEEP",
300 "DEEP_SLEEP",
301 "BUF_ON",
302 "TG_ON"
303 };
304 val = intel_de_read(dev_priv,
305 EDP_PSR2_STATUS(intel_dp->psr.transcoder));
306 status_val = (val & EDP_PSR2_STATUS_STATE_MASK) >>
307 EDP_PSR2_STATUS_STATE_SHIFT;
308 if (status_val < ARRAY_SIZE(live_status))
309 status = live_status[status_val];
310 } else {
311 static const char * const live_status[] = {
312 "IDLE",
313 "SRDONACK",
314 "SRDENT",
315 "BUFOFF",
316 "BUFON",
317 "AUXACK",
318 "SRDOFFACK",
319 "SRDENT_ON",
320 };
321 val = intel_de_read(dev_priv,
322 EDP_PSR_STATUS(intel_dp->psr.transcoder));
323 status_val = (val & EDP_PSR_STATUS_STATE_MASK) >>
324 EDP_PSR_STATUS_STATE_SHIFT;
325 if (status_val < ARRAY_SIZE(live_status))
326 status = live_status[status_val];
327 }
328
329 seq_printf(m, "Source PSR status: %s [0x%08x]\n", status, val);
330}
331
332static int intel_psr_status(struct seq_file *m, struct intel_dp *intel_dp)
333{
334 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
335 struct intel_psr *psr = &intel_dp->psr;
336 intel_wakeref_t wakeref;
337 const char *status;
338 bool enabled;
339 u32 val;
340
341 seq_printf(m, "Sink support: %s", yesno(psr->sink_support));
342 if (psr->sink_support)
343 seq_printf(m, " [0x%02x]", intel_dp->psr_dpcd[0]);
344 seq_puts(m, "\n");
345
346 if (!psr->sink_support)
347 return 0;
348
349 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
350 mutex_lock(&psr->lock);
351
352 if (psr->enabled)
353 status = psr->psr2_enabled ? "PSR2 enabled" : "PSR1 enabled";
354 else
355 status = "disabled";
356 seq_printf(m, "PSR mode: %s\n", status);
357
358 if (!psr->enabled) {
359 seq_printf(m, "PSR sink not reliable: %s\n",
360 yesno(psr->sink_not_reliable));
361
362 goto unlock;
363 }
364
365 if (psr->psr2_enabled) {
366 val = intel_de_read(dev_priv,
367 EDP_PSR2_CTL(intel_dp->psr.transcoder));
368 enabled = val & EDP_PSR2_ENABLE;
369 } else {
370 val = intel_de_read(dev_priv,
371 EDP_PSR_CTL(intel_dp->psr.transcoder));
372 enabled = val & EDP_PSR_ENABLE;
373 }
374 seq_printf(m, "Source PSR ctl: %s [0x%08x]\n",
375 enableddisabled(enabled), val);
376 psr_source_status(intel_dp, m);
377 seq_printf(m, "Busy frontbuffer bits: 0x%08x\n",
378 psr->busy_frontbuffer_bits);
379
380
381
382
383 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
384 val = intel_de_read(dev_priv,
385 EDP_PSR_PERF_CNT(intel_dp->psr.transcoder));
386 val &= EDP_PSR_PERF_CNT_MASK;
387 seq_printf(m, "Performance counter: %u\n", val);
388 }
389
390 if (psr->debug & I915_PSR_DEBUG_IRQ) {
391 seq_printf(m, "Last attempted entry at: %lld\n",
392 psr->last_entry_attempt);
393 seq_printf(m, "Last exit at: %lld\n", psr->last_exit);
394 }
395
396 if (psr->psr2_enabled) {
397 u32 su_frames_val[3];
398 int frame;
399
400
401
402
403
404 for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame += 3) {
405 val = intel_de_read(dev_priv,
406 PSR2_SU_STATUS(intel_dp->psr.transcoder, frame));
407 su_frames_val[frame / 3] = val;
408 }
409
410 seq_puts(m, "Frame:\tPSR2 SU blocks:\n");
411
412 for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame++) {
413 u32 su_blocks;
414
415 su_blocks = su_frames_val[frame / 3] &
416 PSR2_SU_STATUS_MASK(frame);
417 su_blocks = su_blocks >> PSR2_SU_STATUS_SHIFT(frame);
418 seq_printf(m, "%d\t%d\n", frame, su_blocks);
419 }
420
421 seq_printf(m, "PSR2 selective fetch: %s\n",
422 enableddisabled(psr->psr2_sel_fetch_enabled));
423 }
424
425unlock:
426 mutex_unlock(&psr->lock);
427 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
428
429 return 0;
430}
431
432static int i915_edp_psr_status(struct seq_file *m, void *data)
433{
434 struct drm_i915_private *dev_priv = node_to_i915(m->private);
435 struct intel_dp *intel_dp = NULL;
436 struct intel_encoder *encoder;
437
438 if (!HAS_PSR(dev_priv))
439 return -ENODEV;
440
441
442 for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
443 intel_dp = enc_to_intel_dp(encoder);
444 break;
445 }
446
447 if (!intel_dp)
448 return -ENODEV;
449
450 return intel_psr_status(m, intel_dp);
451}
452
453static int
454i915_edp_psr_debug_set(void *data, u64 val)
455{
456 struct drm_i915_private *dev_priv = data;
457 struct intel_encoder *encoder;
458 intel_wakeref_t wakeref;
459 int ret = -ENODEV;
460
461 if (!HAS_PSR(dev_priv))
462 return ret;
463
464 for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
465 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
466
467 drm_dbg_kms(&dev_priv->drm, "Setting PSR debug to %llx\n", val);
468
469 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
470
471
472 ret = intel_psr_debug_set(intel_dp, val);
473
474 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
475 }
476
477 return ret;
478}
479
480static int
481i915_edp_psr_debug_get(void *data, u64 *val)
482{
483 struct drm_i915_private *dev_priv = data;
484 struct intel_encoder *encoder;
485
486 if (!HAS_PSR(dev_priv))
487 return -ENODEV;
488
489 for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
490 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
491
492
493 *val = READ_ONCE(intel_dp->psr.debug);
494 return 0;
495 }
496
497 return -ENODEV;
498}
499
500DEFINE_SIMPLE_ATTRIBUTE(i915_edp_psr_debug_fops,
501 i915_edp_psr_debug_get, i915_edp_psr_debug_set,
502 "%llu\n");
503
504static int i915_power_domain_info(struct seq_file *m, void *unused)
505{
506 struct drm_i915_private *dev_priv = node_to_i915(m->private);
507 struct i915_power_domains *power_domains = &dev_priv->power_domains;
508 int i;
509
510 mutex_lock(&power_domains->lock);
511
512 seq_printf(m, "%-25s %s\n", "Power well/domain", "Use count");
513 for (i = 0; i < power_domains->power_well_count; i++) {
514 struct i915_power_well *power_well;
515 enum intel_display_power_domain power_domain;
516
517 power_well = &power_domains->power_wells[i];
518 seq_printf(m, "%-25s %d\n", power_well->desc->name,
519 power_well->count);
520
521 for_each_power_domain(power_domain, power_well->desc->domains)
522 seq_printf(m, " %-23s %d\n",
523 intel_display_power_domain_str(power_domain),
524 power_domains->domain_use_count[power_domain]);
525 }
526
527 mutex_unlock(&power_domains->lock);
528
529 return 0;
530}
531
532static int i915_dmc_info(struct seq_file *m, void *unused)
533{
534 struct drm_i915_private *dev_priv = node_to_i915(m->private);
535 intel_wakeref_t wakeref;
536 struct intel_dmc *dmc;
537 i915_reg_t dc5_reg, dc6_reg = {};
538
539 if (!HAS_DMC(dev_priv))
540 return -ENODEV;
541
542 dmc = &dev_priv->dmc;
543
544 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
545
546 seq_printf(m, "fw loaded: %s\n", yesno(intel_dmc_has_payload(dev_priv)));
547 seq_printf(m, "path: %s\n", dmc->fw_path);
548 seq_printf(m, "Pipe A fw support: %s\n",
549 yesno(GRAPHICS_VER(dev_priv) >= 12));
550 seq_printf(m, "Pipe A fw loaded: %s\n", yesno(dmc->dmc_info[DMC_FW_PIPEA].payload));
551 seq_printf(m, "Pipe B fw support: %s\n", yesno(IS_ALDERLAKE_P(dev_priv)));
552 seq_printf(m, "Pipe B fw loaded: %s\n", yesno(dmc->dmc_info[DMC_FW_PIPEB].payload));
553
554 if (!intel_dmc_has_payload(dev_priv))
555 goto out;
556
557 seq_printf(m, "version: %d.%d\n", DMC_VERSION_MAJOR(dmc->version),
558 DMC_VERSION_MINOR(dmc->version));
559
560 if (DISPLAY_VER(dev_priv) >= 12) {
561 if (IS_DGFX(dev_priv)) {
562 dc5_reg = DG1_DMC_DEBUG_DC5_COUNT;
563 } else {
564 dc5_reg = TGL_DMC_DEBUG_DC5_COUNT;
565 dc6_reg = TGL_DMC_DEBUG_DC6_COUNT;
566 }
567
568
569
570
571
572
573
574 seq_printf(m, "DC3CO count: %d\n",
575 intel_de_read(dev_priv, DMC_DEBUG3));
576 } else {
577 dc5_reg = IS_BROXTON(dev_priv) ? BXT_DMC_DC3_DC5_COUNT :
578 SKL_DMC_DC3_DC5_COUNT;
579 if (!IS_GEMINILAKE(dev_priv) && !IS_BROXTON(dev_priv))
580 dc6_reg = SKL_DMC_DC5_DC6_COUNT;
581 }
582
583 seq_printf(m, "DC3 -> DC5 count: %d\n",
584 intel_de_read(dev_priv, dc5_reg));
585 if (dc6_reg.reg)
586 seq_printf(m, "DC5 -> DC6 count: %d\n",
587 intel_de_read(dev_priv, dc6_reg));
588
589out:
590 seq_printf(m, "program base: 0x%08x\n",
591 intel_de_read(dev_priv, DMC_PROGRAM(dmc->dmc_info[DMC_FW_MAIN].start_mmioaddr, 0)));
592 seq_printf(m, "ssp base: 0x%08x\n",
593 intel_de_read(dev_priv, DMC_SSP_BASE));
594 seq_printf(m, "htp: 0x%08x\n", intel_de_read(dev_priv, DMC_HTP_SKL));
595
596 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
597
598 return 0;
599}
600
601static void intel_seq_print_mode(struct seq_file *m, int tabs,
602 const struct drm_display_mode *mode)
603{
604 int i;
605
606 for (i = 0; i < tabs; i++)
607 seq_putc(m, '\t');
608
609 seq_printf(m, DRM_MODE_FMT "\n", DRM_MODE_ARG(mode));
610}
611
612static void intel_encoder_info(struct seq_file *m,
613 struct intel_crtc *crtc,
614 struct intel_encoder *encoder)
615{
616 struct drm_i915_private *dev_priv = node_to_i915(m->private);
617 struct drm_connector_list_iter conn_iter;
618 struct drm_connector *connector;
619
620 seq_printf(m, "\t[ENCODER:%d:%s]: connectors:\n",
621 encoder->base.base.id, encoder->base.name);
622
623 drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
624 drm_for_each_connector_iter(connector, &conn_iter) {
625 const struct drm_connector_state *conn_state =
626 connector->state;
627
628 if (conn_state->best_encoder != &encoder->base)
629 continue;
630
631 seq_printf(m, "\t\t[CONNECTOR:%d:%s]\n",
632 connector->base.id, connector->name);
633 }
634 drm_connector_list_iter_end(&conn_iter);
635}
636
637static void intel_panel_info(struct seq_file *m, struct intel_panel *panel)
638{
639 const struct drm_display_mode *mode = panel->fixed_mode;
640
641 seq_printf(m, "\tfixed mode: " DRM_MODE_FMT "\n", DRM_MODE_ARG(mode));
642}
643
644static void intel_hdcp_info(struct seq_file *m,
645 struct intel_connector *intel_connector)
646{
647 bool hdcp_cap, hdcp2_cap;
648
649 if (!intel_connector->hdcp.shim) {
650 seq_puts(m, "No Connector Support");
651 goto out;
652 }
653
654 hdcp_cap = intel_hdcp_capable(intel_connector);
655 hdcp2_cap = intel_hdcp2_capable(intel_connector);
656
657 if (hdcp_cap)
658 seq_puts(m, "HDCP1.4 ");
659 if (hdcp2_cap)
660 seq_puts(m, "HDCP2.2 ");
661
662 if (!hdcp_cap && !hdcp2_cap)
663 seq_puts(m, "None");
664
665out:
666 seq_puts(m, "\n");
667}
668
669static void intel_dp_info(struct seq_file *m,
670 struct intel_connector *intel_connector)
671{
672 struct intel_encoder *intel_encoder = intel_attached_encoder(intel_connector);
673 struct intel_dp *intel_dp = enc_to_intel_dp(intel_encoder);
674 const struct drm_property_blob *edid = intel_connector->base.edid_blob_ptr;
675
676 seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]);
677 seq_printf(m, "\taudio support: %s\n", yesno(intel_dp->has_audio));
678 if (intel_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)
679 intel_panel_info(m, &intel_connector->panel);
680
681 drm_dp_downstream_debug(m, intel_dp->dpcd, intel_dp->downstream_ports,
682 edid ? edid->data : NULL, &intel_dp->aux);
683}
684
685static void intel_dp_mst_info(struct seq_file *m,
686 struct intel_connector *intel_connector)
687{
688 bool has_audio = intel_connector->port->has_audio;
689
690 seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
691}
692
693static void intel_hdmi_info(struct seq_file *m,
694 struct intel_connector *intel_connector)
695{
696 struct intel_encoder *intel_encoder = intel_attached_encoder(intel_connector);
697 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(intel_encoder);
698
699 seq_printf(m, "\taudio support: %s\n", yesno(intel_hdmi->has_audio));
700}
701
702static void intel_lvds_info(struct seq_file *m,
703 struct intel_connector *intel_connector)
704{
705 intel_panel_info(m, &intel_connector->panel);
706}
707
708static void intel_connector_info(struct seq_file *m,
709 struct drm_connector *connector)
710{
711 struct intel_connector *intel_connector = to_intel_connector(connector);
712 const struct drm_connector_state *conn_state = connector->state;
713 struct intel_encoder *encoder =
714 to_intel_encoder(conn_state->best_encoder);
715 const struct drm_display_mode *mode;
716
717 seq_printf(m, "[CONNECTOR:%d:%s]: status: %s\n",
718 connector->base.id, connector->name,
719 drm_get_connector_status_name(connector->status));
720
721 if (connector->status == connector_status_disconnected)
722 return;
723
724 seq_printf(m, "\tphysical dimensions: %dx%dmm\n",
725 connector->display_info.width_mm,
726 connector->display_info.height_mm);
727 seq_printf(m, "\tsubpixel order: %s\n",
728 drm_get_subpixel_order_name(connector->display_info.subpixel_order));
729 seq_printf(m, "\tCEA rev: %d\n", connector->display_info.cea_rev);
730
731 if (!encoder)
732 return;
733
734 switch (connector->connector_type) {
735 case DRM_MODE_CONNECTOR_DisplayPort:
736 case DRM_MODE_CONNECTOR_eDP:
737 if (encoder->type == INTEL_OUTPUT_DP_MST)
738 intel_dp_mst_info(m, intel_connector);
739 else
740 intel_dp_info(m, intel_connector);
741 break;
742 case DRM_MODE_CONNECTOR_LVDS:
743 if (encoder->type == INTEL_OUTPUT_LVDS)
744 intel_lvds_info(m, intel_connector);
745 break;
746 case DRM_MODE_CONNECTOR_HDMIA:
747 if (encoder->type == INTEL_OUTPUT_HDMI ||
748 encoder->type == INTEL_OUTPUT_DDI)
749 intel_hdmi_info(m, intel_connector);
750 break;
751 default:
752 break;
753 }
754
755 seq_puts(m, "\tHDCP version: ");
756 intel_hdcp_info(m, intel_connector);
757
758 seq_printf(m, "\tmodes:\n");
759 list_for_each_entry(mode, &connector->modes, head)
760 intel_seq_print_mode(m, 2, mode);
761}
762
763static const char *plane_type(enum drm_plane_type type)
764{
765 switch (type) {
766 case DRM_PLANE_TYPE_OVERLAY:
767 return "OVL";
768 case DRM_PLANE_TYPE_PRIMARY:
769 return "PRI";
770 case DRM_PLANE_TYPE_CURSOR:
771 return "CUR";
772
773
774
775
776 }
777
778 return "unknown";
779}
780
781static void plane_rotation(char *buf, size_t bufsize, unsigned int rotation)
782{
783
784
785
786
787 snprintf(buf, bufsize,
788 "%s%s%s%s%s%s(0x%08x)",
789 (rotation & DRM_MODE_ROTATE_0) ? "0 " : "",
790 (rotation & DRM_MODE_ROTATE_90) ? "90 " : "",
791 (rotation & DRM_MODE_ROTATE_180) ? "180 " : "",
792 (rotation & DRM_MODE_ROTATE_270) ? "270 " : "",
793 (rotation & DRM_MODE_REFLECT_X) ? "FLIPX " : "",
794 (rotation & DRM_MODE_REFLECT_Y) ? "FLIPY " : "",
795 rotation);
796}
797
798static const char *plane_visibility(const struct intel_plane_state *plane_state)
799{
800 if (plane_state->uapi.visible)
801 return "visible";
802
803 if (plane_state->planar_slave)
804 return "planar-slave";
805
806 return "hidden";
807}
808
809static void intel_plane_uapi_info(struct seq_file *m, struct intel_plane *plane)
810{
811 const struct intel_plane_state *plane_state =
812 to_intel_plane_state(plane->base.state);
813 const struct drm_framebuffer *fb = plane_state->uapi.fb;
814 struct drm_rect src, dst;
815 char rot_str[48];
816
817 src = drm_plane_state_src(&plane_state->uapi);
818 dst = drm_plane_state_dest(&plane_state->uapi);
819
820 plane_rotation(rot_str, sizeof(rot_str),
821 plane_state->uapi.rotation);
822
823 seq_puts(m, "\t\tuapi: [FB:");
824 if (fb)
825 seq_printf(m, "%d] %p4cc,0x%llx,%dx%d", fb->base.id,
826 &fb->format->format, fb->modifier, fb->width,
827 fb->height);
828 else
829 seq_puts(m, "0] n/a,0x0,0x0,");
830 seq_printf(m, ", visible=%s, src=" DRM_RECT_FP_FMT ", dst=" DRM_RECT_FMT
831 ", rotation=%s\n", plane_visibility(plane_state),
832 DRM_RECT_FP_ARG(&src), DRM_RECT_ARG(&dst), rot_str);
833
834 if (plane_state->planar_linked_plane)
835 seq_printf(m, "\t\tplanar: Linked to [PLANE:%d:%s] as a %s\n",
836 plane_state->planar_linked_plane->base.base.id, plane_state->planar_linked_plane->base.name,
837 plane_state->planar_slave ? "slave" : "master");
838}
839
840static void intel_plane_hw_info(struct seq_file *m, struct intel_plane *plane)
841{
842 const struct intel_plane_state *plane_state =
843 to_intel_plane_state(plane->base.state);
844 const struct drm_framebuffer *fb = plane_state->hw.fb;
845 char rot_str[48];
846
847 if (!fb)
848 return;
849
850 plane_rotation(rot_str, sizeof(rot_str),
851 plane_state->hw.rotation);
852
853 seq_printf(m, "\t\thw: [FB:%d] %p4cc,0x%llx,%dx%d, visible=%s, src="
854 DRM_RECT_FP_FMT ", dst=" DRM_RECT_FMT ", rotation=%s\n",
855 fb->base.id, &fb->format->format,
856 fb->modifier, fb->width, fb->height,
857 yesno(plane_state->uapi.visible),
858 DRM_RECT_FP_ARG(&plane_state->uapi.src),
859 DRM_RECT_ARG(&plane_state->uapi.dst),
860 rot_str);
861}
862
863static void intel_plane_info(struct seq_file *m, struct intel_crtc *crtc)
864{
865 struct drm_i915_private *dev_priv = node_to_i915(m->private);
866 struct intel_plane *plane;
867
868 for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane) {
869 seq_printf(m, "\t[PLANE:%d:%s]: type=%s\n",
870 plane->base.base.id, plane->base.name,
871 plane_type(plane->base.type));
872 intel_plane_uapi_info(m, plane);
873 intel_plane_hw_info(m, plane);
874 }
875}
876
877static void intel_scaler_info(struct seq_file *m, struct intel_crtc *crtc)
878{
879 const struct intel_crtc_state *crtc_state =
880 to_intel_crtc_state(crtc->base.state);
881 int num_scalers = crtc->num_scalers;
882 int i;
883
884
885 if (num_scalers) {
886 seq_printf(m, "\tnum_scalers=%d, scaler_users=%x scaler_id=%d",
887 num_scalers,
888 crtc_state->scaler_state.scaler_users,
889 crtc_state->scaler_state.scaler_id);
890
891 for (i = 0; i < num_scalers; i++) {
892 const struct intel_scaler *sc =
893 &crtc_state->scaler_state.scalers[i];
894
895 seq_printf(m, ", scalers[%d]: use=%s, mode=%x",
896 i, yesno(sc->in_use), sc->mode);
897 }
898 seq_puts(m, "\n");
899 } else {
900 seq_puts(m, "\tNo scalers available on this platform\n");
901 }
902}
903
904#if IS_ENABLED(CONFIG_DRM_I915_DEBUG_VBLANK_EVADE)
905static void crtc_updates_info(struct seq_file *m,
906 struct intel_crtc *crtc,
907 const char *hdr)
908{
909 u64 count;
910 int row;
911
912 count = 0;
913 for (row = 0; row < ARRAY_SIZE(crtc->debug.vbl.times); row++)
914 count += crtc->debug.vbl.times[row];
915 seq_printf(m, "%sUpdates: %llu\n", hdr, count);
916 if (!count)
917 return;
918
919 for (row = 0; row < ARRAY_SIZE(crtc->debug.vbl.times); row++) {
920 char columns[80] = " |";
921 unsigned int x;
922
923 if (row & 1) {
924 const char *units;
925
926 if (row > 10) {
927 x = 1000000;
928 units = "ms";
929 } else {
930 x = 1000;
931 units = "us";
932 }
933
934 snprintf(columns, sizeof(columns), "%4ld%s |",
935 DIV_ROUND_CLOSEST(BIT(row + 9), x), units);
936 }
937
938 if (crtc->debug.vbl.times[row]) {
939 x = ilog2(crtc->debug.vbl.times[row]);
940 memset(columns + 8, '*', x);
941 columns[8 + x] = '\0';
942 }
943
944 seq_printf(m, "%s%s\n", hdr, columns);
945 }
946
947 seq_printf(m, "%sMin update: %lluns\n",
948 hdr, crtc->debug.vbl.min);
949 seq_printf(m, "%sMax update: %lluns\n",
950 hdr, crtc->debug.vbl.max);
951 seq_printf(m, "%sAverage update: %lluns\n",
952 hdr, div64_u64(crtc->debug.vbl.sum, count));
953 seq_printf(m, "%sOverruns > %uus: %u\n",
954 hdr, VBLANK_EVASION_TIME_US, crtc->debug.vbl.over);
955}
956
957static int crtc_updates_show(struct seq_file *m, void *data)
958{
959 crtc_updates_info(m, m->private, "");
960 return 0;
961}
962
963static int crtc_updates_open(struct inode *inode, struct file *file)
964{
965 return single_open(file, crtc_updates_show, inode->i_private);
966}
967
968static ssize_t crtc_updates_write(struct file *file,
969 const char __user *ubuf,
970 size_t len, loff_t *offp)
971{
972 struct seq_file *m = file->private_data;
973 struct intel_crtc *crtc = m->private;
974
975
976 memset(&crtc->debug.vbl, 0, sizeof(crtc->debug.vbl));
977
978 return len;
979}
980
981static const struct file_operations crtc_updates_fops = {
982 .owner = THIS_MODULE,
983 .open = crtc_updates_open,
984 .read = seq_read,
985 .llseek = seq_lseek,
986 .release = single_release,
987 .write = crtc_updates_write
988};
989
990static void crtc_updates_add(struct drm_crtc *crtc)
991{
992 debugfs_create_file("i915_update_info", 0644, crtc->debugfs_entry,
993 to_intel_crtc(crtc), &crtc_updates_fops);
994}
995
996#else
997static void crtc_updates_info(struct seq_file *m,
998 struct intel_crtc *crtc,
999 const char *hdr)
1000{
1001}
1002
1003static void crtc_updates_add(struct drm_crtc *crtc)
1004{
1005}
1006#endif
1007
1008static void intel_crtc_info(struct seq_file *m, struct intel_crtc *crtc)
1009{
1010 struct drm_i915_private *dev_priv = node_to_i915(m->private);
1011 const struct intel_crtc_state *crtc_state =
1012 to_intel_crtc_state(crtc->base.state);
1013 struct intel_encoder *encoder;
1014
1015 seq_printf(m, "[CRTC:%d:%s]:\n",
1016 crtc->base.base.id, crtc->base.name);
1017
1018 seq_printf(m, "\tuapi: enable=%s, active=%s, mode=" DRM_MODE_FMT "\n",
1019 yesno(crtc_state->uapi.enable),
1020 yesno(crtc_state->uapi.active),
1021 DRM_MODE_ARG(&crtc_state->uapi.mode));
1022
1023 if (crtc_state->hw.enable) {
1024 seq_printf(m, "\thw: active=%s, adjusted_mode=" DRM_MODE_FMT "\n",
1025 yesno(crtc_state->hw.active),
1026 DRM_MODE_ARG(&crtc_state->hw.adjusted_mode));
1027
1028 seq_printf(m, "\tpipe src size=%dx%d, dither=%s, bpp=%d\n",
1029 crtc_state->pipe_src_w, crtc_state->pipe_src_h,
1030 yesno(crtc_state->dither), crtc_state->pipe_bpp);
1031
1032 intel_scaler_info(m, crtc);
1033 }
1034
1035 if (crtc_state->bigjoiner)
1036 seq_printf(m, "\tLinked to [CRTC:%d:%s] as a %s\n",
1037 crtc_state->bigjoiner_linked_crtc->base.base.id,
1038 crtc_state->bigjoiner_linked_crtc->base.name,
1039 crtc_state->bigjoiner_slave ? "slave" : "master");
1040
1041 for_each_intel_encoder_mask(&dev_priv->drm, encoder,
1042 crtc_state->uapi.encoder_mask)
1043 intel_encoder_info(m, crtc, encoder);
1044
1045 intel_plane_info(m, crtc);
1046
1047 seq_printf(m, "\tunderrun reporting: cpu=%s pch=%s\n",
1048 yesno(!crtc->cpu_fifo_underrun_disabled),
1049 yesno(!crtc->pch_fifo_underrun_disabled));
1050
1051 crtc_updates_info(m, crtc, "\t");
1052}
1053
1054static int i915_display_info(struct seq_file *m, void *unused)
1055{
1056 struct drm_i915_private *dev_priv = node_to_i915(m->private);
1057 struct drm_device *dev = &dev_priv->drm;
1058 struct intel_crtc *crtc;
1059 struct drm_connector *connector;
1060 struct drm_connector_list_iter conn_iter;
1061 intel_wakeref_t wakeref;
1062
1063 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
1064
1065 drm_modeset_lock_all(dev);
1066
1067 seq_printf(m, "CRTC info\n");
1068 seq_printf(m, "---------\n");
1069 for_each_intel_crtc(dev, crtc)
1070 intel_crtc_info(m, crtc);
1071
1072 seq_printf(m, "\n");
1073 seq_printf(m, "Connector info\n");
1074 seq_printf(m, "--------------\n");
1075 drm_connector_list_iter_begin(dev, &conn_iter);
1076 drm_for_each_connector_iter(connector, &conn_iter)
1077 intel_connector_info(m, connector);
1078 drm_connector_list_iter_end(&conn_iter);
1079
1080 drm_modeset_unlock_all(dev);
1081
1082 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
1083
1084 return 0;
1085}
1086
1087static int i915_shared_dplls_info(struct seq_file *m, void *unused)
1088{
1089 struct drm_i915_private *dev_priv = node_to_i915(m->private);
1090 struct drm_device *dev = &dev_priv->drm;
1091 int i;
1092
1093 drm_modeset_lock_all(dev);
1094
1095 seq_printf(m, "PLL refclks: non-SSC: %d kHz, SSC: %d kHz\n",
1096 dev_priv->dpll.ref_clks.nssc,
1097 dev_priv->dpll.ref_clks.ssc);
1098
1099 for (i = 0; i < dev_priv->dpll.num_shared_dpll; i++) {
1100 struct intel_shared_dpll *pll = &dev_priv->dpll.shared_dplls[i];
1101
1102 seq_printf(m, "DPLL%i: %s, id: %i\n", i, pll->info->name,
1103 pll->info->id);
1104 seq_printf(m, " pipe_mask: 0x%x, active: 0x%x, on: %s\n",
1105 pll->state.pipe_mask, pll->active_mask, yesno(pll->on));
1106 seq_printf(m, " tracked hardware state:\n");
1107 seq_printf(m, " dpll: 0x%08x\n", pll->state.hw_state.dpll);
1108 seq_printf(m, " dpll_md: 0x%08x\n",
1109 pll->state.hw_state.dpll_md);
1110 seq_printf(m, " fp0: 0x%08x\n", pll->state.hw_state.fp0);
1111 seq_printf(m, " fp1: 0x%08x\n", pll->state.hw_state.fp1);
1112 seq_printf(m, " wrpll: 0x%08x\n", pll->state.hw_state.wrpll);
1113 seq_printf(m, " cfgcr0: 0x%08x\n", pll->state.hw_state.cfgcr0);
1114 seq_printf(m, " cfgcr1: 0x%08x\n", pll->state.hw_state.cfgcr1);
1115 seq_printf(m, " mg_refclkin_ctl: 0x%08x\n",
1116 pll->state.hw_state.mg_refclkin_ctl);
1117 seq_printf(m, " mg_clktop2_coreclkctl1: 0x%08x\n",
1118 pll->state.hw_state.mg_clktop2_coreclkctl1);
1119 seq_printf(m, " mg_clktop2_hsclkctl: 0x%08x\n",
1120 pll->state.hw_state.mg_clktop2_hsclkctl);
1121 seq_printf(m, " mg_pll_div0: 0x%08x\n",
1122 pll->state.hw_state.mg_pll_div0);
1123 seq_printf(m, " mg_pll_div1: 0x%08x\n",
1124 pll->state.hw_state.mg_pll_div1);
1125 seq_printf(m, " mg_pll_lf: 0x%08x\n",
1126 pll->state.hw_state.mg_pll_lf);
1127 seq_printf(m, " mg_pll_frac_lock: 0x%08x\n",
1128 pll->state.hw_state.mg_pll_frac_lock);
1129 seq_printf(m, " mg_pll_ssc: 0x%08x\n",
1130 pll->state.hw_state.mg_pll_ssc);
1131 seq_printf(m, " mg_pll_bias: 0x%08x\n",
1132 pll->state.hw_state.mg_pll_bias);
1133 seq_printf(m, " mg_pll_tdc_coldst_bias: 0x%08x\n",
1134 pll->state.hw_state.mg_pll_tdc_coldst_bias);
1135 }
1136 drm_modeset_unlock_all(dev);
1137
1138 return 0;
1139}
1140
1141static int i915_ipc_status_show(struct seq_file *m, void *data)
1142{
1143 struct drm_i915_private *dev_priv = m->private;
1144
1145 seq_printf(m, "Isochronous Priority Control: %s\n",
1146 yesno(dev_priv->ipc_enabled));
1147 return 0;
1148}
1149
1150static int i915_ipc_status_open(struct inode *inode, struct file *file)
1151{
1152 struct drm_i915_private *dev_priv = inode->i_private;
1153
1154 if (!HAS_IPC(dev_priv))
1155 return -ENODEV;
1156
1157 return single_open(file, i915_ipc_status_show, dev_priv);
1158}
1159
1160static ssize_t i915_ipc_status_write(struct file *file, const char __user *ubuf,
1161 size_t len, loff_t *offp)
1162{
1163 struct seq_file *m = file->private_data;
1164 struct drm_i915_private *dev_priv = m->private;
1165 intel_wakeref_t wakeref;
1166 bool enable;
1167 int ret;
1168
1169 ret = kstrtobool_from_user(ubuf, len, &enable);
1170 if (ret < 0)
1171 return ret;
1172
1173 with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) {
1174 if (!dev_priv->ipc_enabled && enable)
1175 drm_info(&dev_priv->drm,
1176 "Enabling IPC: WM will be proper only after next commit\n");
1177 dev_priv->ipc_enabled = enable;
1178 intel_enable_ipc(dev_priv);
1179 }
1180
1181 return len;
1182}
1183
1184static const struct file_operations i915_ipc_status_fops = {
1185 .owner = THIS_MODULE,
1186 .open = i915_ipc_status_open,
1187 .read = seq_read,
1188 .llseek = seq_lseek,
1189 .release = single_release,
1190 .write = i915_ipc_status_write
1191};
1192
1193static int i915_ddb_info(struct seq_file *m, void *unused)
1194{
1195 struct drm_i915_private *dev_priv = node_to_i915(m->private);
1196 struct drm_device *dev = &dev_priv->drm;
1197 struct skl_ddb_entry *entry;
1198 struct intel_crtc *crtc;
1199
1200 if (DISPLAY_VER(dev_priv) < 9)
1201 return -ENODEV;
1202
1203 drm_modeset_lock_all(dev);
1204
1205 seq_printf(m, "%-15s%8s%8s%8s\n", "", "Start", "End", "Size");
1206
1207 for_each_intel_crtc(&dev_priv->drm, crtc) {
1208 struct intel_crtc_state *crtc_state =
1209 to_intel_crtc_state(crtc->base.state);
1210 enum pipe pipe = crtc->pipe;
1211 enum plane_id plane_id;
1212
1213 seq_printf(m, "Pipe %c\n", pipe_name(pipe));
1214
1215 for_each_plane_id_on_crtc(crtc, plane_id) {
1216 entry = &crtc_state->wm.skl.plane_ddb_y[plane_id];
1217 seq_printf(m, " Plane%-8d%8u%8u%8u\n", plane_id + 1,
1218 entry->start, entry->end,
1219 skl_ddb_entry_size(entry));
1220 }
1221
1222 entry = &crtc_state->wm.skl.plane_ddb_y[PLANE_CURSOR];
1223 seq_printf(m, " %-13s%8u%8u%8u\n", "Cursor", entry->start,
1224 entry->end, skl_ddb_entry_size(entry));
1225 }
1226
1227 drm_modeset_unlock_all(dev);
1228
1229 return 0;
1230}
1231
1232static void drrs_status_per_crtc(struct seq_file *m,
1233 struct drm_device *dev,
1234 struct intel_crtc *crtc)
1235{
1236 struct drm_i915_private *dev_priv = to_i915(dev);
1237 struct i915_drrs *drrs = &dev_priv->drrs;
1238 int vrefresh = 0;
1239 struct drm_connector *connector;
1240 struct drm_connector_list_iter conn_iter;
1241
1242 drm_connector_list_iter_begin(dev, &conn_iter);
1243 drm_for_each_connector_iter(connector, &conn_iter) {
1244 bool supported = false;
1245
1246 if (connector->state->crtc != &crtc->base)
1247 continue;
1248
1249 seq_printf(m, "%s:\n", connector->name);
1250
1251 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP &&
1252 drrs->type == SEAMLESS_DRRS_SUPPORT)
1253 supported = true;
1254
1255 seq_printf(m, "\tDRRS Supported: %s\n", yesno(supported));
1256 }
1257 drm_connector_list_iter_end(&conn_iter);
1258
1259 seq_puts(m, "\n");
1260
1261 if (to_intel_crtc_state(crtc->base.state)->has_drrs) {
1262 struct intel_panel *panel;
1263
1264 mutex_lock(&drrs->mutex);
1265
1266 seq_puts(m, "\tDRRS Enabled: Yes\n");
1267
1268
1269 if (!drrs->dp) {
1270 seq_puts(m, "Idleness DRRS: Disabled\n");
1271 mutex_unlock(&drrs->mutex);
1272 return;
1273 }
1274
1275 panel = &drrs->dp->attached_connector->panel;
1276 seq_printf(m, "\t\tBusy_frontbuffer_bits: 0x%X",
1277 drrs->busy_frontbuffer_bits);
1278
1279 seq_puts(m, "\n\t\t");
1280 if (drrs->refresh_rate_type == DRRS_HIGH_RR) {
1281 seq_puts(m, "DRRS_State: DRRS_HIGH_RR\n");
1282 vrefresh = drm_mode_vrefresh(panel->fixed_mode);
1283 } else if (drrs->refresh_rate_type == DRRS_LOW_RR) {
1284 seq_puts(m, "DRRS_State: DRRS_LOW_RR\n");
1285 vrefresh = drm_mode_vrefresh(panel->downclock_mode);
1286 } else {
1287 seq_printf(m, "DRRS_State: Unknown(%d)\n",
1288 drrs->refresh_rate_type);
1289 mutex_unlock(&drrs->mutex);
1290 return;
1291 }
1292 seq_printf(m, "\t\tVrefresh: %d", vrefresh);
1293
1294 seq_puts(m, "\n\t\t");
1295 mutex_unlock(&drrs->mutex);
1296 } else {
1297
1298 seq_puts(m, "\tDRRS Enabled : No");
1299 }
1300 seq_puts(m, "\n");
1301}
1302
1303static int i915_drrs_status(struct seq_file *m, void *unused)
1304{
1305 struct drm_i915_private *dev_priv = node_to_i915(m->private);
1306 struct drm_device *dev = &dev_priv->drm;
1307 struct intel_crtc *crtc;
1308 int active_crtc_cnt = 0;
1309
1310 drm_modeset_lock_all(dev);
1311 for_each_intel_crtc(dev, crtc) {
1312 if (crtc->base.state->active) {
1313 active_crtc_cnt++;
1314 seq_printf(m, "\nCRTC %d: ", active_crtc_cnt);
1315
1316 drrs_status_per_crtc(m, dev, crtc);
1317 }
1318 }
1319 drm_modeset_unlock_all(dev);
1320
1321 if (!active_crtc_cnt)
1322 seq_puts(m, "No active crtc found\n");
1323
1324 return 0;
1325}
1326
1327static bool
1328intel_lpsp_power_well_enabled(struct drm_i915_private *i915,
1329 enum i915_power_well_id power_well_id)
1330{
1331 intel_wakeref_t wakeref;
1332 bool is_enabled;
1333
1334 wakeref = intel_runtime_pm_get(&i915->runtime_pm);
1335 is_enabled = intel_display_power_well_is_enabled(i915,
1336 power_well_id);
1337 intel_runtime_pm_put(&i915->runtime_pm, wakeref);
1338
1339 return is_enabled;
1340}
1341
1342static int i915_lpsp_status(struct seq_file *m, void *unused)
1343{
1344 struct drm_i915_private *i915 = node_to_i915(m->private);
1345 bool lpsp_enabled = false;
1346
1347 if (DISPLAY_VER(i915) >= 13 || IS_DISPLAY_VER(i915, 9, 10)) {
1348 lpsp_enabled = !intel_lpsp_power_well_enabled(i915, SKL_DISP_PW_2);
1349 } else if (IS_DISPLAY_VER(i915, 11, 12)) {
1350 lpsp_enabled = !intel_lpsp_power_well_enabled(i915, ICL_DISP_PW_3);
1351 } else if (IS_HASWELL(i915) || IS_BROADWELL(i915)) {
1352 lpsp_enabled = !intel_lpsp_power_well_enabled(i915, HSW_DISP_PW_GLOBAL);
1353 } else {
1354 seq_puts(m, "LPSP: not supported\n");
1355 return 0;
1356 }
1357
1358 seq_printf(m, "LPSP: %s\n", enableddisabled(lpsp_enabled));
1359
1360 return 0;
1361}
1362
1363static int i915_dp_mst_info(struct seq_file *m, void *unused)
1364{
1365 struct drm_i915_private *dev_priv = node_to_i915(m->private);
1366 struct drm_device *dev = &dev_priv->drm;
1367 struct intel_encoder *intel_encoder;
1368 struct intel_digital_port *dig_port;
1369 struct drm_connector *connector;
1370 struct drm_connector_list_iter conn_iter;
1371
1372 drm_connector_list_iter_begin(dev, &conn_iter);
1373 drm_for_each_connector_iter(connector, &conn_iter) {
1374 if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
1375 continue;
1376
1377 intel_encoder = intel_attached_encoder(to_intel_connector(connector));
1378 if (!intel_encoder || intel_encoder->type == INTEL_OUTPUT_DP_MST)
1379 continue;
1380
1381 dig_port = enc_to_dig_port(intel_encoder);
1382 if (!intel_dp_mst_source_support(&dig_port->dp))
1383 continue;
1384
1385 seq_printf(m, "MST Source Port [ENCODER:%d:%s]\n",
1386 dig_port->base.base.base.id,
1387 dig_port->base.base.name);
1388 drm_dp_mst_dump_topology(m, &dig_port->dp.mst_mgr);
1389 }
1390 drm_connector_list_iter_end(&conn_iter);
1391
1392 return 0;
1393}
1394
1395static ssize_t i915_displayport_test_active_write(struct file *file,
1396 const char __user *ubuf,
1397 size_t len, loff_t *offp)
1398{
1399 char *input_buffer;
1400 int status = 0;
1401 struct drm_device *dev;
1402 struct drm_connector *connector;
1403 struct drm_connector_list_iter conn_iter;
1404 struct intel_dp *intel_dp;
1405 int val = 0;
1406
1407 dev = ((struct seq_file *)file->private_data)->private;
1408
1409 if (len == 0)
1410 return 0;
1411
1412 input_buffer = memdup_user_nul(ubuf, len);
1413 if (IS_ERR(input_buffer))
1414 return PTR_ERR(input_buffer);
1415
1416 drm_dbg(&to_i915(dev)->drm,
1417 "Copied %d bytes from user\n", (unsigned int)len);
1418
1419 drm_connector_list_iter_begin(dev, &conn_iter);
1420 drm_for_each_connector_iter(connector, &conn_iter) {
1421 struct intel_encoder *encoder;
1422
1423 if (connector->connector_type !=
1424 DRM_MODE_CONNECTOR_DisplayPort)
1425 continue;
1426
1427 encoder = to_intel_encoder(connector->encoder);
1428 if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
1429 continue;
1430
1431 if (encoder && connector->status == connector_status_connected) {
1432 intel_dp = enc_to_intel_dp(encoder);
1433 status = kstrtoint(input_buffer, 10, &val);
1434 if (status < 0)
1435 break;
1436 drm_dbg(&to_i915(dev)->drm,
1437 "Got %d for test active\n", val);
1438
1439
1440
1441 if (val == 1)
1442 intel_dp->compliance.test_active = true;
1443 else
1444 intel_dp->compliance.test_active = false;
1445 }
1446 }
1447 drm_connector_list_iter_end(&conn_iter);
1448 kfree(input_buffer);
1449 if (status < 0)
1450 return status;
1451
1452 *offp += len;
1453 return len;
1454}
1455
1456static int i915_displayport_test_active_show(struct seq_file *m, void *data)
1457{
1458 struct drm_i915_private *dev_priv = m->private;
1459 struct drm_device *dev = &dev_priv->drm;
1460 struct drm_connector *connector;
1461 struct drm_connector_list_iter conn_iter;
1462 struct intel_dp *intel_dp;
1463
1464 drm_connector_list_iter_begin(dev, &conn_iter);
1465 drm_for_each_connector_iter(connector, &conn_iter) {
1466 struct intel_encoder *encoder;
1467
1468 if (connector->connector_type !=
1469 DRM_MODE_CONNECTOR_DisplayPort)
1470 continue;
1471
1472 encoder = to_intel_encoder(connector->encoder);
1473 if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
1474 continue;
1475
1476 if (encoder && connector->status == connector_status_connected) {
1477 intel_dp = enc_to_intel_dp(encoder);
1478 if (intel_dp->compliance.test_active)
1479 seq_puts(m, "1");
1480 else
1481 seq_puts(m, "0");
1482 } else
1483 seq_puts(m, "0");
1484 }
1485 drm_connector_list_iter_end(&conn_iter);
1486
1487 return 0;
1488}
1489
1490static int i915_displayport_test_active_open(struct inode *inode,
1491 struct file *file)
1492{
1493 return single_open(file, i915_displayport_test_active_show,
1494 inode->i_private);
1495}
1496
1497static const struct file_operations i915_displayport_test_active_fops = {
1498 .owner = THIS_MODULE,
1499 .open = i915_displayport_test_active_open,
1500 .read = seq_read,
1501 .llseek = seq_lseek,
1502 .release = single_release,
1503 .write = i915_displayport_test_active_write
1504};
1505
1506static int i915_displayport_test_data_show(struct seq_file *m, void *data)
1507{
1508 struct drm_i915_private *dev_priv = m->private;
1509 struct drm_device *dev = &dev_priv->drm;
1510 struct drm_connector *connector;
1511 struct drm_connector_list_iter conn_iter;
1512 struct intel_dp *intel_dp;
1513
1514 drm_connector_list_iter_begin(dev, &conn_iter);
1515 drm_for_each_connector_iter(connector, &conn_iter) {
1516 struct intel_encoder *encoder;
1517
1518 if (connector->connector_type !=
1519 DRM_MODE_CONNECTOR_DisplayPort)
1520 continue;
1521
1522 encoder = to_intel_encoder(connector->encoder);
1523 if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
1524 continue;
1525
1526 if (encoder && connector->status == connector_status_connected) {
1527 intel_dp = enc_to_intel_dp(encoder);
1528 if (intel_dp->compliance.test_type ==
1529 DP_TEST_LINK_EDID_READ)
1530 seq_printf(m, "%lx",
1531 intel_dp->compliance.test_data.edid);
1532 else if (intel_dp->compliance.test_type ==
1533 DP_TEST_LINK_VIDEO_PATTERN) {
1534 seq_printf(m, "hdisplay: %d\n",
1535 intel_dp->compliance.test_data.hdisplay);
1536 seq_printf(m, "vdisplay: %d\n",
1537 intel_dp->compliance.test_data.vdisplay);
1538 seq_printf(m, "bpc: %u\n",
1539 intel_dp->compliance.test_data.bpc);
1540 } else if (intel_dp->compliance.test_type ==
1541 DP_TEST_LINK_PHY_TEST_PATTERN) {
1542 seq_printf(m, "pattern: %d\n",
1543 intel_dp->compliance.test_data.phytest.phy_pattern);
1544 seq_printf(m, "Number of lanes: %d\n",
1545 intel_dp->compliance.test_data.phytest.num_lanes);
1546 seq_printf(m, "Link Rate: %d\n",
1547 intel_dp->compliance.test_data.phytest.link_rate);
1548 seq_printf(m, "level: %02x\n",
1549 intel_dp->train_set[0]);
1550 }
1551 } else
1552 seq_puts(m, "0");
1553 }
1554 drm_connector_list_iter_end(&conn_iter);
1555
1556 return 0;
1557}
1558DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_data);
1559
1560static int i915_displayport_test_type_show(struct seq_file *m, void *data)
1561{
1562 struct drm_i915_private *dev_priv = m->private;
1563 struct drm_device *dev = &dev_priv->drm;
1564 struct drm_connector *connector;
1565 struct drm_connector_list_iter conn_iter;
1566 struct intel_dp *intel_dp;
1567
1568 drm_connector_list_iter_begin(dev, &conn_iter);
1569 drm_for_each_connector_iter(connector, &conn_iter) {
1570 struct intel_encoder *encoder;
1571
1572 if (connector->connector_type !=
1573 DRM_MODE_CONNECTOR_DisplayPort)
1574 continue;
1575
1576 encoder = to_intel_encoder(connector->encoder);
1577 if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
1578 continue;
1579
1580 if (encoder && connector->status == connector_status_connected) {
1581 intel_dp = enc_to_intel_dp(encoder);
1582 seq_printf(m, "%02lx\n", intel_dp->compliance.test_type);
1583 } else
1584 seq_puts(m, "0");
1585 }
1586 drm_connector_list_iter_end(&conn_iter);
1587
1588 return 0;
1589}
1590DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_type);
1591
1592static void wm_latency_show(struct seq_file *m, const u16 wm[8])
1593{
1594 struct drm_i915_private *dev_priv = m->private;
1595 struct drm_device *dev = &dev_priv->drm;
1596 int level;
1597 int num_levels;
1598
1599 if (IS_CHERRYVIEW(dev_priv))
1600 num_levels = 3;
1601 else if (IS_VALLEYVIEW(dev_priv))
1602 num_levels = 1;
1603 else if (IS_G4X(dev_priv))
1604 num_levels = 3;
1605 else
1606 num_levels = ilk_wm_max_level(dev_priv) + 1;
1607
1608 drm_modeset_lock_all(dev);
1609
1610 for (level = 0; level < num_levels; level++) {
1611 unsigned int latency = wm[level];
1612
1613
1614
1615
1616
1617 if (DISPLAY_VER(dev_priv) >= 9 ||
1618 IS_VALLEYVIEW(dev_priv) ||
1619 IS_CHERRYVIEW(dev_priv) ||
1620 IS_G4X(dev_priv))
1621 latency *= 10;
1622 else if (level > 0)
1623 latency *= 5;
1624
1625 seq_printf(m, "WM%d %u (%u.%u usec)\n",
1626 level, wm[level], latency / 10, latency % 10);
1627 }
1628
1629 drm_modeset_unlock_all(dev);
1630}
1631
1632static int pri_wm_latency_show(struct seq_file *m, void *data)
1633{
1634 struct drm_i915_private *dev_priv = m->private;
1635 const u16 *latencies;
1636
1637 if (DISPLAY_VER(dev_priv) >= 9)
1638 latencies = dev_priv->wm.skl_latency;
1639 else
1640 latencies = dev_priv->wm.pri_latency;
1641
1642 wm_latency_show(m, latencies);
1643
1644 return 0;
1645}
1646
1647static int spr_wm_latency_show(struct seq_file *m, void *data)
1648{
1649 struct drm_i915_private *dev_priv = m->private;
1650 const u16 *latencies;
1651
1652 if (DISPLAY_VER(dev_priv) >= 9)
1653 latencies = dev_priv->wm.skl_latency;
1654 else
1655 latencies = dev_priv->wm.spr_latency;
1656
1657 wm_latency_show(m, latencies);
1658
1659 return 0;
1660}
1661
1662static int cur_wm_latency_show(struct seq_file *m, void *data)
1663{
1664 struct drm_i915_private *dev_priv = m->private;
1665 const u16 *latencies;
1666
1667 if (DISPLAY_VER(dev_priv) >= 9)
1668 latencies = dev_priv->wm.skl_latency;
1669 else
1670 latencies = dev_priv->wm.cur_latency;
1671
1672 wm_latency_show(m, latencies);
1673
1674 return 0;
1675}
1676
1677static int pri_wm_latency_open(struct inode *inode, struct file *file)
1678{
1679 struct drm_i915_private *dev_priv = inode->i_private;
1680
1681 if (DISPLAY_VER(dev_priv) < 5 && !IS_G4X(dev_priv))
1682 return -ENODEV;
1683
1684 return single_open(file, pri_wm_latency_show, dev_priv);
1685}
1686
1687static int spr_wm_latency_open(struct inode *inode, struct file *file)
1688{
1689 struct drm_i915_private *dev_priv = inode->i_private;
1690
1691 if (HAS_GMCH(dev_priv))
1692 return -ENODEV;
1693
1694 return single_open(file, spr_wm_latency_show, dev_priv);
1695}
1696
1697static int cur_wm_latency_open(struct inode *inode, struct file *file)
1698{
1699 struct drm_i915_private *dev_priv = inode->i_private;
1700
1701 if (HAS_GMCH(dev_priv))
1702 return -ENODEV;
1703
1704 return single_open(file, cur_wm_latency_show, dev_priv);
1705}
1706
1707static ssize_t wm_latency_write(struct file *file, const char __user *ubuf,
1708 size_t len, loff_t *offp, u16 wm[8])
1709{
1710 struct seq_file *m = file->private_data;
1711 struct drm_i915_private *dev_priv = m->private;
1712 struct drm_device *dev = &dev_priv->drm;
1713 u16 new[8] = { 0 };
1714 int num_levels;
1715 int level;
1716 int ret;
1717 char tmp[32];
1718
1719 if (IS_CHERRYVIEW(dev_priv))
1720 num_levels = 3;
1721 else if (IS_VALLEYVIEW(dev_priv))
1722 num_levels = 1;
1723 else if (IS_G4X(dev_priv))
1724 num_levels = 3;
1725 else
1726 num_levels = ilk_wm_max_level(dev_priv) + 1;
1727
1728 if (len >= sizeof(tmp))
1729 return -EINVAL;
1730
1731 if (copy_from_user(tmp, ubuf, len))
1732 return -EFAULT;
1733
1734 tmp[len] = '\0';
1735
1736 ret = sscanf(tmp, "%hu %hu %hu %hu %hu %hu %hu %hu",
1737 &new[0], &new[1], &new[2], &new[3],
1738 &new[4], &new[5], &new[6], &new[7]);
1739 if (ret != num_levels)
1740 return -EINVAL;
1741
1742 drm_modeset_lock_all(dev);
1743
1744 for (level = 0; level < num_levels; level++)
1745 wm[level] = new[level];
1746
1747 drm_modeset_unlock_all(dev);
1748
1749 return len;
1750}
1751
1752
1753static ssize_t pri_wm_latency_write(struct file *file, const char __user *ubuf,
1754 size_t len, loff_t *offp)
1755{
1756 struct seq_file *m = file->private_data;
1757 struct drm_i915_private *dev_priv = m->private;
1758 u16 *latencies;
1759
1760 if (DISPLAY_VER(dev_priv) >= 9)
1761 latencies = dev_priv->wm.skl_latency;
1762 else
1763 latencies = dev_priv->wm.pri_latency;
1764
1765 return wm_latency_write(file, ubuf, len, offp, latencies);
1766}
1767
1768static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf,
1769 size_t len, loff_t *offp)
1770{
1771 struct seq_file *m = file->private_data;
1772 struct drm_i915_private *dev_priv = m->private;
1773 u16 *latencies;
1774
1775 if (DISPLAY_VER(dev_priv) >= 9)
1776 latencies = dev_priv->wm.skl_latency;
1777 else
1778 latencies = dev_priv->wm.spr_latency;
1779
1780 return wm_latency_write(file, ubuf, len, offp, latencies);
1781}
1782
1783static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf,
1784 size_t len, loff_t *offp)
1785{
1786 struct seq_file *m = file->private_data;
1787 struct drm_i915_private *dev_priv = m->private;
1788 u16 *latencies;
1789
1790 if (DISPLAY_VER(dev_priv) >= 9)
1791 latencies = dev_priv->wm.skl_latency;
1792 else
1793 latencies = dev_priv->wm.cur_latency;
1794
1795 return wm_latency_write(file, ubuf, len, offp, latencies);
1796}
1797
1798static const struct file_operations i915_pri_wm_latency_fops = {
1799 .owner = THIS_MODULE,
1800 .open = pri_wm_latency_open,
1801 .read = seq_read,
1802 .llseek = seq_lseek,
1803 .release = single_release,
1804 .write = pri_wm_latency_write
1805};
1806
1807static const struct file_operations i915_spr_wm_latency_fops = {
1808 .owner = THIS_MODULE,
1809 .open = spr_wm_latency_open,
1810 .read = seq_read,
1811 .llseek = seq_lseek,
1812 .release = single_release,
1813 .write = spr_wm_latency_write
1814};
1815
1816static const struct file_operations i915_cur_wm_latency_fops = {
1817 .owner = THIS_MODULE,
1818 .open = cur_wm_latency_open,
1819 .read = seq_read,
1820 .llseek = seq_lseek,
1821 .release = single_release,
1822 .write = cur_wm_latency_write
1823};
1824
1825static int i915_hpd_storm_ctl_show(struct seq_file *m, void *data)
1826{
1827 struct drm_i915_private *dev_priv = m->private;
1828 struct i915_hotplug *hotplug = &dev_priv->hotplug;
1829
1830
1831
1832
1833 intel_synchronize_irq(dev_priv);
1834 flush_work(&dev_priv->hotplug.dig_port_work);
1835 flush_delayed_work(&dev_priv->hotplug.hotplug_work);
1836
1837 seq_printf(m, "Threshold: %d\n", hotplug->hpd_storm_threshold);
1838 seq_printf(m, "Detected: %s\n",
1839 yesno(delayed_work_pending(&hotplug->reenable_work)));
1840
1841 return 0;
1842}
1843
1844static ssize_t i915_hpd_storm_ctl_write(struct file *file,
1845 const char __user *ubuf, size_t len,
1846 loff_t *offp)
1847{
1848 struct seq_file *m = file->private_data;
1849 struct drm_i915_private *dev_priv = m->private;
1850 struct i915_hotplug *hotplug = &dev_priv->hotplug;
1851 unsigned int new_threshold;
1852 int i;
1853 char *newline;
1854 char tmp[16];
1855
1856 if (len >= sizeof(tmp))
1857 return -EINVAL;
1858
1859 if (copy_from_user(tmp, ubuf, len))
1860 return -EFAULT;
1861
1862 tmp[len] = '\0';
1863
1864
1865 newline = strchr(tmp, '\n');
1866 if (newline)
1867 *newline = '\0';
1868
1869 if (strcmp(tmp, "reset") == 0)
1870 new_threshold = HPD_STORM_DEFAULT_THRESHOLD;
1871 else if (kstrtouint(tmp, 10, &new_threshold) != 0)
1872 return -EINVAL;
1873
1874 if (new_threshold > 0)
1875 drm_dbg_kms(&dev_priv->drm,
1876 "Setting HPD storm detection threshold to %d\n",
1877 new_threshold);
1878 else
1879 drm_dbg_kms(&dev_priv->drm, "Disabling HPD storm detection\n");
1880
1881 spin_lock_irq(&dev_priv->irq_lock);
1882 hotplug->hpd_storm_threshold = new_threshold;
1883
1884 for_each_hpd_pin(i)
1885 hotplug->stats[i].count = 0;
1886 spin_unlock_irq(&dev_priv->irq_lock);
1887
1888
1889 flush_delayed_work(&dev_priv->hotplug.reenable_work);
1890
1891 return len;
1892}
1893
1894static int i915_hpd_storm_ctl_open(struct inode *inode, struct file *file)
1895{
1896 return single_open(file, i915_hpd_storm_ctl_show, inode->i_private);
1897}
1898
1899static const struct file_operations i915_hpd_storm_ctl_fops = {
1900 .owner = THIS_MODULE,
1901 .open = i915_hpd_storm_ctl_open,
1902 .read = seq_read,
1903 .llseek = seq_lseek,
1904 .release = single_release,
1905 .write = i915_hpd_storm_ctl_write
1906};
1907
1908static int i915_hpd_short_storm_ctl_show(struct seq_file *m, void *data)
1909{
1910 struct drm_i915_private *dev_priv = m->private;
1911
1912 seq_printf(m, "Enabled: %s\n",
1913 yesno(dev_priv->hotplug.hpd_short_storm_enabled));
1914
1915 return 0;
1916}
1917
1918static int
1919i915_hpd_short_storm_ctl_open(struct inode *inode, struct file *file)
1920{
1921 return single_open(file, i915_hpd_short_storm_ctl_show,
1922 inode->i_private);
1923}
1924
1925static ssize_t i915_hpd_short_storm_ctl_write(struct file *file,
1926 const char __user *ubuf,
1927 size_t len, loff_t *offp)
1928{
1929 struct seq_file *m = file->private_data;
1930 struct drm_i915_private *dev_priv = m->private;
1931 struct i915_hotplug *hotplug = &dev_priv->hotplug;
1932 char *newline;
1933 char tmp[16];
1934 int i;
1935 bool new_state;
1936
1937 if (len >= sizeof(tmp))
1938 return -EINVAL;
1939
1940 if (copy_from_user(tmp, ubuf, len))
1941 return -EFAULT;
1942
1943 tmp[len] = '\0';
1944
1945
1946 newline = strchr(tmp, '\n');
1947 if (newline)
1948 *newline = '\0';
1949
1950
1951 if (strcmp(tmp, "reset") == 0)
1952 new_state = !HAS_DP_MST(dev_priv);
1953 else if (kstrtobool(tmp, &new_state) != 0)
1954 return -EINVAL;
1955
1956 drm_dbg_kms(&dev_priv->drm, "%sabling HPD short storm detection\n",
1957 new_state ? "En" : "Dis");
1958
1959 spin_lock_irq(&dev_priv->irq_lock);
1960 hotplug->hpd_short_storm_enabled = new_state;
1961
1962 for_each_hpd_pin(i)
1963 hotplug->stats[i].count = 0;
1964 spin_unlock_irq(&dev_priv->irq_lock);
1965
1966
1967 flush_delayed_work(&dev_priv->hotplug.reenable_work);
1968
1969 return len;
1970}
1971
1972static const struct file_operations i915_hpd_short_storm_ctl_fops = {
1973 .owner = THIS_MODULE,
1974 .open = i915_hpd_short_storm_ctl_open,
1975 .read = seq_read,
1976 .llseek = seq_lseek,
1977 .release = single_release,
1978 .write = i915_hpd_short_storm_ctl_write,
1979};
1980
1981static int i915_drrs_ctl_set(void *data, u64 val)
1982{
1983 struct drm_i915_private *dev_priv = data;
1984 struct drm_device *dev = &dev_priv->drm;
1985 struct intel_crtc *crtc;
1986
1987 if (DISPLAY_VER(dev_priv) < 7)
1988 return -ENODEV;
1989
1990 for_each_intel_crtc(dev, crtc) {
1991 struct drm_connector_list_iter conn_iter;
1992 struct intel_crtc_state *crtc_state;
1993 struct drm_connector *connector;
1994 struct drm_crtc_commit *commit;
1995 int ret;
1996
1997 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
1998 if (ret)
1999 return ret;
2000
2001 crtc_state = to_intel_crtc_state(crtc->base.state);
2002
2003 if (!crtc_state->hw.active ||
2004 !crtc_state->has_drrs)
2005 goto out;
2006
2007 commit = crtc_state->uapi.commit;
2008 if (commit) {
2009 ret = wait_for_completion_interruptible(&commit->hw_done);
2010 if (ret)
2011 goto out;
2012 }
2013
2014 drm_connector_list_iter_begin(dev, &conn_iter);
2015 drm_for_each_connector_iter(connector, &conn_iter) {
2016 struct intel_encoder *encoder;
2017 struct intel_dp *intel_dp;
2018
2019 if (!(crtc_state->uapi.connector_mask &
2020 drm_connector_mask(connector)))
2021 continue;
2022
2023 encoder = intel_attached_encoder(to_intel_connector(connector));
2024 if (encoder->type != INTEL_OUTPUT_EDP)
2025 continue;
2026
2027 drm_dbg(&dev_priv->drm,
2028 "Manually %sabling DRRS. %llu\n",
2029 val ? "en" : "dis", val);
2030
2031 intel_dp = enc_to_intel_dp(encoder);
2032 if (val)
2033 intel_drrs_enable(intel_dp, crtc_state);
2034 else
2035 intel_drrs_disable(intel_dp, crtc_state);
2036 }
2037 drm_connector_list_iter_end(&conn_iter);
2038
2039out:
2040 drm_modeset_unlock(&crtc->base.mutex);
2041 if (ret)
2042 return ret;
2043 }
2044
2045 return 0;
2046}
2047
2048DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, "%llu\n");
2049
2050static ssize_t
2051i915_fifo_underrun_reset_write(struct file *filp,
2052 const char __user *ubuf,
2053 size_t cnt, loff_t *ppos)
2054{
2055 struct drm_i915_private *dev_priv = filp->private_data;
2056 struct intel_crtc *crtc;
2057 struct drm_device *dev = &dev_priv->drm;
2058 int ret;
2059 bool reset;
2060
2061 ret = kstrtobool_from_user(ubuf, cnt, &reset);
2062 if (ret)
2063 return ret;
2064
2065 if (!reset)
2066 return cnt;
2067
2068 for_each_intel_crtc(dev, crtc) {
2069 struct drm_crtc_commit *commit;
2070 struct intel_crtc_state *crtc_state;
2071
2072 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
2073 if (ret)
2074 return ret;
2075
2076 crtc_state = to_intel_crtc_state(crtc->base.state);
2077 commit = crtc_state->uapi.commit;
2078 if (commit) {
2079 ret = wait_for_completion_interruptible(&commit->hw_done);
2080 if (!ret)
2081 ret = wait_for_completion_interruptible(&commit->flip_done);
2082 }
2083
2084 if (!ret && crtc_state->hw.active) {
2085 drm_dbg_kms(&dev_priv->drm,
2086 "Re-arming FIFO underruns on pipe %c\n",
2087 pipe_name(crtc->pipe));
2088
2089 intel_crtc_arm_fifo_underrun(crtc, crtc_state);
2090 }
2091
2092 drm_modeset_unlock(&crtc->base.mutex);
2093
2094 if (ret)
2095 return ret;
2096 }
2097
2098 ret = intel_fbc_reset_underrun(dev_priv);
2099 if (ret)
2100 return ret;
2101
2102 return cnt;
2103}
2104
2105static const struct file_operations i915_fifo_underrun_reset_ops = {
2106 .owner = THIS_MODULE,
2107 .open = simple_open,
2108 .write = i915_fifo_underrun_reset_write,
2109 .llseek = default_llseek,
2110};
2111
2112static const struct drm_info_list intel_display_debugfs_list[] = {
2113 {"i915_frontbuffer_tracking", i915_frontbuffer_tracking, 0},
2114 {"i915_fbc_status", i915_fbc_status, 0},
2115 {"i915_ips_status", i915_ips_status, 0},
2116 {"i915_sr_status", i915_sr_status, 0},
2117 {"i915_opregion", i915_opregion, 0},
2118 {"i915_vbt", i915_vbt, 0},
2119 {"i915_gem_framebuffer", i915_gem_framebuffer_info, 0},
2120 {"i915_edp_psr_status", i915_edp_psr_status, 0},
2121 {"i915_power_domain_info", i915_power_domain_info, 0},
2122 {"i915_dmc_info", i915_dmc_info, 0},
2123 {"i915_display_info", i915_display_info, 0},
2124 {"i915_shared_dplls_info", i915_shared_dplls_info, 0},
2125 {"i915_dp_mst_info", i915_dp_mst_info, 0},
2126 {"i915_ddb_info", i915_ddb_info, 0},
2127 {"i915_drrs_status", i915_drrs_status, 0},
2128 {"i915_lpsp_status", i915_lpsp_status, 0},
2129};
2130
2131static const struct {
2132 const char *name;
2133 const struct file_operations *fops;
2134} intel_display_debugfs_files[] = {
2135 {"i915_fifo_underrun_reset", &i915_fifo_underrun_reset_ops},
2136 {"i915_pri_wm_latency", &i915_pri_wm_latency_fops},
2137 {"i915_spr_wm_latency", &i915_spr_wm_latency_fops},
2138 {"i915_cur_wm_latency", &i915_cur_wm_latency_fops},
2139 {"i915_fbc_false_color", &i915_fbc_false_color_fops},
2140 {"i915_dp_test_data", &i915_displayport_test_data_fops},
2141 {"i915_dp_test_type", &i915_displayport_test_type_fops},
2142 {"i915_dp_test_active", &i915_displayport_test_active_fops},
2143 {"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops},
2144 {"i915_hpd_short_storm_ctl", &i915_hpd_short_storm_ctl_fops},
2145 {"i915_ipc_status", &i915_ipc_status_fops},
2146 {"i915_drrs_ctl", &i915_drrs_ctl_fops},
2147 {"i915_edp_psr_debug", &i915_edp_psr_debug_fops},
2148};
2149
2150void intel_display_debugfs_register(struct drm_i915_private *i915)
2151{
2152 struct drm_minor *minor = i915->drm.primary;
2153 int i;
2154
2155 for (i = 0; i < ARRAY_SIZE(intel_display_debugfs_files); i++) {
2156 debugfs_create_file(intel_display_debugfs_files[i].name,
2157 S_IRUGO | S_IWUSR,
2158 minor->debugfs_root,
2159 to_i915(minor->dev),
2160 intel_display_debugfs_files[i].fops);
2161 }
2162
2163 drm_debugfs_create_files(intel_display_debugfs_list,
2164 ARRAY_SIZE(intel_display_debugfs_list),
2165 minor->debugfs_root, minor);
2166}
2167
2168static int i915_panel_show(struct seq_file *m, void *data)
2169{
2170 struct drm_connector *connector = m->private;
2171 struct intel_dp *intel_dp =
2172 intel_attached_dp(to_intel_connector(connector));
2173
2174 if (connector->status != connector_status_connected)
2175 return -ENODEV;
2176
2177 seq_printf(m, "Panel power up delay: %d\n",
2178 intel_dp->pps.panel_power_up_delay);
2179 seq_printf(m, "Panel power down delay: %d\n",
2180 intel_dp->pps.panel_power_down_delay);
2181 seq_printf(m, "Backlight on delay: %d\n",
2182 intel_dp->pps.backlight_on_delay);
2183 seq_printf(m, "Backlight off delay: %d\n",
2184 intel_dp->pps.backlight_off_delay);
2185
2186 return 0;
2187}
2188DEFINE_SHOW_ATTRIBUTE(i915_panel);
2189
2190static int i915_hdcp_sink_capability_show(struct seq_file *m, void *data)
2191{
2192 struct drm_connector *connector = m->private;
2193 struct drm_i915_private *i915 = to_i915(connector->dev);
2194 struct intel_connector *intel_connector = to_intel_connector(connector);
2195 int ret;
2196
2197 ret = drm_modeset_lock_single_interruptible(&i915->drm.mode_config.connection_mutex);
2198 if (ret)
2199 return ret;
2200
2201 if (!connector->encoder || connector->status != connector_status_connected) {
2202 ret = -ENODEV;
2203 goto out;
2204 }
2205
2206 seq_printf(m, "%s:%d HDCP version: ", connector->name,
2207 connector->base.id);
2208 intel_hdcp_info(m, intel_connector);
2209
2210out:
2211 drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
2212
2213 return ret;
2214}
2215DEFINE_SHOW_ATTRIBUTE(i915_hdcp_sink_capability);
2216
2217static int i915_psr_status_show(struct seq_file *m, void *data)
2218{
2219 struct drm_connector *connector = m->private;
2220 struct intel_dp *intel_dp =
2221 intel_attached_dp(to_intel_connector(connector));
2222
2223 return intel_psr_status(m, intel_dp);
2224}
2225DEFINE_SHOW_ATTRIBUTE(i915_psr_status);
2226
2227static int i915_lpsp_capability_show(struct seq_file *m, void *data)
2228{
2229 struct drm_connector *connector = m->private;
2230 struct drm_i915_private *i915 = to_i915(connector->dev);
2231 struct intel_encoder *encoder;
2232 bool lpsp_capable = false;
2233
2234 encoder = intel_attached_encoder(to_intel_connector(connector));
2235 if (!encoder)
2236 return -ENODEV;
2237
2238 if (connector->status != connector_status_connected)
2239 return -ENODEV;
2240
2241 if (DISPLAY_VER(i915) >= 13)
2242 lpsp_capable = encoder->port <= PORT_B;
2243 else if (DISPLAY_VER(i915) >= 12)
2244
2245
2246
2247
2248
2249 lpsp_capable = encoder->port <= PORT_B;
2250 else if (DISPLAY_VER(i915) == 11)
2251 lpsp_capable = (connector->connector_type == DRM_MODE_CONNECTOR_DSI ||
2252 connector->connector_type == DRM_MODE_CONNECTOR_eDP);
2253 else if (IS_DISPLAY_VER(i915, 9, 10))
2254 lpsp_capable = (encoder->port == PORT_A &&
2255 (connector->connector_type == DRM_MODE_CONNECTOR_DSI ||
2256 connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
2257 connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort));
2258 else if (IS_HASWELL(i915) || IS_BROADWELL(i915))
2259 lpsp_capable = connector->connector_type == DRM_MODE_CONNECTOR_eDP;
2260
2261 seq_printf(m, "LPSP: %s\n", lpsp_capable ? "capable" : "incapable");
2262
2263 return 0;
2264}
2265DEFINE_SHOW_ATTRIBUTE(i915_lpsp_capability);
2266
2267static int i915_dsc_fec_support_show(struct seq_file *m, void *data)
2268{
2269 struct drm_connector *connector = m->private;
2270 struct drm_device *dev = connector->dev;
2271 struct drm_crtc *crtc;
2272 struct intel_dp *intel_dp;
2273 struct drm_modeset_acquire_ctx ctx;
2274 struct intel_crtc_state *crtc_state = NULL;
2275 int ret = 0;
2276 bool try_again = false;
2277
2278 drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
2279
2280 do {
2281 try_again = false;
2282 ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
2283 &ctx);
2284 if (ret) {
2285 if (ret == -EDEADLK && !drm_modeset_backoff(&ctx)) {
2286 try_again = true;
2287 continue;
2288 }
2289 break;
2290 }
2291 crtc = connector->state->crtc;
2292 if (connector->status != connector_status_connected || !crtc) {
2293 ret = -ENODEV;
2294 break;
2295 }
2296 ret = drm_modeset_lock(&crtc->mutex, &ctx);
2297 if (ret == -EDEADLK) {
2298 ret = drm_modeset_backoff(&ctx);
2299 if (!ret) {
2300 try_again = true;
2301 continue;
2302 }
2303 break;
2304 } else if (ret) {
2305 break;
2306 }
2307 intel_dp = intel_attached_dp(to_intel_connector(connector));
2308 crtc_state = to_intel_crtc_state(crtc->state);
2309 seq_printf(m, "DSC_Enabled: %s\n",
2310 yesno(crtc_state->dsc.compression_enable));
2311 seq_printf(m, "DSC_Sink_Support: %s\n",
2312 yesno(drm_dp_sink_supports_dsc(intel_dp->dsc_dpcd)));
2313 seq_printf(m, "Force_DSC_Enable: %s\n",
2314 yesno(intel_dp->force_dsc_en));
2315 if (!intel_dp_is_edp(intel_dp))
2316 seq_printf(m, "FEC_Sink_Support: %s\n",
2317 yesno(drm_dp_sink_supports_fec(intel_dp->fec_capable)));
2318 } while (try_again);
2319
2320 drm_modeset_drop_locks(&ctx);
2321 drm_modeset_acquire_fini(&ctx);
2322
2323 return ret;
2324}
2325
2326static ssize_t i915_dsc_fec_support_write(struct file *file,
2327 const char __user *ubuf,
2328 size_t len, loff_t *offp)
2329{
2330 bool dsc_enable = false;
2331 int ret;
2332 struct drm_connector *connector =
2333 ((struct seq_file *)file->private_data)->private;
2334 struct intel_encoder *encoder = intel_attached_encoder(to_intel_connector(connector));
2335 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
2336 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2337
2338 if (len == 0)
2339 return 0;
2340
2341 drm_dbg(&i915->drm,
2342 "Copied %zu bytes from user to force DSC\n", len);
2343
2344 ret = kstrtobool_from_user(ubuf, len, &dsc_enable);
2345 if (ret < 0)
2346 return ret;
2347
2348 drm_dbg(&i915->drm, "Got %s for DSC Enable\n",
2349 (dsc_enable) ? "true" : "false");
2350 intel_dp->force_dsc_en = dsc_enable;
2351
2352 *offp += len;
2353 return len;
2354}
2355
2356static int i915_dsc_fec_support_open(struct inode *inode,
2357 struct file *file)
2358{
2359 return single_open(file, i915_dsc_fec_support_show,
2360 inode->i_private);
2361}
2362
2363static const struct file_operations i915_dsc_fec_support_fops = {
2364 .owner = THIS_MODULE,
2365 .open = i915_dsc_fec_support_open,
2366 .read = seq_read,
2367 .llseek = seq_lseek,
2368 .release = single_release,
2369 .write = i915_dsc_fec_support_write
2370};
2371
2372static int i915_dsc_bpp_show(struct seq_file *m, void *data)
2373{
2374 struct drm_connector *connector = m->private;
2375 struct drm_device *dev = connector->dev;
2376 struct drm_crtc *crtc;
2377 struct intel_crtc_state *crtc_state;
2378 struct intel_encoder *encoder = intel_attached_encoder(to_intel_connector(connector));
2379 int ret;
2380
2381 if (!encoder)
2382 return -ENODEV;
2383
2384 ret = drm_modeset_lock_single_interruptible(&dev->mode_config.connection_mutex);
2385 if (ret)
2386 return ret;
2387
2388 crtc = connector->state->crtc;
2389 if (connector->status != connector_status_connected || !crtc) {
2390 ret = -ENODEV;
2391 goto out;
2392 }
2393
2394 crtc_state = to_intel_crtc_state(crtc->state);
2395 seq_printf(m, "Compressed_BPP: %d\n", crtc_state->dsc.compressed_bpp);
2396
2397out: drm_modeset_unlock(&dev->mode_config.connection_mutex);
2398
2399 return ret;
2400}
2401
2402static ssize_t i915_dsc_bpp_write(struct file *file,
2403 const char __user *ubuf,
2404 size_t len, loff_t *offp)
2405{
2406 struct drm_connector *connector =
2407 ((struct seq_file *)file->private_data)->private;
2408 struct intel_encoder *encoder = intel_attached_encoder(to_intel_connector(connector));
2409 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2410 int dsc_bpp = 0;
2411 int ret;
2412
2413 ret = kstrtoint_from_user(ubuf, len, 0, &dsc_bpp);
2414 if (ret < 0)
2415 return ret;
2416
2417 intel_dp->force_dsc_bpp = dsc_bpp;
2418 *offp += len;
2419
2420 return len;
2421}
2422
2423static int i915_dsc_bpp_open(struct inode *inode,
2424 struct file *file)
2425{
2426 return single_open(file, i915_dsc_bpp_show,
2427 inode->i_private);
2428}
2429
2430static const struct file_operations i915_dsc_bpp_fops = {
2431 .owner = THIS_MODULE,
2432 .open = i915_dsc_bpp_open,
2433 .read = seq_read,
2434 .llseek = seq_lseek,
2435 .release = single_release,
2436 .write = i915_dsc_bpp_write
2437};
2438
2439
2440
2441
2442
2443
2444
2445
2446void intel_connector_debugfs_add(struct intel_connector *intel_connector)
2447{
2448 struct drm_connector *connector = &intel_connector->base;
2449 struct dentry *root = connector->debugfs_entry;
2450 struct drm_i915_private *dev_priv = to_i915(connector->dev);
2451
2452
2453 if (!root)
2454 return;
2455
2456 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
2457 debugfs_create_file("i915_panel_timings", S_IRUGO, root,
2458 connector, &i915_panel_fops);
2459 debugfs_create_file("i915_psr_sink_status", S_IRUGO, root,
2460 connector, &i915_psr_sink_status_fops);
2461 }
2462
2463 if (HAS_PSR(dev_priv) &&
2464 connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
2465 debugfs_create_file("i915_psr_status", 0444, root,
2466 connector, &i915_psr_status_fops);
2467 }
2468
2469 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
2470 connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
2471 connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) {
2472 debugfs_create_file("i915_hdcp_sink_capability", S_IRUGO, root,
2473 connector, &i915_hdcp_sink_capability_fops);
2474 }
2475
2476 if (DISPLAY_VER(dev_priv) >= 11 &&
2477 ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort &&
2478 !to_intel_connector(connector)->mst_port) ||
2479 connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
2480 debugfs_create_file("i915_dsc_fec_support", 0644, root,
2481 connector, &i915_dsc_fec_support_fops);
2482
2483 debugfs_create_file("i915_dsc_bpp", 0644, root,
2484 connector, &i915_dsc_bpp_fops);
2485 }
2486
2487 if (connector->connector_type == DRM_MODE_CONNECTOR_DSI ||
2488 connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
2489 connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
2490 connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
2491 connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)
2492 debugfs_create_file("i915_lpsp_capability", 0444, root,
2493 connector, &i915_lpsp_capability_fops);
2494}
2495
2496
2497
2498
2499
2500
2501
2502void intel_crtc_debugfs_add(struct drm_crtc *crtc)
2503{
2504 if (crtc->debugfs_entry)
2505 crtc_updates_add(crtc);
2506}
2507