aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_debugfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_debugfs.c')
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c570
1 files changed, 291 insertions, 279 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 2a6e12956baf..844fea795bae 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -89,17 +89,17 @@ static int i915_capabilities(struct seq_file *m, void *data)
89 return 0; 89 return 0;
90} 90}
91 91
92static const char get_active_flag(struct drm_i915_gem_object *obj) 92static char get_active_flag(struct drm_i915_gem_object *obj)
93{ 93{
94 return obj->active ? '*' : ' '; 94 return obj->active ? '*' : ' ';
95} 95}
96 96
97static const char get_pin_flag(struct drm_i915_gem_object *obj) 97static char get_pin_flag(struct drm_i915_gem_object *obj)
98{ 98{
99 return obj->pin_display ? 'p' : ' '; 99 return obj->pin_display ? 'p' : ' ';
100} 100}
101 101
102static const char get_tiling_flag(struct drm_i915_gem_object *obj) 102static char get_tiling_flag(struct drm_i915_gem_object *obj)
103{ 103{
104 switch (obj->tiling_mode) { 104 switch (obj->tiling_mode) {
105 default: 105 default:
@@ -109,12 +109,12 @@ static const char get_tiling_flag(struct drm_i915_gem_object *obj)
109 } 109 }
110} 110}
111 111
112static inline const char get_global_flag(struct drm_i915_gem_object *obj) 112static char get_global_flag(struct drm_i915_gem_object *obj)
113{ 113{
114 return i915_gem_obj_to_ggtt(obj) ? 'g' : ' '; 114 return i915_gem_obj_to_ggtt(obj) ? 'g' : ' ';
115} 115}
116 116
117static inline const char get_pin_mapped_flag(struct drm_i915_gem_object *obj) 117static char get_pin_mapped_flag(struct drm_i915_gem_object *obj)
118{ 118{
119 return obj->mapping ? 'M' : ' '; 119 return obj->mapping ? 'M' : ' ';
120} 120}
@@ -199,13 +199,6 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
199 seq_printf(m, " (frontbuffer: 0x%03x)", obj->frontbuffer_bits); 199 seq_printf(m, " (frontbuffer: 0x%03x)", obj->frontbuffer_bits);
200} 200}
201 201
202static void describe_ctx(struct seq_file *m, struct intel_context *ctx)
203{
204 seq_putc(m, ctx->legacy_hw_ctx.initialized ? 'I' : 'i');
205 seq_putc(m, ctx->remap_slice ? 'R' : 'r');
206 seq_putc(m, ' ');
207}
208
209static int i915_gem_object_list_info(struct seq_file *m, void *data) 202static int i915_gem_object_list_info(struct seq_file *m, void *data)
210{ 203{
211 struct drm_info_node *node = m->private; 204 struct drm_info_node *node = m->private;
@@ -272,7 +265,7 @@ static int i915_gem_stolen_list_info(struct seq_file *m, void *data)
272{ 265{
273 struct drm_info_node *node = m->private; 266 struct drm_info_node *node = m->private;
274 struct drm_device *dev = node->minor->dev; 267 struct drm_device *dev = node->minor->dev;
275 struct drm_i915_private *dev_priv = dev->dev_private; 268 struct drm_i915_private *dev_priv = to_i915(dev);
276 struct drm_i915_gem_object *obj; 269 struct drm_i915_gem_object *obj;
277 u64 total_obj_size, total_gtt_size; 270 u64 total_obj_size, total_gtt_size;
278 LIST_HEAD(stolen); 271 LIST_HEAD(stolen);
@@ -424,6 +417,42 @@ static void print_batch_pool_stats(struct seq_file *m,
424 print_file_stats(m, "[k]batch pool", stats); 417 print_file_stats(m, "[k]batch pool", stats);
425} 418}
426 419
420static int per_file_ctx_stats(int id, void *ptr, void *data)
421{
422 struct i915_gem_context *ctx = ptr;
423 int n;
424
425 for (n = 0; n < ARRAY_SIZE(ctx->engine); n++) {
426 if (ctx->engine[n].state)
427 per_file_stats(0, ctx->engine[n].state, data);
428 if (ctx->engine[n].ringbuf)
429 per_file_stats(0, ctx->engine[n].ringbuf->obj, data);
430 }
431
432 return 0;
433}
434
435static void print_context_stats(struct seq_file *m,
436 struct drm_i915_private *dev_priv)
437{
438 struct file_stats stats;
439 struct drm_file *file;
440
441 memset(&stats, 0, sizeof(stats));
442
443 mutex_lock(&dev_priv->drm.struct_mutex);
444 if (dev_priv->kernel_context)
445 per_file_ctx_stats(0, dev_priv->kernel_context, &stats);
446
447 list_for_each_entry(file, &dev_priv->drm.filelist, lhead) {
448 struct drm_i915_file_private *fpriv = file->driver_priv;
449 idr_for_each(&fpriv->context_idr, per_file_ctx_stats, &stats);
450 }
451 mutex_unlock(&dev_priv->drm.struct_mutex);
452
453 print_file_stats(m, "[k]contexts", stats);
454}
455
427#define count_vmas(list, member) do { \ 456#define count_vmas(list, member) do { \
428 list_for_each_entry(vma, list, member) { \ 457 list_for_each_entry(vma, list, member) { \
429 size += i915_gem_obj_total_ggtt_size(vma->obj); \ 458 size += i915_gem_obj_total_ggtt_size(vma->obj); \
@@ -528,10 +557,10 @@ static int i915_gem_object_info(struct seq_file *m, void* data)
528 557
529 seq_putc(m, '\n'); 558 seq_putc(m, '\n');
530 print_batch_pool_stats(m, dev_priv); 559 print_batch_pool_stats(m, dev_priv);
531
532 mutex_unlock(&dev->struct_mutex); 560 mutex_unlock(&dev->struct_mutex);
533 561
534 mutex_lock(&dev->filelist_mutex); 562 mutex_lock(&dev->filelist_mutex);
563 print_context_stats(m, dev_priv);
535 list_for_each_entry_reverse(file, &dev->filelist, lhead) { 564 list_for_each_entry_reverse(file, &dev->filelist, lhead) {
536 struct file_stats stats; 565 struct file_stats stats;
537 struct task_struct *task; 566 struct task_struct *task;
@@ -562,7 +591,7 @@ static int i915_gem_gtt_info(struct seq_file *m, void *data)
562 struct drm_info_node *node = m->private; 591 struct drm_info_node *node = m->private;
563 struct drm_device *dev = node->minor->dev; 592 struct drm_device *dev = node->minor->dev;
564 uintptr_t list = (uintptr_t) node->info_ent->data; 593 uintptr_t list = (uintptr_t) node->info_ent->data;
565 struct drm_i915_private *dev_priv = dev->dev_private; 594 struct drm_i915_private *dev_priv = to_i915(dev);
566 struct drm_i915_gem_object *obj; 595 struct drm_i915_gem_object *obj;
567 u64 total_obj_size, total_gtt_size; 596 u64 total_obj_size, total_gtt_size;
568 int count, ret; 597 int count, ret;
@@ -596,7 +625,7 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data)
596{ 625{
597 struct drm_info_node *node = m->private; 626 struct drm_info_node *node = m->private;
598 struct drm_device *dev = node->minor->dev; 627 struct drm_device *dev = node->minor->dev;
599 struct drm_i915_private *dev_priv = dev->dev_private; 628 struct drm_i915_private *dev_priv = to_i915(dev);
600 struct intel_crtc *crtc; 629 struct intel_crtc *crtc;
601 int ret; 630 int ret;
602 631
@@ -607,18 +636,20 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data)
607 for_each_intel_crtc(dev, crtc) { 636 for_each_intel_crtc(dev, crtc) {
608 const char pipe = pipe_name(crtc->pipe); 637 const char pipe = pipe_name(crtc->pipe);
609 const char plane = plane_name(crtc->plane); 638 const char plane = plane_name(crtc->plane);
610 struct intel_unpin_work *work; 639 struct intel_flip_work *work;
611 640
612 spin_lock_irq(&dev->event_lock); 641 spin_lock_irq(&dev->event_lock);
613 work = crtc->unpin_work; 642 work = crtc->flip_work;
614 if (work == NULL) { 643 if (work == NULL) {
615 seq_printf(m, "No flip due on pipe %c (plane %c)\n", 644 seq_printf(m, "No flip due on pipe %c (plane %c)\n",
616 pipe, plane); 645 pipe, plane);
617 } else { 646 } else {
647 u32 pending;
618 u32 addr; 648 u32 addr;
619 649
620 if (atomic_read(&work->pending) < INTEL_FLIP_COMPLETE) { 650 pending = atomic_read(&work->pending);
621 seq_printf(m, "Flip queued on pipe %c (plane %c)\n", 651 if (pending) {
652 seq_printf(m, "Flip ioctl preparing on pipe %c (plane %c)\n",
622 pipe, plane); 653 pipe, plane);
623 } else { 654 } else {
624 seq_printf(m, "Flip pending (waiting for vsync) on pipe %c (plane %c)\n", 655 seq_printf(m, "Flip pending (waiting for vsync) on pipe %c (plane %c)\n",
@@ -631,18 +662,14 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data)
631 engine->name, 662 engine->name,
632 i915_gem_request_get_seqno(work->flip_queued_req), 663 i915_gem_request_get_seqno(work->flip_queued_req),
633 dev_priv->next_seqno, 664 dev_priv->next_seqno,
634 engine->get_seqno(engine), 665 intel_engine_get_seqno(engine),
635 i915_gem_request_completed(work->flip_queued_req, true)); 666 i915_gem_request_completed(work->flip_queued_req));
636 } else 667 } else
637 seq_printf(m, "Flip not associated with any ring\n"); 668 seq_printf(m, "Flip not associated with any ring\n");
638 seq_printf(m, "Flip queued on frame %d, (was ready on frame %d), now %d\n", 669 seq_printf(m, "Flip queued on frame %d, (was ready on frame %d), now %d\n",
639 work->flip_queued_vblank, 670 work->flip_queued_vblank,
640 work->flip_ready_vblank, 671 work->flip_ready_vblank,
641 drm_crtc_vblank_count(&crtc->base)); 672 intel_crtc_get_vblank_counter(crtc));
642 if (work->enable_stall_check)
643 seq_puts(m, "Stall check enabled, ");
644 else
645 seq_puts(m, "Stall check waiting for page flip ioctl, ");
646 seq_printf(m, "%d prepares\n", atomic_read(&work->pending)); 673 seq_printf(m, "%d prepares\n", atomic_read(&work->pending));
647 674
648 if (INTEL_INFO(dev)->gen >= 4) 675 if (INTEL_INFO(dev)->gen >= 4)
@@ -668,7 +695,7 @@ static int i915_gem_batch_pool_info(struct seq_file *m, void *data)
668{ 695{
669 struct drm_info_node *node = m->private; 696 struct drm_info_node *node = m->private;
670 struct drm_device *dev = node->minor->dev; 697 struct drm_device *dev = node->minor->dev;
671 struct drm_i915_private *dev_priv = dev->dev_private; 698 struct drm_i915_private *dev_priv = to_i915(dev);
672 struct drm_i915_gem_object *obj; 699 struct drm_i915_gem_object *obj;
673 struct intel_engine_cs *engine; 700 struct intel_engine_cs *engine;
674 int total = 0; 701 int total = 0;
@@ -713,7 +740,7 @@ static int i915_gem_request_info(struct seq_file *m, void *data)
713{ 740{
714 struct drm_info_node *node = m->private; 741 struct drm_info_node *node = m->private;
715 struct drm_device *dev = node->minor->dev; 742 struct drm_device *dev = node->minor->dev;
716 struct drm_i915_private *dev_priv = dev->dev_private; 743 struct drm_i915_private *dev_priv = to_i915(dev);
717 struct intel_engine_cs *engine; 744 struct intel_engine_cs *engine;
718 struct drm_i915_gem_request *req; 745 struct drm_i915_gem_request *req;
719 int ret, any; 746 int ret, any;
@@ -761,17 +788,29 @@ static int i915_gem_request_info(struct seq_file *m, void *data)
761static void i915_ring_seqno_info(struct seq_file *m, 788static void i915_ring_seqno_info(struct seq_file *m,
762 struct intel_engine_cs *engine) 789 struct intel_engine_cs *engine)
763{ 790{
791 struct intel_breadcrumbs *b = &engine->breadcrumbs;
792 struct rb_node *rb;
793
764 seq_printf(m, "Current sequence (%s): %x\n", 794 seq_printf(m, "Current sequence (%s): %x\n",
765 engine->name, engine->get_seqno(engine)); 795 engine->name, intel_engine_get_seqno(engine));
766 seq_printf(m, "Current user interrupts (%s): %x\n", 796 seq_printf(m, "Current user interrupts (%s): %lx\n",
767 engine->name, READ_ONCE(engine->user_interrupts)); 797 engine->name, READ_ONCE(engine->breadcrumbs.irq_wakeups));
798
799 spin_lock(&b->lock);
800 for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) {
801 struct intel_wait *w = container_of(rb, typeof(*w), node);
802
803 seq_printf(m, "Waiting (%s): %s [%d] on %x\n",
804 engine->name, w->tsk->comm, w->tsk->pid, w->seqno);
805 }
806 spin_unlock(&b->lock);
768} 807}
769 808
770static int i915_gem_seqno_info(struct seq_file *m, void *data) 809static int i915_gem_seqno_info(struct seq_file *m, void *data)
771{ 810{
772 struct drm_info_node *node = m->private; 811 struct drm_info_node *node = m->private;
773 struct drm_device *dev = node->minor->dev; 812 struct drm_device *dev = node->minor->dev;
774 struct drm_i915_private *dev_priv = dev->dev_private; 813 struct drm_i915_private *dev_priv = to_i915(dev);
775 struct intel_engine_cs *engine; 814 struct intel_engine_cs *engine;
776 int ret; 815 int ret;
777 816
@@ -794,7 +833,7 @@ static int i915_interrupt_info(struct seq_file *m, void *data)
794{ 833{
795 struct drm_info_node *node = m->private; 834 struct drm_info_node *node = m->private;
796 struct drm_device *dev = node->minor->dev; 835 struct drm_device *dev = node->minor->dev;
797 struct drm_i915_private *dev_priv = dev->dev_private; 836 struct drm_i915_private *dev_priv = to_i915(dev);
798 struct intel_engine_cs *engine; 837 struct intel_engine_cs *engine;
799 int ret, i, pipe; 838 int ret, i, pipe;
800 839
@@ -985,7 +1024,7 @@ static int i915_gem_fence_regs_info(struct seq_file *m, void *data)
985{ 1024{
986 struct drm_info_node *node = m->private; 1025 struct drm_info_node *node = m->private;
987 struct drm_device *dev = node->minor->dev; 1026 struct drm_device *dev = node->minor->dev;
988 struct drm_i915_private *dev_priv = dev->dev_private; 1027 struct drm_i915_private *dev_priv = to_i915(dev);
989 int i, ret; 1028 int i, ret;
990 1029
991 ret = mutex_lock_interruptible(&dev->struct_mutex); 1030 ret = mutex_lock_interruptible(&dev->struct_mutex);
@@ -1013,7 +1052,7 @@ static int i915_hws_info(struct seq_file *m, void *data)
1013{ 1052{
1014 struct drm_info_node *node = m->private; 1053 struct drm_info_node *node = m->private;
1015 struct drm_device *dev = node->minor->dev; 1054 struct drm_device *dev = node->minor->dev;
1016 struct drm_i915_private *dev_priv = dev->dev_private; 1055 struct drm_i915_private *dev_priv = to_i915(dev);
1017 struct intel_engine_cs *engine; 1056 struct intel_engine_cs *engine;
1018 const u32 *hws; 1057 const u32 *hws;
1019 int i; 1058 int i;
@@ -1124,7 +1163,7 @@ static int
1124i915_next_seqno_get(void *data, u64 *val) 1163i915_next_seqno_get(void *data, u64 *val)
1125{ 1164{
1126 struct drm_device *dev = data; 1165 struct drm_device *dev = data;
1127 struct drm_i915_private *dev_priv = dev->dev_private; 1166 struct drm_i915_private *dev_priv = to_i915(dev);
1128 int ret; 1167 int ret;
1129 1168
1130 ret = mutex_lock_interruptible(&dev->struct_mutex); 1169 ret = mutex_lock_interruptible(&dev->struct_mutex);
@@ -1161,7 +1200,7 @@ static int i915_frequency_info(struct seq_file *m, void *unused)
1161{ 1200{
1162 struct drm_info_node *node = m->private; 1201 struct drm_info_node *node = m->private;
1163 struct drm_device *dev = node->minor->dev; 1202 struct drm_device *dev = node->minor->dev;
1164 struct drm_i915_private *dev_priv = dev->dev_private; 1203 struct drm_i915_private *dev_priv = to_i915(dev);
1165 int ret = 0; 1204 int ret = 0;
1166 1205
1167 intel_runtime_pm_get(dev_priv); 1206 intel_runtime_pm_get(dev_priv);
@@ -1281,6 +1320,7 @@ static int i915_frequency_info(struct seq_file *m, void *unused)
1281 } 1320 }
1282 seq_printf(m, "PM IER=0x%08x IMR=0x%08x ISR=0x%08x IIR=0x%08x, MASK=0x%08x\n", 1321 seq_printf(m, "PM IER=0x%08x IMR=0x%08x ISR=0x%08x IIR=0x%08x, MASK=0x%08x\n",
1283 pm_ier, pm_imr, pm_isr, pm_iir, pm_mask); 1322 pm_ier, pm_imr, pm_isr, pm_iir, pm_mask);
1323 seq_printf(m, "pm_intr_keep: 0x%08x\n", dev_priv->rps.pm_intr_keep);
1284 seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status); 1324 seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status);
1285 seq_printf(m, "Render p-state ratio: %d\n", 1325 seq_printf(m, "Render p-state ratio: %d\n",
1286 (gt_perf_status & (IS_GEN9(dev) ? 0x1ff00 : 0xff00)) >> 8); 1326 (gt_perf_status & (IS_GEN9(dev) ? 0x1ff00 : 0xff00)) >> 8);
@@ -1363,7 +1403,7 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
1363{ 1403{
1364 struct drm_info_node *node = m->private; 1404 struct drm_info_node *node = m->private;
1365 struct drm_device *dev = node->minor->dev; 1405 struct drm_device *dev = node->minor->dev;
1366 struct drm_i915_private *dev_priv = dev->dev_private; 1406 struct drm_i915_private *dev_priv = to_i915(dev);
1367 struct intel_engine_cs *engine; 1407 struct intel_engine_cs *engine;
1368 u64 acthd[I915_NUM_ENGINES]; 1408 u64 acthd[I915_NUM_ENGINES];
1369 u32 seqno[I915_NUM_ENGINES]; 1409 u32 seqno[I915_NUM_ENGINES];
@@ -1380,10 +1420,10 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
1380 1420
1381 for_each_engine_id(engine, dev_priv, id) { 1421 for_each_engine_id(engine, dev_priv, id) {
1382 acthd[id] = intel_ring_get_active_head(engine); 1422 acthd[id] = intel_ring_get_active_head(engine);
1383 seqno[id] = engine->get_seqno(engine); 1423 seqno[id] = intel_engine_get_seqno(engine);
1384 } 1424 }
1385 1425
1386 i915_get_extra_instdone(dev, instdone); 1426 i915_get_extra_instdone(dev_priv, instdone);
1387 1427
1388 intel_runtime_pm_put(dev_priv); 1428 intel_runtime_pm_put(dev_priv);
1389 1429
@@ -1400,9 +1440,11 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
1400 engine->hangcheck.seqno, 1440 engine->hangcheck.seqno,
1401 seqno[id], 1441 seqno[id],
1402 engine->last_submitted_seqno); 1442 engine->last_submitted_seqno);
1403 seq_printf(m, "\tuser interrupts = %x [current %x]\n", 1443 seq_printf(m, "\twaiters? %d\n",
1444 intel_engine_has_waiter(engine));
1445 seq_printf(m, "\tuser interrupts = %lx [current %lx]\n",
1404 engine->hangcheck.user_interrupts, 1446 engine->hangcheck.user_interrupts,
1405 READ_ONCE(engine->user_interrupts)); 1447 READ_ONCE(engine->breadcrumbs.irq_wakeups));
1406 seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n", 1448 seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n",
1407 (long long)engine->hangcheck.acthd, 1449 (long long)engine->hangcheck.acthd,
1408 (long long)acthd[id]); 1450 (long long)acthd[id]);
@@ -1432,7 +1474,7 @@ static int ironlake_drpc_info(struct seq_file *m)
1432{ 1474{
1433 struct drm_info_node *node = m->private; 1475 struct drm_info_node *node = m->private;
1434 struct drm_device *dev = node->minor->dev; 1476 struct drm_device *dev = node->minor->dev;
1435 struct drm_i915_private *dev_priv = dev->dev_private; 1477 struct drm_i915_private *dev_priv = to_i915(dev);
1436 u32 rgvmodectl, rstdbyctl; 1478 u32 rgvmodectl, rstdbyctl;
1437 u16 crstandvid; 1479 u16 crstandvid;
1438 int ret; 1480 int ret;
@@ -1500,7 +1542,7 @@ static int i915_forcewake_domains(struct seq_file *m, void *data)
1500{ 1542{
1501 struct drm_info_node *node = m->private; 1543 struct drm_info_node *node = m->private;
1502 struct drm_device *dev = node->minor->dev; 1544 struct drm_device *dev = node->minor->dev;
1503 struct drm_i915_private *dev_priv = dev->dev_private; 1545 struct drm_i915_private *dev_priv = to_i915(dev);
1504 struct intel_uncore_forcewake_domain *fw_domain; 1546 struct intel_uncore_forcewake_domain *fw_domain;
1505 1547
1506 spin_lock_irq(&dev_priv->uncore.lock); 1548 spin_lock_irq(&dev_priv->uncore.lock);
@@ -1518,7 +1560,7 @@ static int vlv_drpc_info(struct seq_file *m)
1518{ 1560{
1519 struct drm_info_node *node = m->private; 1561 struct drm_info_node *node = m->private;
1520 struct drm_device *dev = node->minor->dev; 1562 struct drm_device *dev = node->minor->dev;
1521 struct drm_i915_private *dev_priv = dev->dev_private; 1563 struct drm_i915_private *dev_priv = to_i915(dev);
1522 u32 rpmodectl1, rcctl1, pw_status; 1564 u32 rpmodectl1, rcctl1, pw_status;
1523 1565
1524 intel_runtime_pm_get(dev_priv); 1566 intel_runtime_pm_get(dev_priv);
@@ -1558,7 +1600,7 @@ static int gen6_drpc_info(struct seq_file *m)
1558{ 1600{
1559 struct drm_info_node *node = m->private; 1601 struct drm_info_node *node = m->private;
1560 struct drm_device *dev = node->minor->dev; 1602 struct drm_device *dev = node->minor->dev;
1561 struct drm_i915_private *dev_priv = dev->dev_private; 1603 struct drm_i915_private *dev_priv = to_i915(dev);
1562 u32 rpmodectl1, gt_core_status, rcctl1, rc6vids = 0; 1604 u32 rpmodectl1, gt_core_status, rcctl1, rc6vids = 0;
1563 unsigned forcewake_count; 1605 unsigned forcewake_count;
1564 int count = 0, ret; 1606 int count = 0, ret;
@@ -1670,7 +1712,7 @@ static int i915_frontbuffer_tracking(struct seq_file *m, void *unused)
1670{ 1712{
1671 struct drm_info_node *node = m->private; 1713 struct drm_info_node *node = m->private;
1672 struct drm_device *dev = node->minor->dev; 1714 struct drm_device *dev = node->minor->dev;
1673 struct drm_i915_private *dev_priv = dev->dev_private; 1715 struct drm_i915_private *dev_priv = to_i915(dev);
1674 1716
1675 seq_printf(m, "FB tracking busy bits: 0x%08x\n", 1717 seq_printf(m, "FB tracking busy bits: 0x%08x\n",
1676 dev_priv->fb_tracking.busy_bits); 1718 dev_priv->fb_tracking.busy_bits);
@@ -1685,7 +1727,7 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
1685{ 1727{
1686 struct drm_info_node *node = m->private; 1728 struct drm_info_node *node = m->private;
1687 struct drm_device *dev = node->minor->dev; 1729 struct drm_device *dev = node->minor->dev;
1688 struct drm_i915_private *dev_priv = dev->dev_private; 1730 struct drm_i915_private *dev_priv = to_i915(dev);
1689 1731
1690 if (!HAS_FBC(dev)) { 1732 if (!HAS_FBC(dev)) {
1691 seq_puts(m, "FBC unsupported on this chipset\n"); 1733 seq_puts(m, "FBC unsupported on this chipset\n");
@@ -1715,7 +1757,7 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
1715static int i915_fbc_fc_get(void *data, u64 *val) 1757static int i915_fbc_fc_get(void *data, u64 *val)
1716{ 1758{
1717 struct drm_device *dev = data; 1759 struct drm_device *dev = data;
1718 struct drm_i915_private *dev_priv = dev->dev_private; 1760 struct drm_i915_private *dev_priv = to_i915(dev);
1719 1761
1720 if (INTEL_INFO(dev)->gen < 7 || !HAS_FBC(dev)) 1762 if (INTEL_INFO(dev)->gen < 7 || !HAS_FBC(dev))
1721 return -ENODEV; 1763 return -ENODEV;
@@ -1728,7 +1770,7 @@ static int i915_fbc_fc_get(void *data, u64 *val)
1728static int i915_fbc_fc_set(void *data, u64 val) 1770static int i915_fbc_fc_set(void *data, u64 val)
1729{ 1771{
1730 struct drm_device *dev = data; 1772 struct drm_device *dev = data;
1731 struct drm_i915_private *dev_priv = dev->dev_private; 1773 struct drm_i915_private *dev_priv = to_i915(dev);
1732 u32 reg; 1774 u32 reg;
1733 1775
1734 if (INTEL_INFO(dev)->gen < 7 || !HAS_FBC(dev)) 1776 if (INTEL_INFO(dev)->gen < 7 || !HAS_FBC(dev))
@@ -1755,7 +1797,7 @@ static int i915_ips_status(struct seq_file *m, void *unused)
1755{ 1797{
1756 struct drm_info_node *node = m->private; 1798 struct drm_info_node *node = m->private;
1757 struct drm_device *dev = node->minor->dev; 1799 struct drm_device *dev = node->minor->dev;
1758 struct drm_i915_private *dev_priv = dev->dev_private; 1800 struct drm_i915_private *dev_priv = to_i915(dev);
1759 1801
1760 if (!HAS_IPS(dev)) { 1802 if (!HAS_IPS(dev)) {
1761 seq_puts(m, "not supported\n"); 1803 seq_puts(m, "not supported\n");
@@ -1785,7 +1827,7 @@ static int i915_sr_status(struct seq_file *m, void *unused)
1785{ 1827{
1786 struct drm_info_node *node = m->private; 1828 struct drm_info_node *node = m->private;
1787 struct drm_device *dev = node->minor->dev; 1829 struct drm_device *dev = node->minor->dev;
1788 struct drm_i915_private *dev_priv = dev->dev_private; 1830 struct drm_i915_private *dev_priv = to_i915(dev);
1789 bool sr_enabled = false; 1831 bool sr_enabled = false;
1790 1832
1791 intel_runtime_pm_get(dev_priv); 1833 intel_runtime_pm_get(dev_priv);
@@ -1814,7 +1856,7 @@ static int i915_emon_status(struct seq_file *m, void *unused)
1814{ 1856{
1815 struct drm_info_node *node = m->private; 1857 struct drm_info_node *node = m->private;
1816 struct drm_device *dev = node->minor->dev; 1858 struct drm_device *dev = node->minor->dev;
1817 struct drm_i915_private *dev_priv = dev->dev_private; 1859 struct drm_i915_private *dev_priv = to_i915(dev);
1818 unsigned long temp, chipset, gfx; 1860 unsigned long temp, chipset, gfx;
1819 int ret; 1861 int ret;
1820 1862
@@ -1842,7 +1884,7 @@ static int i915_ring_freq_table(struct seq_file *m, void *unused)
1842{ 1884{
1843 struct drm_info_node *node = m->private; 1885 struct drm_info_node *node = m->private;
1844 struct drm_device *dev = node->minor->dev; 1886 struct drm_device *dev = node->minor->dev;
1845 struct drm_i915_private *dev_priv = dev->dev_private; 1887 struct drm_i915_private *dev_priv = to_i915(dev);
1846 int ret = 0; 1888 int ret = 0;
1847 int gpu_freq, ia_freq; 1889 int gpu_freq, ia_freq;
1848 unsigned int max_gpu_freq, min_gpu_freq; 1890 unsigned int max_gpu_freq, min_gpu_freq;
@@ -1897,7 +1939,7 @@ static int i915_opregion(struct seq_file *m, void *unused)
1897{ 1939{
1898 struct drm_info_node *node = m->private; 1940 struct drm_info_node *node = m->private;
1899 struct drm_device *dev = node->minor->dev; 1941 struct drm_device *dev = node->minor->dev;
1900 struct drm_i915_private *dev_priv = dev->dev_private; 1942 struct drm_i915_private *dev_priv = to_i915(dev);
1901 struct intel_opregion *opregion = &dev_priv->opregion; 1943 struct intel_opregion *opregion = &dev_priv->opregion;
1902 int ret; 1944 int ret;
1903 1945
@@ -1918,7 +1960,7 @@ static int i915_vbt(struct seq_file *m, void *unused)
1918{ 1960{
1919 struct drm_info_node *node = m->private; 1961 struct drm_info_node *node = m->private;
1920 struct drm_device *dev = node->minor->dev; 1962 struct drm_device *dev = node->minor->dev;
1921 struct drm_i915_private *dev_priv = dev->dev_private; 1963 struct drm_i915_private *dev_priv = to_i915(dev);
1922 struct intel_opregion *opregion = &dev_priv->opregion; 1964 struct intel_opregion *opregion = &dev_priv->opregion;
1923 1965
1924 if (opregion->vbt) 1966 if (opregion->vbt)
@@ -1940,19 +1982,19 @@ static int i915_gem_framebuffer_info(struct seq_file *m, void *data)
1940 return ret; 1982 return ret;
1941 1983
1942#ifdef CONFIG_DRM_FBDEV_EMULATION 1984#ifdef CONFIG_DRM_FBDEV_EMULATION
1943 if (to_i915(dev)->fbdev) { 1985 if (to_i915(dev)->fbdev) {
1944 fbdev_fb = to_intel_framebuffer(to_i915(dev)->fbdev->helper.fb); 1986 fbdev_fb = to_intel_framebuffer(to_i915(dev)->fbdev->helper.fb);
1945 1987
1946 seq_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ", 1988 seq_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
1947 fbdev_fb->base.width, 1989 fbdev_fb->base.width,
1948 fbdev_fb->base.height, 1990 fbdev_fb->base.height,
1949 fbdev_fb->base.depth, 1991 fbdev_fb->base.depth,
1950 fbdev_fb->base.bits_per_pixel, 1992 fbdev_fb->base.bits_per_pixel,
1951 fbdev_fb->base.modifier[0], 1993 fbdev_fb->base.modifier[0],
1952 drm_framebuffer_read_refcount(&fbdev_fb->base)); 1994 drm_framebuffer_read_refcount(&fbdev_fb->base));
1953 describe_obj(m, fbdev_fb->obj); 1995 describe_obj(m, fbdev_fb->obj);
1954 seq_putc(m, '\n'); 1996 seq_putc(m, '\n');
1955 } 1997 }
1956#endif 1998#endif
1957 1999
1958 mutex_lock(&dev->mode_config.fb_lock); 2000 mutex_lock(&dev->mode_config.fb_lock);
@@ -1989,10 +2031,9 @@ static int i915_context_status(struct seq_file *m, void *unused)
1989{ 2031{
1990 struct drm_info_node *node = m->private; 2032 struct drm_info_node *node = m->private;
1991 struct drm_device *dev = node->minor->dev; 2033 struct drm_device *dev = node->minor->dev;
1992 struct drm_i915_private *dev_priv = dev->dev_private; 2034 struct drm_i915_private *dev_priv = to_i915(dev);
1993 struct intel_engine_cs *engine; 2035 struct intel_engine_cs *engine;
1994 struct intel_context *ctx; 2036 struct i915_gem_context *ctx;
1995 enum intel_engine_id id;
1996 int ret; 2037 int ret;
1997 2038
1998 ret = mutex_lock_interruptible(&dev->struct_mutex); 2039 ret = mutex_lock_interruptible(&dev->struct_mutex);
@@ -2000,32 +2041,36 @@ static int i915_context_status(struct seq_file *m, void *unused)
2000 return ret; 2041 return ret;
2001 2042
2002 list_for_each_entry(ctx, &dev_priv->context_list, link) { 2043 list_for_each_entry(ctx, &dev_priv->context_list, link) {
2003 if (!i915.enable_execlists && 2044 seq_printf(m, "HW context %u ", ctx->hw_id);
2004 ctx->legacy_hw_ctx.rcs_state == NULL) 2045 if (IS_ERR(ctx->file_priv)) {
2005 continue; 2046 seq_puts(m, "(deleted) ");
2006 2047 } else if (ctx->file_priv) {
2007 seq_puts(m, "HW context "); 2048 struct pid *pid = ctx->file_priv->file->pid;
2008 describe_ctx(m, ctx); 2049 struct task_struct *task;
2009 if (ctx == dev_priv->kernel_context)
2010 seq_printf(m, "(kernel context) ");
2011 2050
2012 if (i915.enable_execlists) { 2051 task = get_pid_task(pid, PIDTYPE_PID);
2013 seq_putc(m, '\n'); 2052 if (task) {
2014 for_each_engine_id(engine, dev_priv, id) { 2053 seq_printf(m, "(%s [%d]) ",
2015 struct drm_i915_gem_object *ctx_obj = 2054 task->comm, task->pid);
2016 ctx->engine[id].state; 2055 put_task_struct(task);
2017 struct intel_ringbuffer *ringbuf =
2018 ctx->engine[id].ringbuf;
2019
2020 seq_printf(m, "%s: ", engine->name);
2021 if (ctx_obj)
2022 describe_obj(m, ctx_obj);
2023 if (ringbuf)
2024 describe_ctx_ringbuf(m, ringbuf);
2025 seq_putc(m, '\n');
2026 } 2056 }
2027 } else { 2057 } else {
2028 describe_obj(m, ctx->legacy_hw_ctx.rcs_state); 2058 seq_puts(m, "(kernel) ");
2059 }
2060
2061 seq_putc(m, ctx->remap_slice ? 'R' : 'r');
2062 seq_putc(m, '\n');
2063
2064 for_each_engine(engine, dev_priv) {
2065 struct intel_context *ce = &ctx->engine[engine->id];
2066
2067 seq_printf(m, "%s: ", engine->name);
2068 seq_putc(m, ce->initialised ? 'I' : 'i');
2069 if (ce->state)
2070 describe_obj(m, ce->state);
2071 if (ce->ringbuf)
2072 describe_ctx_ringbuf(m, ce->ringbuf);
2073 seq_putc(m, '\n');
2029 } 2074 }
2030 2075
2031 seq_putc(m, '\n'); 2076 seq_putc(m, '\n');
@@ -2037,24 +2082,22 @@ static int i915_context_status(struct seq_file *m, void *unused)
2037} 2082}
2038 2083
2039static void i915_dump_lrc_obj(struct seq_file *m, 2084static void i915_dump_lrc_obj(struct seq_file *m,
2040 struct intel_context *ctx, 2085 struct i915_gem_context *ctx,
2041 struct intel_engine_cs *engine) 2086 struct intel_engine_cs *engine)
2042{ 2087{
2088 struct drm_i915_gem_object *ctx_obj = ctx->engine[engine->id].state;
2043 struct page *page; 2089 struct page *page;
2044 uint32_t *reg_state; 2090 uint32_t *reg_state;
2045 int j; 2091 int j;
2046 struct drm_i915_gem_object *ctx_obj = ctx->engine[engine->id].state;
2047 unsigned long ggtt_offset = 0; 2092 unsigned long ggtt_offset = 0;
2048 2093
2094 seq_printf(m, "CONTEXT: %s %u\n", engine->name, ctx->hw_id);
2095
2049 if (ctx_obj == NULL) { 2096 if (ctx_obj == NULL) {
2050 seq_printf(m, "Context on %s with no gem object\n", 2097 seq_puts(m, "\tNot allocated\n");
2051 engine->name);
2052 return; 2098 return;
2053 } 2099 }
2054 2100
2055 seq_printf(m, "CONTEXT: %s %u\n", engine->name,
2056 intel_execlists_ctx_id(ctx, engine));
2057
2058 if (!i915_gem_obj_ggtt_bound(ctx_obj)) 2101 if (!i915_gem_obj_ggtt_bound(ctx_obj))
2059 seq_puts(m, "\tNot bound in GGTT\n"); 2102 seq_puts(m, "\tNot bound in GGTT\n");
2060 else 2103 else
@@ -2085,9 +2128,9 @@ static int i915_dump_lrc(struct seq_file *m, void *unused)
2085{ 2128{
2086 struct drm_info_node *node = (struct drm_info_node *) m->private; 2129 struct drm_info_node *node = (struct drm_info_node *) m->private;
2087 struct drm_device *dev = node->minor->dev; 2130 struct drm_device *dev = node->minor->dev;
2088 struct drm_i915_private *dev_priv = dev->dev_private; 2131 struct drm_i915_private *dev_priv = to_i915(dev);
2089 struct intel_engine_cs *engine; 2132 struct intel_engine_cs *engine;
2090 struct intel_context *ctx; 2133 struct i915_gem_context *ctx;
2091 int ret; 2134 int ret;
2092 2135
2093 if (!i915.enable_execlists) { 2136 if (!i915.enable_execlists) {
@@ -2100,10 +2143,8 @@ static int i915_dump_lrc(struct seq_file *m, void *unused)
2100 return ret; 2143 return ret;
2101 2144
2102 list_for_each_entry(ctx, &dev_priv->context_list, link) 2145 list_for_each_entry(ctx, &dev_priv->context_list, link)
2103 if (ctx != dev_priv->kernel_context) { 2146 for_each_engine(engine, dev_priv)
2104 for_each_engine(engine, dev_priv) 2147 i915_dump_lrc_obj(m, ctx, engine);
2105 i915_dump_lrc_obj(m, ctx, engine);
2106 }
2107 2148
2108 mutex_unlock(&dev->struct_mutex); 2149 mutex_unlock(&dev->struct_mutex);
2109 2150
@@ -2114,7 +2155,7 @@ static int i915_execlists(struct seq_file *m, void *data)
2114{ 2155{
2115 struct drm_info_node *node = (struct drm_info_node *)m->private; 2156 struct drm_info_node *node = (struct drm_info_node *)m->private;
2116 struct drm_device *dev = node->minor->dev; 2157 struct drm_device *dev = node->minor->dev;
2117 struct drm_i915_private *dev_priv = dev->dev_private; 2158 struct drm_i915_private *dev_priv = to_i915(dev);
2118 struct intel_engine_cs *engine; 2159 struct intel_engine_cs *engine;
2119 u32 status_pointer; 2160 u32 status_pointer;
2120 u8 read_pointer; 2161 u8 read_pointer;
@@ -2174,8 +2215,8 @@ static int i915_execlists(struct seq_file *m, void *data)
2174 2215
2175 seq_printf(m, "\t%d requests in queue\n", count); 2216 seq_printf(m, "\t%d requests in queue\n", count);
2176 if (head_req) { 2217 if (head_req) {
2177 seq_printf(m, "\tHead request id: %u\n", 2218 seq_printf(m, "\tHead request context: %u\n",
2178 intel_execlists_ctx_id(head_req->ctx, engine)); 2219 head_req->ctx->hw_id);
2179 seq_printf(m, "\tHead request tail: %u\n", 2220 seq_printf(m, "\tHead request tail: %u\n",
2180 head_req->tail); 2221 head_req->tail);
2181 } 2222 }
@@ -2217,7 +2258,7 @@ static int i915_swizzle_info(struct seq_file *m, void *data)
2217{ 2258{
2218 struct drm_info_node *node = m->private; 2259 struct drm_info_node *node = m->private;
2219 struct drm_device *dev = node->minor->dev; 2260 struct drm_device *dev = node->minor->dev;
2220 struct drm_i915_private *dev_priv = dev->dev_private; 2261 struct drm_i915_private *dev_priv = to_i915(dev);
2221 int ret; 2262 int ret;
2222 2263
2223 ret = mutex_lock_interruptible(&dev->struct_mutex); 2264 ret = mutex_lock_interruptible(&dev->struct_mutex);
@@ -2269,7 +2310,7 @@ static int i915_swizzle_info(struct seq_file *m, void *data)
2269 2310
2270static int per_file_ctx(int id, void *ptr, void *data) 2311static int per_file_ctx(int id, void *ptr, void *data)
2271{ 2312{
2272 struct intel_context *ctx = ptr; 2313 struct i915_gem_context *ctx = ptr;
2273 struct seq_file *m = data; 2314 struct seq_file *m = data;
2274 struct i915_hw_ppgtt *ppgtt = ctx->ppgtt; 2315 struct i915_hw_ppgtt *ppgtt = ctx->ppgtt;
2275 2316
@@ -2290,7 +2331,7 @@ static int per_file_ctx(int id, void *ptr, void *data)
2290 2331
2291static void gen8_ppgtt_info(struct seq_file *m, struct drm_device *dev) 2332static void gen8_ppgtt_info(struct seq_file *m, struct drm_device *dev)
2292{ 2333{
2293 struct drm_i915_private *dev_priv = dev->dev_private; 2334 struct drm_i915_private *dev_priv = to_i915(dev);
2294 struct intel_engine_cs *engine; 2335 struct intel_engine_cs *engine;
2295 struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt; 2336 struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
2296 int i; 2337 int i;
@@ -2311,15 +2352,15 @@ static void gen8_ppgtt_info(struct seq_file *m, struct drm_device *dev)
2311 2352
2312static void gen6_ppgtt_info(struct seq_file *m, struct drm_device *dev) 2353static void gen6_ppgtt_info(struct seq_file *m, struct drm_device *dev)
2313{ 2354{
2314 struct drm_i915_private *dev_priv = dev->dev_private; 2355 struct drm_i915_private *dev_priv = to_i915(dev);
2315 struct intel_engine_cs *engine; 2356 struct intel_engine_cs *engine;
2316 2357
2317 if (INTEL_INFO(dev)->gen == 6) 2358 if (IS_GEN6(dev_priv))
2318 seq_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(GFX_MODE)); 2359 seq_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(GFX_MODE));
2319 2360
2320 for_each_engine(engine, dev_priv) { 2361 for_each_engine(engine, dev_priv) {
2321 seq_printf(m, "%s\n", engine->name); 2362 seq_printf(m, "%s\n", engine->name);
2322 if (INTEL_INFO(dev)->gen == 7) 2363 if (IS_GEN7(dev_priv))
2323 seq_printf(m, "GFX_MODE: 0x%08x\n", 2364 seq_printf(m, "GFX_MODE: 0x%08x\n",
2324 I915_READ(RING_MODE_GEN7(engine))); 2365 I915_READ(RING_MODE_GEN7(engine)));
2325 seq_printf(m, "PP_DIR_BASE: 0x%08x\n", 2366 seq_printf(m, "PP_DIR_BASE: 0x%08x\n",
@@ -2345,7 +2386,7 @@ static int i915_ppgtt_info(struct seq_file *m, void *data)
2345{ 2386{
2346 struct drm_info_node *node = m->private; 2387 struct drm_info_node *node = m->private;
2347 struct drm_device *dev = node->minor->dev; 2388 struct drm_device *dev = node->minor->dev;
2348 struct drm_i915_private *dev_priv = dev->dev_private; 2389 struct drm_i915_private *dev_priv = to_i915(dev);
2349 struct drm_file *file; 2390 struct drm_file *file;
2350 2391
2351 int ret = mutex_lock_interruptible(&dev->struct_mutex); 2392 int ret = mutex_lock_interruptible(&dev->struct_mutex);
@@ -2388,7 +2429,7 @@ static int count_irq_waiters(struct drm_i915_private *i915)
2388 int count = 0; 2429 int count = 0;
2389 2430
2390 for_each_engine(engine, i915) 2431 for_each_engine(engine, i915)
2391 count += engine->irq_refcount; 2432 count += intel_engine_has_waiter(engine);
2392 2433
2393 return count; 2434 return count;
2394} 2435}
@@ -2397,11 +2438,12 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
2397{ 2438{
2398 struct drm_info_node *node = m->private; 2439 struct drm_info_node *node = m->private;
2399 struct drm_device *dev = node->minor->dev; 2440 struct drm_device *dev = node->minor->dev;
2400 struct drm_i915_private *dev_priv = dev->dev_private; 2441 struct drm_i915_private *dev_priv = to_i915(dev);
2401 struct drm_file *file; 2442 struct drm_file *file;
2402 2443
2403 seq_printf(m, "RPS enabled? %d\n", dev_priv->rps.enabled); 2444 seq_printf(m, "RPS enabled? %d\n", dev_priv->rps.enabled);
2404 seq_printf(m, "GPU busy? %d\n", dev_priv->mm.busy); 2445 seq_printf(m, "GPU busy? %s [%x]\n",
2446 yesno(dev_priv->gt.awake), dev_priv->gt.active_engines);
2405 seq_printf(m, "CPU waiting? %d\n", count_irq_waiters(dev_priv)); 2447 seq_printf(m, "CPU waiting? %d\n", count_irq_waiters(dev_priv));
2406 seq_printf(m, "Frequency requested %d; min hard:%d, soft:%d; max soft:%d, hard:%d\n", 2448 seq_printf(m, "Frequency requested %d; min hard:%d, soft:%d; max soft:%d, hard:%d\n",
2407 intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq), 2449 intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq),
@@ -2442,7 +2484,7 @@ static int i915_llc(struct seq_file *m, void *data)
2442{ 2484{
2443 struct drm_info_node *node = m->private; 2485 struct drm_info_node *node = m->private;
2444 struct drm_device *dev = node->minor->dev; 2486 struct drm_device *dev = node->minor->dev;
2445 struct drm_i915_private *dev_priv = dev->dev_private; 2487 struct drm_i915_private *dev_priv = to_i915(dev);
2446 const bool edram = INTEL_GEN(dev_priv) > 8; 2488 const bool edram = INTEL_GEN(dev_priv) > 8;
2447 2489
2448 seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev))); 2490 seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev)));
@@ -2455,7 +2497,7 @@ static int i915_llc(struct seq_file *m, void *data)
2455static int i915_guc_load_status_info(struct seq_file *m, void *data) 2497static int i915_guc_load_status_info(struct seq_file *m, void *data)
2456{ 2498{
2457 struct drm_info_node *node = m->private; 2499 struct drm_info_node *node = m->private;
2458 struct drm_i915_private *dev_priv = node->minor->dev->dev_private; 2500 struct drm_i915_private *dev_priv = to_i915(node->minor->dev);
2459 struct intel_guc_fw *guc_fw = &dev_priv->guc.guc_fw; 2501 struct intel_guc_fw *guc_fw = &dev_priv->guc.guc_fw;
2460 u32 tmp, i; 2502 u32 tmp, i;
2461 2503
@@ -2510,15 +2552,16 @@ static void i915_guc_client_info(struct seq_file *m,
2510 seq_printf(m, "\tWQ size %d, offset: 0x%x, tail %d\n", 2552 seq_printf(m, "\tWQ size %d, offset: 0x%x, tail %d\n",
2511 client->wq_size, client->wq_offset, client->wq_tail); 2553 client->wq_size, client->wq_offset, client->wq_tail);
2512 2554
2555 seq_printf(m, "\tWork queue full: %u\n", client->no_wq_space);
2513 seq_printf(m, "\tFailed to queue: %u\n", client->q_fail); 2556 seq_printf(m, "\tFailed to queue: %u\n", client->q_fail);
2514 seq_printf(m, "\tFailed doorbell: %u\n", client->b_fail); 2557 seq_printf(m, "\tFailed doorbell: %u\n", client->b_fail);
2515 seq_printf(m, "\tLast submission result: %d\n", client->retcode); 2558 seq_printf(m, "\tLast submission result: %d\n", client->retcode);
2516 2559
2517 for_each_engine(engine, dev_priv) { 2560 for_each_engine(engine, dev_priv) {
2518 seq_printf(m, "\tSubmissions: %llu %s\n", 2561 seq_printf(m, "\tSubmissions: %llu %s\n",
2519 client->submissions[engine->guc_id], 2562 client->submissions[engine->id],
2520 engine->name); 2563 engine->name);
2521 tot += client->submissions[engine->guc_id]; 2564 tot += client->submissions[engine->id];
2522 } 2565 }
2523 seq_printf(m, "\tTotal: %llu\n", tot); 2566 seq_printf(m, "\tTotal: %llu\n", tot);
2524} 2567}
@@ -2527,7 +2570,7 @@ static int i915_guc_info(struct seq_file *m, void *data)
2527{ 2570{
2528 struct drm_info_node *node = m->private; 2571 struct drm_info_node *node = m->private;
2529 struct drm_device *dev = node->minor->dev; 2572 struct drm_device *dev = node->minor->dev;
2530 struct drm_i915_private *dev_priv = dev->dev_private; 2573 struct drm_i915_private *dev_priv = to_i915(dev);
2531 struct intel_guc guc; 2574 struct intel_guc guc;
2532 struct i915_guc_client client = {}; 2575 struct i915_guc_client client = {};
2533 struct intel_engine_cs *engine; 2576 struct intel_engine_cs *engine;
@@ -2546,6 +2589,10 @@ static int i915_guc_info(struct seq_file *m, void *data)
2546 2589
2547 mutex_unlock(&dev->struct_mutex); 2590 mutex_unlock(&dev->struct_mutex);
2548 2591
2592 seq_printf(m, "Doorbell map:\n");
2593 seq_printf(m, "\t%*pb\n", GUC_MAX_DOORBELLS, guc.doorbell_bitmap);
2594 seq_printf(m, "Doorbell next cacheline: 0x%x\n\n", guc.db_cacheline);
2595
2549 seq_printf(m, "GuC total action count: %llu\n", guc.action_count); 2596 seq_printf(m, "GuC total action count: %llu\n", guc.action_count);
2550 seq_printf(m, "GuC action failure count: %u\n", guc.action_fail); 2597 seq_printf(m, "GuC action failure count: %u\n", guc.action_fail);
2551 seq_printf(m, "GuC last action command: 0x%x\n", guc.action_cmd); 2598 seq_printf(m, "GuC last action command: 0x%x\n", guc.action_cmd);
@@ -2555,9 +2602,9 @@ static int i915_guc_info(struct seq_file *m, void *data)
2555 seq_printf(m, "\nGuC submissions:\n"); 2602 seq_printf(m, "\nGuC submissions:\n");
2556 for_each_engine(engine, dev_priv) { 2603 for_each_engine(engine, dev_priv) {
2557 seq_printf(m, "\t%-24s: %10llu, last seqno 0x%08x\n", 2604 seq_printf(m, "\t%-24s: %10llu, last seqno 0x%08x\n",
2558 engine->name, guc.submissions[engine->guc_id], 2605 engine->name, guc.submissions[engine->id],
2559 guc.last_seqno[engine->guc_id]); 2606 guc.last_seqno[engine->id]);
2560 total += guc.submissions[engine->guc_id]; 2607 total += guc.submissions[engine->id];
2561 } 2608 }
2562 seq_printf(m, "\t%s: %llu\n", "Total", total); 2609 seq_printf(m, "\t%s: %llu\n", "Total", total);
2563 2610
@@ -2573,7 +2620,7 @@ static int i915_guc_log_dump(struct seq_file *m, void *data)
2573{ 2620{
2574 struct drm_info_node *node = m->private; 2621 struct drm_info_node *node = m->private;
2575 struct drm_device *dev = node->minor->dev; 2622 struct drm_device *dev = node->minor->dev;
2576 struct drm_i915_private *dev_priv = dev->dev_private; 2623 struct drm_i915_private *dev_priv = to_i915(dev);
2577 struct drm_i915_gem_object *log_obj = dev_priv->guc.log_obj; 2624 struct drm_i915_gem_object *log_obj = dev_priv->guc.log_obj;
2578 u32 *log; 2625 u32 *log;
2579 int i = 0, pg; 2626 int i = 0, pg;
@@ -2601,7 +2648,7 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
2601{ 2648{
2602 struct drm_info_node *node = m->private; 2649 struct drm_info_node *node = m->private;
2603 struct drm_device *dev = node->minor->dev; 2650 struct drm_device *dev = node->minor->dev;
2604 struct drm_i915_private *dev_priv = dev->dev_private; 2651 struct drm_i915_private *dev_priv = to_i915(dev);
2605 u32 psrperf = 0; 2652 u32 psrperf = 0;
2606 u32 stat[3]; 2653 u32 stat[3];
2607 enum pipe pipe; 2654 enum pipe pipe;
@@ -2669,7 +2716,6 @@ static int i915_sink_crc(struct seq_file *m, void *data)
2669{ 2716{
2670 struct drm_info_node *node = m->private; 2717 struct drm_info_node *node = m->private;
2671 struct drm_device *dev = node->minor->dev; 2718 struct drm_device *dev = node->minor->dev;
2672 struct intel_encoder *encoder;
2673 struct intel_connector *connector; 2719 struct intel_connector *connector;
2674 struct intel_dp *intel_dp = NULL; 2720 struct intel_dp *intel_dp = NULL;
2675 int ret; 2721 int ret;
@@ -2677,18 +2723,19 @@ static int i915_sink_crc(struct seq_file *m, void *data)
2677 2723
2678 drm_modeset_lock_all(dev); 2724 drm_modeset_lock_all(dev);
2679 for_each_intel_connector(dev, connector) { 2725 for_each_intel_connector(dev, connector) {
2726 struct drm_crtc *crtc;
2680 2727
2681 if (connector->base.dpms != DRM_MODE_DPMS_ON) 2728 if (!connector->base.state->best_encoder)
2682 continue; 2729 continue;
2683 2730
2684 if (!connector->base.encoder) 2731 crtc = connector->base.state->crtc;
2732 if (!crtc->state->active)
2685 continue; 2733 continue;
2686 2734
2687 encoder = to_intel_encoder(connector->base.encoder); 2735 if (connector->base.connector_type != DRM_MODE_CONNECTOR_eDP)
2688 if (encoder->type != INTEL_OUTPUT_EDP)
2689 continue; 2736 continue;
2690 2737
2691 intel_dp = enc_to_intel_dp(&encoder->base); 2738 intel_dp = enc_to_intel_dp(connector->base.state->best_encoder);
2692 2739
2693 ret = intel_dp_sink_crc(intel_dp, crc); 2740 ret = intel_dp_sink_crc(intel_dp, crc);
2694 if (ret) 2741 if (ret)
@@ -2709,7 +2756,7 @@ static int i915_energy_uJ(struct seq_file *m, void *data)
2709{ 2756{
2710 struct drm_info_node *node = m->private; 2757 struct drm_info_node *node = m->private;
2711 struct drm_device *dev = node->minor->dev; 2758 struct drm_device *dev = node->minor->dev;
2712 struct drm_i915_private *dev_priv = dev->dev_private; 2759 struct drm_i915_private *dev_priv = to_i915(dev);
2713 u64 power; 2760 u64 power;
2714 u32 units; 2761 u32 units;
2715 2762
@@ -2735,12 +2782,12 @@ static int i915_runtime_pm_status(struct seq_file *m, void *unused)
2735{ 2782{
2736 struct drm_info_node *node = m->private; 2783 struct drm_info_node *node = m->private;
2737 struct drm_device *dev = node->minor->dev; 2784 struct drm_device *dev = node->minor->dev;
2738 struct drm_i915_private *dev_priv = dev->dev_private; 2785 struct drm_i915_private *dev_priv = to_i915(dev);
2739 2786
2740 if (!HAS_RUNTIME_PM(dev_priv)) 2787 if (!HAS_RUNTIME_PM(dev_priv))
2741 seq_puts(m, "Runtime power management not supported\n"); 2788 seq_puts(m, "Runtime power management not supported\n");
2742 2789
2743 seq_printf(m, "GPU idle: %s\n", yesno(!dev_priv->mm.busy)); 2790 seq_printf(m, "GPU idle: %s\n", yesno(!dev_priv->gt.awake));
2744 seq_printf(m, "IRQs disabled: %s\n", 2791 seq_printf(m, "IRQs disabled: %s\n",
2745 yesno(!intel_irqs_enabled(dev_priv))); 2792 yesno(!intel_irqs_enabled(dev_priv)));
2746#ifdef CONFIG_PM 2793#ifdef CONFIG_PM
@@ -2750,8 +2797,8 @@ static int i915_runtime_pm_status(struct seq_file *m, void *unused)
2750 seq_printf(m, "Device Power Management (CONFIG_PM) disabled\n"); 2797 seq_printf(m, "Device Power Management (CONFIG_PM) disabled\n");
2751#endif 2798#endif
2752 seq_printf(m, "PCI device power state: %s [%d]\n", 2799 seq_printf(m, "PCI device power state: %s [%d]\n",
2753 pci_power_name(dev_priv->dev->pdev->current_state), 2800 pci_power_name(dev_priv->drm.pdev->current_state),
2754 dev_priv->dev->pdev->current_state); 2801 dev_priv->drm.pdev->current_state);
2755 2802
2756 return 0; 2803 return 0;
2757} 2804}
@@ -2760,7 +2807,7 @@ static int i915_power_domain_info(struct seq_file *m, void *unused)
2760{ 2807{
2761 struct drm_info_node *node = m->private; 2808 struct drm_info_node *node = m->private;
2762 struct drm_device *dev = node->minor->dev; 2809 struct drm_device *dev = node->minor->dev;
2763 struct drm_i915_private *dev_priv = dev->dev_private; 2810 struct drm_i915_private *dev_priv = to_i915(dev);
2764 struct i915_power_domains *power_domains = &dev_priv->power_domains; 2811 struct i915_power_domains *power_domains = &dev_priv->power_domains;
2765 int i; 2812 int i;
2766 2813
@@ -2795,7 +2842,7 @@ static int i915_dmc_info(struct seq_file *m, void *unused)
2795{ 2842{
2796 struct drm_info_node *node = m->private; 2843 struct drm_info_node *node = m->private;
2797 struct drm_device *dev = node->minor->dev; 2844 struct drm_device *dev = node->minor->dev;
2798 struct drm_i915_private *dev_priv = dev->dev_private; 2845 struct drm_i915_private *dev_priv = to_i915(dev);
2799 struct intel_csr *csr; 2846 struct intel_csr *csr;
2800 2847
2801 if (!HAS_CSR(dev)) { 2848 if (!HAS_CSR(dev)) {
@@ -2918,7 +2965,7 @@ static void intel_dp_info(struct seq_file *m,
2918 2965
2919 seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]); 2966 seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]);
2920 seq_printf(m, "\taudio support: %s\n", yesno(intel_dp->has_audio)); 2967 seq_printf(m, "\taudio support: %s\n", yesno(intel_dp->has_audio));
2921 if (intel_encoder->type == INTEL_OUTPUT_EDP) 2968 if (intel_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)
2922 intel_panel_info(m, &intel_connector->panel); 2969 intel_panel_info(m, &intel_connector->panel);
2923} 2970}
2924 2971
@@ -2957,14 +3004,26 @@ static void intel_connector_info(struct seq_file *m,
2957 seq_printf(m, "\tCEA rev: %d\n", 3004 seq_printf(m, "\tCEA rev: %d\n",
2958 connector->display_info.cea_rev); 3005 connector->display_info.cea_rev);
2959 } 3006 }
2960 if (intel_encoder) { 3007
2961 if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT || 3008 if (!intel_encoder || intel_encoder->type == INTEL_OUTPUT_DP_MST)
2962 intel_encoder->type == INTEL_OUTPUT_EDP) 3009 return;
2963 intel_dp_info(m, intel_connector); 3010
2964 else if (intel_encoder->type == INTEL_OUTPUT_HDMI) 3011 switch (connector->connector_type) {
2965 intel_hdmi_info(m, intel_connector); 3012 case DRM_MODE_CONNECTOR_DisplayPort:
2966 else if (intel_encoder->type == INTEL_OUTPUT_LVDS) 3013 case DRM_MODE_CONNECTOR_eDP:
3014 intel_dp_info(m, intel_connector);
3015 break;
3016 case DRM_MODE_CONNECTOR_LVDS:
3017 if (intel_encoder->type == INTEL_OUTPUT_LVDS)
2967 intel_lvds_info(m, intel_connector); 3018 intel_lvds_info(m, intel_connector);
3019 break;
3020 case DRM_MODE_CONNECTOR_HDMIA:
3021 if (intel_encoder->type == INTEL_OUTPUT_HDMI ||
3022 intel_encoder->type == INTEL_OUTPUT_UNKNOWN)
3023 intel_hdmi_info(m, intel_connector);
3024 break;
3025 default:
3026 break;
2968 } 3027 }
2969 3028
2970 seq_printf(m, "\tmodes:\n"); 3029 seq_printf(m, "\tmodes:\n");
@@ -2974,7 +3033,7 @@ static void intel_connector_info(struct seq_file *m,
2974 3033
2975static bool cursor_active(struct drm_device *dev, int pipe) 3034static bool cursor_active(struct drm_device *dev, int pipe)
2976{ 3035{
2977 struct drm_i915_private *dev_priv = dev->dev_private; 3036 struct drm_i915_private *dev_priv = to_i915(dev);
2978 u32 state; 3037 u32 state;
2979 3038
2980 if (IS_845G(dev) || IS_I865G(dev)) 3039 if (IS_845G(dev) || IS_I865G(dev))
@@ -2987,7 +3046,7 @@ static bool cursor_active(struct drm_device *dev, int pipe)
2987 3046
2988static bool cursor_position(struct drm_device *dev, int pipe, int *x, int *y) 3047static bool cursor_position(struct drm_device *dev, int pipe, int *x, int *y)
2989{ 3048{
2990 struct drm_i915_private *dev_priv = dev->dev_private; 3049 struct drm_i915_private *dev_priv = to_i915(dev);
2991 u32 pos; 3050 u32 pos;
2992 3051
2993 pos = I915_READ(CURPOS(pipe)); 3052 pos = I915_READ(CURPOS(pipe));
@@ -3108,7 +3167,7 @@ static int i915_display_info(struct seq_file *m, void *unused)
3108{ 3167{
3109 struct drm_info_node *node = m->private; 3168 struct drm_info_node *node = m->private;
3110 struct drm_device *dev = node->minor->dev; 3169 struct drm_device *dev = node->minor->dev;
3111 struct drm_i915_private *dev_priv = dev->dev_private; 3170 struct drm_i915_private *dev_priv = to_i915(dev);
3112 struct intel_crtc *crtc; 3171 struct intel_crtc *crtc;
3113 struct drm_connector *connector; 3172 struct drm_connector *connector;
3114 3173
@@ -3163,13 +3222,13 @@ static int i915_semaphore_status(struct seq_file *m, void *unused)
3163{ 3222{
3164 struct drm_info_node *node = (struct drm_info_node *) m->private; 3223 struct drm_info_node *node = (struct drm_info_node *) m->private;
3165 struct drm_device *dev = node->minor->dev; 3224 struct drm_device *dev = node->minor->dev;
3166 struct drm_i915_private *dev_priv = dev->dev_private; 3225 struct drm_i915_private *dev_priv = to_i915(dev);
3167 struct intel_engine_cs *engine; 3226 struct intel_engine_cs *engine;
3168 int num_rings = hweight32(INTEL_INFO(dev)->ring_mask); 3227 int num_rings = hweight32(INTEL_INFO(dev)->ring_mask);
3169 enum intel_engine_id id; 3228 enum intel_engine_id id;
3170 int j, ret; 3229 int j, ret;
3171 3230
3172 if (!i915_semaphore_is_enabled(dev)) { 3231 if (!i915_semaphore_is_enabled(dev_priv)) {
3173 seq_puts(m, "Semaphores are disabled\n"); 3232 seq_puts(m, "Semaphores are disabled\n");
3174 return 0; 3233 return 0;
3175 } 3234 }
@@ -3236,7 +3295,7 @@ static int i915_shared_dplls_info(struct seq_file *m, void *unused)
3236{ 3295{
3237 struct drm_info_node *node = (struct drm_info_node *) m->private; 3296 struct drm_info_node *node = (struct drm_info_node *) m->private;
3238 struct drm_device *dev = node->minor->dev; 3297 struct drm_device *dev = node->minor->dev;
3239 struct drm_i915_private *dev_priv = dev->dev_private; 3298 struct drm_i915_private *dev_priv = to_i915(dev);
3240 int i; 3299 int i;
3241 3300
3242 drm_modeset_lock_all(dev); 3301 drm_modeset_lock_all(dev);
@@ -3266,7 +3325,7 @@ static int i915_wa_registers(struct seq_file *m, void *unused)
3266 struct intel_engine_cs *engine; 3325 struct intel_engine_cs *engine;
3267 struct drm_info_node *node = (struct drm_info_node *) m->private; 3326 struct drm_info_node *node = (struct drm_info_node *) m->private;
3268 struct drm_device *dev = node->minor->dev; 3327 struct drm_device *dev = node->minor->dev;
3269 struct drm_i915_private *dev_priv = dev->dev_private; 3328 struct drm_i915_private *dev_priv = to_i915(dev);
3270 struct i915_workarounds *workarounds = &dev_priv->workarounds; 3329 struct i915_workarounds *workarounds = &dev_priv->workarounds;
3271 enum intel_engine_id id; 3330 enum intel_engine_id id;
3272 3331
@@ -3304,7 +3363,7 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
3304{ 3363{
3305 struct drm_info_node *node = m->private; 3364 struct drm_info_node *node = m->private;
3306 struct drm_device *dev = node->minor->dev; 3365 struct drm_device *dev = node->minor->dev;
3307 struct drm_i915_private *dev_priv = dev->dev_private; 3366 struct drm_i915_private *dev_priv = to_i915(dev);
3308 struct skl_ddb_allocation *ddb; 3367 struct skl_ddb_allocation *ddb;
3309 struct skl_ddb_entry *entry; 3368 struct skl_ddb_entry *entry;
3310 enum pipe pipe; 3369 enum pipe pipe;
@@ -3342,31 +3401,16 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
3342static void drrs_status_per_crtc(struct seq_file *m, 3401static void drrs_status_per_crtc(struct seq_file *m,
3343 struct drm_device *dev, struct intel_crtc *intel_crtc) 3402 struct drm_device *dev, struct intel_crtc *intel_crtc)
3344{ 3403{
3345 struct intel_encoder *intel_encoder; 3404 struct drm_i915_private *dev_priv = to_i915(dev);
3346 struct drm_i915_private *dev_priv = dev->dev_private;
3347 struct i915_drrs *drrs = &dev_priv->drrs; 3405 struct i915_drrs *drrs = &dev_priv->drrs;
3348 int vrefresh = 0; 3406 int vrefresh = 0;
3407 struct drm_connector *connector;
3349 3408
3350 for_each_encoder_on_crtc(dev, &intel_crtc->base, intel_encoder) { 3409 drm_for_each_connector(connector, dev) {
3351 /* Encoder connected on this CRTC */ 3410 if (connector->state->crtc != &intel_crtc->base)
3352 switch (intel_encoder->type) { 3411 continue;
3353 case INTEL_OUTPUT_EDP: 3412
3354 seq_puts(m, "eDP:\n"); 3413 seq_printf(m, "%s:\n", connector->name);
3355 break;
3356 case INTEL_OUTPUT_DSI:
3357 seq_puts(m, "DSI:\n");
3358 break;
3359 case INTEL_OUTPUT_HDMI:
3360 seq_puts(m, "HDMI:\n");
3361 break;
3362 case INTEL_OUTPUT_DISPLAYPORT:
3363 seq_puts(m, "DP:\n");
3364 break;
3365 default:
3366 seq_printf(m, "Other encoder (id=%d).\n",
3367 intel_encoder->type);
3368 return;
3369 }
3370 } 3414 }
3371 3415
3372 if (dev_priv->vbt.drrs_type == STATIC_DRRS_SUPPORT) 3416 if (dev_priv->vbt.drrs_type == STATIC_DRRS_SUPPORT)
@@ -3429,18 +3473,16 @@ static int i915_drrs_status(struct seq_file *m, void *unused)
3429 struct intel_crtc *intel_crtc; 3473 struct intel_crtc *intel_crtc;
3430 int active_crtc_cnt = 0; 3474 int active_crtc_cnt = 0;
3431 3475
3476 drm_modeset_lock_all(dev);
3432 for_each_intel_crtc(dev, intel_crtc) { 3477 for_each_intel_crtc(dev, intel_crtc) {
3433 drm_modeset_lock(&intel_crtc->base.mutex, NULL);
3434
3435 if (intel_crtc->base.state->active) { 3478 if (intel_crtc->base.state->active) {
3436 active_crtc_cnt++; 3479 active_crtc_cnt++;
3437 seq_printf(m, "\nCRTC %d: ", active_crtc_cnt); 3480 seq_printf(m, "\nCRTC %d: ", active_crtc_cnt);
3438 3481
3439 drrs_status_per_crtc(m, dev, intel_crtc); 3482 drrs_status_per_crtc(m, dev, intel_crtc);
3440 } 3483 }
3441
3442 drm_modeset_unlock(&intel_crtc->base.mutex);
3443 } 3484 }
3485 drm_modeset_unlock_all(dev);
3444 3486
3445 if (!active_crtc_cnt) 3487 if (!active_crtc_cnt)
3446 seq_puts(m, "No active crtc found\n"); 3488 seq_puts(m, "No active crtc found\n");
@@ -3458,17 +3500,23 @@ static int i915_dp_mst_info(struct seq_file *m, void *unused)
3458{ 3500{
3459 struct drm_info_node *node = (struct drm_info_node *) m->private; 3501 struct drm_info_node *node = (struct drm_info_node *) m->private;
3460 struct drm_device *dev = node->minor->dev; 3502 struct drm_device *dev = node->minor->dev;
3461 struct drm_encoder *encoder;
3462 struct intel_encoder *intel_encoder; 3503 struct intel_encoder *intel_encoder;
3463 struct intel_digital_port *intel_dig_port; 3504 struct intel_digital_port *intel_dig_port;
3505 struct drm_connector *connector;
3506
3464 drm_modeset_lock_all(dev); 3507 drm_modeset_lock_all(dev);
3465 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 3508 drm_for_each_connector(connector, dev) {
3466 intel_encoder = to_intel_encoder(encoder); 3509 if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
3467 if (intel_encoder->type != INTEL_OUTPUT_DISPLAYPORT)
3468 continue; 3510 continue;
3469 intel_dig_port = enc_to_dig_port(encoder); 3511
3512 intel_encoder = intel_attached_encoder(connector);
3513 if (!intel_encoder || intel_encoder->type == INTEL_OUTPUT_DP_MST)
3514 continue;
3515
3516 intel_dig_port = enc_to_dig_port(&intel_encoder->base);
3470 if (!intel_dig_port->dp.can_mst) 3517 if (!intel_dig_port->dp.can_mst)
3471 continue; 3518 continue;
3519
3472 seq_printf(m, "MST Source Port %c\n", 3520 seq_printf(m, "MST Source Port %c\n",
3473 port_name(intel_dig_port->port)); 3521 port_name(intel_dig_port->port));
3474 drm_dp_mst_dump_topology(m, &intel_dig_port->dp.mst_mgr); 3522 drm_dp_mst_dump_topology(m, &intel_dig_port->dp.mst_mgr);
@@ -3480,7 +3528,7 @@ static int i915_dp_mst_info(struct seq_file *m, void *unused)
3480static int i915_pipe_crc_open(struct inode *inode, struct file *filep) 3528static int i915_pipe_crc_open(struct inode *inode, struct file *filep)
3481{ 3529{
3482 struct pipe_crc_info *info = inode->i_private; 3530 struct pipe_crc_info *info = inode->i_private;
3483 struct drm_i915_private *dev_priv = info->dev->dev_private; 3531 struct drm_i915_private *dev_priv = to_i915(info->dev);
3484 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[info->pipe]; 3532 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[info->pipe];
3485 3533
3486 if (info->pipe >= INTEL_INFO(info->dev)->num_pipes) 3534 if (info->pipe >= INTEL_INFO(info->dev)->num_pipes)
@@ -3504,7 +3552,7 @@ static int i915_pipe_crc_open(struct inode *inode, struct file *filep)
3504static int i915_pipe_crc_release(struct inode *inode, struct file *filep) 3552static int i915_pipe_crc_release(struct inode *inode, struct file *filep)
3505{ 3553{
3506 struct pipe_crc_info *info = inode->i_private; 3554 struct pipe_crc_info *info = inode->i_private;
3507 struct drm_i915_private *dev_priv = info->dev->dev_private; 3555 struct drm_i915_private *dev_priv = to_i915(info->dev);
3508 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[info->pipe]; 3556 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[info->pipe];
3509 3557
3510 spin_lock_irq(&pipe_crc->lock); 3558 spin_lock_irq(&pipe_crc->lock);
@@ -3532,7 +3580,7 @@ i915_pipe_crc_read(struct file *filep, char __user *user_buf, size_t count,
3532{ 3580{
3533 struct pipe_crc_info *info = filep->private_data; 3581 struct pipe_crc_info *info = filep->private_data;
3534 struct drm_device *dev = info->dev; 3582 struct drm_device *dev = info->dev;
3535 struct drm_i915_private *dev_priv = dev->dev_private; 3583 struct drm_i915_private *dev_priv = to_i915(dev);
3536 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[info->pipe]; 3584 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[info->pipe];
3537 char buf[PIPE_CRC_BUFFER_LEN]; 3585 char buf[PIPE_CRC_BUFFER_LEN];
3538 int n_entries; 3586 int n_entries;
@@ -3665,7 +3713,7 @@ static const char *pipe_crc_source_name(enum intel_pipe_crc_source source)
3665static int display_crc_ctl_show(struct seq_file *m, void *data) 3713static int display_crc_ctl_show(struct seq_file *m, void *data)
3666{ 3714{
3667 struct drm_device *dev = m->private; 3715 struct drm_device *dev = m->private;
3668 struct drm_i915_private *dev_priv = dev->dev_private; 3716 struct drm_i915_private *dev_priv = to_i915(dev);
3669 int i; 3717 int i;
3670 3718
3671 for (i = 0; i < I915_MAX_PIPES; i++) 3719 for (i = 0; i < I915_MAX_PIPES; i++)
@@ -3726,7 +3774,7 @@ static int i9xx_pipe_crc_auto_source(struct drm_device *dev, enum pipe pipe,
3726 case INTEL_OUTPUT_TVOUT: 3774 case INTEL_OUTPUT_TVOUT:
3727 *source = INTEL_PIPE_CRC_SOURCE_TV; 3775 *source = INTEL_PIPE_CRC_SOURCE_TV;
3728 break; 3776 break;
3729 case INTEL_OUTPUT_DISPLAYPORT: 3777 case INTEL_OUTPUT_DP:
3730 case INTEL_OUTPUT_EDP: 3778 case INTEL_OUTPUT_EDP:
3731 dig_port = enc_to_dig_port(&encoder->base); 3779 dig_port = enc_to_dig_port(&encoder->base);
3732 switch (dig_port->port) { 3780 switch (dig_port->port) {
@@ -3759,7 +3807,7 @@ static int vlv_pipe_crc_ctl_reg(struct drm_device *dev,
3759 enum intel_pipe_crc_source *source, 3807 enum intel_pipe_crc_source *source,
3760 uint32_t *val) 3808 uint32_t *val)
3761{ 3809{
3762 struct drm_i915_private *dev_priv = dev->dev_private; 3810 struct drm_i915_private *dev_priv = to_i915(dev);
3763 bool need_stable_symbols = false; 3811 bool need_stable_symbols = false;
3764 3812
3765 if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) { 3813 if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) {
@@ -3830,7 +3878,7 @@ static int i9xx_pipe_crc_ctl_reg(struct drm_device *dev,
3830 enum intel_pipe_crc_source *source, 3878 enum intel_pipe_crc_source *source,
3831 uint32_t *val) 3879 uint32_t *val)
3832{ 3880{
3833 struct drm_i915_private *dev_priv = dev->dev_private; 3881 struct drm_i915_private *dev_priv = to_i915(dev);
3834 bool need_stable_symbols = false; 3882 bool need_stable_symbols = false;
3835 3883
3836 if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) { 3884 if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) {
@@ -3904,7 +3952,7 @@ static int i9xx_pipe_crc_ctl_reg(struct drm_device *dev,
3904static void vlv_undo_pipe_scramble_reset(struct drm_device *dev, 3952static void vlv_undo_pipe_scramble_reset(struct drm_device *dev,
3905 enum pipe pipe) 3953 enum pipe pipe)
3906{ 3954{
3907 struct drm_i915_private *dev_priv = dev->dev_private; 3955 struct drm_i915_private *dev_priv = to_i915(dev);
3908 uint32_t tmp = I915_READ(PORT_DFT2_G4X); 3956 uint32_t tmp = I915_READ(PORT_DFT2_G4X);
3909 3957
3910 switch (pipe) { 3958 switch (pipe) {
@@ -3929,7 +3977,7 @@ static void vlv_undo_pipe_scramble_reset(struct drm_device *dev,
3929static void g4x_undo_pipe_scramble_reset(struct drm_device *dev, 3977static void g4x_undo_pipe_scramble_reset(struct drm_device *dev,
3930 enum pipe pipe) 3978 enum pipe pipe)
3931{ 3979{
3932 struct drm_i915_private *dev_priv = dev->dev_private; 3980 struct drm_i915_private *dev_priv = to_i915(dev);
3933 uint32_t tmp = I915_READ(PORT_DFT2_G4X); 3981 uint32_t tmp = I915_READ(PORT_DFT2_G4X);
3934 3982
3935 if (pipe == PIPE_A) 3983 if (pipe == PIPE_A)
@@ -3972,7 +4020,7 @@ static int ilk_pipe_crc_ctl_reg(enum intel_pipe_crc_source *source,
3972 4020
3973static void hsw_trans_edp_pipe_A_crc_wa(struct drm_device *dev, bool enable) 4021static void hsw_trans_edp_pipe_A_crc_wa(struct drm_device *dev, bool enable)
3974{ 4022{
3975 struct drm_i915_private *dev_priv = dev->dev_private; 4023 struct drm_i915_private *dev_priv = to_i915(dev);
3976 struct intel_crtc *crtc = 4024 struct intel_crtc *crtc =
3977 to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_A]); 4025 to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_A]);
3978 struct intel_crtc_state *pipe_config; 4026 struct intel_crtc_state *pipe_config;
@@ -4040,7 +4088,7 @@ static int ivb_pipe_crc_ctl_reg(struct drm_device *dev,
4040static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, 4088static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe,
4041 enum intel_pipe_crc_source source) 4089 enum intel_pipe_crc_source source)
4042{ 4090{
4043 struct drm_i915_private *dev_priv = dev->dev_private; 4091 struct drm_i915_private *dev_priv = to_i915(dev);
4044 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe]; 4092 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe];
4045 struct intel_crtc *crtc = to_intel_crtc(intel_get_crtc_for_pipe(dev, 4093 struct intel_crtc *crtc = to_intel_crtc(intel_get_crtc_for_pipe(dev,
4046 pipe)); 4094 pipe));
@@ -4547,7 +4595,7 @@ static void wm_latency_show(struct seq_file *m, const uint16_t wm[8])
4547static int pri_wm_latency_show(struct seq_file *m, void *data) 4595static int pri_wm_latency_show(struct seq_file *m, void *data)
4548{ 4596{
4549 struct drm_device *dev = m->private; 4597 struct drm_device *dev = m->private;
4550 struct drm_i915_private *dev_priv = dev->dev_private; 4598 struct drm_i915_private *dev_priv = to_i915(dev);
4551 const uint16_t *latencies; 4599 const uint16_t *latencies;
4552 4600
4553 if (INTEL_INFO(dev)->gen >= 9) 4601 if (INTEL_INFO(dev)->gen >= 9)
@@ -4563,7 +4611,7 @@ static int pri_wm_latency_show(struct seq_file *m, void *data)
4563static int spr_wm_latency_show(struct seq_file *m, void *data) 4611static int spr_wm_latency_show(struct seq_file *m, void *data)
4564{ 4612{
4565 struct drm_device *dev = m->private; 4613 struct drm_device *dev = m->private;
4566 struct drm_i915_private *dev_priv = dev->dev_private; 4614 struct drm_i915_private *dev_priv = to_i915(dev);
4567 const uint16_t *latencies; 4615 const uint16_t *latencies;
4568 4616
4569 if (INTEL_INFO(dev)->gen >= 9) 4617 if (INTEL_INFO(dev)->gen >= 9)
@@ -4579,7 +4627,7 @@ static int spr_wm_latency_show(struct seq_file *m, void *data)
4579static int cur_wm_latency_show(struct seq_file *m, void *data) 4627static int cur_wm_latency_show(struct seq_file *m, void *data)
4580{ 4628{
4581 struct drm_device *dev = m->private; 4629 struct drm_device *dev = m->private;
4582 struct drm_i915_private *dev_priv = dev->dev_private; 4630 struct drm_i915_private *dev_priv = to_i915(dev);
4583 const uint16_t *latencies; 4631 const uint16_t *latencies;
4584 4632
4585 if (INTEL_INFO(dev)->gen >= 9) 4633 if (INTEL_INFO(dev)->gen >= 9)
@@ -4670,7 +4718,7 @@ static ssize_t pri_wm_latency_write(struct file *file, const char __user *ubuf,
4670{ 4718{
4671 struct seq_file *m = file->private_data; 4719 struct seq_file *m = file->private_data;
4672 struct drm_device *dev = m->private; 4720 struct drm_device *dev = m->private;
4673 struct drm_i915_private *dev_priv = dev->dev_private; 4721 struct drm_i915_private *dev_priv = to_i915(dev);
4674 uint16_t *latencies; 4722 uint16_t *latencies;
4675 4723
4676 if (INTEL_INFO(dev)->gen >= 9) 4724 if (INTEL_INFO(dev)->gen >= 9)
@@ -4686,7 +4734,7 @@ static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf,
4686{ 4734{
4687 struct seq_file *m = file->private_data; 4735 struct seq_file *m = file->private_data;
4688 struct drm_device *dev = m->private; 4736 struct drm_device *dev = m->private;
4689 struct drm_i915_private *dev_priv = dev->dev_private; 4737 struct drm_i915_private *dev_priv = to_i915(dev);
4690 uint16_t *latencies; 4738 uint16_t *latencies;
4691 4739
4692 if (INTEL_INFO(dev)->gen >= 9) 4740 if (INTEL_INFO(dev)->gen >= 9)
@@ -4702,7 +4750,7 @@ static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf,
4702{ 4750{
4703 struct seq_file *m = file->private_data; 4751 struct seq_file *m = file->private_data;
4704 struct drm_device *dev = m->private; 4752 struct drm_device *dev = m->private;
4705 struct drm_i915_private *dev_priv = dev->dev_private; 4753 struct drm_i915_private *dev_priv = to_i915(dev);
4706 uint16_t *latencies; 4754 uint16_t *latencies;
4707 4755
4708 if (INTEL_INFO(dev)->gen >= 9) 4756 if (INTEL_INFO(dev)->gen >= 9)
@@ -4744,7 +4792,7 @@ static int
4744i915_wedged_get(void *data, u64 *val) 4792i915_wedged_get(void *data, u64 *val)
4745{ 4793{
4746 struct drm_device *dev = data; 4794 struct drm_device *dev = data;
4747 struct drm_i915_private *dev_priv = dev->dev_private; 4795 struct drm_i915_private *dev_priv = to_i915(dev);
4748 4796
4749 *val = i915_terminally_wedged(&dev_priv->gpu_error); 4797 *val = i915_terminally_wedged(&dev_priv->gpu_error);
4750 4798
@@ -4755,7 +4803,7 @@ static int
4755i915_wedged_set(void *data, u64 val) 4803i915_wedged_set(void *data, u64 val)
4756{ 4804{
4757 struct drm_device *dev = data; 4805 struct drm_device *dev = data;
4758 struct drm_i915_private *dev_priv = dev->dev_private; 4806 struct drm_i915_private *dev_priv = to_i915(dev);
4759 4807
4760 /* 4808 /*
4761 * There is no safeguard against this debugfs entry colliding 4809 * There is no safeguard against this debugfs entry colliding
@@ -4770,7 +4818,7 @@ i915_wedged_set(void *data, u64 val)
4770 4818
4771 intel_runtime_pm_get(dev_priv); 4819 intel_runtime_pm_get(dev_priv);
4772 4820
4773 i915_handle_error(dev, val, 4821 i915_handle_error(dev_priv, val,
4774 "Manually setting wedged to %llu", val); 4822 "Manually setting wedged to %llu", val);
4775 4823
4776 intel_runtime_pm_put(dev_priv); 4824 intel_runtime_pm_put(dev_priv);
@@ -4783,44 +4831,10 @@ DEFINE_SIMPLE_ATTRIBUTE(i915_wedged_fops,
4783 "%llu\n"); 4831 "%llu\n");
4784 4832
4785static int 4833static int
4786i915_ring_stop_get(void *data, u64 *val)
4787{
4788 struct drm_device *dev = data;
4789 struct drm_i915_private *dev_priv = dev->dev_private;
4790
4791 *val = dev_priv->gpu_error.stop_rings;
4792
4793 return 0;
4794}
4795
4796static int
4797i915_ring_stop_set(void *data, u64 val)
4798{
4799 struct drm_device *dev = data;
4800 struct drm_i915_private *dev_priv = dev->dev_private;
4801 int ret;
4802
4803 DRM_DEBUG_DRIVER("Stopping rings 0x%08llx\n", val);
4804
4805 ret = mutex_lock_interruptible(&dev->struct_mutex);
4806 if (ret)
4807 return ret;
4808
4809 dev_priv->gpu_error.stop_rings = val;
4810 mutex_unlock(&dev->struct_mutex);
4811
4812 return 0;
4813}
4814
4815DEFINE_SIMPLE_ATTRIBUTE(i915_ring_stop_fops,
4816 i915_ring_stop_get, i915_ring_stop_set,
4817 "0x%08llx\n");
4818
4819static int
4820i915_ring_missed_irq_get(void *data, u64 *val) 4834i915_ring_missed_irq_get(void *data, u64 *val)
4821{ 4835{
4822 struct drm_device *dev = data; 4836 struct drm_device *dev = data;
4823 struct drm_i915_private *dev_priv = dev->dev_private; 4837 struct drm_i915_private *dev_priv = to_i915(dev);
4824 4838
4825 *val = dev_priv->gpu_error.missed_irq_rings; 4839 *val = dev_priv->gpu_error.missed_irq_rings;
4826 return 0; 4840 return 0;
@@ -4830,7 +4844,7 @@ static int
4830i915_ring_missed_irq_set(void *data, u64 val) 4844i915_ring_missed_irq_set(void *data, u64 val)
4831{ 4845{
4832 struct drm_device *dev = data; 4846 struct drm_device *dev = data;
4833 struct drm_i915_private *dev_priv = dev->dev_private; 4847 struct drm_i915_private *dev_priv = to_i915(dev);
4834 int ret; 4848 int ret;
4835 4849
4836 /* Lock against concurrent debugfs callers */ 4850 /* Lock against concurrent debugfs callers */
@@ -4851,7 +4865,7 @@ static int
4851i915_ring_test_irq_get(void *data, u64 *val) 4865i915_ring_test_irq_get(void *data, u64 *val)
4852{ 4866{
4853 struct drm_device *dev = data; 4867 struct drm_device *dev = data;
4854 struct drm_i915_private *dev_priv = dev->dev_private; 4868 struct drm_i915_private *dev_priv = to_i915(dev);
4855 4869
4856 *val = dev_priv->gpu_error.test_irq_rings; 4870 *val = dev_priv->gpu_error.test_irq_rings;
4857 4871
@@ -4862,18 +4876,11 @@ static int
4862i915_ring_test_irq_set(void *data, u64 val) 4876i915_ring_test_irq_set(void *data, u64 val)
4863{ 4877{
4864 struct drm_device *dev = data; 4878 struct drm_device *dev = data;
4865 struct drm_i915_private *dev_priv = dev->dev_private; 4879 struct drm_i915_private *dev_priv = to_i915(dev);
4866 int ret;
4867 4880
4881 val &= INTEL_INFO(dev_priv)->ring_mask;
4868 DRM_DEBUG_DRIVER("Masking interrupts on rings 0x%08llx\n", val); 4882 DRM_DEBUG_DRIVER("Masking interrupts on rings 0x%08llx\n", val);
4869
4870 /* Lock against concurrent debugfs callers */
4871 ret = mutex_lock_interruptible(&dev->struct_mutex);
4872 if (ret)
4873 return ret;
4874
4875 dev_priv->gpu_error.test_irq_rings = val; 4883 dev_priv->gpu_error.test_irq_rings = val;
4876 mutex_unlock(&dev->struct_mutex);
4877 4884
4878 return 0; 4885 return 0;
4879} 4886}
@@ -4902,7 +4909,7 @@ static int
4902i915_drop_caches_set(void *data, u64 val) 4909i915_drop_caches_set(void *data, u64 val)
4903{ 4910{
4904 struct drm_device *dev = data; 4911 struct drm_device *dev = data;
4905 struct drm_i915_private *dev_priv = dev->dev_private; 4912 struct drm_i915_private *dev_priv = to_i915(dev);
4906 int ret; 4913 int ret;
4907 4914
4908 DRM_DEBUG("Dropping caches: 0x%08llx\n", val); 4915 DRM_DEBUG("Dropping caches: 0x%08llx\n", val);
@@ -4914,13 +4921,13 @@ i915_drop_caches_set(void *data, u64 val)
4914 return ret; 4921 return ret;
4915 4922
4916 if (val & DROP_ACTIVE) { 4923 if (val & DROP_ACTIVE) {
4917 ret = i915_gpu_idle(dev); 4924 ret = i915_gem_wait_for_idle(dev_priv);
4918 if (ret) 4925 if (ret)
4919 goto unlock; 4926 goto unlock;
4920 } 4927 }
4921 4928
4922 if (val & (DROP_RETIRE | DROP_ACTIVE)) 4929 if (val & (DROP_RETIRE | DROP_ACTIVE))
4923 i915_gem_retire_requests(dev); 4930 i915_gem_retire_requests(dev_priv);
4924 4931
4925 if (val & DROP_BOUND) 4932 if (val & DROP_BOUND)
4926 i915_gem_shrink(dev_priv, LONG_MAX, I915_SHRINK_BOUND); 4933 i915_gem_shrink(dev_priv, LONG_MAX, I915_SHRINK_BOUND);
@@ -4942,7 +4949,7 @@ static int
4942i915_max_freq_get(void *data, u64 *val) 4949i915_max_freq_get(void *data, u64 *val)
4943{ 4950{
4944 struct drm_device *dev = data; 4951 struct drm_device *dev = data;
4945 struct drm_i915_private *dev_priv = dev->dev_private; 4952 struct drm_i915_private *dev_priv = to_i915(dev);
4946 int ret; 4953 int ret;
4947 4954
4948 if (INTEL_INFO(dev)->gen < 6) 4955 if (INTEL_INFO(dev)->gen < 6)
@@ -4964,7 +4971,7 @@ static int
4964i915_max_freq_set(void *data, u64 val) 4971i915_max_freq_set(void *data, u64 val)
4965{ 4972{
4966 struct drm_device *dev = data; 4973 struct drm_device *dev = data;
4967 struct drm_i915_private *dev_priv = dev->dev_private; 4974 struct drm_i915_private *dev_priv = to_i915(dev);
4968 u32 hw_max, hw_min; 4975 u32 hw_max, hw_min;
4969 int ret; 4976 int ret;
4970 4977
@@ -4994,7 +5001,7 @@ i915_max_freq_set(void *data, u64 val)
4994 5001
4995 dev_priv->rps.max_freq_softlimit = val; 5002 dev_priv->rps.max_freq_softlimit = val;
4996 5003
4997 intel_set_rps(dev, val); 5004 intel_set_rps(dev_priv, val);
4998 5005
4999 mutex_unlock(&dev_priv->rps.hw_lock); 5006 mutex_unlock(&dev_priv->rps.hw_lock);
5000 5007
@@ -5009,7 +5016,7 @@ static int
5009i915_min_freq_get(void *data, u64 *val) 5016i915_min_freq_get(void *data, u64 *val)
5010{ 5017{
5011 struct drm_device *dev = data; 5018 struct drm_device *dev = data;
5012 struct drm_i915_private *dev_priv = dev->dev_private; 5019 struct drm_i915_private *dev_priv = to_i915(dev);
5013 int ret; 5020 int ret;
5014 5021
5015 if (INTEL_INFO(dev)->gen < 6) 5022 if (INTEL_INFO(dev)->gen < 6)
@@ -5031,7 +5038,7 @@ static int
5031i915_min_freq_set(void *data, u64 val) 5038i915_min_freq_set(void *data, u64 val)
5032{ 5039{
5033 struct drm_device *dev = data; 5040 struct drm_device *dev = data;
5034 struct drm_i915_private *dev_priv = dev->dev_private; 5041 struct drm_i915_private *dev_priv = to_i915(dev);
5035 u32 hw_max, hw_min; 5042 u32 hw_max, hw_min;
5036 int ret; 5043 int ret;
5037 5044
@@ -5061,7 +5068,7 @@ i915_min_freq_set(void *data, u64 val)
5061 5068
5062 dev_priv->rps.min_freq_softlimit = val; 5069 dev_priv->rps.min_freq_softlimit = val;
5063 5070
5064 intel_set_rps(dev, val); 5071 intel_set_rps(dev_priv, val);
5065 5072
5066 mutex_unlock(&dev_priv->rps.hw_lock); 5073 mutex_unlock(&dev_priv->rps.hw_lock);
5067 5074
@@ -5076,7 +5083,7 @@ static int
5076i915_cache_sharing_get(void *data, u64 *val) 5083i915_cache_sharing_get(void *data, u64 *val)
5077{ 5084{
5078 struct drm_device *dev = data; 5085 struct drm_device *dev = data;
5079 struct drm_i915_private *dev_priv = dev->dev_private; 5086 struct drm_i915_private *dev_priv = to_i915(dev);
5080 u32 snpcr; 5087 u32 snpcr;
5081 int ret; 5088 int ret;
5082 5089
@@ -5091,7 +5098,7 @@ i915_cache_sharing_get(void *data, u64 *val)
5091 snpcr = I915_READ(GEN6_MBCUNIT_SNPCR); 5098 snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
5092 5099
5093 intel_runtime_pm_put(dev_priv); 5100 intel_runtime_pm_put(dev_priv);
5094 mutex_unlock(&dev_priv->dev->struct_mutex); 5101 mutex_unlock(&dev_priv->drm.struct_mutex);
5095 5102
5096 *val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT; 5103 *val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
5097 5104
@@ -5102,7 +5109,7 @@ static int
5102i915_cache_sharing_set(void *data, u64 val) 5109i915_cache_sharing_set(void *data, u64 val)
5103{ 5110{
5104 struct drm_device *dev = data; 5111 struct drm_device *dev = data;
5105 struct drm_i915_private *dev_priv = dev->dev_private; 5112 struct drm_i915_private *dev_priv = to_i915(dev);
5106 u32 snpcr; 5113 u32 snpcr;
5107 5114
5108 if (!(IS_GEN6(dev) || IS_GEN7(dev))) 5115 if (!(IS_GEN6(dev) || IS_GEN7(dev)))
@@ -5139,7 +5146,7 @@ struct sseu_dev_status {
5139static void cherryview_sseu_device_status(struct drm_device *dev, 5146static void cherryview_sseu_device_status(struct drm_device *dev,
5140 struct sseu_dev_status *stat) 5147 struct sseu_dev_status *stat)
5141{ 5148{
5142 struct drm_i915_private *dev_priv = dev->dev_private; 5149 struct drm_i915_private *dev_priv = to_i915(dev);
5143 int ss_max = 2; 5150 int ss_max = 2;
5144 int ss; 5151 int ss;
5145 u32 sig1[ss_max], sig2[ss_max]; 5152 u32 sig1[ss_max], sig2[ss_max];
@@ -5171,7 +5178,7 @@ static void cherryview_sseu_device_status(struct drm_device *dev,
5171static void gen9_sseu_device_status(struct drm_device *dev, 5178static void gen9_sseu_device_status(struct drm_device *dev,
5172 struct sseu_dev_status *stat) 5179 struct sseu_dev_status *stat)
5173{ 5180{
5174 struct drm_i915_private *dev_priv = dev->dev_private; 5181 struct drm_i915_private *dev_priv = to_i915(dev);
5175 int s_max = 3, ss_max = 4; 5182 int s_max = 3, ss_max = 4;
5176 int s, ss; 5183 int s, ss;
5177 u32 s_reg[s_max], eu_reg[2*s_max], eu_mask[2]; 5184 u32 s_reg[s_max], eu_reg[2*s_max], eu_mask[2];
@@ -5236,7 +5243,7 @@ static void gen9_sseu_device_status(struct drm_device *dev,
5236static void broadwell_sseu_device_status(struct drm_device *dev, 5243static void broadwell_sseu_device_status(struct drm_device *dev,
5237 struct sseu_dev_status *stat) 5244 struct sseu_dev_status *stat)
5238{ 5245{
5239 struct drm_i915_private *dev_priv = dev->dev_private; 5246 struct drm_i915_private *dev_priv = to_i915(dev);
5240 int s; 5247 int s;
5241 u32 slice_info = I915_READ(GEN8_GT_SLICE_INFO); 5248 u32 slice_info = I915_READ(GEN8_GT_SLICE_INFO);
5242 5249
@@ -5278,6 +5285,10 @@ static int i915_sseu_status(struct seq_file *m, void *unused)
5278 INTEL_INFO(dev)->eu_total); 5285 INTEL_INFO(dev)->eu_total);
5279 seq_printf(m, " Available EU Per Subslice: %u\n", 5286 seq_printf(m, " Available EU Per Subslice: %u\n",
5280 INTEL_INFO(dev)->eu_per_subslice); 5287 INTEL_INFO(dev)->eu_per_subslice);
5288 seq_printf(m, " Has Pooled EU: %s\n", yesno(HAS_POOLED_EU(dev)));
5289 if (HAS_POOLED_EU(dev))
5290 seq_printf(m, " Min EU in pool: %u\n",
5291 INTEL_INFO(dev)->min_eu_in_pool);
5281 seq_printf(m, " Has Slice Power Gating: %s\n", 5292 seq_printf(m, " Has Slice Power Gating: %s\n",
5282 yesno(INTEL_INFO(dev)->has_slice_pg)); 5293 yesno(INTEL_INFO(dev)->has_slice_pg));
5283 seq_printf(m, " Has Subslice Power Gating: %s\n", 5294 seq_printf(m, " Has Subslice Power Gating: %s\n",
@@ -5311,7 +5322,7 @@ static int i915_sseu_status(struct seq_file *m, void *unused)
5311static int i915_forcewake_open(struct inode *inode, struct file *file) 5322static int i915_forcewake_open(struct inode *inode, struct file *file)
5312{ 5323{
5313 struct drm_device *dev = inode->i_private; 5324 struct drm_device *dev = inode->i_private;
5314 struct drm_i915_private *dev_priv = dev->dev_private; 5325 struct drm_i915_private *dev_priv = to_i915(dev);
5315 5326
5316 if (INTEL_INFO(dev)->gen < 6) 5327 if (INTEL_INFO(dev)->gen < 6)
5317 return 0; 5328 return 0;
@@ -5325,7 +5336,7 @@ static int i915_forcewake_open(struct inode *inode, struct file *file)
5325static int i915_forcewake_release(struct inode *inode, struct file *file) 5336static int i915_forcewake_release(struct inode *inode, struct file *file)
5326{ 5337{
5327 struct drm_device *dev = inode->i_private; 5338 struct drm_device *dev = inode->i_private;
5328 struct drm_i915_private *dev_priv = dev->dev_private; 5339 struct drm_i915_private *dev_priv = to_i915(dev);
5329 5340
5330 if (INTEL_INFO(dev)->gen < 6) 5341 if (INTEL_INFO(dev)->gen < 6)
5331 return 0; 5342 return 0;
@@ -5441,7 +5452,6 @@ static const struct i915_debugfs_files {
5441 {"i915_max_freq", &i915_max_freq_fops}, 5452 {"i915_max_freq", &i915_max_freq_fops},
5442 {"i915_min_freq", &i915_min_freq_fops}, 5453 {"i915_min_freq", &i915_min_freq_fops},
5443 {"i915_cache_sharing", &i915_cache_sharing_fops}, 5454 {"i915_cache_sharing", &i915_cache_sharing_fops},
5444 {"i915_ring_stop", &i915_ring_stop_fops},
5445 {"i915_ring_missed_irq", &i915_ring_missed_irq_fops}, 5455 {"i915_ring_missed_irq", &i915_ring_missed_irq_fops},
5446 {"i915_ring_test_irq", &i915_ring_test_irq_fops}, 5456 {"i915_ring_test_irq", &i915_ring_test_irq_fops},
5447 {"i915_gem_drop_caches", &i915_drop_caches_fops}, 5457 {"i915_gem_drop_caches", &i915_drop_caches_fops},
@@ -5459,7 +5469,7 @@ static const struct i915_debugfs_files {
5459 5469
5460void intel_display_crc_init(struct drm_device *dev) 5470void intel_display_crc_init(struct drm_device *dev)
5461{ 5471{
5462 struct drm_i915_private *dev_priv = dev->dev_private; 5472 struct drm_i915_private *dev_priv = to_i915(dev);
5463 enum pipe pipe; 5473 enum pipe pipe;
5464 5474
5465 for_each_pipe(dev_priv, pipe) { 5475 for_each_pipe(dev_priv, pipe) {
@@ -5471,8 +5481,9 @@ void intel_display_crc_init(struct drm_device *dev)
5471 } 5481 }
5472} 5482}
5473 5483
5474int i915_debugfs_init(struct drm_minor *minor) 5484int i915_debugfs_register(struct drm_i915_private *dev_priv)
5475{ 5485{
5486 struct drm_minor *minor = dev_priv->drm.primary;
5476 int ret, i; 5487 int ret, i;
5477 5488
5478 ret = i915_forcewake_create(minor->debugfs_root, minor); 5489 ret = i915_forcewake_create(minor->debugfs_root, minor);
@@ -5498,8 +5509,9 @@ int i915_debugfs_init(struct drm_minor *minor)
5498 minor->debugfs_root, minor); 5509 minor->debugfs_root, minor);
5499} 5510}
5500 5511
5501void i915_debugfs_cleanup(struct drm_minor *minor) 5512void i915_debugfs_unregister(struct drm_i915_private *dev_priv)
5502{ 5513{
5514 struct drm_minor *minor = dev_priv->drm.primary;
5503 int i; 5515 int i;
5504 5516
5505 drm_debugfs_remove_files(i915_debugfs_list, 5517 drm_debugfs_remove_files(i915_debugfs_list,