drm/i915/gvt: Refine non privilege register address calucation
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / i915_debugfs.c
1 /*
2  * Copyright © 2008 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  * Authors:
24  *    Eric Anholt <eric@anholt.net>
25  *    Keith Packard <keithp@keithp.com>
26  *
27  */
28
29 #include <linux/sched/mm.h>
30 #include <linux/sort.h>
31
32 #include <drm/drm_debugfs.h>
33 #include <drm/drm_fourcc.h>
34
35 #include "display/intel_display_types.h"
36 #include "display/intel_dp.h"
37 #include "display/intel_fbc.h"
38 #include "display/intel_hdcp.h"
39 #include "display/intel_hdmi.h"
40 #include "display/intel_psr.h"
41
42 #include "gem/i915_gem_context.h"
43 #include "gt/intel_gt_pm.h"
44 #include "gt/intel_gt_requests.h"
45 #include "gt/intel_reset.h"
46 #include "gt/intel_rc6.h"
47 #include "gt/intel_rps.h"
48 #include "gt/uc/intel_guc_submission.h"
49
50 #include "i915_debugfs.h"
51 #include "i915_irq.h"
52 #include "i915_trace.h"
53 #include "intel_csr.h"
54 #include "intel_pm.h"
55 #include "intel_sideband.h"
56
57 static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
58 {
59         return to_i915(node->minor->dev);
60 }
61
62 static int i915_capabilities(struct seq_file *m, void *data)
63 {
64         struct drm_i915_private *dev_priv = node_to_i915(m->private);
65         const struct intel_device_info *info = INTEL_INFO(dev_priv);
66         struct drm_printer p = drm_seq_file_printer(m);
67         const char *msg;
68
69         seq_printf(m, "gen: %d\n", INTEL_GEN(dev_priv));
70         seq_printf(m, "platform: %s\n", intel_platform_name(info->platform));
71         seq_printf(m, "pch: %d\n", INTEL_PCH_TYPE(dev_priv));
72
73         msg = "n/a";
74 #ifdef CONFIG_INTEL_IOMMU
75         msg = enableddisabled(intel_iommu_gfx_mapped);
76 #endif
77         seq_printf(m, "iommu: %s\n", msg);
78
79         intel_device_info_dump_flags(info, &p);
80         intel_device_info_dump_runtime(RUNTIME_INFO(dev_priv), &p);
81         intel_driver_caps_print(&dev_priv->caps, &p);
82
83         kernel_param_lock(THIS_MODULE);
84         i915_params_dump(&i915_modparams, &p);
85         kernel_param_unlock(THIS_MODULE);
86
87         return 0;
88 }
89
90 static char get_tiling_flag(struct drm_i915_gem_object *obj)
91 {
92         switch (i915_gem_object_get_tiling(obj)) {
93         default:
94         case I915_TILING_NONE: return ' ';
95         case I915_TILING_X: return 'X';
96         case I915_TILING_Y: return 'Y';
97         }
98 }
99
100 static char get_global_flag(struct drm_i915_gem_object *obj)
101 {
102         return READ_ONCE(obj->userfault_count) ? 'g' : ' ';
103 }
104
105 static char get_pin_mapped_flag(struct drm_i915_gem_object *obj)
106 {
107         return obj->mm.mapping ? 'M' : ' ';
108 }
109
110 static const char *
111 stringify_page_sizes(unsigned int page_sizes, char *buf, size_t len)
112 {
113         size_t x = 0;
114
115         switch (page_sizes) {
116         case 0:
117                 return "";
118         case I915_GTT_PAGE_SIZE_4K:
119                 return "4K";
120         case I915_GTT_PAGE_SIZE_64K:
121                 return "64K";
122         case I915_GTT_PAGE_SIZE_2M:
123                 return "2M";
124         default:
125                 if (!buf)
126                         return "M";
127
128                 if (page_sizes & I915_GTT_PAGE_SIZE_2M)
129                         x += snprintf(buf + x, len - x, "2M, ");
130                 if (page_sizes & I915_GTT_PAGE_SIZE_64K)
131                         x += snprintf(buf + x, len - x, "64K, ");
132                 if (page_sizes & I915_GTT_PAGE_SIZE_4K)
133                         x += snprintf(buf + x, len - x, "4K, ");
134                 buf[x-2] = '\0';
135
136                 return buf;
137         }
138 }
139
140 static void
141 describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
142 {
143         struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
144         struct intel_engine_cs *engine;
145         struct i915_vma *vma;
146         int pin_count = 0;
147
148         seq_printf(m, "%pK: %c%c%c %8zdKiB %02x %02x %s%s%s",
149                    &obj->base,
150                    get_tiling_flag(obj),
151                    get_global_flag(obj),
152                    get_pin_mapped_flag(obj),
153                    obj->base.size / 1024,
154                    obj->read_domains,
155                    obj->write_domain,
156                    i915_cache_level_str(dev_priv, obj->cache_level),
157                    obj->mm.dirty ? " dirty" : "",
158                    obj->mm.madv == I915_MADV_DONTNEED ? " purgeable" : "");
159         if (obj->base.name)
160                 seq_printf(m, " (name: %d)", obj->base.name);
161
162         spin_lock(&obj->vma.lock);
163         list_for_each_entry(vma, &obj->vma.list, obj_link) {
164                 if (!drm_mm_node_allocated(&vma->node))
165                         continue;
166
167                 spin_unlock(&obj->vma.lock);
168
169                 if (i915_vma_is_pinned(vma))
170                         pin_count++;
171
172                 seq_printf(m, " (%sgtt offset: %08llx, size: %08llx, pages: %s",
173                            i915_vma_is_ggtt(vma) ? "g" : "pp",
174                            vma->node.start, vma->node.size,
175                            stringify_page_sizes(vma->page_sizes.gtt, NULL, 0));
176                 if (i915_vma_is_ggtt(vma)) {
177                         switch (vma->ggtt_view.type) {
178                         case I915_GGTT_VIEW_NORMAL:
179                                 seq_puts(m, ", normal");
180                                 break;
181
182                         case I915_GGTT_VIEW_PARTIAL:
183                                 seq_printf(m, ", partial [%08llx+%x]",
184                                            vma->ggtt_view.partial.offset << PAGE_SHIFT,
185                                            vma->ggtt_view.partial.size << PAGE_SHIFT);
186                                 break;
187
188                         case I915_GGTT_VIEW_ROTATED:
189                                 seq_printf(m, ", rotated [(%ux%u, stride=%u, offset=%u), (%ux%u, stride=%u, offset=%u)]",
190                                            vma->ggtt_view.rotated.plane[0].width,
191                                            vma->ggtt_view.rotated.plane[0].height,
192                                            vma->ggtt_view.rotated.plane[0].stride,
193                                            vma->ggtt_view.rotated.plane[0].offset,
194                                            vma->ggtt_view.rotated.plane[1].width,
195                                            vma->ggtt_view.rotated.plane[1].height,
196                                            vma->ggtt_view.rotated.plane[1].stride,
197                                            vma->ggtt_view.rotated.plane[1].offset);
198                                 break;
199
200                         case I915_GGTT_VIEW_REMAPPED:
201                                 seq_printf(m, ", remapped [(%ux%u, stride=%u, offset=%u), (%ux%u, stride=%u, offset=%u)]",
202                                            vma->ggtt_view.remapped.plane[0].width,
203                                            vma->ggtt_view.remapped.plane[0].height,
204                                            vma->ggtt_view.remapped.plane[0].stride,
205                                            vma->ggtt_view.remapped.plane[0].offset,
206                                            vma->ggtt_view.remapped.plane[1].width,
207                                            vma->ggtt_view.remapped.plane[1].height,
208                                            vma->ggtt_view.remapped.plane[1].stride,
209                                            vma->ggtt_view.remapped.plane[1].offset);
210                                 break;
211
212                         default:
213                                 MISSING_CASE(vma->ggtt_view.type);
214                                 break;
215                         }
216                 }
217                 if (vma->fence)
218                         seq_printf(m, " , fence: %d", vma->fence->id);
219                 seq_puts(m, ")");
220
221                 spin_lock(&obj->vma.lock);
222         }
223         spin_unlock(&obj->vma.lock);
224
225         seq_printf(m, " (pinned x %d)", pin_count);
226         if (obj->stolen)
227                 seq_printf(m, " (stolen: %08llx)", obj->stolen->start);
228         if (i915_gem_object_is_framebuffer(obj))
229                 seq_printf(m, " (fb)");
230
231         engine = i915_gem_object_last_write_engine(obj);
232         if (engine)
233                 seq_printf(m, " (%s)", engine->name);
234 }
235
236 struct file_stats {
237         struct i915_address_space *vm;
238         unsigned long count;
239         u64 total, unbound;
240         u64 active, inactive;
241         u64 closed;
242 };
243
244 static int per_file_stats(int id, void *ptr, void *data)
245 {
246         struct drm_i915_gem_object *obj = ptr;
247         struct file_stats *stats = data;
248         struct i915_vma *vma;
249
250         if (!kref_get_unless_zero(&obj->base.refcount))
251                 return 0;
252
253         stats->count++;
254         stats->total += obj->base.size;
255         if (!atomic_read(&obj->bind_count))
256                 stats->unbound += obj->base.size;
257
258         spin_lock(&obj->vma.lock);
259         if (!stats->vm) {
260                 for_each_ggtt_vma(vma, obj) {
261                         if (!drm_mm_node_allocated(&vma->node))
262                                 continue;
263
264                         if (i915_vma_is_active(vma))
265                                 stats->active += vma->node.size;
266                         else
267                                 stats->inactive += vma->node.size;
268
269                         if (i915_vma_is_closed(vma))
270                                 stats->closed += vma->node.size;
271                 }
272         } else {
273                 struct rb_node *p = obj->vma.tree.rb_node;
274
275                 while (p) {
276                         long cmp;
277
278                         vma = rb_entry(p, typeof(*vma), obj_node);
279                         cmp = i915_vma_compare(vma, stats->vm, NULL);
280                         if (cmp == 0) {
281                                 if (drm_mm_node_allocated(&vma->node)) {
282                                         if (i915_vma_is_active(vma))
283                                                 stats->active += vma->node.size;
284                                         else
285                                                 stats->inactive += vma->node.size;
286
287                                         if (i915_vma_is_closed(vma))
288                                                 stats->closed += vma->node.size;
289                                 }
290                                 break;
291                         }
292                         if (cmp < 0)
293                                 p = p->rb_right;
294                         else
295                                 p = p->rb_left;
296                 }
297         }
298         spin_unlock(&obj->vma.lock);
299
300         i915_gem_object_put(obj);
301         return 0;
302 }
303
304 #define print_file_stats(m, name, stats) do { \
305         if (stats.count) \
306                 seq_printf(m, "%s: %lu objects, %llu bytes (%llu active, %llu inactive, %llu unbound, %llu closed)\n", \
307                            name, \
308                            stats.count, \
309                            stats.total, \
310                            stats.active, \
311                            stats.inactive, \
312                            stats.unbound, \
313                            stats.closed); \
314 } while (0)
315
316 static void print_context_stats(struct seq_file *m,
317                                 struct drm_i915_private *i915)
318 {
319         struct file_stats kstats = {};
320         struct i915_gem_context *ctx, *cn;
321
322         spin_lock(&i915->gem.contexts.lock);
323         list_for_each_entry_safe(ctx, cn, &i915->gem.contexts.list, link) {
324                 struct i915_gem_engines_iter it;
325                 struct intel_context *ce;
326
327                 if (!kref_get_unless_zero(&ctx->ref))
328                         continue;
329
330                 spin_unlock(&i915->gem.contexts.lock);
331
332                 for_each_gem_engine(ce,
333                                     i915_gem_context_lock_engines(ctx), it) {
334                         intel_context_lock_pinned(ce);
335                         if (intel_context_is_pinned(ce)) {
336                                 rcu_read_lock();
337                                 if (ce->state)
338                                         per_file_stats(0,
339                                                        ce->state->obj, &kstats);
340                                 per_file_stats(0, ce->ring->vma->obj, &kstats);
341                                 rcu_read_unlock();
342                         }
343                         intel_context_unlock_pinned(ce);
344                 }
345                 i915_gem_context_unlock_engines(ctx);
346
347                 if (!IS_ERR_OR_NULL(ctx->file_priv)) {
348                         struct file_stats stats = {
349                                 .vm = rcu_access_pointer(ctx->vm),
350                         };
351                         struct drm_file *file = ctx->file_priv->file;
352                         struct task_struct *task;
353                         char name[80];
354
355                         rcu_read_lock();
356                         idr_for_each(&file->object_idr, per_file_stats, &stats);
357                         rcu_read_unlock();
358
359                         rcu_read_lock();
360                         task = pid_task(ctx->pid ?: file->pid, PIDTYPE_PID);
361                         snprintf(name, sizeof(name), "%s",
362                                  task ? task->comm : "<unknown>");
363                         rcu_read_unlock();
364
365                         print_file_stats(m, name, stats);
366                 }
367
368                 spin_lock(&i915->gem.contexts.lock);
369                 list_safe_reset_next(ctx, cn, link);
370                 i915_gem_context_put(ctx);
371         }
372         spin_unlock(&i915->gem.contexts.lock);
373
374         print_file_stats(m, "[k]contexts", kstats);
375 }
376
377 static int i915_gem_object_info(struct seq_file *m, void *data)
378 {
379         struct drm_i915_private *i915 = node_to_i915(m->private);
380
381         seq_printf(m, "%u shrinkable [%u free] objects, %llu bytes\n",
382                    i915->mm.shrink_count,
383                    atomic_read(&i915->mm.free_count),
384                    i915->mm.shrink_memory);
385
386         seq_putc(m, '\n');
387
388         print_context_stats(m, i915);
389
390         return 0;
391 }
392
393 static void gen8_display_interrupt_info(struct seq_file *m)
394 {
395         struct drm_i915_private *dev_priv = node_to_i915(m->private);
396         enum pipe pipe;
397
398         for_each_pipe(dev_priv, pipe) {
399                 enum intel_display_power_domain power_domain;
400                 intel_wakeref_t wakeref;
401
402                 power_domain = POWER_DOMAIN_PIPE(pipe);
403                 wakeref = intel_display_power_get_if_enabled(dev_priv,
404                                                              power_domain);
405                 if (!wakeref) {
406                         seq_printf(m, "Pipe %c power disabled\n",
407                                    pipe_name(pipe));
408                         continue;
409                 }
410                 seq_printf(m, "Pipe %c IMR:\t%08x\n",
411                            pipe_name(pipe),
412                            I915_READ(GEN8_DE_PIPE_IMR(pipe)));
413                 seq_printf(m, "Pipe %c IIR:\t%08x\n",
414                            pipe_name(pipe),
415                            I915_READ(GEN8_DE_PIPE_IIR(pipe)));
416                 seq_printf(m, "Pipe %c IER:\t%08x\n",
417                            pipe_name(pipe),
418                            I915_READ(GEN8_DE_PIPE_IER(pipe)));
419
420                 intel_display_power_put(dev_priv, power_domain, wakeref);
421         }
422
423         seq_printf(m, "Display Engine port interrupt mask:\t%08x\n",
424                    I915_READ(GEN8_DE_PORT_IMR));
425         seq_printf(m, "Display Engine port interrupt identity:\t%08x\n",
426                    I915_READ(GEN8_DE_PORT_IIR));
427         seq_printf(m, "Display Engine port interrupt enable:\t%08x\n",
428                    I915_READ(GEN8_DE_PORT_IER));
429
430         seq_printf(m, "Display Engine misc interrupt mask:\t%08x\n",
431                    I915_READ(GEN8_DE_MISC_IMR));
432         seq_printf(m, "Display Engine misc interrupt identity:\t%08x\n",
433                    I915_READ(GEN8_DE_MISC_IIR));
434         seq_printf(m, "Display Engine misc interrupt enable:\t%08x\n",
435                    I915_READ(GEN8_DE_MISC_IER));
436
437         seq_printf(m, "PCU interrupt mask:\t%08x\n",
438                    I915_READ(GEN8_PCU_IMR));
439         seq_printf(m, "PCU interrupt identity:\t%08x\n",
440                    I915_READ(GEN8_PCU_IIR));
441         seq_printf(m, "PCU interrupt enable:\t%08x\n",
442                    I915_READ(GEN8_PCU_IER));
443 }
444
445 static int i915_interrupt_info(struct seq_file *m, void *data)
446 {
447         struct drm_i915_private *dev_priv = node_to_i915(m->private);
448         struct intel_engine_cs *engine;
449         intel_wakeref_t wakeref;
450         int i, pipe;
451
452         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
453
454         if (IS_CHERRYVIEW(dev_priv)) {
455                 intel_wakeref_t pref;
456
457                 seq_printf(m, "Master Interrupt Control:\t%08x\n",
458                            I915_READ(GEN8_MASTER_IRQ));
459
460                 seq_printf(m, "Display IER:\t%08x\n",
461                            I915_READ(VLV_IER));
462                 seq_printf(m, "Display IIR:\t%08x\n",
463                            I915_READ(VLV_IIR));
464                 seq_printf(m, "Display IIR_RW:\t%08x\n",
465                            I915_READ(VLV_IIR_RW));
466                 seq_printf(m, "Display IMR:\t%08x\n",
467                            I915_READ(VLV_IMR));
468                 for_each_pipe(dev_priv, pipe) {
469                         enum intel_display_power_domain power_domain;
470
471                         power_domain = POWER_DOMAIN_PIPE(pipe);
472                         pref = intel_display_power_get_if_enabled(dev_priv,
473                                                                   power_domain);
474                         if (!pref) {
475                                 seq_printf(m, "Pipe %c power disabled\n",
476                                            pipe_name(pipe));
477                                 continue;
478                         }
479
480                         seq_printf(m, "Pipe %c stat:\t%08x\n",
481                                    pipe_name(pipe),
482                                    I915_READ(PIPESTAT(pipe)));
483
484                         intel_display_power_put(dev_priv, power_domain, pref);
485                 }
486
487                 pref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
488                 seq_printf(m, "Port hotplug:\t%08x\n",
489                            I915_READ(PORT_HOTPLUG_EN));
490                 seq_printf(m, "DPFLIPSTAT:\t%08x\n",
491                            I915_READ(VLV_DPFLIPSTAT));
492                 seq_printf(m, "DPINVGTT:\t%08x\n",
493                            I915_READ(DPINVGTT));
494                 intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, pref);
495
496                 for (i = 0; i < 4; i++) {
497                         seq_printf(m, "GT Interrupt IMR %d:\t%08x\n",
498                                    i, I915_READ(GEN8_GT_IMR(i)));
499                         seq_printf(m, "GT Interrupt IIR %d:\t%08x\n",
500                                    i, I915_READ(GEN8_GT_IIR(i)));
501                         seq_printf(m, "GT Interrupt IER %d:\t%08x\n",
502                                    i, I915_READ(GEN8_GT_IER(i)));
503                 }
504
505                 seq_printf(m, "PCU interrupt mask:\t%08x\n",
506                            I915_READ(GEN8_PCU_IMR));
507                 seq_printf(m, "PCU interrupt identity:\t%08x\n",
508                            I915_READ(GEN8_PCU_IIR));
509                 seq_printf(m, "PCU interrupt enable:\t%08x\n",
510                            I915_READ(GEN8_PCU_IER));
511         } else if (INTEL_GEN(dev_priv) >= 11) {
512                 seq_printf(m, "Master Interrupt Control:  %08x\n",
513                            I915_READ(GEN11_GFX_MSTR_IRQ));
514
515                 seq_printf(m, "Render/Copy Intr Enable:   %08x\n",
516                            I915_READ(GEN11_RENDER_COPY_INTR_ENABLE));
517                 seq_printf(m, "VCS/VECS Intr Enable:      %08x\n",
518                            I915_READ(GEN11_VCS_VECS_INTR_ENABLE));
519                 seq_printf(m, "GUC/SG Intr Enable:\t   %08x\n",
520                            I915_READ(GEN11_GUC_SG_INTR_ENABLE));
521                 seq_printf(m, "GPM/WGBOXPERF Intr Enable: %08x\n",
522                            I915_READ(GEN11_GPM_WGBOXPERF_INTR_ENABLE));
523                 seq_printf(m, "Crypto Intr Enable:\t   %08x\n",
524                            I915_READ(GEN11_CRYPTO_RSVD_INTR_ENABLE));
525                 seq_printf(m, "GUnit/CSME Intr Enable:\t   %08x\n",
526                            I915_READ(GEN11_GUNIT_CSME_INTR_ENABLE));
527
528                 seq_printf(m, "Display Interrupt Control:\t%08x\n",
529                            I915_READ(GEN11_DISPLAY_INT_CTL));
530
531                 gen8_display_interrupt_info(m);
532         } else if (INTEL_GEN(dev_priv) >= 8) {
533                 seq_printf(m, "Master Interrupt Control:\t%08x\n",
534                            I915_READ(GEN8_MASTER_IRQ));
535
536                 for (i = 0; i < 4; i++) {
537                         seq_printf(m, "GT Interrupt IMR %d:\t%08x\n",
538                                    i, I915_READ(GEN8_GT_IMR(i)));
539                         seq_printf(m, "GT Interrupt IIR %d:\t%08x\n",
540                                    i, I915_READ(GEN8_GT_IIR(i)));
541                         seq_printf(m, "GT Interrupt IER %d:\t%08x\n",
542                                    i, I915_READ(GEN8_GT_IER(i)));
543                 }
544
545                 gen8_display_interrupt_info(m);
546         } else if (IS_VALLEYVIEW(dev_priv)) {
547                 intel_wakeref_t pref;
548
549                 seq_printf(m, "Display IER:\t%08x\n",
550                            I915_READ(VLV_IER));
551                 seq_printf(m, "Display IIR:\t%08x\n",
552                            I915_READ(VLV_IIR));
553                 seq_printf(m, "Display IIR_RW:\t%08x\n",
554                            I915_READ(VLV_IIR_RW));
555                 seq_printf(m, "Display IMR:\t%08x\n",
556                            I915_READ(VLV_IMR));
557                 for_each_pipe(dev_priv, pipe) {
558                         enum intel_display_power_domain power_domain;
559
560                         power_domain = POWER_DOMAIN_PIPE(pipe);
561                         pref = intel_display_power_get_if_enabled(dev_priv,
562                                                                   power_domain);
563                         if (!pref) {
564                                 seq_printf(m, "Pipe %c power disabled\n",
565                                            pipe_name(pipe));
566                                 continue;
567                         }
568
569                         seq_printf(m, "Pipe %c stat:\t%08x\n",
570                                    pipe_name(pipe),
571                                    I915_READ(PIPESTAT(pipe)));
572                         intel_display_power_put(dev_priv, power_domain, pref);
573                 }
574
575                 seq_printf(m, "Master IER:\t%08x\n",
576                            I915_READ(VLV_MASTER_IER));
577
578                 seq_printf(m, "Render IER:\t%08x\n",
579                            I915_READ(GTIER));
580                 seq_printf(m, "Render IIR:\t%08x\n",
581                            I915_READ(GTIIR));
582                 seq_printf(m, "Render IMR:\t%08x\n",
583                            I915_READ(GTIMR));
584
585                 seq_printf(m, "PM IER:\t\t%08x\n",
586                            I915_READ(GEN6_PMIER));
587                 seq_printf(m, "PM IIR:\t\t%08x\n",
588                            I915_READ(GEN6_PMIIR));
589                 seq_printf(m, "PM IMR:\t\t%08x\n",
590                            I915_READ(GEN6_PMIMR));
591
592                 pref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
593                 seq_printf(m, "Port hotplug:\t%08x\n",
594                            I915_READ(PORT_HOTPLUG_EN));
595                 seq_printf(m, "DPFLIPSTAT:\t%08x\n",
596                            I915_READ(VLV_DPFLIPSTAT));
597                 seq_printf(m, "DPINVGTT:\t%08x\n",
598                            I915_READ(DPINVGTT));
599                 intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, pref);
600
601         } else if (!HAS_PCH_SPLIT(dev_priv)) {
602                 seq_printf(m, "Interrupt enable:    %08x\n",
603                            I915_READ(GEN2_IER));
604                 seq_printf(m, "Interrupt identity:  %08x\n",
605                            I915_READ(GEN2_IIR));
606                 seq_printf(m, "Interrupt mask:      %08x\n",
607                            I915_READ(GEN2_IMR));
608                 for_each_pipe(dev_priv, pipe)
609                         seq_printf(m, "Pipe %c stat:         %08x\n",
610                                    pipe_name(pipe),
611                                    I915_READ(PIPESTAT(pipe)));
612         } else {
613                 seq_printf(m, "North Display Interrupt enable:          %08x\n",
614                            I915_READ(DEIER));
615                 seq_printf(m, "North Display Interrupt identity:        %08x\n",
616                            I915_READ(DEIIR));
617                 seq_printf(m, "North Display Interrupt mask:            %08x\n",
618                            I915_READ(DEIMR));
619                 seq_printf(m, "South Display Interrupt enable:          %08x\n",
620                            I915_READ(SDEIER));
621                 seq_printf(m, "South Display Interrupt identity:        %08x\n",
622                            I915_READ(SDEIIR));
623                 seq_printf(m, "South Display Interrupt mask:            %08x\n",
624                            I915_READ(SDEIMR));
625                 seq_printf(m, "Graphics Interrupt enable:               %08x\n",
626                            I915_READ(GTIER));
627                 seq_printf(m, "Graphics Interrupt identity:             %08x\n",
628                            I915_READ(GTIIR));
629                 seq_printf(m, "Graphics Interrupt mask:         %08x\n",
630                            I915_READ(GTIMR));
631         }
632
633         if (INTEL_GEN(dev_priv) >= 11) {
634                 seq_printf(m, "RCS Intr Mask:\t %08x\n",
635                            I915_READ(GEN11_RCS0_RSVD_INTR_MASK));
636                 seq_printf(m, "BCS Intr Mask:\t %08x\n",
637                            I915_READ(GEN11_BCS_RSVD_INTR_MASK));
638                 seq_printf(m, "VCS0/VCS1 Intr Mask:\t %08x\n",
639                            I915_READ(GEN11_VCS0_VCS1_INTR_MASK));
640                 seq_printf(m, "VCS2/VCS3 Intr Mask:\t %08x\n",
641                            I915_READ(GEN11_VCS2_VCS3_INTR_MASK));
642                 seq_printf(m, "VECS0/VECS1 Intr Mask:\t %08x\n",
643                            I915_READ(GEN11_VECS0_VECS1_INTR_MASK));
644                 seq_printf(m, "GUC/SG Intr Mask:\t %08x\n",
645                            I915_READ(GEN11_GUC_SG_INTR_MASK));
646                 seq_printf(m, "GPM/WGBOXPERF Intr Mask: %08x\n",
647                            I915_READ(GEN11_GPM_WGBOXPERF_INTR_MASK));
648                 seq_printf(m, "Crypto Intr Mask:\t %08x\n",
649                            I915_READ(GEN11_CRYPTO_RSVD_INTR_MASK));
650                 seq_printf(m, "Gunit/CSME Intr Mask:\t %08x\n",
651                            I915_READ(GEN11_GUNIT_CSME_INTR_MASK));
652
653         } else if (INTEL_GEN(dev_priv) >= 6) {
654                 for_each_uabi_engine(engine, dev_priv) {
655                         seq_printf(m,
656                                    "Graphics Interrupt mask (%s):       %08x\n",
657                                    engine->name, ENGINE_READ(engine, RING_IMR));
658                 }
659         }
660
661         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
662
663         return 0;
664 }
665
666 static int i915_gem_fence_regs_info(struct seq_file *m, void *data)
667 {
668         struct drm_i915_private *i915 = node_to_i915(m->private);
669         unsigned int i;
670
671         seq_printf(m, "Total fences = %d\n", i915->ggtt.num_fences);
672
673         rcu_read_lock();
674         for (i = 0; i < i915->ggtt.num_fences; i++) {
675                 struct i915_fence_reg *reg = &i915->ggtt.fence_regs[i];
676                 struct i915_vma *vma = reg->vma;
677
678                 seq_printf(m, "Fence %d, pin count = %d, object = ",
679                            i, atomic_read(&reg->pin_count));
680                 if (!vma)
681                         seq_puts(m, "unused");
682                 else
683                         describe_obj(m, vma->obj);
684                 seq_putc(m, '\n');
685         }
686         rcu_read_unlock();
687
688         return 0;
689 }
690
691 #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
692 static ssize_t gpu_state_read(struct file *file, char __user *ubuf,
693                               size_t count, loff_t *pos)
694 {
695         struct i915_gpu_state *error;
696         ssize_t ret;
697         void *buf;
698
699         error = file->private_data;
700         if (!error)
701                 return 0;
702
703         /* Bounce buffer required because of kernfs __user API convenience. */
704         buf = kmalloc(count, GFP_KERNEL);
705         if (!buf)
706                 return -ENOMEM;
707
708         ret = i915_gpu_state_copy_to_buffer(error, buf, *pos, count);
709         if (ret <= 0)
710                 goto out;
711
712         if (!copy_to_user(ubuf, buf, ret))
713                 *pos += ret;
714         else
715                 ret = -EFAULT;
716
717 out:
718         kfree(buf);
719         return ret;
720 }
721
722 static int gpu_state_release(struct inode *inode, struct file *file)
723 {
724         i915_gpu_state_put(file->private_data);
725         return 0;
726 }
727
728 static int i915_gpu_info_open(struct inode *inode, struct file *file)
729 {
730         struct drm_i915_private *i915 = inode->i_private;
731         struct i915_gpu_state *gpu;
732         intel_wakeref_t wakeref;
733
734         gpu = NULL;
735         with_intel_runtime_pm(&i915->runtime_pm, wakeref)
736                 gpu = i915_capture_gpu_state(i915);
737         if (IS_ERR(gpu))
738                 return PTR_ERR(gpu);
739
740         file->private_data = gpu;
741         return 0;
742 }
743
744 static const struct file_operations i915_gpu_info_fops = {
745         .owner = THIS_MODULE,
746         .open = i915_gpu_info_open,
747         .read = gpu_state_read,
748         .llseek = default_llseek,
749         .release = gpu_state_release,
750 };
751
752 static ssize_t
753 i915_error_state_write(struct file *filp,
754                        const char __user *ubuf,
755                        size_t cnt,
756                        loff_t *ppos)
757 {
758         struct i915_gpu_state *error = filp->private_data;
759
760         if (!error)
761                 return 0;
762
763         DRM_DEBUG_DRIVER("Resetting error state\n");
764         i915_reset_error_state(error->i915);
765
766         return cnt;
767 }
768
769 static int i915_error_state_open(struct inode *inode, struct file *file)
770 {
771         struct i915_gpu_state *error;
772
773         error = i915_first_error_state(inode->i_private);
774         if (IS_ERR(error))
775                 return PTR_ERR(error);
776
777         file->private_data  = error;
778         return 0;
779 }
780
781 static const struct file_operations i915_error_state_fops = {
782         .owner = THIS_MODULE,
783         .open = i915_error_state_open,
784         .read = gpu_state_read,
785         .write = i915_error_state_write,
786         .llseek = default_llseek,
787         .release = gpu_state_release,
788 };
789 #endif
790
791 static int i915_frequency_info(struct seq_file *m, void *unused)
792 {
793         struct drm_i915_private *dev_priv = node_to_i915(m->private);
794         struct intel_uncore *uncore = &dev_priv->uncore;
795         struct intel_rps *rps = &dev_priv->gt.rps;
796         intel_wakeref_t wakeref;
797         int ret = 0;
798
799         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
800
801         if (IS_GEN(dev_priv, 5)) {
802                 u16 rgvswctl = intel_uncore_read16(uncore, MEMSWCTL);
803                 u16 rgvstat = intel_uncore_read16(uncore, MEMSTAT_ILK);
804
805                 seq_printf(m, "Requested P-state: %d\n", (rgvswctl >> 8) & 0xf);
806                 seq_printf(m, "Requested VID: %d\n", rgvswctl & 0x3f);
807                 seq_printf(m, "Current VID: %d\n", (rgvstat & MEMSTAT_VID_MASK) >>
808                            MEMSTAT_VID_SHIFT);
809                 seq_printf(m, "Current P-state: %d\n",
810                            (rgvstat & MEMSTAT_PSTATE_MASK) >> MEMSTAT_PSTATE_SHIFT);
811         } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
812                 u32 rpmodectl, freq_sts;
813
814                 rpmodectl = I915_READ(GEN6_RP_CONTROL);
815                 seq_printf(m, "Video Turbo Mode: %s\n",
816                            yesno(rpmodectl & GEN6_RP_MEDIA_TURBO));
817                 seq_printf(m, "HW control enabled: %s\n",
818                            yesno(rpmodectl & GEN6_RP_ENABLE));
819                 seq_printf(m, "SW control enabled: %s\n",
820                            yesno((rpmodectl & GEN6_RP_MEDIA_MODE_MASK) ==
821                                   GEN6_RP_MEDIA_SW_MODE));
822
823                 vlv_punit_get(dev_priv);
824                 freq_sts = vlv_punit_read(dev_priv, PUNIT_REG_GPU_FREQ_STS);
825                 vlv_punit_put(dev_priv);
826
827                 seq_printf(m, "PUNIT_REG_GPU_FREQ_STS: 0x%08x\n", freq_sts);
828                 seq_printf(m, "DDR freq: %d MHz\n", dev_priv->mem_freq);
829
830                 seq_printf(m, "actual GPU freq: %d MHz\n",
831                            intel_gpu_freq(rps, (freq_sts >> 8) & 0xff));
832
833                 seq_printf(m, "current GPU freq: %d MHz\n",
834                            intel_gpu_freq(rps, rps->cur_freq));
835
836                 seq_printf(m, "max GPU freq: %d MHz\n",
837                            intel_gpu_freq(rps, rps->max_freq));
838
839                 seq_printf(m, "min GPU freq: %d MHz\n",
840                            intel_gpu_freq(rps, rps->min_freq));
841
842                 seq_printf(m, "idle GPU freq: %d MHz\n",
843                            intel_gpu_freq(rps, rps->idle_freq));
844
845                 seq_printf(m,
846                            "efficient (RPe) frequency: %d MHz\n",
847                            intel_gpu_freq(rps, rps->efficient_freq));
848         } else if (INTEL_GEN(dev_priv) >= 6) {
849                 u32 rp_state_limits;
850                 u32 gt_perf_status;
851                 u32 rp_state_cap;
852                 u32 rpmodectl, rpinclimit, rpdeclimit;
853                 u32 rpstat, cagf, reqf;
854                 u32 rpupei, rpcurup, rpprevup;
855                 u32 rpdownei, rpcurdown, rpprevdown;
856                 u32 pm_ier, pm_imr, pm_isr, pm_iir, pm_mask;
857                 int max_freq;
858
859                 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
860                 if (IS_GEN9_LP(dev_priv)) {
861                         rp_state_cap = I915_READ(BXT_RP_STATE_CAP);
862                         gt_perf_status = I915_READ(BXT_GT_PERF_STATUS);
863                 } else {
864                         rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
865                         gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
866                 }
867
868                 /* RPSTAT1 is in the GT power well */
869                 intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
870
871                 reqf = I915_READ(GEN6_RPNSWREQ);
872                 if (INTEL_GEN(dev_priv) >= 9)
873                         reqf >>= 23;
874                 else {
875                         reqf &= ~GEN6_TURBO_DISABLE;
876                         if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
877                                 reqf >>= 24;
878                         else
879                                 reqf >>= 25;
880                 }
881                 reqf = intel_gpu_freq(rps, reqf);
882
883                 rpmodectl = I915_READ(GEN6_RP_CONTROL);
884                 rpinclimit = I915_READ(GEN6_RP_UP_THRESHOLD);
885                 rpdeclimit = I915_READ(GEN6_RP_DOWN_THRESHOLD);
886
887                 rpstat = I915_READ(GEN6_RPSTAT1);
888                 rpupei = I915_READ(GEN6_RP_CUR_UP_EI) & GEN6_CURICONT_MASK;
889                 rpcurup = I915_READ(GEN6_RP_CUR_UP) & GEN6_CURBSYTAVG_MASK;
890                 rpprevup = I915_READ(GEN6_RP_PREV_UP) & GEN6_CURBSYTAVG_MASK;
891                 rpdownei = I915_READ(GEN6_RP_CUR_DOWN_EI) & GEN6_CURIAVG_MASK;
892                 rpcurdown = I915_READ(GEN6_RP_CUR_DOWN) & GEN6_CURBSYTAVG_MASK;
893                 rpprevdown = I915_READ(GEN6_RP_PREV_DOWN) & GEN6_CURBSYTAVG_MASK;
894                 cagf = intel_gpu_freq(rps, intel_get_cagf(rps, rpstat));
895
896                 intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
897
898                 if (INTEL_GEN(dev_priv) >= 11) {
899                         pm_ier = I915_READ(GEN11_GPM_WGBOXPERF_INTR_ENABLE);
900                         pm_imr = I915_READ(GEN11_GPM_WGBOXPERF_INTR_MASK);
901                         /*
902                          * The equivalent to the PM ISR & IIR cannot be read
903                          * without affecting the current state of the system
904                          */
905                         pm_isr = 0;
906                         pm_iir = 0;
907                 } else if (INTEL_GEN(dev_priv) >= 8) {
908                         pm_ier = I915_READ(GEN8_GT_IER(2));
909                         pm_imr = I915_READ(GEN8_GT_IMR(2));
910                         pm_isr = I915_READ(GEN8_GT_ISR(2));
911                         pm_iir = I915_READ(GEN8_GT_IIR(2));
912                 } else {
913                         pm_ier = I915_READ(GEN6_PMIER);
914                         pm_imr = I915_READ(GEN6_PMIMR);
915                         pm_isr = I915_READ(GEN6_PMISR);
916                         pm_iir = I915_READ(GEN6_PMIIR);
917                 }
918                 pm_mask = I915_READ(GEN6_PMINTRMSK);
919
920                 seq_printf(m, "Video Turbo Mode: %s\n",
921                            yesno(rpmodectl & GEN6_RP_MEDIA_TURBO));
922                 seq_printf(m, "HW control enabled: %s\n",
923                            yesno(rpmodectl & GEN6_RP_ENABLE));
924                 seq_printf(m, "SW control enabled: %s\n",
925                            yesno((rpmodectl & GEN6_RP_MEDIA_MODE_MASK) ==
926                                   GEN6_RP_MEDIA_SW_MODE));
927
928                 seq_printf(m, "PM IER=0x%08x IMR=0x%08x, MASK=0x%08x\n",
929                            pm_ier, pm_imr, pm_mask);
930                 if (INTEL_GEN(dev_priv) <= 10)
931                         seq_printf(m, "PM ISR=0x%08x IIR=0x%08x\n",
932                                    pm_isr, pm_iir);
933                 seq_printf(m, "pm_intrmsk_mbz: 0x%08x\n",
934                            rps->pm_intrmsk_mbz);
935                 seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status);
936                 seq_printf(m, "Render p-state ratio: %d\n",
937                            (gt_perf_status & (INTEL_GEN(dev_priv) >= 9 ? 0x1ff00 : 0xff00)) >> 8);
938                 seq_printf(m, "Render p-state VID: %d\n",
939                            gt_perf_status & 0xff);
940                 seq_printf(m, "Render p-state limit: %d\n",
941                            rp_state_limits & 0xff);
942                 seq_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
943                 seq_printf(m, "RPMODECTL: 0x%08x\n", rpmodectl);
944                 seq_printf(m, "RPINCLIMIT: 0x%08x\n", rpinclimit);
945                 seq_printf(m, "RPDECLIMIT: 0x%08x\n", rpdeclimit);
946                 seq_printf(m, "RPNSWREQ: %dMHz\n", reqf);
947                 seq_printf(m, "CAGF: %dMHz\n", cagf);
948                 seq_printf(m, "RP CUR UP EI: %d (%dus)\n",
949                            rpupei, GT_PM_INTERVAL_TO_US(dev_priv, rpupei));
950                 seq_printf(m, "RP CUR UP: %d (%dus)\n",
951                            rpcurup, GT_PM_INTERVAL_TO_US(dev_priv, rpcurup));
952                 seq_printf(m, "RP PREV UP: %d (%dus)\n",
953                            rpprevup, GT_PM_INTERVAL_TO_US(dev_priv, rpprevup));
954                 seq_printf(m, "Up threshold: %d%%\n",
955                            rps->power.up_threshold);
956
957                 seq_printf(m, "RP CUR DOWN EI: %d (%dus)\n",
958                            rpdownei, GT_PM_INTERVAL_TO_US(dev_priv, rpdownei));
959                 seq_printf(m, "RP CUR DOWN: %d (%dus)\n",
960                            rpcurdown, GT_PM_INTERVAL_TO_US(dev_priv, rpcurdown));
961                 seq_printf(m, "RP PREV DOWN: %d (%dus)\n",
962                            rpprevdown, GT_PM_INTERVAL_TO_US(dev_priv, rpprevdown));
963                 seq_printf(m, "Down threshold: %d%%\n",
964                            rps->power.down_threshold);
965
966                 max_freq = (IS_GEN9_LP(dev_priv) ? rp_state_cap >> 0 :
967                             rp_state_cap >> 16) & 0xff;
968                 max_freq *= (IS_GEN9_BC(dev_priv) ||
969                              INTEL_GEN(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
970                 seq_printf(m, "Lowest (RPN) frequency: %dMHz\n",
971                            intel_gpu_freq(rps, max_freq));
972
973                 max_freq = (rp_state_cap & 0xff00) >> 8;
974                 max_freq *= (IS_GEN9_BC(dev_priv) ||
975                              INTEL_GEN(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
976                 seq_printf(m, "Nominal (RP1) frequency: %dMHz\n",
977                            intel_gpu_freq(rps, max_freq));
978
979                 max_freq = (IS_GEN9_LP(dev_priv) ? rp_state_cap >> 16 :
980                             rp_state_cap >> 0) & 0xff;
981                 max_freq *= (IS_GEN9_BC(dev_priv) ||
982                              INTEL_GEN(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
983                 seq_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n",
984                            intel_gpu_freq(rps, max_freq));
985                 seq_printf(m, "Max overclocked frequency: %dMHz\n",
986                            intel_gpu_freq(rps, rps->max_freq));
987
988                 seq_printf(m, "Current freq: %d MHz\n",
989                            intel_gpu_freq(rps, rps->cur_freq));
990                 seq_printf(m, "Actual freq: %d MHz\n", cagf);
991                 seq_printf(m, "Idle freq: %d MHz\n",
992                            intel_gpu_freq(rps, rps->idle_freq));
993                 seq_printf(m, "Min freq: %d MHz\n",
994                            intel_gpu_freq(rps, rps->min_freq));
995                 seq_printf(m, "Boost freq: %d MHz\n",
996                            intel_gpu_freq(rps, rps->boost_freq));
997                 seq_printf(m, "Max freq: %d MHz\n",
998                            intel_gpu_freq(rps, rps->max_freq));
999                 seq_printf(m,
1000                            "efficient (RPe) frequency: %d MHz\n",
1001                            intel_gpu_freq(rps, rps->efficient_freq));
1002         } else {
1003                 seq_puts(m, "no P-state info available\n");
1004         }
1005
1006         seq_printf(m, "Current CD clock frequency: %d kHz\n", dev_priv->cdclk.hw.cdclk);
1007         seq_printf(m, "Max CD clock frequency: %d kHz\n", dev_priv->max_cdclk_freq);
1008         seq_printf(m, "Max pixel clock frequency: %d kHz\n", dev_priv->max_dotclk_freq);
1009
1010         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
1011         return ret;
1012 }
1013
1014 static int ironlake_drpc_info(struct seq_file *m)
1015 {
1016         struct drm_i915_private *i915 = node_to_i915(m->private);
1017         struct intel_uncore *uncore = &i915->uncore;
1018         u32 rgvmodectl, rstdbyctl;
1019         u16 crstandvid;
1020
1021         rgvmodectl = intel_uncore_read(uncore, MEMMODECTL);
1022         rstdbyctl = intel_uncore_read(uncore, RSTDBYCTL);
1023         crstandvid = intel_uncore_read16(uncore, CRSTANDVID);
1024
1025         seq_printf(m, "HD boost: %s\n", yesno(rgvmodectl & MEMMODE_BOOST_EN));
1026         seq_printf(m, "Boost freq: %d\n",
1027                    (rgvmodectl & MEMMODE_BOOST_FREQ_MASK) >>
1028                    MEMMODE_BOOST_FREQ_SHIFT);
1029         seq_printf(m, "HW control enabled: %s\n",
1030                    yesno(rgvmodectl & MEMMODE_HWIDLE_EN));
1031         seq_printf(m, "SW control enabled: %s\n",
1032                    yesno(rgvmodectl & MEMMODE_SWMODE_EN));
1033         seq_printf(m, "Gated voltage change: %s\n",
1034                    yesno(rgvmodectl & MEMMODE_RCLK_GATE));
1035         seq_printf(m, "Starting frequency: P%d\n",
1036                    (rgvmodectl & MEMMODE_FSTART_MASK) >> MEMMODE_FSTART_SHIFT);
1037         seq_printf(m, "Max P-state: P%d\n",
1038                    (rgvmodectl & MEMMODE_FMAX_MASK) >> MEMMODE_FMAX_SHIFT);
1039         seq_printf(m, "Min P-state: P%d\n", (rgvmodectl & MEMMODE_FMIN_MASK));
1040         seq_printf(m, "RS1 VID: %d\n", (crstandvid & 0x3f));
1041         seq_printf(m, "RS2 VID: %d\n", ((crstandvid >> 8) & 0x3f));
1042         seq_printf(m, "Render standby enabled: %s\n",
1043                    yesno(!(rstdbyctl & RCX_SW_EXIT)));
1044         seq_puts(m, "Current RS state: ");
1045         switch (rstdbyctl & RSX_STATUS_MASK) {
1046         case RSX_STATUS_ON:
1047                 seq_puts(m, "on\n");
1048                 break;
1049         case RSX_STATUS_RC1:
1050                 seq_puts(m, "RC1\n");
1051                 break;
1052         case RSX_STATUS_RC1E:
1053                 seq_puts(m, "RC1E\n");
1054                 break;
1055         case RSX_STATUS_RS1:
1056                 seq_puts(m, "RS1\n");
1057                 break;
1058         case RSX_STATUS_RS2:
1059                 seq_puts(m, "RS2 (RC6)\n");
1060                 break;
1061         case RSX_STATUS_RS3:
1062                 seq_puts(m, "RC3 (RC6+)\n");
1063                 break;
1064         default:
1065                 seq_puts(m, "unknown\n");
1066                 break;
1067         }
1068
1069         return 0;
1070 }
1071
1072 static int i915_forcewake_domains(struct seq_file *m, void *data)
1073 {
1074         struct drm_i915_private *i915 = node_to_i915(m->private);
1075         struct intel_uncore *uncore = &i915->uncore;
1076         struct intel_uncore_forcewake_domain *fw_domain;
1077         unsigned int tmp;
1078
1079         seq_printf(m, "user.bypass_count = %u\n",
1080                    uncore->user_forcewake_count);
1081
1082         for_each_fw_domain(fw_domain, uncore, tmp)
1083                 seq_printf(m, "%s.wake_count = %u\n",
1084                            intel_uncore_forcewake_domain_to_str(fw_domain->id),
1085                            READ_ONCE(fw_domain->wake_count));
1086
1087         return 0;
1088 }
1089
1090 static void print_rc6_res(struct seq_file *m,
1091                           const char *title,
1092                           const i915_reg_t reg)
1093 {
1094         struct drm_i915_private *i915 = node_to_i915(m->private);
1095         intel_wakeref_t wakeref;
1096
1097         with_intel_runtime_pm(&i915->runtime_pm, wakeref)
1098                 seq_printf(m, "%s %u (%llu us)\n", title,
1099                            intel_uncore_read(&i915->uncore, reg),
1100                            intel_rc6_residency_us(&i915->gt.rc6, reg));
1101 }
1102
1103 static int vlv_drpc_info(struct seq_file *m)
1104 {
1105         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1106         u32 rcctl1, pw_status;
1107
1108         pw_status = I915_READ(VLV_GTLC_PW_STATUS);
1109         rcctl1 = I915_READ(GEN6_RC_CONTROL);
1110
1111         seq_printf(m, "RC6 Enabled: %s\n",
1112                    yesno(rcctl1 & (GEN7_RC_CTL_TO_MODE |
1113                                         GEN6_RC_CTL_EI_MODE(1))));
1114         seq_printf(m, "Render Power Well: %s\n",
1115                    (pw_status & VLV_GTLC_PW_RENDER_STATUS_MASK) ? "Up" : "Down");
1116         seq_printf(m, "Media Power Well: %s\n",
1117                    (pw_status & VLV_GTLC_PW_MEDIA_STATUS_MASK) ? "Up" : "Down");
1118
1119         print_rc6_res(m, "Render RC6 residency since boot:", VLV_GT_RENDER_RC6);
1120         print_rc6_res(m, "Media RC6 residency since boot:", VLV_GT_MEDIA_RC6);
1121
1122         return i915_forcewake_domains(m, NULL);
1123 }
1124
1125 static int gen6_drpc_info(struct seq_file *m)
1126 {
1127         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1128         u32 gt_core_status, rcctl1, rc6vids = 0;
1129         u32 gen9_powergate_enable = 0, gen9_powergate_status = 0;
1130
1131         gt_core_status = I915_READ_FW(GEN6_GT_CORE_STATUS);
1132         trace_i915_reg_rw(false, GEN6_GT_CORE_STATUS, gt_core_status, 4, true);
1133
1134         rcctl1 = I915_READ(GEN6_RC_CONTROL);
1135         if (INTEL_GEN(dev_priv) >= 9) {
1136                 gen9_powergate_enable = I915_READ(GEN9_PG_ENABLE);
1137                 gen9_powergate_status = I915_READ(GEN9_PWRGT_DOMAIN_STATUS);
1138         }
1139
1140         if (INTEL_GEN(dev_priv) <= 7)
1141                 sandybridge_pcode_read(dev_priv, GEN6_PCODE_READ_RC6VIDS,
1142                                        &rc6vids, NULL);
1143
1144         seq_printf(m, "RC1e Enabled: %s\n",
1145                    yesno(rcctl1 & GEN6_RC_CTL_RC1e_ENABLE));
1146         seq_printf(m, "RC6 Enabled: %s\n",
1147                    yesno(rcctl1 & GEN6_RC_CTL_RC6_ENABLE));
1148         if (INTEL_GEN(dev_priv) >= 9) {
1149                 seq_printf(m, "Render Well Gating Enabled: %s\n",
1150                         yesno(gen9_powergate_enable & GEN9_RENDER_PG_ENABLE));
1151                 seq_printf(m, "Media Well Gating Enabled: %s\n",
1152                         yesno(gen9_powergate_enable & GEN9_MEDIA_PG_ENABLE));
1153         }
1154         seq_printf(m, "Deep RC6 Enabled: %s\n",
1155                    yesno(rcctl1 & GEN6_RC_CTL_RC6p_ENABLE));
1156         seq_printf(m, "Deepest RC6 Enabled: %s\n",
1157                    yesno(rcctl1 & GEN6_RC_CTL_RC6pp_ENABLE));
1158         seq_puts(m, "Current RC state: ");
1159         switch (gt_core_status & GEN6_RCn_MASK) {
1160         case GEN6_RC0:
1161                 if (gt_core_status & GEN6_CORE_CPD_STATE_MASK)
1162                         seq_puts(m, "Core Power Down\n");
1163                 else
1164                         seq_puts(m, "on\n");
1165                 break;
1166         case GEN6_RC3:
1167                 seq_puts(m, "RC3\n");
1168                 break;
1169         case GEN6_RC6:
1170                 seq_puts(m, "RC6\n");
1171                 break;
1172         case GEN6_RC7:
1173                 seq_puts(m, "RC7\n");
1174                 break;
1175         default:
1176                 seq_puts(m, "Unknown\n");
1177                 break;
1178         }
1179
1180         seq_printf(m, "Core Power Down: %s\n",
1181                    yesno(gt_core_status & GEN6_CORE_CPD_STATE_MASK));
1182         if (INTEL_GEN(dev_priv) >= 9) {
1183                 seq_printf(m, "Render Power Well: %s\n",
1184                         (gen9_powergate_status &
1185                          GEN9_PWRGT_RENDER_STATUS_MASK) ? "Up" : "Down");
1186                 seq_printf(m, "Media Power Well: %s\n",
1187                         (gen9_powergate_status &
1188                          GEN9_PWRGT_MEDIA_STATUS_MASK) ? "Up" : "Down");
1189         }
1190
1191         /* Not exactly sure what this is */
1192         print_rc6_res(m, "RC6 \"Locked to RPn\" residency since boot:",
1193                       GEN6_GT_GFX_RC6_LOCKED);
1194         print_rc6_res(m, "RC6 residency since boot:", GEN6_GT_GFX_RC6);
1195         print_rc6_res(m, "RC6+ residency since boot:", GEN6_GT_GFX_RC6p);
1196         print_rc6_res(m, "RC6++ residency since boot:", GEN6_GT_GFX_RC6pp);
1197
1198         if (INTEL_GEN(dev_priv) <= 7) {
1199                 seq_printf(m, "RC6   voltage: %dmV\n",
1200                            GEN6_DECODE_RC6_VID(((rc6vids >> 0) & 0xff)));
1201                 seq_printf(m, "RC6+  voltage: %dmV\n",
1202                            GEN6_DECODE_RC6_VID(((rc6vids >> 8) & 0xff)));
1203                 seq_printf(m, "RC6++ voltage: %dmV\n",
1204                            GEN6_DECODE_RC6_VID(((rc6vids >> 16) & 0xff)));
1205         }
1206
1207         return i915_forcewake_domains(m, NULL);
1208 }
1209
1210 static int i915_drpc_info(struct seq_file *m, void *unused)
1211 {
1212         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1213         intel_wakeref_t wakeref;
1214         int err = -ENODEV;
1215
1216         with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) {
1217                 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1218                         err = vlv_drpc_info(m);
1219                 else if (INTEL_GEN(dev_priv) >= 6)
1220                         err = gen6_drpc_info(m);
1221                 else
1222                         err = ironlake_drpc_info(m);
1223         }
1224
1225         return err;
1226 }
1227
1228 static int i915_frontbuffer_tracking(struct seq_file *m, void *unused)
1229 {
1230         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1231
1232         seq_printf(m, "FB tracking busy bits: 0x%08x\n",
1233                    dev_priv->fb_tracking.busy_bits);
1234
1235         seq_printf(m, "FB tracking flip bits: 0x%08x\n",
1236                    dev_priv->fb_tracking.flip_bits);
1237
1238         return 0;
1239 }
1240
1241 static int i915_fbc_status(struct seq_file *m, void *unused)
1242 {
1243         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1244         struct intel_fbc *fbc = &dev_priv->fbc;
1245         intel_wakeref_t wakeref;
1246
1247         if (!HAS_FBC(dev_priv))
1248                 return -ENODEV;
1249
1250         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
1251         mutex_lock(&fbc->lock);
1252
1253         if (intel_fbc_is_active(dev_priv))
1254                 seq_puts(m, "FBC enabled\n");
1255         else
1256                 seq_printf(m, "FBC disabled: %s\n", fbc->no_fbc_reason);
1257
1258         if (intel_fbc_is_active(dev_priv)) {
1259                 u32 mask;
1260
1261                 if (INTEL_GEN(dev_priv) >= 8)
1262                         mask = I915_READ(IVB_FBC_STATUS2) & BDW_FBC_COMP_SEG_MASK;
1263                 else if (INTEL_GEN(dev_priv) >= 7)
1264                         mask = I915_READ(IVB_FBC_STATUS2) & IVB_FBC_COMP_SEG_MASK;
1265                 else if (INTEL_GEN(dev_priv) >= 5)
1266                         mask = I915_READ(ILK_DPFC_STATUS) & ILK_DPFC_COMP_SEG_MASK;
1267                 else if (IS_G4X(dev_priv))
1268                         mask = I915_READ(DPFC_STATUS) & DPFC_COMP_SEG_MASK;
1269                 else
1270                         mask = I915_READ(FBC_STATUS) & (FBC_STAT_COMPRESSING |
1271                                                         FBC_STAT_COMPRESSED);
1272
1273                 seq_printf(m, "Compressing: %s\n", yesno(mask));
1274         }
1275
1276         mutex_unlock(&fbc->lock);
1277         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
1278
1279         return 0;
1280 }
1281
1282 static int i915_fbc_false_color_get(void *data, u64 *val)
1283 {
1284         struct drm_i915_private *dev_priv = data;
1285
1286         if (INTEL_GEN(dev_priv) < 7 || !HAS_FBC(dev_priv))
1287                 return -ENODEV;
1288
1289         *val = dev_priv->fbc.false_color;
1290
1291         return 0;
1292 }
1293
1294 static int i915_fbc_false_color_set(void *data, u64 val)
1295 {
1296         struct drm_i915_private *dev_priv = data;
1297         u32 reg;
1298
1299         if (INTEL_GEN(dev_priv) < 7 || !HAS_FBC(dev_priv))
1300                 return -ENODEV;
1301
1302         mutex_lock(&dev_priv->fbc.lock);
1303
1304         reg = I915_READ(ILK_DPFC_CONTROL);
1305         dev_priv->fbc.false_color = val;
1306
1307         I915_WRITE(ILK_DPFC_CONTROL, val ?
1308                    (reg | FBC_CTL_FALSE_COLOR) :
1309                    (reg & ~FBC_CTL_FALSE_COLOR));
1310
1311         mutex_unlock(&dev_priv->fbc.lock);
1312         return 0;
1313 }
1314
1315 DEFINE_SIMPLE_ATTRIBUTE(i915_fbc_false_color_fops,
1316                         i915_fbc_false_color_get, i915_fbc_false_color_set,
1317                         "%llu\n");
1318
1319 static int i915_ips_status(struct seq_file *m, void *unused)
1320 {
1321         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1322         intel_wakeref_t wakeref;
1323
1324         if (!HAS_IPS(dev_priv))
1325                 return -ENODEV;
1326
1327         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
1328
1329         seq_printf(m, "Enabled by kernel parameter: %s\n",
1330                    yesno(i915_modparams.enable_ips));
1331
1332         if (INTEL_GEN(dev_priv) >= 8) {
1333                 seq_puts(m, "Currently: unknown\n");
1334         } else {
1335                 if (I915_READ(IPS_CTL) & IPS_ENABLE)
1336                         seq_puts(m, "Currently: enabled\n");
1337                 else
1338                         seq_puts(m, "Currently: disabled\n");
1339         }
1340
1341         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
1342
1343         return 0;
1344 }
1345
1346 static int i915_sr_status(struct seq_file *m, void *unused)
1347 {
1348         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1349         intel_wakeref_t wakeref;
1350         bool sr_enabled = false;
1351
1352         wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
1353
1354         if (INTEL_GEN(dev_priv) >= 9)
1355                 /* no global SR status; inspect per-plane WM */;
1356         else if (HAS_PCH_SPLIT(dev_priv))
1357                 sr_enabled = I915_READ(WM1_LP_ILK) & WM1_LP_SR_EN;
1358         else if (IS_I965GM(dev_priv) || IS_G4X(dev_priv) ||
1359                  IS_I945G(dev_priv) || IS_I945GM(dev_priv))
1360                 sr_enabled = I915_READ(FW_BLC_SELF) & FW_BLC_SELF_EN;
1361         else if (IS_I915GM(dev_priv))
1362                 sr_enabled = I915_READ(INSTPM) & INSTPM_SELF_EN;
1363         else if (IS_PINEVIEW(dev_priv))
1364                 sr_enabled = I915_READ(DSPFW3) & PINEVIEW_SELF_REFRESH_EN;
1365         else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1366                 sr_enabled = I915_READ(FW_BLC_SELF_VLV) & FW_CSPWRDWNEN;
1367
1368         intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, wakeref);
1369
1370         seq_printf(m, "self-refresh: %s\n", enableddisabled(sr_enabled));
1371
1372         return 0;
1373 }
1374
1375 static int i915_ring_freq_table(struct seq_file *m, void *unused)
1376 {
1377         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1378         struct intel_rps *rps = &dev_priv->gt.rps;
1379         unsigned int max_gpu_freq, min_gpu_freq;
1380         intel_wakeref_t wakeref;
1381         int gpu_freq, ia_freq;
1382
1383         if (!HAS_LLC(dev_priv))
1384                 return -ENODEV;
1385
1386         min_gpu_freq = rps->min_freq;
1387         max_gpu_freq = rps->max_freq;
1388         if (IS_GEN9_BC(dev_priv) || INTEL_GEN(dev_priv) >= 10) {
1389                 /* Convert GT frequency to 50 HZ units */
1390                 min_gpu_freq /= GEN9_FREQ_SCALER;
1391                 max_gpu_freq /= GEN9_FREQ_SCALER;
1392         }
1393
1394         seq_puts(m, "GPU freq (MHz)\tEffective CPU freq (MHz)\tEffective Ring freq (MHz)\n");
1395
1396         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
1397         for (gpu_freq = min_gpu_freq; gpu_freq <= max_gpu_freq; gpu_freq++) {
1398                 ia_freq = gpu_freq;
1399                 sandybridge_pcode_read(dev_priv,
1400                                        GEN6_PCODE_READ_MIN_FREQ_TABLE,
1401                                        &ia_freq, NULL);
1402                 seq_printf(m, "%d\t\t%d\t\t\t\t%d\n",
1403                            intel_gpu_freq(rps,
1404                                           (gpu_freq *
1405                                            (IS_GEN9_BC(dev_priv) ||
1406                                             INTEL_GEN(dev_priv) >= 10 ?
1407                                             GEN9_FREQ_SCALER : 1))),
1408                            ((ia_freq >> 0) & 0xff) * 100,
1409                            ((ia_freq >> 8) & 0xff) * 100);
1410         }
1411         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
1412
1413         return 0;
1414 }
1415
1416 static int i915_opregion(struct seq_file *m, void *unused)
1417 {
1418         struct intel_opregion *opregion = &node_to_i915(m->private)->opregion;
1419
1420         if (opregion->header)
1421                 seq_write(m, opregion->header, OPREGION_SIZE);
1422
1423         return 0;
1424 }
1425
1426 static int i915_vbt(struct seq_file *m, void *unused)
1427 {
1428         struct intel_opregion *opregion = &node_to_i915(m->private)->opregion;
1429
1430         if (opregion->vbt)
1431                 seq_write(m, opregion->vbt, opregion->vbt_size);
1432
1433         return 0;
1434 }
1435
1436 static int i915_gem_framebuffer_info(struct seq_file *m, void *data)
1437 {
1438         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1439         struct drm_device *dev = &dev_priv->drm;
1440         struct intel_framebuffer *fbdev_fb = NULL;
1441         struct drm_framebuffer *drm_fb;
1442
1443 #ifdef CONFIG_DRM_FBDEV_EMULATION
1444         if (dev_priv->fbdev && dev_priv->fbdev->helper.fb) {
1445                 fbdev_fb = to_intel_framebuffer(dev_priv->fbdev->helper.fb);
1446
1447                 seq_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
1448                            fbdev_fb->base.width,
1449                            fbdev_fb->base.height,
1450                            fbdev_fb->base.format->depth,
1451                            fbdev_fb->base.format->cpp[0] * 8,
1452                            fbdev_fb->base.modifier,
1453                            drm_framebuffer_read_refcount(&fbdev_fb->base));
1454                 describe_obj(m, intel_fb_obj(&fbdev_fb->base));
1455                 seq_putc(m, '\n');
1456         }
1457 #endif
1458
1459         mutex_lock(&dev->mode_config.fb_lock);
1460         drm_for_each_fb(drm_fb, dev) {
1461                 struct intel_framebuffer *fb = to_intel_framebuffer(drm_fb);
1462                 if (fb == fbdev_fb)
1463                         continue;
1464
1465                 seq_printf(m, "user size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
1466                            fb->base.width,
1467                            fb->base.height,
1468                            fb->base.format->depth,
1469                            fb->base.format->cpp[0] * 8,
1470                            fb->base.modifier,
1471                            drm_framebuffer_read_refcount(&fb->base));
1472                 describe_obj(m, intel_fb_obj(&fb->base));
1473                 seq_putc(m, '\n');
1474         }
1475         mutex_unlock(&dev->mode_config.fb_lock);
1476
1477         return 0;
1478 }
1479
1480 static void describe_ctx_ring(struct seq_file *m, struct intel_ring *ring)
1481 {
1482         seq_printf(m, " (ringbuffer, space: %d, head: %u, tail: %u, emit: %u)",
1483                    ring->space, ring->head, ring->tail, ring->emit);
1484 }
1485
1486 static int i915_context_status(struct seq_file *m, void *unused)
1487 {
1488         struct drm_i915_private *i915 = node_to_i915(m->private);
1489         struct i915_gem_context *ctx, *cn;
1490
1491         spin_lock(&i915->gem.contexts.lock);
1492         list_for_each_entry_safe(ctx, cn, &i915->gem.contexts.list, link) {
1493                 struct i915_gem_engines_iter it;
1494                 struct intel_context *ce;
1495
1496                 if (!kref_get_unless_zero(&ctx->ref))
1497                         continue;
1498
1499                 spin_unlock(&i915->gem.contexts.lock);
1500
1501                 seq_puts(m, "HW context ");
1502                 if (ctx->pid) {
1503                         struct task_struct *task;
1504
1505                         task = get_pid_task(ctx->pid, PIDTYPE_PID);
1506                         if (task) {
1507                                 seq_printf(m, "(%s [%d]) ",
1508                                            task->comm, task->pid);
1509                                 put_task_struct(task);
1510                         }
1511                 } else if (IS_ERR(ctx->file_priv)) {
1512                         seq_puts(m, "(deleted) ");
1513                 } else {
1514                         seq_puts(m, "(kernel) ");
1515                 }
1516
1517                 seq_putc(m, ctx->remap_slice ? 'R' : 'r');
1518                 seq_putc(m, '\n');
1519
1520                 for_each_gem_engine(ce,
1521                                     i915_gem_context_lock_engines(ctx), it) {
1522                         intel_context_lock_pinned(ce);
1523                         if (intel_context_is_pinned(ce)) {
1524                                 seq_printf(m, "%s: ", ce->engine->name);
1525                                 if (ce->state)
1526                                         describe_obj(m, ce->state->obj);
1527                                 describe_ctx_ring(m, ce->ring);
1528                                 seq_putc(m, '\n');
1529                         }
1530                         intel_context_unlock_pinned(ce);
1531                 }
1532                 i915_gem_context_unlock_engines(ctx);
1533
1534                 seq_putc(m, '\n');
1535
1536                 spin_lock(&i915->gem.contexts.lock);
1537                 list_safe_reset_next(ctx, cn, link);
1538                 i915_gem_context_put(ctx);
1539         }
1540         spin_unlock(&i915->gem.contexts.lock);
1541
1542         return 0;
1543 }
1544
1545 static const char *swizzle_string(unsigned swizzle)
1546 {
1547         switch (swizzle) {
1548         case I915_BIT_6_SWIZZLE_NONE:
1549                 return "none";
1550         case I915_BIT_6_SWIZZLE_9:
1551                 return "bit9";
1552         case I915_BIT_6_SWIZZLE_9_10:
1553                 return "bit9/bit10";
1554         case I915_BIT_6_SWIZZLE_9_11:
1555                 return "bit9/bit11";
1556         case I915_BIT_6_SWIZZLE_9_10_11:
1557                 return "bit9/bit10/bit11";
1558         case I915_BIT_6_SWIZZLE_9_17:
1559                 return "bit9/bit17";
1560         case I915_BIT_6_SWIZZLE_9_10_17:
1561                 return "bit9/bit10/bit17";
1562         case I915_BIT_6_SWIZZLE_UNKNOWN:
1563                 return "unknown";
1564         }
1565
1566         return "bug";
1567 }
1568
1569 static int i915_swizzle_info(struct seq_file *m, void *data)
1570 {
1571         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1572         struct intel_uncore *uncore = &dev_priv->uncore;
1573         intel_wakeref_t wakeref;
1574
1575         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
1576
1577         seq_printf(m, "bit6 swizzle for X-tiling = %s\n",
1578                    swizzle_string(dev_priv->ggtt.bit_6_swizzle_x));
1579         seq_printf(m, "bit6 swizzle for Y-tiling = %s\n",
1580                    swizzle_string(dev_priv->ggtt.bit_6_swizzle_y));
1581
1582         if (IS_GEN_RANGE(dev_priv, 3, 4)) {
1583                 seq_printf(m, "DDC = 0x%08x\n",
1584                            intel_uncore_read(uncore, DCC));
1585                 seq_printf(m, "DDC2 = 0x%08x\n",
1586                            intel_uncore_read(uncore, DCC2));
1587                 seq_printf(m, "C0DRB3 = 0x%04x\n",
1588                            intel_uncore_read16(uncore, C0DRB3));
1589                 seq_printf(m, "C1DRB3 = 0x%04x\n",
1590                            intel_uncore_read16(uncore, C1DRB3));
1591         } else if (INTEL_GEN(dev_priv) >= 6) {
1592                 seq_printf(m, "MAD_DIMM_C0 = 0x%08x\n",
1593                            intel_uncore_read(uncore, MAD_DIMM_C0));
1594                 seq_printf(m, "MAD_DIMM_C1 = 0x%08x\n",
1595                            intel_uncore_read(uncore, MAD_DIMM_C1));
1596                 seq_printf(m, "MAD_DIMM_C2 = 0x%08x\n",
1597                            intel_uncore_read(uncore, MAD_DIMM_C2));
1598                 seq_printf(m, "TILECTL = 0x%08x\n",
1599                            intel_uncore_read(uncore, TILECTL));
1600                 if (INTEL_GEN(dev_priv) >= 8)
1601                         seq_printf(m, "GAMTARBMODE = 0x%08x\n",
1602                                    intel_uncore_read(uncore, GAMTARBMODE));
1603                 else
1604                         seq_printf(m, "ARB_MODE = 0x%08x\n",
1605                                    intel_uncore_read(uncore, ARB_MODE));
1606                 seq_printf(m, "DISP_ARB_CTL = 0x%08x\n",
1607                            intel_uncore_read(uncore, DISP_ARB_CTL));
1608         }
1609
1610         if (dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES)
1611                 seq_puts(m, "L-shaped memory detected\n");
1612
1613         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
1614
1615         return 0;
1616 }
1617
1618 static const char *rps_power_to_str(unsigned int power)
1619 {
1620         static const char * const strings[] = {
1621                 [LOW_POWER] = "low power",
1622                 [BETWEEN] = "mixed",
1623                 [HIGH_POWER] = "high power",
1624         };
1625
1626         if (power >= ARRAY_SIZE(strings) || !strings[power])
1627                 return "unknown";
1628
1629         return strings[power];
1630 }
1631
1632 static int i915_rps_boost_info(struct seq_file *m, void *data)
1633 {
1634         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1635         struct intel_rps *rps = &dev_priv->gt.rps;
1636         u32 act_freq = rps->cur_freq;
1637         intel_wakeref_t wakeref;
1638
1639         with_intel_runtime_pm_if_in_use(&dev_priv->runtime_pm, wakeref) {
1640                 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
1641                         vlv_punit_get(dev_priv);
1642                         act_freq = vlv_punit_read(dev_priv,
1643                                                   PUNIT_REG_GPU_FREQ_STS);
1644                         vlv_punit_put(dev_priv);
1645                         act_freq = (act_freq >> 8) & 0xff;
1646                 } else {
1647                         act_freq = intel_get_cagf(rps,
1648                                                   I915_READ(GEN6_RPSTAT1));
1649                 }
1650         }
1651
1652         seq_printf(m, "RPS enabled? %d\n", rps->enabled);
1653         seq_printf(m, "GPU busy? %s\n", yesno(dev_priv->gt.awake));
1654         seq_printf(m, "Boosts outstanding? %d\n",
1655                    atomic_read(&rps->num_waiters));
1656         seq_printf(m, "Interactive? %d\n", READ_ONCE(rps->power.interactive));
1657         seq_printf(m, "Frequency requested %d, actual %d\n",
1658                    intel_gpu_freq(rps, rps->cur_freq),
1659                    intel_gpu_freq(rps, act_freq));
1660         seq_printf(m, "  min hard:%d, soft:%d; max soft:%d, hard:%d\n",
1661                    intel_gpu_freq(rps, rps->min_freq),
1662                    intel_gpu_freq(rps, rps->min_freq_softlimit),
1663                    intel_gpu_freq(rps, rps->max_freq_softlimit),
1664                    intel_gpu_freq(rps, rps->max_freq));
1665         seq_printf(m, "  idle:%d, efficient:%d, boost:%d\n",
1666                    intel_gpu_freq(rps, rps->idle_freq),
1667                    intel_gpu_freq(rps, rps->efficient_freq),
1668                    intel_gpu_freq(rps, rps->boost_freq));
1669
1670         seq_printf(m, "Wait boosts: %d\n", atomic_read(&rps->boosts));
1671
1672         if (INTEL_GEN(dev_priv) >= 6 && rps->enabled && dev_priv->gt.awake) {
1673                 u32 rpup, rpupei;
1674                 u32 rpdown, rpdownei;
1675
1676                 intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
1677                 rpup = I915_READ_FW(GEN6_RP_CUR_UP) & GEN6_RP_EI_MASK;
1678                 rpupei = I915_READ_FW(GEN6_RP_CUR_UP_EI) & GEN6_RP_EI_MASK;
1679                 rpdown = I915_READ_FW(GEN6_RP_CUR_DOWN) & GEN6_RP_EI_MASK;
1680                 rpdownei = I915_READ_FW(GEN6_RP_CUR_DOWN_EI) & GEN6_RP_EI_MASK;
1681                 intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
1682
1683                 seq_printf(m, "\nRPS Autotuning (current \"%s\" window):\n",
1684                            rps_power_to_str(rps->power.mode));
1685                 seq_printf(m, "  Avg. up: %d%% [above threshold? %d%%]\n",
1686                            rpup && rpupei ? 100 * rpup / rpupei : 0,
1687                            rps->power.up_threshold);
1688                 seq_printf(m, "  Avg. down: %d%% [below threshold? %d%%]\n",
1689                            rpdown && rpdownei ? 100 * rpdown / rpdownei : 0,
1690                            rps->power.down_threshold);
1691         } else {
1692                 seq_puts(m, "\nRPS Autotuning inactive\n");
1693         }
1694
1695         return 0;
1696 }
1697
1698 static int i915_llc(struct seq_file *m, void *data)
1699 {
1700         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1701         const bool edram = INTEL_GEN(dev_priv) > 8;
1702
1703         seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev_priv)));
1704         seq_printf(m, "%s: %uMB\n", edram ? "eDRAM" : "eLLC",
1705                    dev_priv->edram_size_mb);
1706
1707         return 0;
1708 }
1709
1710 static int i915_huc_load_status_info(struct seq_file *m, void *data)
1711 {
1712         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1713         intel_wakeref_t wakeref;
1714         struct drm_printer p;
1715
1716         if (!HAS_GT_UC(dev_priv))
1717                 return -ENODEV;
1718
1719         p = drm_seq_file_printer(m);
1720         intel_uc_fw_dump(&dev_priv->gt.uc.huc.fw, &p);
1721
1722         with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref)
1723                 seq_printf(m, "\nHuC status 0x%08x:\n", I915_READ(HUC_STATUS2));
1724
1725         return 0;
1726 }
1727
1728 static int i915_guc_load_status_info(struct seq_file *m, void *data)
1729 {
1730         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1731         intel_wakeref_t wakeref;
1732         struct drm_printer p;
1733
1734         if (!HAS_GT_UC(dev_priv))
1735                 return -ENODEV;
1736
1737         p = drm_seq_file_printer(m);
1738         intel_uc_fw_dump(&dev_priv->gt.uc.guc.fw, &p);
1739
1740         with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) {
1741                 u32 tmp = I915_READ(GUC_STATUS);
1742                 u32 i;
1743
1744                 seq_printf(m, "\nGuC status 0x%08x:\n", tmp);
1745                 seq_printf(m, "\tBootrom status = 0x%x\n",
1746                            (tmp & GS_BOOTROM_MASK) >> GS_BOOTROM_SHIFT);
1747                 seq_printf(m, "\tuKernel status = 0x%x\n",
1748                            (tmp & GS_UKERNEL_MASK) >> GS_UKERNEL_SHIFT);
1749                 seq_printf(m, "\tMIA Core status = 0x%x\n",
1750                            (tmp & GS_MIA_MASK) >> GS_MIA_SHIFT);
1751                 seq_puts(m, "\nScratch registers:\n");
1752                 for (i = 0; i < 16; i++) {
1753                         seq_printf(m, "\t%2d: \t0x%x\n",
1754                                    i, I915_READ(SOFT_SCRATCH(i)));
1755                 }
1756         }
1757
1758         return 0;
1759 }
1760
1761 static const char *
1762 stringify_guc_log_type(enum guc_log_buffer_type type)
1763 {
1764         switch (type) {
1765         case GUC_ISR_LOG_BUFFER:
1766                 return "ISR";
1767         case GUC_DPC_LOG_BUFFER:
1768                 return "DPC";
1769         case GUC_CRASH_DUMP_LOG_BUFFER:
1770                 return "CRASH";
1771         default:
1772                 MISSING_CASE(type);
1773         }
1774
1775         return "";
1776 }
1777
1778 static void i915_guc_log_info(struct seq_file *m,
1779                               struct drm_i915_private *dev_priv)
1780 {
1781         struct intel_guc_log *log = &dev_priv->gt.uc.guc.log;
1782         enum guc_log_buffer_type type;
1783
1784         if (!intel_guc_log_relay_created(log)) {
1785                 seq_puts(m, "GuC log relay not created\n");
1786                 return;
1787         }
1788
1789         seq_puts(m, "GuC logging stats:\n");
1790
1791         seq_printf(m, "\tRelay full count: %u\n",
1792                    log->relay.full_count);
1793
1794         for (type = GUC_ISR_LOG_BUFFER; type < GUC_MAX_LOG_BUFFER; type++) {
1795                 seq_printf(m, "\t%s:\tflush count %10u, overflow count %10u\n",
1796                            stringify_guc_log_type(type),
1797                            log->stats[type].flush,
1798                            log->stats[type].sampled_overflow);
1799         }
1800 }
1801
1802 static int i915_guc_info(struct seq_file *m, void *data)
1803 {
1804         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1805         const struct intel_guc *guc = &dev_priv->gt.uc.guc;
1806         struct intel_guc_client *client = guc->execbuf_client;
1807
1808         if (!USES_GUC(dev_priv))
1809                 return -ENODEV;
1810
1811         i915_guc_log_info(m, dev_priv);
1812
1813         if (!USES_GUC_SUBMISSION(dev_priv))
1814                 return 0;
1815
1816         GEM_BUG_ON(!guc->execbuf_client);
1817
1818         seq_printf(m, "\nDoorbell map:\n");
1819         seq_printf(m, "\t%*pb\n", GUC_NUM_DOORBELLS, guc->doorbell_bitmap);
1820         seq_printf(m, "Doorbell next cacheline: 0x%x\n", guc->db_cacheline);
1821
1822         seq_printf(m, "\nGuC execbuf client @ %p:\n", client);
1823         seq_printf(m, "\tPriority %d, GuC stage index: %u, PD offset 0x%x\n",
1824                    client->priority,
1825                    client->stage_id,
1826                    client->proc_desc_offset);
1827         seq_printf(m, "\tDoorbell id %d, offset: 0x%lx\n",
1828                    client->doorbell_id, client->doorbell_offset);
1829         /* Add more as required ... */
1830
1831         return 0;
1832 }
1833
1834 static int i915_guc_stage_pool(struct seq_file *m, void *data)
1835 {
1836         struct drm_i915_private *dev_priv = node_to_i915(m->private);
1837         const struct intel_guc *guc = &dev_priv->gt.uc.guc;
1838         struct guc_stage_desc *desc = guc->stage_desc_pool_vaddr;
1839         int index;
1840
1841         if (!USES_GUC_SUBMISSION(dev_priv))
1842                 return -ENODEV;
1843
1844         for (index = 0; index < GUC_MAX_STAGE_DESCRIPTORS; index++, desc++) {
1845                 struct intel_engine_cs *engine;
1846
1847                 if (!(desc->attribute & GUC_STAGE_DESC_ATTR_ACTIVE))
1848                         continue;
1849
1850                 seq_printf(m, "GuC stage descriptor %u:\n", index);
1851                 seq_printf(m, "\tIndex: %u\n", desc->stage_id);
1852                 seq_printf(m, "\tAttribute: 0x%x\n", desc->attribute);
1853                 seq_printf(m, "\tPriority: %d\n", desc->priority);
1854                 seq_printf(m, "\tDoorbell id: %d\n", desc->db_id);
1855                 seq_printf(m, "\tEngines used: 0x%x\n",
1856                            desc->engines_used);
1857                 seq_printf(m, "\tDoorbell trigger phy: 0x%llx, cpu: 0x%llx, uK: 0x%x\n",
1858                            desc->db_trigger_phy,
1859                            desc->db_trigger_cpu,
1860                            desc->db_trigger_uk);
1861                 seq_printf(m, "\tProcess descriptor: 0x%x\n",
1862                            desc->process_desc);
1863                 seq_printf(m, "\tWorkqueue address: 0x%x, size: 0x%x\n",
1864                            desc->wq_addr, desc->wq_size);
1865                 seq_putc(m, '\n');
1866
1867                 for_each_uabi_engine(engine, dev_priv) {
1868                         u32 guc_engine_id = engine->guc_id;
1869                         struct guc_execlist_context *lrc =
1870                                                 &desc->lrc[guc_engine_id];
1871
1872                         seq_printf(m, "\t%s LRC:\n", engine->name);
1873                         seq_printf(m, "\t\tContext desc: 0x%x\n",
1874                                    lrc->context_desc);
1875                         seq_printf(m, "\t\tContext id: 0x%x\n", lrc->context_id);
1876                         seq_printf(m, "\t\tLRCA: 0x%x\n", lrc->ring_lrca);
1877                         seq_printf(m, "\t\tRing begin: 0x%x\n", lrc->ring_begin);
1878                         seq_printf(m, "\t\tRing end: 0x%x\n", lrc->ring_end);
1879                         seq_putc(m, '\n');
1880                 }
1881         }
1882
1883         return 0;
1884 }
1885
1886 static int i915_guc_log_dump(struct seq_file *m, void *data)
1887 {
1888         struct drm_info_node *node = m->private;
1889         struct drm_i915_private *dev_priv = node_to_i915(node);
1890         bool dump_load_err = !!node->info_ent->data;
1891         struct drm_i915_gem_object *obj = NULL;
1892         u32 *log;
1893         int i = 0;
1894
1895         if (!HAS_GT_UC(dev_priv))
1896                 return -ENODEV;
1897
1898         if (dump_load_err)
1899                 obj = dev_priv->gt.uc.load_err_log;
1900         else if (dev_priv->gt.uc.guc.log.vma)
1901                 obj = dev_priv->gt.uc.guc.log.vma->obj;
1902
1903         if (!obj)
1904                 return 0;
1905
1906         log = i915_gem_object_pin_map(obj, I915_MAP_WC);
1907         if (IS_ERR(log)) {
1908                 DRM_DEBUG("Failed to pin object\n");
1909                 seq_puts(m, "(log data unaccessible)\n");
1910                 return PTR_ERR(log);
1911         }
1912
1913         for (i = 0; i < obj->base.size / sizeof(u32); i += 4)
1914                 seq_printf(m, "0x%08x 0x%08x 0x%08x 0x%08x\n",
1915                            *(log + i), *(log + i + 1),
1916                            *(log + i + 2), *(log + i + 3));
1917
1918         seq_putc(m, '\n');
1919
1920         i915_gem_object_unpin_map(obj);
1921
1922         return 0;
1923 }
1924
1925 static int i915_guc_log_level_get(void *data, u64 *val)
1926 {
1927         struct drm_i915_private *dev_priv = data;
1928
1929         if (!USES_GUC(dev_priv))
1930                 return -ENODEV;
1931
1932         *val = intel_guc_log_get_level(&dev_priv->gt.uc.guc.log);
1933
1934         return 0;
1935 }
1936
1937 static int i915_guc_log_level_set(void *data, u64 val)
1938 {
1939         struct drm_i915_private *dev_priv = data;
1940
1941         if (!USES_GUC(dev_priv))
1942                 return -ENODEV;
1943
1944         return intel_guc_log_set_level(&dev_priv->gt.uc.guc.log, val);
1945 }
1946
1947 DEFINE_SIMPLE_ATTRIBUTE(i915_guc_log_level_fops,
1948                         i915_guc_log_level_get, i915_guc_log_level_set,
1949                         "%lld\n");
1950
1951 static int i915_guc_log_relay_open(struct inode *inode, struct file *file)
1952 {
1953         struct drm_i915_private *i915 = inode->i_private;
1954         struct intel_guc *guc = &i915->gt.uc.guc;
1955         struct intel_guc_log *log = &guc->log;
1956
1957         if (!intel_guc_is_running(guc))
1958                 return -ENODEV;
1959
1960         file->private_data = log;
1961
1962         return intel_guc_log_relay_open(log);
1963 }
1964
1965 static ssize_t
1966 i915_guc_log_relay_write(struct file *filp,
1967                          const char __user *ubuf,
1968                          size_t cnt,
1969                          loff_t *ppos)
1970 {
1971         struct intel_guc_log *log = filp->private_data;
1972         int val;
1973         int ret;
1974
1975         ret = kstrtoint_from_user(ubuf, cnt, 0, &val);
1976         if (ret < 0)
1977                 return ret;
1978
1979         /*
1980          * Enable and start the guc log relay on value of 1.
1981          * Flush log relay for any other value.
1982          */
1983         if (val == 1)
1984                 ret = intel_guc_log_relay_start(log);
1985         else
1986                 intel_guc_log_relay_flush(log);
1987
1988         return ret ?: cnt;
1989 }
1990
1991 static int i915_guc_log_relay_release(struct inode *inode, struct file *file)
1992 {
1993         struct drm_i915_private *i915 = inode->i_private;
1994         struct intel_guc *guc = &i915->gt.uc.guc;
1995
1996         intel_guc_log_relay_close(&guc->log);
1997         return 0;
1998 }
1999
2000 static const struct file_operations i915_guc_log_relay_fops = {
2001         .owner = THIS_MODULE,
2002         .open = i915_guc_log_relay_open,
2003         .write = i915_guc_log_relay_write,
2004         .release = i915_guc_log_relay_release,
2005 };
2006
2007 static int i915_psr_sink_status_show(struct seq_file *m, void *data)
2008 {
2009         u8 val;
2010         static const char * const sink_status[] = {
2011                 "inactive",
2012                 "transition to active, capture and display",
2013                 "active, display from RFB",
2014                 "active, capture and display on sink device timings",
2015                 "transition to inactive, capture and display, timing re-sync",
2016                 "reserved",
2017                 "reserved",
2018                 "sink internal error",
2019         };
2020         struct drm_connector *connector = m->private;
2021         struct drm_i915_private *dev_priv = to_i915(connector->dev);
2022         struct intel_dp *intel_dp =
2023                 enc_to_intel_dp(&intel_attached_encoder(connector)->base);
2024         int ret;
2025
2026         if (!CAN_PSR(dev_priv)) {
2027                 seq_puts(m, "PSR Unsupported\n");
2028                 return -ENODEV;
2029         }
2030
2031         if (connector->status != connector_status_connected)
2032                 return -ENODEV;
2033
2034         ret = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_STATUS, &val);
2035
2036         if (ret == 1) {
2037                 const char *str = "unknown";
2038
2039                 val &= DP_PSR_SINK_STATE_MASK;
2040                 if (val < ARRAY_SIZE(sink_status))
2041                         str = sink_status[val];
2042                 seq_printf(m, "Sink PSR status: 0x%x [%s]\n", val, str);
2043         } else {
2044                 return ret;
2045         }
2046
2047         return 0;
2048 }
2049 DEFINE_SHOW_ATTRIBUTE(i915_psr_sink_status);
2050
2051 static void
2052 psr_source_status(struct drm_i915_private *dev_priv, struct seq_file *m)
2053 {
2054         u32 val, status_val;
2055         const char *status = "unknown";
2056
2057         if (dev_priv->psr.psr2_enabled) {
2058                 static const char * const live_status[] = {
2059                         "IDLE",
2060                         "CAPTURE",
2061                         "CAPTURE_FS",
2062                         "SLEEP",
2063                         "BUFON_FW",
2064                         "ML_UP",
2065                         "SU_STANDBY",
2066                         "FAST_SLEEP",
2067                         "DEEP_SLEEP",
2068                         "BUF_ON",
2069                         "TG_ON"
2070                 };
2071                 val = I915_READ(EDP_PSR2_STATUS(dev_priv->psr.transcoder));
2072                 status_val = (val & EDP_PSR2_STATUS_STATE_MASK) >>
2073                               EDP_PSR2_STATUS_STATE_SHIFT;
2074                 if (status_val < ARRAY_SIZE(live_status))
2075                         status = live_status[status_val];
2076         } else {
2077                 static const char * const live_status[] = {
2078                         "IDLE",
2079                         "SRDONACK",
2080                         "SRDENT",
2081                         "BUFOFF",
2082                         "BUFON",
2083                         "AUXACK",
2084                         "SRDOFFACK",
2085                         "SRDENT_ON",
2086                 };
2087                 val = I915_READ(EDP_PSR_STATUS(dev_priv->psr.transcoder));
2088                 status_val = (val & EDP_PSR_STATUS_STATE_MASK) >>
2089                               EDP_PSR_STATUS_STATE_SHIFT;
2090                 if (status_val < ARRAY_SIZE(live_status))
2091                         status = live_status[status_val];
2092         }
2093
2094         seq_printf(m, "Source PSR status: %s [0x%08x]\n", status, val);
2095 }
2096
2097 static int i915_edp_psr_status(struct seq_file *m, void *data)
2098 {
2099         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2100         struct i915_psr *psr = &dev_priv->psr;
2101         intel_wakeref_t wakeref;
2102         const char *status;
2103         bool enabled;
2104         u32 val;
2105
2106         if (!HAS_PSR(dev_priv))
2107                 return -ENODEV;
2108
2109         seq_printf(m, "Sink support: %s", yesno(psr->sink_support));
2110         if (psr->dp)
2111                 seq_printf(m, " [0x%02x]", psr->dp->psr_dpcd[0]);
2112         seq_puts(m, "\n");
2113
2114         if (!psr->sink_support)
2115                 return 0;
2116
2117         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
2118         mutex_lock(&psr->lock);
2119
2120         if (psr->enabled)
2121                 status = psr->psr2_enabled ? "PSR2 enabled" : "PSR1 enabled";
2122         else
2123                 status = "disabled";
2124         seq_printf(m, "PSR mode: %s\n", status);
2125
2126         if (!psr->enabled) {
2127                 seq_printf(m, "PSR sink not reliable: %s\n",
2128                            yesno(psr->sink_not_reliable));
2129
2130                 goto unlock;
2131         }
2132
2133         if (psr->psr2_enabled) {
2134                 val = I915_READ(EDP_PSR2_CTL(dev_priv->psr.transcoder));
2135                 enabled = val & EDP_PSR2_ENABLE;
2136         } else {
2137                 val = I915_READ(EDP_PSR_CTL(dev_priv->psr.transcoder));
2138                 enabled = val & EDP_PSR_ENABLE;
2139         }
2140         seq_printf(m, "Source PSR ctl: %s [0x%08x]\n",
2141                    enableddisabled(enabled), val);
2142         psr_source_status(dev_priv, m);
2143         seq_printf(m, "Busy frontbuffer bits: 0x%08x\n",
2144                    psr->busy_frontbuffer_bits);
2145
2146         /*
2147          * SKL+ Perf counter is reset to 0 everytime DC state is entered
2148          */
2149         if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
2150                 val = I915_READ(EDP_PSR_PERF_CNT(dev_priv->psr.transcoder));
2151                 val &= EDP_PSR_PERF_CNT_MASK;
2152                 seq_printf(m, "Performance counter: %u\n", val);
2153         }
2154
2155         if (psr->debug & I915_PSR_DEBUG_IRQ) {
2156                 seq_printf(m, "Last attempted entry at: %lld\n",
2157                            psr->last_entry_attempt);
2158                 seq_printf(m, "Last exit at: %lld\n", psr->last_exit);
2159         }
2160
2161         if (psr->psr2_enabled) {
2162                 u32 su_frames_val[3];
2163                 int frame;
2164
2165                 /*
2166                  * Reading all 3 registers before hand to minimize crossing a
2167                  * frame boundary between register reads
2168                  */
2169                 for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame += 3) {
2170                         val = I915_READ(PSR2_SU_STATUS(dev_priv->psr.transcoder,
2171                                                        frame));
2172                         su_frames_val[frame / 3] = val;
2173                 }
2174
2175                 seq_puts(m, "Frame:\tPSR2 SU blocks:\n");
2176
2177                 for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame++) {
2178                         u32 su_blocks;
2179
2180                         su_blocks = su_frames_val[frame / 3] &
2181                                     PSR2_SU_STATUS_MASK(frame);
2182                         su_blocks = su_blocks >> PSR2_SU_STATUS_SHIFT(frame);
2183                         seq_printf(m, "%d\t%d\n", frame, su_blocks);
2184                 }
2185         }
2186
2187 unlock:
2188         mutex_unlock(&psr->lock);
2189         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
2190
2191         return 0;
2192 }
2193
2194 static int
2195 i915_edp_psr_debug_set(void *data, u64 val)
2196 {
2197         struct drm_i915_private *dev_priv = data;
2198         intel_wakeref_t wakeref;
2199         int ret;
2200
2201         if (!CAN_PSR(dev_priv))
2202                 return -ENODEV;
2203
2204         DRM_DEBUG_KMS("Setting PSR debug to %llx\n", val);
2205
2206         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
2207
2208         ret = intel_psr_debug_set(dev_priv, val);
2209
2210         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
2211
2212         return ret;
2213 }
2214
2215 static int
2216 i915_edp_psr_debug_get(void *data, u64 *val)
2217 {
2218         struct drm_i915_private *dev_priv = data;
2219
2220         if (!CAN_PSR(dev_priv))
2221                 return -ENODEV;
2222
2223         *val = READ_ONCE(dev_priv->psr.debug);
2224         return 0;
2225 }
2226
2227 DEFINE_SIMPLE_ATTRIBUTE(i915_edp_psr_debug_fops,
2228                         i915_edp_psr_debug_get, i915_edp_psr_debug_set,
2229                         "%llu\n");
2230
2231 static int i915_energy_uJ(struct seq_file *m, void *data)
2232 {
2233         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2234         unsigned long long power;
2235         intel_wakeref_t wakeref;
2236         u32 units;
2237
2238         if (INTEL_GEN(dev_priv) < 6)
2239                 return -ENODEV;
2240
2241         if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &power))
2242                 return -ENODEV;
2243
2244         units = (power & 0x1f00) >> 8;
2245         with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref)
2246                 power = I915_READ(MCH_SECP_NRG_STTS);
2247
2248         power = (1000000 * power) >> units; /* convert to uJ */
2249         seq_printf(m, "%llu", power);
2250
2251         return 0;
2252 }
2253
2254 static int i915_runtime_pm_status(struct seq_file *m, void *unused)
2255 {
2256         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2257         struct pci_dev *pdev = dev_priv->drm.pdev;
2258
2259         if (!HAS_RUNTIME_PM(dev_priv))
2260                 seq_puts(m, "Runtime power management not supported\n");
2261
2262         seq_printf(m, "Runtime power status: %s\n",
2263                    enableddisabled(!dev_priv->power_domains.wakeref));
2264
2265         seq_printf(m, "GPU idle: %s\n", yesno(!dev_priv->gt.awake));
2266         seq_printf(m, "IRQs disabled: %s\n",
2267                    yesno(!intel_irqs_enabled(dev_priv)));
2268 #ifdef CONFIG_PM
2269         seq_printf(m, "Usage count: %d\n",
2270                    atomic_read(&dev_priv->drm.dev->power.usage_count));
2271 #else
2272         seq_printf(m, "Device Power Management (CONFIG_PM) disabled\n");
2273 #endif
2274         seq_printf(m, "PCI device power state: %s [%d]\n",
2275                    pci_power_name(pdev->current_state),
2276                    pdev->current_state);
2277
2278         if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_RUNTIME_PM)) {
2279                 struct drm_printer p = drm_seq_file_printer(m);
2280
2281                 print_intel_runtime_pm_wakeref(&dev_priv->runtime_pm, &p);
2282         }
2283
2284         return 0;
2285 }
2286
2287 static int i915_power_domain_info(struct seq_file *m, void *unused)
2288 {
2289         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2290         struct i915_power_domains *power_domains = &dev_priv->power_domains;
2291         int i;
2292
2293         mutex_lock(&power_domains->lock);
2294
2295         seq_printf(m, "%-25s %s\n", "Power well/domain", "Use count");
2296         for (i = 0; i < power_domains->power_well_count; i++) {
2297                 struct i915_power_well *power_well;
2298                 enum intel_display_power_domain power_domain;
2299
2300                 power_well = &power_domains->power_wells[i];
2301                 seq_printf(m, "%-25s %d\n", power_well->desc->name,
2302                            power_well->count);
2303
2304                 for_each_power_domain(power_domain, power_well->desc->domains)
2305                         seq_printf(m, "  %-23s %d\n",
2306                                  intel_display_power_domain_str(power_domain),
2307                                  power_domains->domain_use_count[power_domain]);
2308         }
2309
2310         mutex_unlock(&power_domains->lock);
2311
2312         return 0;
2313 }
2314
2315 static int i915_dmc_info(struct seq_file *m, void *unused)
2316 {
2317         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2318         intel_wakeref_t wakeref;
2319         struct intel_csr *csr;
2320         i915_reg_t dc5_reg, dc6_reg = {};
2321
2322         if (!HAS_CSR(dev_priv))
2323                 return -ENODEV;
2324
2325         csr = &dev_priv->csr;
2326
2327         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
2328
2329         seq_printf(m, "fw loaded: %s\n", yesno(csr->dmc_payload != NULL));
2330         seq_printf(m, "path: %s\n", csr->fw_path);
2331
2332         if (!csr->dmc_payload)
2333                 goto out;
2334
2335         seq_printf(m, "version: %d.%d\n", CSR_VERSION_MAJOR(csr->version),
2336                    CSR_VERSION_MINOR(csr->version));
2337
2338         if (INTEL_GEN(dev_priv) >= 12) {
2339                 dc5_reg = TGL_DMC_DEBUG_DC5_COUNT;
2340                 dc6_reg = TGL_DMC_DEBUG_DC6_COUNT;
2341                 /*
2342                  * NOTE: DMC_DEBUG3 is a general purpose reg.
2343                  * According to B.Specs:49196 DMC f/w reuses DC5/6 counter
2344                  * reg for DC3CO debugging and validation,
2345                  * but TGL DMC f/w is using DMC_DEBUG3 reg for DC3CO counter.
2346                  */
2347                 seq_printf(m, "DC3CO count: %d\n", I915_READ(DMC_DEBUG3));
2348         } else {
2349                 dc5_reg = IS_BROXTON(dev_priv) ? BXT_CSR_DC3_DC5_COUNT :
2350                                                  SKL_CSR_DC3_DC5_COUNT;
2351                 if (!IS_GEN9_LP(dev_priv))
2352                         dc6_reg = SKL_CSR_DC5_DC6_COUNT;
2353         }
2354
2355         seq_printf(m, "DC3 -> DC5 count: %d\n", I915_READ(dc5_reg));
2356         if (dc6_reg.reg)
2357                 seq_printf(m, "DC5 -> DC6 count: %d\n", I915_READ(dc6_reg));
2358
2359 out:
2360         seq_printf(m, "program base: 0x%08x\n", I915_READ(CSR_PROGRAM(0)));
2361         seq_printf(m, "ssp base: 0x%08x\n", I915_READ(CSR_SSP_BASE));
2362         seq_printf(m, "htp: 0x%08x\n", I915_READ(CSR_HTP_SKL));
2363
2364         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
2365
2366         return 0;
2367 }
2368
2369 static void intel_seq_print_mode(struct seq_file *m, int tabs,
2370                                  struct drm_display_mode *mode)
2371 {
2372         int i;
2373
2374         for (i = 0; i < tabs; i++)
2375                 seq_putc(m, '\t');
2376
2377         seq_printf(m, DRM_MODE_FMT "\n", DRM_MODE_ARG(mode));
2378 }
2379
2380 static void intel_encoder_info(struct seq_file *m,
2381                                struct intel_crtc *intel_crtc,
2382                                struct intel_encoder *intel_encoder)
2383 {
2384         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2385         struct drm_device *dev = &dev_priv->drm;
2386         struct drm_crtc *crtc = &intel_crtc->base;
2387         struct intel_connector *intel_connector;
2388         struct drm_encoder *encoder;
2389
2390         encoder = &intel_encoder->base;
2391         seq_printf(m, "\tencoder %d: type: %s, connectors:\n",
2392                    encoder->base.id, encoder->name);
2393         for_each_connector_on_encoder(dev, encoder, intel_connector) {
2394                 struct drm_connector *connector = &intel_connector->base;
2395                 seq_printf(m, "\t\tconnector %d: type: %s, status: %s",
2396                            connector->base.id,
2397                            connector->name,
2398                            drm_get_connector_status_name(connector->status));
2399                 if (connector->status == connector_status_connected) {
2400                         struct drm_display_mode *mode = &crtc->mode;
2401                         seq_printf(m, ", mode:\n");
2402                         intel_seq_print_mode(m, 2, mode);
2403                 } else {
2404                         seq_putc(m, '\n');
2405                 }
2406         }
2407 }
2408
2409 static void intel_crtc_info(struct seq_file *m, struct intel_crtc *intel_crtc)
2410 {
2411         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2412         struct drm_device *dev = &dev_priv->drm;
2413         struct drm_crtc *crtc = &intel_crtc->base;
2414         struct intel_encoder *intel_encoder;
2415         struct drm_plane_state *plane_state = crtc->primary->state;
2416         struct drm_framebuffer *fb = plane_state->fb;
2417
2418         if (fb)
2419                 seq_printf(m, "\tfb: %d, pos: %dx%d, size: %dx%d\n",
2420                            fb->base.id, plane_state->src_x >> 16,
2421                            plane_state->src_y >> 16, fb->width, fb->height);
2422         else
2423                 seq_puts(m, "\tprimary plane disabled\n");
2424         for_each_encoder_on_crtc(dev, crtc, intel_encoder)
2425                 intel_encoder_info(m, intel_crtc, intel_encoder);
2426 }
2427
2428 static void intel_panel_info(struct seq_file *m, struct intel_panel *panel)
2429 {
2430         struct drm_display_mode *mode = panel->fixed_mode;
2431
2432         seq_printf(m, "\tfixed mode:\n");
2433         intel_seq_print_mode(m, 2, mode);
2434 }
2435
2436 static void intel_hdcp_info(struct seq_file *m,
2437                             struct intel_connector *intel_connector)
2438 {
2439         bool hdcp_cap, hdcp2_cap;
2440
2441         hdcp_cap = intel_hdcp_capable(intel_connector);
2442         hdcp2_cap = intel_hdcp2_capable(intel_connector);
2443
2444         if (hdcp_cap)
2445                 seq_puts(m, "HDCP1.4 ");
2446         if (hdcp2_cap)
2447                 seq_puts(m, "HDCP2.2 ");
2448
2449         if (!hdcp_cap && !hdcp2_cap)
2450                 seq_puts(m, "None");
2451
2452         seq_puts(m, "\n");
2453 }
2454
2455 static void intel_dp_info(struct seq_file *m,
2456                           struct intel_connector *intel_connector)
2457 {
2458         struct intel_encoder *intel_encoder = intel_connector->encoder;
2459         struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
2460
2461         seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]);
2462         seq_printf(m, "\taudio support: %s\n", yesno(intel_dp->has_audio));
2463         if (intel_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)
2464                 intel_panel_info(m, &intel_connector->panel);
2465
2466         drm_dp_downstream_debug(m, intel_dp->dpcd, intel_dp->downstream_ports,
2467                                 &intel_dp->aux);
2468         if (intel_connector->hdcp.shim) {
2469                 seq_puts(m, "\tHDCP version: ");
2470                 intel_hdcp_info(m, intel_connector);
2471         }
2472 }
2473
2474 static void intel_dp_mst_info(struct seq_file *m,
2475                           struct intel_connector *intel_connector)
2476 {
2477         struct intel_encoder *intel_encoder = intel_connector->encoder;
2478         struct intel_dp_mst_encoder *intel_mst =
2479                 enc_to_mst(&intel_encoder->base);
2480         struct intel_digital_port *intel_dig_port = intel_mst->primary;
2481         struct intel_dp *intel_dp = &intel_dig_port->dp;
2482         bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr,
2483                                         intel_connector->port);
2484
2485         seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
2486 }
2487
2488 static void intel_hdmi_info(struct seq_file *m,
2489                             struct intel_connector *intel_connector)
2490 {
2491         struct intel_encoder *intel_encoder = intel_connector->encoder;
2492         struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&intel_encoder->base);
2493
2494         seq_printf(m, "\taudio support: %s\n", yesno(intel_hdmi->has_audio));
2495         if (intel_connector->hdcp.shim) {
2496                 seq_puts(m, "\tHDCP version: ");
2497                 intel_hdcp_info(m, intel_connector);
2498         }
2499 }
2500
2501 static void intel_lvds_info(struct seq_file *m,
2502                             struct intel_connector *intel_connector)
2503 {
2504         intel_panel_info(m, &intel_connector->panel);
2505 }
2506
2507 static void intel_connector_info(struct seq_file *m,
2508                                  struct drm_connector *connector)
2509 {
2510         struct intel_connector *intel_connector = to_intel_connector(connector);
2511         struct intel_encoder *intel_encoder = intel_connector->encoder;
2512         struct drm_display_mode *mode;
2513
2514         seq_printf(m, "connector %d: type %s, status: %s\n",
2515                    connector->base.id, connector->name,
2516                    drm_get_connector_status_name(connector->status));
2517
2518         if (connector->status == connector_status_disconnected)
2519                 return;
2520
2521         seq_printf(m, "\tphysical dimensions: %dx%dmm\n",
2522                    connector->display_info.width_mm,
2523                    connector->display_info.height_mm);
2524         seq_printf(m, "\tsubpixel order: %s\n",
2525                    drm_get_subpixel_order_name(connector->display_info.subpixel_order));
2526         seq_printf(m, "\tCEA rev: %d\n", connector->display_info.cea_rev);
2527
2528         if (!intel_encoder)
2529                 return;
2530
2531         switch (connector->connector_type) {
2532         case DRM_MODE_CONNECTOR_DisplayPort:
2533         case DRM_MODE_CONNECTOR_eDP:
2534                 if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
2535                         intel_dp_mst_info(m, intel_connector);
2536                 else
2537                         intel_dp_info(m, intel_connector);
2538                 break;
2539         case DRM_MODE_CONNECTOR_LVDS:
2540                 if (intel_encoder->type == INTEL_OUTPUT_LVDS)
2541                         intel_lvds_info(m, intel_connector);
2542                 break;
2543         case DRM_MODE_CONNECTOR_HDMIA:
2544                 if (intel_encoder->type == INTEL_OUTPUT_HDMI ||
2545                     intel_encoder->type == INTEL_OUTPUT_DDI)
2546                         intel_hdmi_info(m, intel_connector);
2547                 break;
2548         default:
2549                 break;
2550         }
2551
2552         seq_printf(m, "\tmodes:\n");
2553         list_for_each_entry(mode, &connector->modes, head)
2554                 intel_seq_print_mode(m, 2, mode);
2555 }
2556
2557 static const char *plane_type(enum drm_plane_type type)
2558 {
2559         switch (type) {
2560         case DRM_PLANE_TYPE_OVERLAY:
2561                 return "OVL";
2562         case DRM_PLANE_TYPE_PRIMARY:
2563                 return "PRI";
2564         case DRM_PLANE_TYPE_CURSOR:
2565                 return "CUR";
2566         /*
2567          * Deliberately omitting default: to generate compiler warnings
2568          * when a new drm_plane_type gets added.
2569          */
2570         }
2571
2572         return "unknown";
2573 }
2574
2575 static void plane_rotation(char *buf, size_t bufsize, unsigned int rotation)
2576 {
2577         /*
2578          * According to doc only one DRM_MODE_ROTATE_ is allowed but this
2579          * will print them all to visualize if the values are misused
2580          */
2581         snprintf(buf, bufsize,
2582                  "%s%s%s%s%s%s(0x%08x)",
2583                  (rotation & DRM_MODE_ROTATE_0) ? "0 " : "",
2584                  (rotation & DRM_MODE_ROTATE_90) ? "90 " : "",
2585                  (rotation & DRM_MODE_ROTATE_180) ? "180 " : "",
2586                  (rotation & DRM_MODE_ROTATE_270) ? "270 " : "",
2587                  (rotation & DRM_MODE_REFLECT_X) ? "FLIPX " : "",
2588                  (rotation & DRM_MODE_REFLECT_Y) ? "FLIPY " : "",
2589                  rotation);
2590 }
2591
2592 static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
2593 {
2594         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2595         struct drm_device *dev = &dev_priv->drm;
2596         struct intel_plane *intel_plane;
2597
2598         for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
2599                 struct drm_plane_state *state;
2600                 struct drm_plane *plane = &intel_plane->base;
2601                 struct drm_format_name_buf format_name;
2602                 char rot_str[48];
2603
2604                 if (!plane->state) {
2605                         seq_puts(m, "plane->state is NULL!\n");
2606                         continue;
2607                 }
2608
2609                 state = plane->state;
2610
2611                 if (state->fb) {
2612                         drm_get_format_name(state->fb->format->format,
2613                                             &format_name);
2614                 } else {
2615                         sprintf(format_name.str, "N/A");
2616                 }
2617
2618                 plane_rotation(rot_str, sizeof(rot_str), state->rotation);
2619
2620                 seq_printf(m, "\t--Plane id %d: type=%s, crtc_pos=%4dx%4d, crtc_size=%4dx%4d, src_pos=%d.%04ux%d.%04u, src_size=%d.%04ux%d.%04u, format=%s, rotation=%s\n",
2621                            plane->base.id,
2622                            plane_type(intel_plane->base.type),
2623                            state->crtc_x, state->crtc_y,
2624                            state->crtc_w, state->crtc_h,
2625                            (state->src_x >> 16),
2626                            ((state->src_x & 0xffff) * 15625) >> 10,
2627                            (state->src_y >> 16),
2628                            ((state->src_y & 0xffff) * 15625) >> 10,
2629                            (state->src_w >> 16),
2630                            ((state->src_w & 0xffff) * 15625) >> 10,
2631                            (state->src_h >> 16),
2632                            ((state->src_h & 0xffff) * 15625) >> 10,
2633                            format_name.str,
2634                            rot_str);
2635         }
2636 }
2637
2638 static void intel_scaler_info(struct seq_file *m, struct intel_crtc *intel_crtc)
2639 {
2640         struct intel_crtc_state *pipe_config;
2641         int num_scalers = intel_crtc->num_scalers;
2642         int i;
2643
2644         pipe_config = to_intel_crtc_state(intel_crtc->base.state);
2645
2646         /* Not all platformas have a scaler */
2647         if (num_scalers) {
2648                 seq_printf(m, "\tnum_scalers=%d, scaler_users=%x scaler_id=%d",
2649                            num_scalers,
2650                            pipe_config->scaler_state.scaler_users,
2651                            pipe_config->scaler_state.scaler_id);
2652
2653                 for (i = 0; i < num_scalers; i++) {
2654                         struct intel_scaler *sc =
2655                                         &pipe_config->scaler_state.scalers[i];
2656
2657                         seq_printf(m, ", scalers[%d]: use=%s, mode=%x",
2658                                    i, yesno(sc->in_use), sc->mode);
2659                 }
2660                 seq_puts(m, "\n");
2661         } else {
2662                 seq_puts(m, "\tNo scalers available on this platform\n");
2663         }
2664 }
2665
2666 static int i915_display_info(struct seq_file *m, void *unused)
2667 {
2668         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2669         struct drm_device *dev = &dev_priv->drm;
2670         struct intel_crtc *crtc;
2671         struct drm_connector *connector;
2672         struct drm_connector_list_iter conn_iter;
2673         intel_wakeref_t wakeref;
2674
2675         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
2676
2677         seq_printf(m, "CRTC info\n");
2678         seq_printf(m, "---------\n");
2679         for_each_intel_crtc(dev, crtc) {
2680                 struct intel_crtc_state *pipe_config;
2681
2682                 drm_modeset_lock(&crtc->base.mutex, NULL);
2683                 pipe_config = to_intel_crtc_state(crtc->base.state);
2684
2685                 seq_printf(m, "CRTC %d: pipe: %c, active=%s, (size=%dx%d), dither=%s, bpp=%d\n",
2686                            crtc->base.base.id, pipe_name(crtc->pipe),
2687                            yesno(pipe_config->base.active),
2688                            pipe_config->pipe_src_w, pipe_config->pipe_src_h,
2689                            yesno(pipe_config->dither), pipe_config->pipe_bpp);
2690
2691                 if (pipe_config->base.active) {
2692                         struct intel_plane *cursor =
2693                                 to_intel_plane(crtc->base.cursor);
2694
2695                         intel_crtc_info(m, crtc);
2696
2697                         seq_printf(m, "\tcursor visible? %s, position (%d, %d), size %dx%d, addr 0x%08x\n",
2698                                    yesno(cursor->base.state->visible),
2699                                    cursor->base.state->crtc_x,
2700                                    cursor->base.state->crtc_y,
2701                                    cursor->base.state->crtc_w,
2702                                    cursor->base.state->crtc_h,
2703                                    cursor->cursor.base);
2704                         intel_scaler_info(m, crtc);
2705                         intel_plane_info(m, crtc);
2706                 }
2707
2708                 seq_printf(m, "\tunderrun reporting: cpu=%s pch=%s \n",
2709                            yesno(!crtc->cpu_fifo_underrun_disabled),
2710                            yesno(!crtc->pch_fifo_underrun_disabled));
2711                 drm_modeset_unlock(&crtc->base.mutex);
2712         }
2713
2714         seq_printf(m, "\n");
2715         seq_printf(m, "Connector info\n");
2716         seq_printf(m, "--------------\n");
2717         mutex_lock(&dev->mode_config.mutex);
2718         drm_connector_list_iter_begin(dev, &conn_iter);
2719         drm_for_each_connector_iter(connector, &conn_iter)
2720                 intel_connector_info(m, connector);
2721         drm_connector_list_iter_end(&conn_iter);
2722         mutex_unlock(&dev->mode_config.mutex);
2723
2724         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
2725
2726         return 0;
2727 }
2728
2729 static int i915_engine_info(struct seq_file *m, void *unused)
2730 {
2731         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2732         struct intel_engine_cs *engine;
2733         intel_wakeref_t wakeref;
2734         struct drm_printer p;
2735
2736         wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
2737
2738         seq_printf(m, "GT awake? %s [%d]\n",
2739                    yesno(dev_priv->gt.awake),
2740                    atomic_read(&dev_priv->gt.wakeref.count));
2741         seq_printf(m, "CS timestamp frequency: %u kHz\n",
2742                    RUNTIME_INFO(dev_priv)->cs_timestamp_frequency_khz);
2743
2744         p = drm_seq_file_printer(m);
2745         for_each_uabi_engine(engine, dev_priv)
2746                 intel_engine_dump(engine, &p, "%s\n", engine->name);
2747
2748         intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
2749
2750         return 0;
2751 }
2752
2753 static int i915_rcs_topology(struct seq_file *m, void *unused)
2754 {
2755         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2756         struct drm_printer p = drm_seq_file_printer(m);
2757
2758         intel_device_info_dump_topology(&RUNTIME_INFO(dev_priv)->sseu, &p);
2759
2760         return 0;
2761 }
2762
2763 static int i915_shrinker_info(struct seq_file *m, void *unused)
2764 {
2765         struct drm_i915_private *i915 = node_to_i915(m->private);
2766
2767         seq_printf(m, "seeks = %d\n", i915->mm.shrinker.seeks);
2768         seq_printf(m, "batch = %lu\n", i915->mm.shrinker.batch);
2769
2770         return 0;
2771 }
2772
2773 static int i915_shared_dplls_info(struct seq_file *m, void *unused)
2774 {
2775         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2776         struct drm_device *dev = &dev_priv->drm;
2777         int i;
2778
2779         drm_modeset_lock_all(dev);
2780         for (i = 0; i < dev_priv->num_shared_dpll; i++) {
2781                 struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];
2782
2783                 seq_printf(m, "DPLL%i: %s, id: %i\n", i, pll->info->name,
2784                            pll->info->id);
2785                 seq_printf(m, " crtc_mask: 0x%08x, active: 0x%x, on: %s\n",
2786                            pll->state.crtc_mask, pll->active_mask, yesno(pll->on));
2787                 seq_printf(m, " tracked hardware state:\n");
2788                 seq_printf(m, " dpll:    0x%08x\n", pll->state.hw_state.dpll);
2789                 seq_printf(m, " dpll_md: 0x%08x\n",
2790                            pll->state.hw_state.dpll_md);
2791                 seq_printf(m, " fp0:     0x%08x\n", pll->state.hw_state.fp0);
2792                 seq_printf(m, " fp1:     0x%08x\n", pll->state.hw_state.fp1);
2793                 seq_printf(m, " wrpll:   0x%08x\n", pll->state.hw_state.wrpll);
2794                 seq_printf(m, " cfgcr0:  0x%08x\n", pll->state.hw_state.cfgcr0);
2795                 seq_printf(m, " cfgcr1:  0x%08x\n", pll->state.hw_state.cfgcr1);
2796                 seq_printf(m, " mg_refclkin_ctl:        0x%08x\n",
2797                            pll->state.hw_state.mg_refclkin_ctl);
2798                 seq_printf(m, " mg_clktop2_coreclkctl1: 0x%08x\n",
2799                            pll->state.hw_state.mg_clktop2_coreclkctl1);
2800                 seq_printf(m, " mg_clktop2_hsclkctl:    0x%08x\n",
2801                            pll->state.hw_state.mg_clktop2_hsclkctl);
2802                 seq_printf(m, " mg_pll_div0:  0x%08x\n",
2803                            pll->state.hw_state.mg_pll_div0);
2804                 seq_printf(m, " mg_pll_div1:  0x%08x\n",
2805                            pll->state.hw_state.mg_pll_div1);
2806                 seq_printf(m, " mg_pll_lf:    0x%08x\n",
2807                            pll->state.hw_state.mg_pll_lf);
2808                 seq_printf(m, " mg_pll_frac_lock: 0x%08x\n",
2809                            pll->state.hw_state.mg_pll_frac_lock);
2810                 seq_printf(m, " mg_pll_ssc:   0x%08x\n",
2811                            pll->state.hw_state.mg_pll_ssc);
2812                 seq_printf(m, " mg_pll_bias:  0x%08x\n",
2813                            pll->state.hw_state.mg_pll_bias);
2814                 seq_printf(m, " mg_pll_tdc_coldst_bias: 0x%08x\n",
2815                            pll->state.hw_state.mg_pll_tdc_coldst_bias);
2816         }
2817         drm_modeset_unlock_all(dev);
2818
2819         return 0;
2820 }
2821
2822 static int i915_wa_registers(struct seq_file *m, void *unused)
2823 {
2824         struct drm_i915_private *i915 = node_to_i915(m->private);
2825         struct intel_engine_cs *engine;
2826
2827         for_each_uabi_engine(engine, i915) {
2828                 const struct i915_wa_list *wal = &engine->ctx_wa_list;
2829                 const struct i915_wa *wa;
2830                 unsigned int count;
2831
2832                 count = wal->count;
2833                 if (!count)
2834                         continue;
2835
2836                 seq_printf(m, "%s: Workarounds applied: %u\n",
2837                            engine->name, count);
2838
2839                 for (wa = wal->list; count--; wa++)
2840                         seq_printf(m, "0x%X: 0x%08X, mask: 0x%08X\n",
2841                                    i915_mmio_reg_offset(wa->reg),
2842                                    wa->val, wa->mask);
2843
2844                 seq_printf(m, "\n");
2845         }
2846
2847         return 0;
2848 }
2849
2850 static int i915_ipc_status_show(struct seq_file *m, void *data)
2851 {
2852         struct drm_i915_private *dev_priv = m->private;
2853
2854         seq_printf(m, "Isochronous Priority Control: %s\n",
2855                         yesno(dev_priv->ipc_enabled));
2856         return 0;
2857 }
2858
2859 static int i915_ipc_status_open(struct inode *inode, struct file *file)
2860 {
2861         struct drm_i915_private *dev_priv = inode->i_private;
2862
2863         if (!HAS_IPC(dev_priv))
2864                 return -ENODEV;
2865
2866         return single_open(file, i915_ipc_status_show, dev_priv);
2867 }
2868
2869 static ssize_t i915_ipc_status_write(struct file *file, const char __user *ubuf,
2870                                      size_t len, loff_t *offp)
2871 {
2872         struct seq_file *m = file->private_data;
2873         struct drm_i915_private *dev_priv = m->private;
2874         intel_wakeref_t wakeref;
2875         bool enable;
2876         int ret;
2877
2878         ret = kstrtobool_from_user(ubuf, len, &enable);
2879         if (ret < 0)
2880                 return ret;
2881
2882         with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) {
2883                 if (!dev_priv->ipc_enabled && enable)
2884                         DRM_INFO("Enabling IPC: WM will be proper only after next commit\n");
2885                 dev_priv->wm.distrust_bios_wm = true;
2886                 dev_priv->ipc_enabled = enable;
2887                 intel_enable_ipc(dev_priv);
2888         }
2889
2890         return len;
2891 }
2892
2893 static const struct file_operations i915_ipc_status_fops = {
2894         .owner = THIS_MODULE,
2895         .open = i915_ipc_status_open,
2896         .read = seq_read,
2897         .llseek = seq_lseek,
2898         .release = single_release,
2899         .write = i915_ipc_status_write
2900 };
2901
2902 static int i915_ddb_info(struct seq_file *m, void *unused)
2903 {
2904         struct drm_i915_private *dev_priv = node_to_i915(m->private);
2905         struct drm_device *dev = &dev_priv->drm;
2906         struct skl_ddb_entry *entry;
2907         struct intel_crtc *crtc;
2908
2909         if (INTEL_GEN(dev_priv) < 9)
2910                 return -ENODEV;
2911
2912         drm_modeset_lock_all(dev);
2913
2914         seq_printf(m, "%-15s%8s%8s%8s\n", "", "Start", "End", "Size");
2915
2916         for_each_intel_crtc(&dev_priv->drm, crtc) {
2917                 struct intel_crtc_state *crtc_state =
2918                         to_intel_crtc_state(crtc->base.state);
2919                 enum pipe pipe = crtc->pipe;
2920                 enum plane_id plane_id;
2921
2922                 seq_printf(m, "Pipe %c\n", pipe_name(pipe));
2923
2924                 for_each_plane_id_on_crtc(crtc, plane_id) {
2925                         entry = &crtc_state->wm.skl.plane_ddb_y[plane_id];
2926                         seq_printf(m, "  Plane%-8d%8u%8u%8u\n", plane_id + 1,
2927                                    entry->start, entry->end,
2928                                    skl_ddb_entry_size(entry));
2929                 }
2930
2931                 entry = &crtc_state->wm.skl.plane_ddb_y[PLANE_CURSOR];
2932                 seq_printf(m, "  %-13s%8u%8u%8u\n", "Cursor", entry->start,
2933                            entry->end, skl_ddb_entry_size(entry));
2934         }
2935
2936         drm_modeset_unlock_all(dev);
2937
2938         return 0;
2939 }
2940
2941 static void drrs_status_per_crtc(struct seq_file *m,
2942                                  struct drm_device *dev,
2943                                  struct intel_crtc *intel_crtc)
2944 {
2945         struct drm_i915_private *dev_priv = to_i915(dev);
2946         struct i915_drrs *drrs = &dev_priv->drrs;
2947         int vrefresh = 0;
2948         struct drm_connector *connector;
2949         struct drm_connector_list_iter conn_iter;
2950
2951         drm_connector_list_iter_begin(dev, &conn_iter);
2952         drm_for_each_connector_iter(connector, &conn_iter) {
2953                 if (connector->state->crtc != &intel_crtc->base)
2954                         continue;
2955
2956                 seq_printf(m, "%s:\n", connector->name);
2957         }
2958         drm_connector_list_iter_end(&conn_iter);
2959
2960         if (dev_priv->vbt.drrs_type == STATIC_DRRS_SUPPORT)
2961                 seq_puts(m, "\tVBT: DRRS_type: Static");
2962         else if (dev_priv->vbt.drrs_type == SEAMLESS_DRRS_SUPPORT)
2963                 seq_puts(m, "\tVBT: DRRS_type: Seamless");
2964         else if (dev_priv->vbt.drrs_type == DRRS_NOT_SUPPORTED)
2965                 seq_puts(m, "\tVBT: DRRS_type: None");
2966         else
2967                 seq_puts(m, "\tVBT: DRRS_type: FIXME: Unrecognized Value");
2968
2969         seq_puts(m, "\n\n");
2970
2971         if (to_intel_crtc_state(intel_crtc->base.state)->has_drrs) {
2972                 struct intel_panel *panel;
2973
2974                 mutex_lock(&drrs->mutex);
2975                 /* DRRS Supported */
2976                 seq_puts(m, "\tDRRS Supported: Yes\n");
2977
2978                 /* disable_drrs() will make drrs->dp NULL */
2979                 if (!drrs->dp) {
2980                         seq_puts(m, "Idleness DRRS: Disabled\n");
2981                         if (dev_priv->psr.enabled)
2982                                 seq_puts(m,
2983                                 "\tAs PSR is enabled, DRRS is not enabled\n");
2984                         mutex_unlock(&drrs->mutex);
2985                         return;
2986                 }
2987
2988                 panel = &drrs->dp->attached_connector->panel;
2989                 seq_printf(m, "\t\tBusy_frontbuffer_bits: 0x%X",
2990                                         drrs->busy_frontbuffer_bits);
2991
2992                 seq_puts(m, "\n\t\t");
2993                 if (drrs->refresh_rate_type == DRRS_HIGH_RR) {
2994                         seq_puts(m, "DRRS_State: DRRS_HIGH_RR\n");
2995                         vrefresh = panel->fixed_mode->vrefresh;
2996                 } else if (drrs->refresh_rate_type == DRRS_LOW_RR) {
2997                         seq_puts(m, "DRRS_State: DRRS_LOW_RR\n");
2998                         vrefresh = panel->downclock_mode->vrefresh;
2999                 } else {
3000                         seq_printf(m, "DRRS_State: Unknown(%d)\n",
3001                                                 drrs->refresh_rate_type);
3002                         mutex_unlock(&drrs->mutex);
3003                         return;
3004                 }
3005                 seq_printf(m, "\t\tVrefresh: %d", vrefresh);
3006
3007                 seq_puts(m, "\n\t\t");
3008                 mutex_unlock(&drrs->mutex);
3009         } else {
3010                 /* DRRS not supported. Print the VBT parameter*/
3011                 seq_puts(m, "\tDRRS Supported : No");
3012         }
3013         seq_puts(m, "\n");
3014 }
3015
3016 static int i915_drrs_status(struct seq_file *m, void *unused)
3017 {
3018         struct drm_i915_private *dev_priv = node_to_i915(m->private);
3019         struct drm_device *dev = &dev_priv->drm;
3020         struct intel_crtc *intel_crtc;
3021         int active_crtc_cnt = 0;
3022
3023         drm_modeset_lock_all(dev);
3024         for_each_intel_crtc(dev, intel_crtc) {
3025                 if (intel_crtc->base.state->active) {
3026                         active_crtc_cnt++;
3027                         seq_printf(m, "\nCRTC %d:  ", active_crtc_cnt);
3028
3029                         drrs_status_per_crtc(m, dev, intel_crtc);
3030                 }
3031         }
3032         drm_modeset_unlock_all(dev);
3033
3034         if (!active_crtc_cnt)
3035                 seq_puts(m, "No active crtc found\n");
3036
3037         return 0;
3038 }
3039
3040 static int i915_dp_mst_info(struct seq_file *m, void *unused)
3041 {
3042         struct drm_i915_private *dev_priv = node_to_i915(m->private);
3043         struct drm_device *dev = &dev_priv->drm;
3044         struct intel_encoder *intel_encoder;
3045         struct intel_digital_port *intel_dig_port;
3046         struct drm_connector *connector;
3047         struct drm_connector_list_iter conn_iter;
3048
3049         drm_connector_list_iter_begin(dev, &conn_iter);
3050         drm_for_each_connector_iter(connector, &conn_iter) {
3051                 if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
3052                         continue;
3053
3054                 intel_encoder = intel_attached_encoder(connector);
3055                 if (!intel_encoder || intel_encoder->type == INTEL_OUTPUT_DP_MST)
3056                         continue;
3057
3058                 intel_dig_port = enc_to_dig_port(&intel_encoder->base);
3059                 if (!intel_dig_port->dp.can_mst)
3060                         continue;
3061
3062                 seq_printf(m, "MST Source Port [ENCODER:%d:%s]\n",
3063                            intel_dig_port->base.base.base.id,
3064                            intel_dig_port->base.base.name);
3065                 drm_dp_mst_dump_topology(m, &intel_dig_port->dp.mst_mgr);
3066         }
3067         drm_connector_list_iter_end(&conn_iter);
3068
3069         return 0;
3070 }
3071
3072 static ssize_t i915_displayport_test_active_write(struct file *file,
3073                                                   const char __user *ubuf,
3074                                                   size_t len, loff_t *offp)
3075 {
3076         char *input_buffer;
3077         int status = 0;
3078         struct drm_device *dev;
3079         struct drm_connector *connector;
3080         struct drm_connector_list_iter conn_iter;
3081         struct intel_dp *intel_dp;
3082         int val = 0;
3083
3084         dev = ((struct seq_file *)file->private_data)->private;
3085
3086         if (len == 0)
3087                 return 0;
3088
3089         input_buffer = memdup_user_nul(ubuf, len);
3090         if (IS_ERR(input_buffer))
3091                 return PTR_ERR(input_buffer);
3092
3093         DRM_DEBUG_DRIVER("Copied %d bytes from user\n", (unsigned int)len);
3094
3095         drm_connector_list_iter_begin(dev, &conn_iter);
3096         drm_for_each_connector_iter(connector, &conn_iter) {
3097                 struct intel_encoder *encoder;
3098
3099                 if (connector->connector_type !=
3100                     DRM_MODE_CONNECTOR_DisplayPort)
3101                         continue;
3102
3103                 encoder = to_intel_encoder(connector->encoder);
3104                 if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
3105                         continue;
3106
3107                 if (encoder && connector->status == connector_status_connected) {
3108                         intel_dp = enc_to_intel_dp(&encoder->base);
3109                         status = kstrtoint(input_buffer, 10, &val);
3110                         if (status < 0)
3111                                 break;
3112                         DRM_DEBUG_DRIVER("Got %d for test active\n", val);
3113                         /* To prevent erroneous activation of the compliance
3114                          * testing code, only accept an actual value of 1 here
3115                          */
3116                         if (val == 1)
3117                                 intel_dp->compliance.test_active = 1;
3118                         else
3119                                 intel_dp->compliance.test_active = 0;
3120                 }
3121         }
3122         drm_connector_list_iter_end(&conn_iter);
3123         kfree(input_buffer);
3124         if (status < 0)
3125                 return status;
3126
3127         *offp += len;
3128         return len;
3129 }
3130
3131 static int i915_displayport_test_active_show(struct seq_file *m, void *data)
3132 {
3133         struct drm_i915_private *dev_priv = m->private;
3134         struct drm_device *dev = &dev_priv->drm;
3135         struct drm_connector *connector;
3136         struct drm_connector_list_iter conn_iter;
3137         struct intel_dp *intel_dp;
3138
3139         drm_connector_list_iter_begin(dev, &conn_iter);
3140         drm_for_each_connector_iter(connector, &conn_iter) {
3141                 struct intel_encoder *encoder;
3142
3143                 if (connector->connector_type !=
3144                     DRM_MODE_CONNECTOR_DisplayPort)
3145                         continue;
3146
3147                 encoder = to_intel_encoder(connector->encoder);
3148                 if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
3149                         continue;
3150
3151                 if (encoder && connector->status == connector_status_connected) {
3152                         intel_dp = enc_to_intel_dp(&encoder->base);
3153                         if (intel_dp->compliance.test_active)
3154                                 seq_puts(m, "1");
3155                         else
3156                                 seq_puts(m, "0");
3157                 } else
3158                         seq_puts(m, "0");
3159         }
3160         drm_connector_list_iter_end(&conn_iter);
3161
3162         return 0;
3163 }
3164
3165 static int i915_displayport_test_active_open(struct inode *inode,
3166                                              struct file *file)
3167 {
3168         return single_open(file, i915_displayport_test_active_show,
3169                            inode->i_private);
3170 }
3171
3172 static const struct file_operations i915_displayport_test_active_fops = {
3173         .owner = THIS_MODULE,
3174         .open = i915_displayport_test_active_open,
3175         .read = seq_read,
3176         .llseek = seq_lseek,
3177         .release = single_release,
3178         .write = i915_displayport_test_active_write
3179 };
3180
3181 static int i915_displayport_test_data_show(struct seq_file *m, void *data)
3182 {
3183         struct drm_i915_private *dev_priv = m->private;
3184         struct drm_device *dev = &dev_priv->drm;
3185         struct drm_connector *connector;
3186         struct drm_connector_list_iter conn_iter;
3187         struct intel_dp *intel_dp;
3188
3189         drm_connector_list_iter_begin(dev, &conn_iter);
3190         drm_for_each_connector_iter(connector, &conn_iter) {
3191                 struct intel_encoder *encoder;
3192
3193                 if (connector->connector_type !=
3194                     DRM_MODE_CONNECTOR_DisplayPort)
3195                         continue;
3196
3197                 encoder = to_intel_encoder(connector->encoder);
3198                 if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
3199                         continue;
3200
3201                 if (encoder && connector->status == connector_status_connected) {
3202                         intel_dp = enc_to_intel_dp(&encoder->base);
3203                         if (intel_dp->compliance.test_type ==
3204                             DP_TEST_LINK_EDID_READ)
3205                                 seq_printf(m, "%lx",
3206                                            intel_dp->compliance.test_data.edid);
3207                         else if (intel_dp->compliance.test_type ==
3208                                  DP_TEST_LINK_VIDEO_PATTERN) {
3209                                 seq_printf(m, "hdisplay: %d\n",
3210                                            intel_dp->compliance.test_data.hdisplay);
3211                                 seq_printf(m, "vdisplay: %d\n",
3212                                            intel_dp->compliance.test_data.vdisplay);
3213                                 seq_printf(m, "bpc: %u\n",
3214                                            intel_dp->compliance.test_data.bpc);
3215                         }
3216                 } else
3217                         seq_puts(m, "0");
3218         }
3219         drm_connector_list_iter_end(&conn_iter);
3220
3221         return 0;
3222 }
3223 DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_data);
3224
3225 static int i915_displayport_test_type_show(struct seq_file *m, void *data)
3226 {
3227         struct drm_i915_private *dev_priv = m->private;
3228         struct drm_device *dev = &dev_priv->drm;
3229         struct drm_connector *connector;
3230         struct drm_connector_list_iter conn_iter;
3231         struct intel_dp *intel_dp;
3232
3233         drm_connector_list_iter_begin(dev, &conn_iter);
3234         drm_for_each_connector_iter(connector, &conn_iter) {
3235                 struct intel_encoder *encoder;
3236
3237                 if (connector->connector_type !=
3238                     DRM_MODE_CONNECTOR_DisplayPort)
3239                         continue;
3240
3241                 encoder = to_intel_encoder(connector->encoder);
3242                 if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
3243                         continue;
3244
3245                 if (encoder && connector->status == connector_status_connected) {
3246                         intel_dp = enc_to_intel_dp(&encoder->base);
3247                         seq_printf(m, "%02lx", intel_dp->compliance.test_type);
3248                 } else
3249                         seq_puts(m, "0");
3250         }
3251         drm_connector_list_iter_end(&conn_iter);
3252
3253         return 0;
3254 }
3255 DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_type);
3256
3257 static void wm_latency_show(struct seq_file *m, const u16 wm[8])
3258 {
3259         struct drm_i915_private *dev_priv = m->private;
3260         struct drm_device *dev = &dev_priv->drm;
3261         int level;
3262         int num_levels;
3263
3264         if (IS_CHERRYVIEW(dev_priv))
3265                 num_levels = 3;
3266         else if (IS_VALLEYVIEW(dev_priv))
3267                 num_levels = 1;
3268         else if (IS_G4X(dev_priv))
3269                 num_levels = 3;
3270         else
3271                 num_levels = ilk_wm_max_level(dev_priv) + 1;
3272
3273         drm_modeset_lock_all(dev);
3274
3275         for (level = 0; level < num_levels; level++) {
3276                 unsigned int latency = wm[level];
3277
3278                 /*
3279                  * - WM1+ latency values in 0.5us units
3280                  * - latencies are in us on gen9/vlv/chv
3281                  */
3282                 if (INTEL_GEN(dev_priv) >= 9 ||
3283                     IS_VALLEYVIEW(dev_priv) ||
3284                     IS_CHERRYVIEW(dev_priv) ||
3285                     IS_G4X(dev_priv))
3286                         latency *= 10;
3287                 else if (level > 0)
3288                         latency *= 5;
3289
3290                 seq_printf(m, "WM%d %u (%u.%u usec)\n",
3291                            level, wm[level], latency / 10, latency % 10);
3292         }
3293
3294         drm_modeset_unlock_all(dev);
3295 }
3296
3297 static int pri_wm_latency_show(struct seq_file *m, void *data)
3298 {
3299         struct drm_i915_private *dev_priv = m->private;
3300         const u16 *latencies;
3301
3302         if (INTEL_GEN(dev_priv) >= 9)
3303                 latencies = dev_priv->wm.skl_latency;
3304         else
3305                 latencies = dev_priv->wm.pri_latency;
3306
3307         wm_latency_show(m, latencies);
3308
3309         return 0;
3310 }
3311
3312 static int spr_wm_latency_show(struct seq_file *m, void *data)
3313 {
3314         struct drm_i915_private *dev_priv = m->private;
3315         const u16 *latencies;
3316
3317         if (INTEL_GEN(dev_priv) >= 9)
3318                 latencies = dev_priv->wm.skl_latency;
3319         else
3320                 latencies = dev_priv->wm.spr_latency;
3321
3322         wm_latency_show(m, latencies);
3323
3324         return 0;
3325 }
3326
3327 static int cur_wm_latency_show(struct seq_file *m, void *data)
3328 {
3329         struct drm_i915_private *dev_priv = m->private;
3330         const u16 *latencies;
3331
3332         if (INTEL_GEN(dev_priv) >= 9)
3333                 latencies = dev_priv->wm.skl_latency;
3334         else
3335                 latencies = dev_priv->wm.cur_latency;
3336
3337         wm_latency_show(m, latencies);
3338
3339         return 0;
3340 }
3341
3342 static int pri_wm_latency_open(struct inode *inode, struct file *file)
3343 {
3344         struct drm_i915_private *dev_priv = inode->i_private;
3345
3346         if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv))
3347                 return -ENODEV;
3348
3349         return single_open(file, pri_wm_latency_show, dev_priv);
3350 }
3351
3352 static int spr_wm_latency_open(struct inode *inode, struct file *file)
3353 {
3354         struct drm_i915_private *dev_priv = inode->i_private;
3355
3356         if (HAS_GMCH(dev_priv))
3357                 return -ENODEV;
3358
3359         return single_open(file, spr_wm_latency_show, dev_priv);
3360 }
3361
3362 static int cur_wm_latency_open(struct inode *inode, struct file *file)
3363 {
3364         struct drm_i915_private *dev_priv = inode->i_private;
3365
3366         if (HAS_GMCH(dev_priv))
3367                 return -ENODEV;
3368
3369         return single_open(file, cur_wm_latency_show, dev_priv);
3370 }
3371
3372 static ssize_t wm_latency_write(struct file *file, const char __user *ubuf,
3373                                 size_t len, loff_t *offp, u16 wm[8])
3374 {
3375         struct seq_file *m = file->private_data;
3376         struct drm_i915_private *dev_priv = m->private;
3377         struct drm_device *dev = &dev_priv->drm;
3378         u16 new[8] = { 0 };
3379         int num_levels;
3380         int level;
3381         int ret;
3382         char tmp[32];
3383
3384         if (IS_CHERRYVIEW(dev_priv))
3385                 num_levels = 3;
3386         else if (IS_VALLEYVIEW(dev_priv))
3387                 num_levels = 1;
3388         else if (IS_G4X(dev_priv))
3389                 num_levels = 3;
3390         else
3391                 num_levels = ilk_wm_max_level(dev_priv) + 1;
3392
3393         if (len >= sizeof(tmp))
3394                 return -EINVAL;
3395
3396         if (copy_from_user(tmp, ubuf, len))
3397                 return -EFAULT;
3398
3399         tmp[len] = '\0';
3400
3401         ret = sscanf(tmp, "%hu %hu %hu %hu %hu %hu %hu %hu",
3402                      &new[0], &new[1], &new[2], &new[3],
3403                      &new[4], &new[5], &new[6], &new[7]);
3404         if (ret != num_levels)
3405                 return -EINVAL;
3406
3407         drm_modeset_lock_all(dev);
3408
3409         for (level = 0; level < num_levels; level++)
3410                 wm[level] = new[level];
3411
3412         drm_modeset_unlock_all(dev);
3413
3414         return len;
3415 }
3416
3417
3418 static ssize_t pri_wm_latency_write(struct file *file, const char __user *ubuf,
3419                                     size_t len, loff_t *offp)
3420 {
3421         struct seq_file *m = file->private_data;
3422         struct drm_i915_private *dev_priv = m->private;
3423         u16 *latencies;
3424
3425         if (INTEL_GEN(dev_priv) >= 9)
3426                 latencies = dev_priv->wm.skl_latency;
3427         else
3428                 latencies = dev_priv->wm.pri_latency;
3429
3430         return wm_latency_write(file, ubuf, len, offp, latencies);
3431 }
3432
3433 static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf,
3434                                     size_t len, loff_t *offp)
3435 {
3436         struct seq_file *m = file->private_data;
3437         struct drm_i915_private *dev_priv = m->private;
3438         u16 *latencies;
3439
3440         if (INTEL_GEN(dev_priv) >= 9)
3441                 latencies = dev_priv->wm.skl_latency;
3442         else
3443                 latencies = dev_priv->wm.spr_latency;
3444
3445         return wm_latency_write(file, ubuf, len, offp, latencies);
3446 }
3447
3448 static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf,
3449                                     size_t len, loff_t *offp)
3450 {
3451         struct seq_file *m = file->private_data;
3452         struct drm_i915_private *dev_priv = m->private;
3453         u16 *latencies;
3454
3455         if (INTEL_GEN(dev_priv) >= 9)
3456                 latencies = dev_priv->wm.skl_latency;
3457         else
3458                 latencies = dev_priv->wm.cur_latency;
3459
3460         return wm_latency_write(file, ubuf, len, offp, latencies);
3461 }
3462
3463 static const struct file_operations i915_pri_wm_latency_fops = {
3464         .owner = THIS_MODULE,
3465         .open = pri_wm_latency_open,
3466         .read = seq_read,
3467         .llseek = seq_lseek,
3468         .release = single_release,
3469         .write = pri_wm_latency_write
3470 };
3471
3472 static const struct file_operations i915_spr_wm_latency_fops = {
3473         .owner = THIS_MODULE,
3474         .open = spr_wm_latency_open,
3475         .read = seq_read,
3476         .llseek = seq_lseek,
3477         .release = single_release,
3478         .write = spr_wm_latency_write
3479 };
3480
3481 static const struct file_operations i915_cur_wm_latency_fops = {
3482         .owner = THIS_MODULE,
3483         .open = cur_wm_latency_open,
3484         .read = seq_read,
3485         .llseek = seq_lseek,
3486         .release = single_release,
3487         .write = cur_wm_latency_write
3488 };
3489
3490 static int
3491 i915_wedged_get(void *data, u64 *val)
3492 {
3493         struct drm_i915_private *i915 = data;
3494         int ret = intel_gt_terminally_wedged(&i915->gt);
3495
3496         switch (ret) {
3497         case -EIO:
3498                 *val = 1;
3499                 return 0;
3500         case 0:
3501                 *val = 0;
3502                 return 0;
3503         default:
3504                 return ret;
3505         }
3506 }
3507
3508 static int
3509 i915_wedged_set(void *data, u64 val)
3510 {
3511         struct drm_i915_private *i915 = data;
3512
3513         /* Flush any previous reset before applying for a new one */
3514         wait_event(i915->gt.reset.queue,
3515                    !test_bit(I915_RESET_BACKOFF, &i915->gt.reset.flags));
3516
3517         intel_gt_handle_error(&i915->gt, val, I915_ERROR_CAPTURE,
3518                               "Manually set wedged engine mask = %llx", val);
3519         return 0;
3520 }
3521
3522 DEFINE_SIMPLE_ATTRIBUTE(i915_wedged_fops,
3523                         i915_wedged_get, i915_wedged_set,
3524                         "%llu\n");
3525
3526 static int
3527 i915_perf_noa_delay_set(void *data, u64 val)
3528 {
3529         struct drm_i915_private *i915 = data;
3530         const u32 clk = RUNTIME_INFO(i915)->cs_timestamp_frequency_khz;
3531
3532         /*
3533          * This would lead to infinite waits as we're doing timestamp
3534          * difference on the CS with only 32bits.
3535          */
3536         if (val > mul_u32_u32(U32_MAX, clk))
3537                 return -EINVAL;
3538
3539         atomic64_set(&i915->perf.noa_programming_delay, val);
3540         return 0;
3541 }
3542
3543 static int
3544 i915_perf_noa_delay_get(void *data, u64 *val)
3545 {
3546         struct drm_i915_private *i915 = data;
3547
3548         *val = atomic64_read(&i915->perf.noa_programming_delay);
3549         return 0;
3550 }
3551
3552 DEFINE_SIMPLE_ATTRIBUTE(i915_perf_noa_delay_fops,
3553                         i915_perf_noa_delay_get,
3554                         i915_perf_noa_delay_set,
3555                         "%llu\n");
3556
3557 #define DROP_UNBOUND    BIT(0)
3558 #define DROP_BOUND      BIT(1)
3559 #define DROP_RETIRE     BIT(2)
3560 #define DROP_ACTIVE     BIT(3)
3561 #define DROP_FREED      BIT(4)
3562 #define DROP_SHRINK_ALL BIT(5)
3563 #define DROP_IDLE       BIT(6)
3564 #define DROP_RESET_ACTIVE       BIT(7)
3565 #define DROP_RESET_SEQNO        BIT(8)
3566 #define DROP_RCU        BIT(9)
3567 #define DROP_ALL (DROP_UNBOUND  | \
3568                   DROP_BOUND    | \
3569                   DROP_RETIRE   | \
3570                   DROP_ACTIVE   | \
3571                   DROP_FREED    | \
3572                   DROP_SHRINK_ALL |\
3573                   DROP_IDLE     | \
3574                   DROP_RESET_ACTIVE | \
3575                   DROP_RESET_SEQNO | \
3576                   DROP_RCU)
3577 static int
3578 i915_drop_caches_get(void *data, u64 *val)
3579 {
3580         *val = DROP_ALL;
3581
3582         return 0;
3583 }
3584 static int
3585 gt_drop_caches(struct intel_gt *gt, u64 val)
3586 {
3587         int ret;
3588
3589         if (val & DROP_RESET_ACTIVE &&
3590             wait_for(intel_engines_are_idle(gt), I915_IDLE_ENGINES_TIMEOUT))
3591                 intel_gt_set_wedged(gt);
3592
3593         if (val & DROP_RETIRE)
3594                 intel_gt_retire_requests(gt);
3595
3596         if (val & (DROP_IDLE | DROP_ACTIVE)) {
3597                 ret = intel_gt_wait_for_idle(gt, MAX_SCHEDULE_TIMEOUT);
3598                 if (ret)
3599                         return ret;
3600         }
3601
3602         if (val & DROP_IDLE) {
3603                 ret = intel_gt_pm_wait_for_idle(gt);
3604                 if (ret)
3605                         return ret;
3606         }
3607
3608         if (val & DROP_RESET_ACTIVE && intel_gt_terminally_wedged(gt))
3609                 intel_gt_handle_error(gt, ALL_ENGINES, 0, NULL);
3610
3611         return 0;
3612 }
3613
3614 static int
3615 i915_drop_caches_set(void *data, u64 val)
3616 {
3617         struct drm_i915_private *i915 = data;
3618         int ret;
3619
3620         DRM_DEBUG("Dropping caches: 0x%08llx [0x%08llx]\n",
3621                   val, val & DROP_ALL);
3622
3623         ret = gt_drop_caches(&i915->gt, val);
3624         if (ret)
3625                 return ret;
3626
3627         fs_reclaim_acquire(GFP_KERNEL);
3628         if (val & DROP_BOUND)
3629                 i915_gem_shrink(i915, LONG_MAX, NULL, I915_SHRINK_BOUND);
3630
3631         if (val & DROP_UNBOUND)
3632                 i915_gem_shrink(i915, LONG_MAX, NULL, I915_SHRINK_UNBOUND);
3633
3634         if (val & DROP_SHRINK_ALL)
3635                 i915_gem_shrink_all(i915);
3636         fs_reclaim_release(GFP_KERNEL);
3637
3638         if (val & DROP_RCU)
3639                 rcu_barrier();
3640
3641         if (val & DROP_FREED)
3642                 i915_gem_drain_freed_objects(i915);
3643
3644         return 0;
3645 }
3646
3647 DEFINE_SIMPLE_ATTRIBUTE(i915_drop_caches_fops,
3648                         i915_drop_caches_get, i915_drop_caches_set,
3649                         "0x%08llx\n");
3650
3651 static int
3652 i915_cache_sharing_get(void *data, u64 *val)
3653 {
3654         struct drm_i915_private *dev_priv = data;
3655         intel_wakeref_t wakeref;
3656         u32 snpcr = 0;
3657
3658         if (!(IS_GEN_RANGE(dev_priv, 6, 7)))
3659                 return -ENODEV;
3660
3661         with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref)
3662                 snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
3663
3664         *val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
3665
3666         return 0;
3667 }
3668
3669 static int
3670 i915_cache_sharing_set(void *data, u64 val)
3671 {
3672         struct drm_i915_private *dev_priv = data;
3673         intel_wakeref_t wakeref;
3674
3675         if (!(IS_GEN_RANGE(dev_priv, 6, 7)))
3676                 return -ENODEV;
3677
3678         if (val > 3)
3679                 return -EINVAL;
3680
3681         DRM_DEBUG_DRIVER("Manually setting uncore sharing to %llu\n", val);
3682         with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) {
3683                 u32 snpcr;
3684
3685                 /* Update the cache sharing policy here as well */
3686                 snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
3687                 snpcr &= ~GEN6_MBC_SNPCR_MASK;
3688                 snpcr |= val << GEN6_MBC_SNPCR_SHIFT;
3689                 I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
3690         }
3691
3692         return 0;
3693 }
3694
3695 static void
3696 intel_sseu_copy_subslices(const struct sseu_dev_info *sseu, int slice,
3697                           u8 *to_mask)
3698 {
3699         int offset = slice * sseu->ss_stride;
3700
3701         memcpy(&to_mask[offset], &sseu->subslice_mask[offset], sseu->ss_stride);
3702 }
3703
3704 DEFINE_SIMPLE_ATTRIBUTE(i915_cache_sharing_fops,
3705                         i915_cache_sharing_get, i915_cache_sharing_set,
3706                         "%llu\n");
3707
3708 static void cherryview_sseu_device_status(struct drm_i915_private *dev_priv,
3709                                           struct sseu_dev_info *sseu)
3710 {
3711 #define SS_MAX 2
3712         const int ss_max = SS_MAX;
3713         u32 sig1[SS_MAX], sig2[SS_MAX];
3714         int ss;
3715
3716         sig1[0] = I915_READ(CHV_POWER_SS0_SIG1);
3717         sig1[1] = I915_READ(CHV_POWER_SS1_SIG1);
3718         sig2[0] = I915_READ(CHV_POWER_SS0_SIG2);
3719         sig2[1] = I915_READ(CHV_POWER_SS1_SIG2);
3720
3721         for (ss = 0; ss < ss_max; ss++) {
3722                 unsigned int eu_cnt;
3723
3724                 if (sig1[ss] & CHV_SS_PG_ENABLE)
3725                         /* skip disabled subslice */
3726                         continue;
3727
3728                 sseu->slice_mask = BIT(0);
3729                 sseu->subslice_mask[0] |= BIT(ss);
3730                 eu_cnt = ((sig1[ss] & CHV_EU08_PG_ENABLE) ? 0 : 2) +
3731                          ((sig1[ss] & CHV_EU19_PG_ENABLE) ? 0 : 2) +
3732                          ((sig1[ss] & CHV_EU210_PG_ENABLE) ? 0 : 2) +
3733                          ((sig2[ss] & CHV_EU311_PG_ENABLE) ? 0 : 2);
3734                 sseu->eu_total += eu_cnt;
3735                 sseu->eu_per_subslice = max_t(unsigned int,
3736                                               sseu->eu_per_subslice, eu_cnt);
3737         }
3738 #undef SS_MAX
3739 }
3740
3741 static void gen10_sseu_device_status(struct drm_i915_private *dev_priv,
3742                                      struct sseu_dev_info *sseu)
3743 {
3744 #define SS_MAX 6
3745         const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv);
3746         u32 s_reg[SS_MAX], eu_reg[2 * SS_MAX], eu_mask[2];
3747         int s, ss;
3748
3749         for (s = 0; s < info->sseu.max_slices; s++) {
3750                 /*
3751                  * FIXME: Valid SS Mask respects the spec and read
3752                  * only valid bits for those registers, excluding reserved
3753                  * although this seems wrong because it would leave many
3754                  * subslices without ACK.
3755                  */
3756                 s_reg[s] = I915_READ(GEN10_SLICE_PGCTL_ACK(s)) &
3757                         GEN10_PGCTL_VALID_SS_MASK(s);
3758                 eu_reg[2 * s] = I915_READ(GEN10_SS01_EU_PGCTL_ACK(s));
3759                 eu_reg[2 * s + 1] = I915_READ(GEN10_SS23_EU_PGCTL_ACK(s));
3760         }
3761
3762         eu_mask[0] = GEN9_PGCTL_SSA_EU08_ACK |
3763                      GEN9_PGCTL_SSA_EU19_ACK |
3764                      GEN9_PGCTL_SSA_EU210_ACK |
3765                      GEN9_PGCTL_SSA_EU311_ACK;
3766         eu_mask[1] = GEN9_PGCTL_SSB_EU08_ACK |
3767                      GEN9_PGCTL_SSB_EU19_ACK |
3768                      GEN9_PGCTL_SSB_EU210_ACK |
3769                      GEN9_PGCTL_SSB_EU311_ACK;
3770
3771         for (s = 0; s < info->sseu.max_slices; s++) {
3772                 if ((s_reg[s] & GEN9_PGCTL_SLICE_ACK) == 0)
3773                         /* skip disabled slice */
3774                         continue;
3775
3776                 sseu->slice_mask |= BIT(s);
3777                 intel_sseu_copy_subslices(&info->sseu, s, sseu->subslice_mask);
3778
3779                 for (ss = 0; ss < info->sseu.max_subslices; ss++) {
3780                         unsigned int eu_cnt;
3781
3782                         if (info->sseu.has_subslice_pg &&
3783                             !(s_reg[s] & (GEN9_PGCTL_SS_ACK(ss))))
3784                                 /* skip disabled subslice */
3785                                 continue;
3786
3787                         eu_cnt = 2 * hweight32(eu_reg[2 * s + ss / 2] &
3788                                                eu_mask[ss % 2]);
3789                         sseu->eu_total += eu_cnt;
3790                         sseu->eu_per_subslice = max_t(unsigned int,
3791                                                       sseu->eu_per_subslice,
3792                                                       eu_cnt);
3793                 }
3794         }
3795 #undef SS_MAX
3796 }
3797
3798 static void gen9_sseu_device_status(struct drm_i915_private *dev_priv,
3799                                     struct sseu_dev_info *sseu)
3800 {
3801 #define SS_MAX 3
3802         const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv);
3803         u32 s_reg[SS_MAX], eu_reg[2 * SS_MAX], eu_mask[2];
3804         int s, ss;
3805
3806         for (s = 0; s < info->sseu.max_slices; s++) {
3807                 s_reg[s] = I915_READ(GEN9_SLICE_PGCTL_ACK(s));
3808                 eu_reg[2*s] = I915_READ(GEN9_SS01_EU_PGCTL_ACK(s));
3809                 eu_reg[2*s + 1] = I915_READ(GEN9_SS23_EU_PGCTL_ACK(s));
3810         }
3811
3812         eu_mask[0] = GEN9_PGCTL_SSA_EU08_ACK |
3813                      GEN9_PGCTL_SSA_EU19_ACK |
3814                      GEN9_PGCTL_SSA_EU210_ACK |
3815                      GEN9_PGCTL_SSA_EU311_ACK;
3816         eu_mask[1] = GEN9_PGCTL_SSB_EU08_ACK |
3817                      GEN9_PGCTL_SSB_EU19_ACK |
3818                      GEN9_PGCTL_SSB_EU210_ACK |
3819                      GEN9_PGCTL_SSB_EU311_ACK;
3820
3821         for (s = 0; s < info->sseu.max_slices; s++) {
3822                 if ((s_reg[s] & GEN9_PGCTL_SLICE_ACK) == 0)
3823                         /* skip disabled slice */
3824                         continue;
3825
3826                 sseu->slice_mask |= BIT(s);
3827
3828                 if (IS_GEN9_BC(dev_priv))
3829                         intel_sseu_copy_subslices(&info->sseu, s,
3830                                                   sseu->subslice_mask);
3831
3832                 for (ss = 0; ss < info->sseu.max_subslices; ss++) {
3833                         unsigned int eu_cnt;
3834                         u8 ss_idx = s * info->sseu.ss_stride +
3835                                     ss / BITS_PER_BYTE;
3836
3837                         if (IS_GEN9_LP(dev_priv)) {
3838                                 if (!(s_reg[s] & (GEN9_PGCTL_SS_ACK(ss))))
3839                                         /* skip disabled subslice */
3840                                         continue;
3841
3842                                 sseu->subslice_mask[ss_idx] |=
3843                                         BIT(ss % BITS_PER_BYTE);
3844                         }
3845
3846                         eu_cnt = 2 * hweight32(eu_reg[2*s + ss/2] &
3847                                                eu_mask[ss%2]);
3848                         sseu->eu_total += eu_cnt;
3849                         sseu->eu_per_subslice = max_t(unsigned int,
3850                                                       sseu->eu_per_subslice,
3851                                                       eu_cnt);
3852                 }
3853         }
3854 #undef SS_MAX
3855 }
3856
3857 static void broadwell_sseu_device_status(struct drm_i915_private *dev_priv,
3858                                          struct sseu_dev_info *sseu)
3859 {
3860         const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv);
3861         u32 slice_info = I915_READ(GEN8_GT_SLICE_INFO);
3862         int s;
3863
3864         sseu->slice_mask = slice_info & GEN8_LSLICESTAT_MASK;
3865
3866         if (sseu->slice_mask) {
3867                 sseu->eu_per_subslice = info->sseu.eu_per_subslice;
3868                 for (s = 0; s < fls(sseu->slice_mask); s++)
3869                         intel_sseu_copy_subslices(&info->sseu, s,
3870                                                   sseu->subslice_mask);
3871                 sseu->eu_total = sseu->eu_per_subslice *
3872                                  intel_sseu_subslice_total(sseu);
3873
3874                 /* subtract fused off EU(s) from enabled slice(s) */
3875                 for (s = 0; s < fls(sseu->slice_mask); s++) {
3876                         u8 subslice_7eu = info->sseu.subslice_7eu[s];
3877
3878                         sseu->eu_total -= hweight8(subslice_7eu);
3879                 }
3880         }
3881 }
3882
3883 static void i915_print_sseu_info(struct seq_file *m, bool is_available_info,
3884                                  const struct sseu_dev_info *sseu)
3885 {
3886         struct drm_i915_private *dev_priv = node_to_i915(m->private);
3887         const char *type = is_available_info ? "Available" : "Enabled";
3888         int s;
3889
3890         seq_printf(m, "  %s Slice Mask: %04x\n", type,
3891                    sseu->slice_mask);
3892         seq_printf(m, "  %s Slice Total: %u\n", type,
3893                    hweight8(sseu->slice_mask));
3894         seq_printf(m, "  %s Subslice Total: %u\n", type,
3895                    intel_sseu_subslice_total(sseu));
3896         for (s = 0; s < fls(sseu->slice_mask); s++) {
3897                 seq_printf(m, "  %s Slice%i subslices: %u\n", type,
3898                            s, intel_sseu_subslices_per_slice(sseu, s));
3899         }
3900         seq_printf(m, "  %s EU Total: %u\n", type,
3901                    sseu->eu_total);
3902         seq_printf(m, "  %s EU Per Subslice: %u\n", type,
3903                    sseu->eu_per_subslice);
3904
3905         if (!is_available_info)
3906                 return;
3907
3908         seq_printf(m, "  Has Pooled EU: %s\n", yesno(HAS_POOLED_EU(dev_priv)));
3909         if (HAS_POOLED_EU(dev_priv))
3910                 seq_printf(m, "  Min EU in pool: %u\n", sseu->min_eu_in_pool);
3911
3912         seq_printf(m, "  Has Slice Power Gating: %s\n",
3913                    yesno(sseu->has_slice_pg));
3914         seq_printf(m, "  Has Subslice Power Gating: %s\n",
3915                    yesno(sseu->has_subslice_pg));
3916         seq_printf(m, "  Has EU Power Gating: %s\n",
3917                    yesno(sseu->has_eu_pg));
3918 }
3919
3920 static int i915_sseu_status(struct seq_file *m, void *unused)
3921 {
3922         struct drm_i915_private *dev_priv = node_to_i915(m->private);
3923         const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv);
3924         struct sseu_dev_info sseu;
3925         intel_wakeref_t wakeref;
3926
3927         if (INTEL_GEN(dev_priv) < 8)
3928                 return -ENODEV;
3929
3930         seq_puts(m, "SSEU Device Info\n");
3931         i915_print_sseu_info(m, true, &info->sseu);
3932
3933         seq_puts(m, "SSEU Device Status\n");
3934         memset(&sseu, 0, sizeof(sseu));
3935         intel_sseu_set_info(&sseu, info->sseu.max_slices,
3936                             info->sseu.max_subslices,
3937                             info->sseu.max_eus_per_subslice);
3938
3939         with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) {
3940                 if (IS_CHERRYVIEW(dev_priv))
3941                         cherryview_sseu_device_status(dev_priv, &sseu);
3942                 else if (IS_BROADWELL(dev_priv))
3943                         broadwell_sseu_device_status(dev_priv, &sseu);
3944                 else if (IS_GEN(dev_priv, 9))
3945                         gen9_sseu_device_status(dev_priv, &sseu);
3946                 else if (INTEL_GEN(dev_priv) >= 10)
3947                         gen10_sseu_device_status(dev_priv, &sseu);
3948         }
3949
3950         i915_print_sseu_info(m, false, &sseu);
3951
3952         return 0;
3953 }
3954
3955 static int i915_forcewake_open(struct inode *inode, struct file *file)
3956 {
3957         struct drm_i915_private *i915 = inode->i_private;
3958         struct intel_gt *gt = &i915->gt;
3959
3960         atomic_inc(&gt->user_wakeref);
3961         intel_gt_pm_get(gt);
3962         if (INTEL_GEN(i915) >= 6)
3963                 intel_uncore_forcewake_user_get(gt->uncore);
3964
3965         return 0;
3966 }
3967
3968 static int i915_forcewake_release(struct inode *inode, struct file *file)
3969 {
3970         struct drm_i915_private *i915 = inode->i_private;
3971         struct intel_gt *gt = &i915->gt;
3972
3973         if (INTEL_GEN(i915) >= 6)
3974                 intel_uncore_forcewake_user_put(&i915->uncore);
3975         intel_gt_pm_put(gt);
3976         atomic_dec(&gt->user_wakeref);
3977
3978         return 0;
3979 }
3980
3981 static const struct file_operations i915_forcewake_fops = {
3982         .owner = THIS_MODULE,
3983         .open = i915_forcewake_open,
3984         .release = i915_forcewake_release,
3985 };
3986
3987 static int i915_hpd_storm_ctl_show(struct seq_file *m, void *data)
3988 {
3989         struct drm_i915_private *dev_priv = m->private;
3990         struct i915_hotplug *hotplug = &dev_priv->hotplug;
3991
3992         /* Synchronize with everything first in case there's been an HPD
3993          * storm, but we haven't finished handling it in the kernel yet
3994          */
3995         intel_synchronize_irq(dev_priv);
3996         flush_work(&dev_priv->hotplug.dig_port_work);
3997         flush_delayed_work(&dev_priv->hotplug.hotplug_work);
3998
3999         seq_printf(m, "Threshold: %d\n", hotplug->hpd_storm_threshold);
4000         seq_printf(m, "Detected: %s\n",
4001                    yesno(delayed_work_pending(&hotplug->reenable_work)));
4002
4003         return 0;
4004 }
4005
4006 static ssize_t i915_hpd_storm_ctl_write(struct file *file,
4007                                         const char __user *ubuf, size_t len,
4008                                         loff_t *offp)
4009 {
4010         struct seq_file *m = file->private_data;
4011         struct drm_i915_private *dev_priv = m->private;
4012         struct i915_hotplug *hotplug = &dev_priv->hotplug;
4013         unsigned int new_threshold;
4014         int i;
4015         char *newline;
4016         char tmp[16];
4017
4018         if (len >= sizeof(tmp))
4019                 return -EINVAL;
4020
4021         if (copy_from_user(tmp, ubuf, len))
4022                 return -EFAULT;
4023
4024         tmp[len] = '\0';
4025
4026         /* Strip newline, if any */
4027         newline = strchr(tmp, '\n');
4028         if (newline)
4029                 *newline = '\0';
4030
4031         if (strcmp(tmp, "reset") == 0)
4032                 new_threshold = HPD_STORM_DEFAULT_THRESHOLD;
4033         else if (kstrtouint(tmp, 10, &new_threshold) != 0)
4034                 return -EINVAL;
4035
4036         if (new_threshold > 0)
4037                 DRM_DEBUG_KMS("Setting HPD storm detection threshold to %d\n",
4038                               new_threshold);
4039         else
4040                 DRM_DEBUG_KMS("Disabling HPD storm detection\n");
4041
4042         spin_lock_irq(&dev_priv->irq_lock);
4043         hotplug->hpd_storm_threshold = new_threshold;
4044         /* Reset the HPD storm stats so we don't accidentally trigger a storm */
4045         for_each_hpd_pin(i)
4046                 hotplug->stats[i].count = 0;
4047         spin_unlock_irq(&dev_priv->irq_lock);
4048
4049         /* Re-enable hpd immediately if we were in an irq storm */
4050         flush_delayed_work(&dev_priv->hotplug.reenable_work);
4051
4052         return len;
4053 }
4054
4055 static int i915_hpd_storm_ctl_open(struct inode *inode, struct file *file)
4056 {
4057         return single_open(file, i915_hpd_storm_ctl_show, inode->i_private);
4058 }
4059
4060 static const struct file_operations i915_hpd_storm_ctl_fops = {
4061         .owner = THIS_MODULE,
4062         .open = i915_hpd_storm_ctl_open,
4063         .read = seq_read,
4064         .llseek = seq_lseek,
4065         .release = single_release,
4066         .write = i915_hpd_storm_ctl_write
4067 };
4068
4069 static int i915_hpd_short_storm_ctl_show(struct seq_file *m, void *data)
4070 {
4071         struct drm_i915_private *dev_priv = m->private;
4072
4073         seq_printf(m, "Enabled: %s\n",
4074                    yesno(dev_priv->hotplug.hpd_short_storm_enabled));
4075
4076         return 0;
4077 }
4078
4079 static int
4080 i915_hpd_short_storm_ctl_open(struct inode *inode, struct file *file)
4081 {
4082         return single_open(file, i915_hpd_short_storm_ctl_show,
4083                            inode->i_private);
4084 }
4085
4086 static ssize_t i915_hpd_short_storm_ctl_write(struct file *file,
4087                                               const char __user *ubuf,
4088                                               size_t len, loff_t *offp)
4089 {
4090         struct seq_file *m = file->private_data;
4091         struct drm_i915_private *dev_priv = m->private;
4092         struct i915_hotplug *hotplug = &dev_priv->hotplug;
4093         char *newline;
4094         char tmp[16];
4095         int i;
4096         bool new_state;
4097
4098         if (len >= sizeof(tmp))
4099                 return -EINVAL;
4100
4101         if (copy_from_user(tmp, ubuf, len))
4102                 return -EFAULT;
4103
4104         tmp[len] = '\0';
4105
4106         /* Strip newline, if any */
4107         newline = strchr(tmp, '\n');
4108         if (newline)
4109                 *newline = '\0';
4110
4111         /* Reset to the "default" state for this system */
4112         if (strcmp(tmp, "reset") == 0)
4113                 new_state = !HAS_DP_MST(dev_priv);
4114         else if (kstrtobool(tmp, &new_state) != 0)
4115                 return -EINVAL;
4116
4117         DRM_DEBUG_KMS("%sabling HPD short storm detection\n",
4118                       new_state ? "En" : "Dis");
4119
4120         spin_lock_irq(&dev_priv->irq_lock);
4121         hotplug->hpd_short_storm_enabled = new_state;
4122         /* Reset the HPD storm stats so we don't accidentally trigger a storm */
4123         for_each_hpd_pin(i)
4124                 hotplug->stats[i].count = 0;
4125         spin_unlock_irq(&dev_priv->irq_lock);
4126
4127         /* Re-enable hpd immediately if we were in an irq storm */
4128         flush_delayed_work(&dev_priv->hotplug.reenable_work);
4129
4130         return len;
4131 }
4132
4133 static const struct file_operations i915_hpd_short_storm_ctl_fops = {
4134         .owner = THIS_MODULE,
4135         .open = i915_hpd_short_storm_ctl_open,
4136         .read = seq_read,
4137         .llseek = seq_lseek,
4138         .release = single_release,
4139         .write = i915_hpd_short_storm_ctl_write,
4140 };
4141
4142 static int i915_drrs_ctl_set(void *data, u64 val)
4143 {
4144         struct drm_i915_private *dev_priv = data;
4145         struct drm_device *dev = &dev_priv->drm;
4146         struct intel_crtc *crtc;
4147
4148         if (INTEL_GEN(dev_priv) < 7)
4149                 return -ENODEV;
4150
4151         for_each_intel_crtc(dev, crtc) {
4152                 struct drm_connector_list_iter conn_iter;
4153                 struct intel_crtc_state *crtc_state;
4154                 struct drm_connector *connector;
4155                 struct drm_crtc_commit *commit;
4156                 int ret;
4157
4158                 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
4159                 if (ret)
4160                         return ret;
4161
4162                 crtc_state = to_intel_crtc_state(crtc->base.state);
4163
4164                 if (!crtc_state->base.active ||
4165                     !crtc_state->has_drrs)
4166                         goto out;
4167
4168                 commit = crtc_state->base.commit;
4169                 if (commit) {
4170                         ret = wait_for_completion_interruptible(&commit->hw_done);
4171                         if (ret)
4172                                 goto out;
4173                 }
4174
4175                 drm_connector_list_iter_begin(dev, &conn_iter);
4176                 drm_for_each_connector_iter(connector, &conn_iter) {
4177                         struct intel_encoder *encoder;
4178                         struct intel_dp *intel_dp;
4179
4180                         if (!(crtc_state->base.connector_mask &
4181                               drm_connector_mask(connector)))
4182                                 continue;
4183
4184                         encoder = intel_attached_encoder(connector);
4185                         if (encoder->type != INTEL_OUTPUT_EDP)
4186                                 continue;
4187
4188                         DRM_DEBUG_DRIVER("Manually %sabling DRRS. %llu\n",
4189                                                 val ? "en" : "dis", val);
4190
4191                         intel_dp = enc_to_intel_dp(&encoder->base);
4192                         if (val)
4193                                 intel_edp_drrs_enable(intel_dp,
4194                                                       crtc_state);
4195                         else
4196                                 intel_edp_drrs_disable(intel_dp,
4197                                                        crtc_state);
4198                 }
4199                 drm_connector_list_iter_end(&conn_iter);
4200
4201 out:
4202                 drm_modeset_unlock(&crtc->base.mutex);
4203                 if (ret)
4204                         return ret;
4205         }
4206
4207         return 0;
4208 }
4209
4210 DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, "%llu\n");
4211
4212 static ssize_t
4213 i915_fifo_underrun_reset_write(struct file *filp,
4214                                const char __user *ubuf,
4215                                size_t cnt, loff_t *ppos)
4216 {
4217         struct drm_i915_private *dev_priv = filp->private_data;
4218         struct intel_crtc *intel_crtc;
4219         struct drm_device *dev = &dev_priv->drm;
4220         int ret;
4221         bool reset;
4222
4223         ret = kstrtobool_from_user(ubuf, cnt, &reset);
4224         if (ret)
4225                 return ret;
4226
4227         if (!reset)
4228                 return cnt;
4229
4230         for_each_intel_crtc(dev, intel_crtc) {
4231                 struct drm_crtc_commit *commit;
4232                 struct intel_crtc_state *crtc_state;
4233
4234                 ret = drm_modeset_lock_single_interruptible(&intel_crtc->base.mutex);
4235                 if (ret)
4236                         return ret;
4237
4238                 crtc_state = to_intel_crtc_state(intel_crtc->base.state);
4239                 commit = crtc_state->base.commit;
4240                 if (commit) {
4241                         ret = wait_for_completion_interruptible(&commit->hw_done);
4242                         if (!ret)
4243                                 ret = wait_for_completion_interruptible(&commit->flip_done);
4244                 }
4245
4246                 if (!ret && crtc_state->base.active) {
4247                         DRM_DEBUG_KMS("Re-arming FIFO underruns on pipe %c\n",
4248                                       pipe_name(intel_crtc->pipe));
4249
4250                         intel_crtc_arm_fifo_underrun(intel_crtc, crtc_state);
4251                 }
4252
4253                 drm_modeset_unlock(&intel_crtc->base.mutex);
4254
4255                 if (ret)
4256                         return ret;
4257         }
4258
4259         ret = intel_fbc_reset_underrun(dev_priv);
4260         if (ret)
4261                 return ret;
4262
4263         return cnt;
4264 }
4265
4266 static const struct file_operations i915_fifo_underrun_reset_ops = {
4267         .owner = THIS_MODULE,
4268         .open = simple_open,
4269         .write = i915_fifo_underrun_reset_write,
4270         .llseek = default_llseek,
4271 };
4272
4273 static const struct drm_info_list i915_debugfs_list[] = {
4274         {"i915_capabilities", i915_capabilities, 0},
4275         {"i915_gem_objects", i915_gem_object_info, 0},
4276         {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
4277         {"i915_gem_interrupt", i915_interrupt_info, 0},
4278         {"i915_guc_info", i915_guc_info, 0},
4279         {"i915_guc_load_status", i915_guc_load_status_info, 0},
4280         {"i915_guc_log_dump", i915_guc_log_dump, 0},
4281         {"i915_guc_load_err_log_dump", i915_guc_log_dump, 0, (void *)1},
4282         {"i915_guc_stage_pool", i915_guc_stage_pool, 0},
4283         {"i915_huc_load_status", i915_huc_load_status_info, 0},
4284         {"i915_frequency_info", i915_frequency_info, 0},
4285         {"i915_drpc_info", i915_drpc_info, 0},
4286         {"i915_ring_freq_table", i915_ring_freq_table, 0},
4287         {"i915_frontbuffer_tracking", i915_frontbuffer_tracking, 0},
4288         {"i915_fbc_status", i915_fbc_status, 0},
4289         {"i915_ips_status", i915_ips_status, 0},
4290         {"i915_sr_status", i915_sr_status, 0},
4291         {"i915_opregion", i915_opregion, 0},
4292         {"i915_vbt", i915_vbt, 0},
4293         {"i915_gem_framebuffer", i915_gem_framebuffer_info, 0},
4294         {"i915_context_status", i915_context_status, 0},
4295         {"i915_forcewake_domains", i915_forcewake_domains, 0},
4296         {"i915_swizzle_info", i915_swizzle_info, 0},
4297         {"i915_llc", i915_llc, 0},
4298         {"i915_edp_psr_status", i915_edp_psr_status, 0},
4299         {"i915_energy_uJ", i915_energy_uJ, 0},
4300         {"i915_runtime_pm_status", i915_runtime_pm_status, 0},
4301         {"i915_power_domain_info", i915_power_domain_info, 0},
4302         {"i915_dmc_info", i915_dmc_info, 0},
4303         {"i915_display_info", i915_display_info, 0},
4304         {"i915_engine_info", i915_engine_info, 0},
4305         {"i915_rcs_topology", i915_rcs_topology, 0},
4306         {"i915_shrinker_info", i915_shrinker_info, 0},
4307         {"i915_shared_dplls_info", i915_shared_dplls_info, 0},
4308         {"i915_dp_mst_info", i915_dp_mst_info, 0},
4309         {"i915_wa_registers", i915_wa_registers, 0},
4310         {"i915_ddb_info", i915_ddb_info, 0},
4311         {"i915_sseu_status", i915_sseu_status, 0},
4312         {"i915_drrs_status", i915_drrs_status, 0},
4313         {"i915_rps_boost_info", i915_rps_boost_info, 0},
4314 };
4315 #define I915_DEBUGFS_ENTRIES ARRAY_SIZE(i915_debugfs_list)
4316
4317 static const struct i915_debugfs_files {
4318         const char *name;
4319         const struct file_operations *fops;
4320 } i915_debugfs_files[] = {
4321         {"i915_perf_noa_delay", &i915_perf_noa_delay_fops},
4322         {"i915_wedged", &i915_wedged_fops},
4323         {"i915_cache_sharing", &i915_cache_sharing_fops},
4324         {"i915_gem_drop_caches", &i915_drop_caches_fops},
4325 #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
4326         {"i915_error_state", &i915_error_state_fops},
4327         {"i915_gpu_info", &i915_gpu_info_fops},
4328 #endif
4329         {"i915_fifo_underrun_reset", &i915_fifo_underrun_reset_ops},
4330         {"i915_pri_wm_latency", &i915_pri_wm_latency_fops},
4331         {"i915_spr_wm_latency", &i915_spr_wm_latency_fops},
4332         {"i915_cur_wm_latency", &i915_cur_wm_latency_fops},
4333         {"i915_fbc_false_color", &i915_fbc_false_color_fops},
4334         {"i915_dp_test_data", &i915_displayport_test_data_fops},
4335         {"i915_dp_test_type", &i915_displayport_test_type_fops},
4336         {"i915_dp_test_active", &i915_displayport_test_active_fops},
4337         {"i915_guc_log_level", &i915_guc_log_level_fops},
4338         {"i915_guc_log_relay", &i915_guc_log_relay_fops},
4339         {"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops},
4340         {"i915_hpd_short_storm_ctl", &i915_hpd_short_storm_ctl_fops},
4341         {"i915_ipc_status", &i915_ipc_status_fops},
4342         {"i915_drrs_ctl", &i915_drrs_ctl_fops},
4343         {"i915_edp_psr_debug", &i915_edp_psr_debug_fops}
4344 };
4345
4346 int i915_debugfs_register(struct drm_i915_private *dev_priv)
4347 {
4348         struct drm_minor *minor = dev_priv->drm.primary;
4349         int i;
4350
4351         debugfs_create_file("i915_forcewake_user", S_IRUSR, minor->debugfs_root,
4352                             to_i915(minor->dev), &i915_forcewake_fops);
4353
4354         for (i = 0; i < ARRAY_SIZE(i915_debugfs_files); i++) {
4355                 debugfs_create_file(i915_debugfs_files[i].name,
4356                                     S_IRUGO | S_IWUSR,
4357                                     minor->debugfs_root,
4358                                     to_i915(minor->dev),
4359                                     i915_debugfs_files[i].fops);
4360         }
4361
4362         return drm_debugfs_create_files(i915_debugfs_list,
4363                                         I915_DEBUGFS_ENTRIES,
4364                                         minor->debugfs_root, minor);
4365 }
4366
4367 struct dpcd_block {
4368         /* DPCD dump start address. */
4369         unsigned int offset;
4370         /* DPCD dump end address, inclusive. If unset, .size will be used. */
4371         unsigned int end;
4372         /* DPCD dump size. Used if .end is unset. If unset, defaults to 1. */
4373         size_t size;
4374         /* Only valid for eDP. */
4375         bool edp;
4376 };
4377
4378 static const struct dpcd_block i915_dpcd_debug[] = {
4379         { .offset = DP_DPCD_REV, .size = DP_RECEIVER_CAP_SIZE },
4380         { .offset = DP_PSR_SUPPORT, .end = DP_PSR_CAPS },
4381         { .offset = DP_DOWNSTREAM_PORT_0, .size = 16 },
4382         { .offset = DP_LINK_BW_SET, .end = DP_EDP_CONFIGURATION_SET },
4383         { .offset = DP_SINK_COUNT, .end = DP_ADJUST_REQUEST_LANE2_3 },
4384         { .offset = DP_SET_POWER },
4385         { .offset = DP_EDP_DPCD_REV },
4386         { .offset = DP_EDP_GENERAL_CAP_1, .end = DP_EDP_GENERAL_CAP_3 },
4387         { .offset = DP_EDP_DISPLAY_CONTROL_REGISTER, .end = DP_EDP_BACKLIGHT_FREQ_CAP_MAX_LSB },
4388         { .offset = DP_EDP_DBC_MINIMUM_BRIGHTNESS_SET, .end = DP_EDP_DBC_MAXIMUM_BRIGHTNESS_SET },
4389 };
4390
4391 static int i915_dpcd_show(struct seq_file *m, void *data)
4392 {
4393         struct drm_connector *connector = m->private;
4394         struct intel_dp *intel_dp =
4395                 enc_to_intel_dp(&intel_attached_encoder(connector)->base);
4396         u8 buf[16];
4397         ssize_t err;
4398         int i;
4399
4400         if (connector->status != connector_status_connected)
4401                 return -ENODEV;
4402
4403         for (i = 0; i < ARRAY_SIZE(i915_dpcd_debug); i++) {
4404                 const struct dpcd_block *b = &i915_dpcd_debug[i];
4405                 size_t size = b->end ? b->end - b->offset + 1 : (b->size ?: 1);
4406
4407                 if (b->edp &&
4408                     connector->connector_type != DRM_MODE_CONNECTOR_eDP)
4409                         continue;
4410
4411                 /* low tech for now */
4412                 if (WARN_ON(size > sizeof(buf)))
4413                         continue;
4414
4415                 err = drm_dp_dpcd_read(&intel_dp->aux, b->offset, buf, size);
4416                 if (err < 0)
4417                         seq_printf(m, "%04x: ERROR %d\n", b->offset, (int)err);
4418                 else
4419                         seq_printf(m, "%04x: %*ph\n", b->offset, (int)err, buf);
4420         }
4421
4422         return 0;
4423 }
4424 DEFINE_SHOW_ATTRIBUTE(i915_dpcd);
4425
4426 static int i915_panel_show(struct seq_file *m, void *data)
4427 {
4428         struct drm_connector *connector = m->private;
4429         struct intel_dp *intel_dp =
4430                 enc_to_intel_dp(&intel_attached_encoder(connector)->base);
4431
4432         if (connector->status != connector_status_connected)
4433                 return -ENODEV;
4434
4435         seq_printf(m, "Panel power up delay: %d\n",
4436                    intel_dp->panel_power_up_delay);
4437         seq_printf(m, "Panel power down delay: %d\n",
4438                    intel_dp->panel_power_down_delay);
4439         seq_printf(m, "Backlight on delay: %d\n",
4440                    intel_dp->backlight_on_delay);
4441         seq_printf(m, "Backlight off delay: %d\n",
4442                    intel_dp->backlight_off_delay);
4443
4444         return 0;
4445 }
4446 DEFINE_SHOW_ATTRIBUTE(i915_panel);
4447
4448 static int i915_hdcp_sink_capability_show(struct seq_file *m, void *data)
4449 {
4450         struct drm_connector *connector = m->private;
4451         struct intel_connector *intel_connector = to_intel_connector(connector);
4452
4453         if (connector->status != connector_status_connected)
4454                 return -ENODEV;
4455
4456         /* HDCP is supported by connector */
4457         if (!intel_connector->hdcp.shim)
4458                 return -EINVAL;
4459
4460         seq_printf(m, "%s:%d HDCP version: ", connector->name,
4461                    connector->base.id);
4462         intel_hdcp_info(m, intel_connector);
4463
4464         return 0;
4465 }
4466 DEFINE_SHOW_ATTRIBUTE(i915_hdcp_sink_capability);
4467
4468 static int i915_dsc_fec_support_show(struct seq_file *m, void *data)
4469 {
4470         struct drm_connector *connector = m->private;
4471         struct drm_device *dev = connector->dev;
4472         struct drm_crtc *crtc;
4473         struct intel_dp *intel_dp;
4474         struct drm_modeset_acquire_ctx ctx;
4475         struct intel_crtc_state *crtc_state = NULL;
4476         int ret = 0;
4477         bool try_again = false;
4478
4479         drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
4480
4481         do {
4482                 try_again = false;
4483                 ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
4484                                        &ctx);
4485                 if (ret) {
4486                         if (ret == -EDEADLK && !drm_modeset_backoff(&ctx)) {
4487                                 try_again = true;
4488                                 continue;
4489                         }
4490                         break;
4491                 }
4492                 crtc = connector->state->crtc;
4493                 if (connector->status != connector_status_connected || !crtc) {
4494                         ret = -ENODEV;
4495                         break;
4496                 }
4497                 ret = drm_modeset_lock(&crtc->mutex, &ctx);
4498                 if (ret == -EDEADLK) {
4499                         ret = drm_modeset_backoff(&ctx);
4500                         if (!ret) {
4501                                 try_again = true;
4502                                 continue;
4503                         }
4504                         break;
4505                 } else if (ret) {
4506                         break;
4507                 }
4508                 intel_dp = enc_to_intel_dp(&intel_attached_encoder(connector)->base);
4509                 crtc_state = to_intel_crtc_state(crtc->state);
4510                 seq_printf(m, "DSC_Enabled: %s\n",
4511                            yesno(crtc_state->dsc.compression_enable));
4512                 seq_printf(m, "DSC_Sink_Support: %s\n",
4513                            yesno(drm_dp_sink_supports_dsc(intel_dp->dsc_dpcd)));
4514                 seq_printf(m, "Force_DSC_Enable: %s\n",
4515                            yesno(intel_dp->force_dsc_en));
4516                 if (!intel_dp_is_edp(intel_dp))
4517                         seq_printf(m, "FEC_Sink_Support: %s\n",
4518                                    yesno(drm_dp_sink_supports_fec(intel_dp->fec_capable)));
4519         } while (try_again);
4520
4521         drm_modeset_drop_locks(&ctx);
4522         drm_modeset_acquire_fini(&ctx);
4523
4524         return ret;
4525 }
4526
4527 static ssize_t i915_dsc_fec_support_write(struct file *file,
4528                                           const char __user *ubuf,
4529                                           size_t len, loff_t *offp)
4530 {
4531         bool dsc_enable = false;
4532         int ret;
4533         struct drm_connector *connector =
4534                 ((struct seq_file *)file->private_data)->private;
4535         struct intel_encoder *encoder = intel_attached_encoder(connector);
4536         struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
4537
4538         if (len == 0)
4539                 return 0;
4540
4541         DRM_DEBUG_DRIVER("Copied %zu bytes from user to force DSC\n",
4542                          len);
4543
4544         ret = kstrtobool_from_user(ubuf, len, &dsc_enable);
4545         if (ret < 0)
4546                 return ret;
4547
4548         DRM_DEBUG_DRIVER("Got %s for DSC Enable\n",
4549                          (dsc_enable) ? "true" : "false");
4550         intel_dp->force_dsc_en = dsc_enable;
4551
4552         *offp += len;
4553         return len;
4554 }
4555
4556 static int i915_dsc_fec_support_open(struct inode *inode,
4557                                      struct file *file)
4558 {
4559         return single_open(file, i915_dsc_fec_support_show,
4560                            inode->i_private);
4561 }
4562
4563 static const struct file_operations i915_dsc_fec_support_fops = {
4564         .owner = THIS_MODULE,
4565         .open = i915_dsc_fec_support_open,
4566         .read = seq_read,
4567         .llseek = seq_lseek,
4568         .release = single_release,
4569         .write = i915_dsc_fec_support_write
4570 };
4571
4572 /**
4573  * i915_debugfs_connector_add - add i915 specific connector debugfs files
4574  * @connector: pointer to a registered drm_connector
4575  *
4576  * Cleanup will be done by drm_connector_unregister() through a call to
4577  * drm_debugfs_connector_remove().
4578  *
4579  * Returns 0 on success, negative error codes on error.
4580  */
4581 int i915_debugfs_connector_add(struct drm_connector *connector)
4582 {
4583         struct dentry *root = connector->debugfs_entry;
4584         struct drm_i915_private *dev_priv = to_i915(connector->dev);
4585
4586         /* The connector must have been registered beforehands. */
4587         if (!root)
4588                 return -ENODEV;
4589
4590         if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
4591             connector->connector_type == DRM_MODE_CONNECTOR_eDP)
4592                 debugfs_create_file("i915_dpcd", S_IRUGO, root,
4593                                     connector, &i915_dpcd_fops);
4594
4595         if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
4596                 debugfs_create_file("i915_panel_timings", S_IRUGO, root,
4597                                     connector, &i915_panel_fops);
4598                 debugfs_create_file("i915_psr_sink_status", S_IRUGO, root,
4599                                     connector, &i915_psr_sink_status_fops);
4600         }
4601
4602         if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
4603             connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
4604             connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) {
4605                 debugfs_create_file("i915_hdcp_sink_capability", S_IRUGO, root,
4606                                     connector, &i915_hdcp_sink_capability_fops);
4607         }
4608
4609         if (INTEL_GEN(dev_priv) >= 10 &&
4610             (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
4611              connector->connector_type == DRM_MODE_CONNECTOR_eDP))
4612                 debugfs_create_file("i915_dsc_fec_support", S_IRUGO, root,
4613                                     connector, &i915_dsc_fec_support_fops);
4614
4615         return 0;
4616 }