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