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