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