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