diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_debugfs.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 400 |
1 files changed, 188 insertions, 212 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 5b7526697838..844fea795bae 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -265,7 +265,7 @@ static int i915_gem_stolen_list_info(struct seq_file *m, void *data) | |||
265 | { | 265 | { |
266 | struct drm_info_node *node = m->private; | 266 | struct drm_info_node *node = m->private; |
267 | struct drm_device *dev = node->minor->dev; | 267 | struct drm_device *dev = node->minor->dev; |
268 | struct drm_i915_private *dev_priv = dev->dev_private; | 268 | struct drm_i915_private *dev_priv = to_i915(dev); |
269 | struct drm_i915_gem_object *obj; | 269 | struct drm_i915_gem_object *obj; |
270 | u64 total_obj_size, total_gtt_size; | 270 | u64 total_obj_size, total_gtt_size; |
271 | LIST_HEAD(stolen); | 271 | LIST_HEAD(stolen); |
@@ -440,15 +440,15 @@ static void print_context_stats(struct seq_file *m, | |||
440 | 440 | ||
441 | memset(&stats, 0, sizeof(stats)); | 441 | memset(&stats, 0, sizeof(stats)); |
442 | 442 | ||
443 | mutex_lock(&dev_priv->dev->struct_mutex); | 443 | mutex_lock(&dev_priv->drm.struct_mutex); |
444 | if (dev_priv->kernel_context) | 444 | if (dev_priv->kernel_context) |
445 | per_file_ctx_stats(0, dev_priv->kernel_context, &stats); | 445 | per_file_ctx_stats(0, dev_priv->kernel_context, &stats); |
446 | 446 | ||
447 | list_for_each_entry(file, &dev_priv->dev->filelist, lhead) { | 447 | list_for_each_entry(file, &dev_priv->drm.filelist, lhead) { |
448 | struct drm_i915_file_private *fpriv = file->driver_priv; | 448 | struct drm_i915_file_private *fpriv = file->driver_priv; |
449 | idr_for_each(&fpriv->context_idr, per_file_ctx_stats, &stats); | 449 | idr_for_each(&fpriv->context_idr, per_file_ctx_stats, &stats); |
450 | } | 450 | } |
451 | mutex_unlock(&dev_priv->dev->struct_mutex); | 451 | mutex_unlock(&dev_priv->drm.struct_mutex); |
452 | 452 | ||
453 | print_file_stats(m, "[k]contexts", stats); | 453 | print_file_stats(m, "[k]contexts", stats); |
454 | } | 454 | } |
@@ -591,7 +591,7 @@ static int i915_gem_gtt_info(struct seq_file *m, void *data) | |||
591 | struct drm_info_node *node = m->private; | 591 | struct drm_info_node *node = m->private; |
592 | struct drm_device *dev = node->minor->dev; | 592 | struct drm_device *dev = node->minor->dev; |
593 | uintptr_t list = (uintptr_t) node->info_ent->data; | 593 | uintptr_t list = (uintptr_t) node->info_ent->data; |
594 | struct drm_i915_private *dev_priv = dev->dev_private; | 594 | struct drm_i915_private *dev_priv = to_i915(dev); |
595 | struct drm_i915_gem_object *obj; | 595 | struct drm_i915_gem_object *obj; |
596 | u64 total_obj_size, total_gtt_size; | 596 | u64 total_obj_size, total_gtt_size; |
597 | int count, ret; | 597 | int count, ret; |
@@ -625,7 +625,7 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data) | |||
625 | { | 625 | { |
626 | struct drm_info_node *node = m->private; | 626 | struct drm_info_node *node = m->private; |
627 | struct drm_device *dev = node->minor->dev; | 627 | struct drm_device *dev = node->minor->dev; |
628 | struct drm_i915_private *dev_priv = dev->dev_private; | 628 | struct drm_i915_private *dev_priv = to_i915(dev); |
629 | struct intel_crtc *crtc; | 629 | struct intel_crtc *crtc; |
630 | int ret; | 630 | int ret; |
631 | 631 | ||
@@ -662,8 +662,8 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data) | |||
662 | engine->name, | 662 | engine->name, |
663 | i915_gem_request_get_seqno(work->flip_queued_req), | 663 | i915_gem_request_get_seqno(work->flip_queued_req), |
664 | dev_priv->next_seqno, | 664 | dev_priv->next_seqno, |
665 | engine->get_seqno(engine), | 665 | intel_engine_get_seqno(engine), |
666 | i915_gem_request_completed(work->flip_queued_req, true)); | 666 | i915_gem_request_completed(work->flip_queued_req)); |
667 | } else | 667 | } else |
668 | seq_printf(m, "Flip not associated with any ring\n"); | 668 | seq_printf(m, "Flip not associated with any ring\n"); |
669 | 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", |
@@ -695,7 +695,7 @@ static int i915_gem_batch_pool_info(struct seq_file *m, void *data) | |||
695 | { | 695 | { |
696 | struct drm_info_node *node = m->private; | 696 | struct drm_info_node *node = m->private; |
697 | struct drm_device *dev = node->minor->dev; | 697 | struct drm_device *dev = node->minor->dev; |
698 | struct drm_i915_private *dev_priv = dev->dev_private; | 698 | struct drm_i915_private *dev_priv = to_i915(dev); |
699 | struct drm_i915_gem_object *obj; | 699 | struct drm_i915_gem_object *obj; |
700 | struct intel_engine_cs *engine; | 700 | struct intel_engine_cs *engine; |
701 | int total = 0; | 701 | int total = 0; |
@@ -740,7 +740,7 @@ static int i915_gem_request_info(struct seq_file *m, void *data) | |||
740 | { | 740 | { |
741 | struct drm_info_node *node = m->private; | 741 | struct drm_info_node *node = m->private; |
742 | struct drm_device *dev = node->minor->dev; | 742 | struct drm_device *dev = node->minor->dev; |
743 | struct drm_i915_private *dev_priv = dev->dev_private; | 743 | struct drm_i915_private *dev_priv = to_i915(dev); |
744 | struct intel_engine_cs *engine; | 744 | struct intel_engine_cs *engine; |
745 | struct drm_i915_gem_request *req; | 745 | struct drm_i915_gem_request *req; |
746 | int ret, any; | 746 | int ret, any; |
@@ -788,17 +788,29 @@ static int i915_gem_request_info(struct seq_file *m, void *data) | |||
788 | static void i915_ring_seqno_info(struct seq_file *m, | 788 | static void i915_ring_seqno_info(struct seq_file *m, |
789 | struct intel_engine_cs *engine) | 789 | struct intel_engine_cs *engine) |
790 | { | 790 | { |
791 | struct intel_breadcrumbs *b = &engine->breadcrumbs; | ||
792 | struct rb_node *rb; | ||
793 | |||
791 | seq_printf(m, "Current sequence (%s): %x\n", | 794 | seq_printf(m, "Current sequence (%s): %x\n", |
792 | engine->name, engine->get_seqno(engine)); | 795 | engine->name, intel_engine_get_seqno(engine)); |
793 | seq_printf(m, "Current user interrupts (%s): %x\n", | 796 | seq_printf(m, "Current user interrupts (%s): %lx\n", |
794 | 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); | ||
795 | } | 807 | } |
796 | 808 | ||
797 | static int i915_gem_seqno_info(struct seq_file *m, void *data) | 809 | static int i915_gem_seqno_info(struct seq_file *m, void *data) |
798 | { | 810 | { |
799 | struct drm_info_node *node = m->private; | 811 | struct drm_info_node *node = m->private; |
800 | struct drm_device *dev = node->minor->dev; | 812 | struct drm_device *dev = node->minor->dev; |
801 | struct drm_i915_private *dev_priv = dev->dev_private; | 813 | struct drm_i915_private *dev_priv = to_i915(dev); |
802 | struct intel_engine_cs *engine; | 814 | struct intel_engine_cs *engine; |
803 | int ret; | 815 | int ret; |
804 | 816 | ||
@@ -821,7 +833,7 @@ static int i915_interrupt_info(struct seq_file *m, void *data) | |||
821 | { | 833 | { |
822 | struct drm_info_node *node = m->private; | 834 | struct drm_info_node *node = m->private; |
823 | struct drm_device *dev = node->minor->dev; | 835 | struct drm_device *dev = node->minor->dev; |
824 | struct drm_i915_private *dev_priv = dev->dev_private; | 836 | struct drm_i915_private *dev_priv = to_i915(dev); |
825 | struct intel_engine_cs *engine; | 837 | struct intel_engine_cs *engine; |
826 | int ret, i, pipe; | 838 | int ret, i, pipe; |
827 | 839 | ||
@@ -1012,7 +1024,7 @@ static int i915_gem_fence_regs_info(struct seq_file *m, void *data) | |||
1012 | { | 1024 | { |
1013 | struct drm_info_node *node = m->private; | 1025 | struct drm_info_node *node = m->private; |
1014 | struct drm_device *dev = node->minor->dev; | 1026 | struct drm_device *dev = node->minor->dev; |
1015 | struct drm_i915_private *dev_priv = dev->dev_private; | 1027 | struct drm_i915_private *dev_priv = to_i915(dev); |
1016 | int i, ret; | 1028 | int i, ret; |
1017 | 1029 | ||
1018 | ret = mutex_lock_interruptible(&dev->struct_mutex); | 1030 | ret = mutex_lock_interruptible(&dev->struct_mutex); |
@@ -1040,7 +1052,7 @@ static int i915_hws_info(struct seq_file *m, void *data) | |||
1040 | { | 1052 | { |
1041 | struct drm_info_node *node = m->private; | 1053 | struct drm_info_node *node = m->private; |
1042 | struct drm_device *dev = node->minor->dev; | 1054 | struct drm_device *dev = node->minor->dev; |
1043 | struct drm_i915_private *dev_priv = dev->dev_private; | 1055 | struct drm_i915_private *dev_priv = to_i915(dev); |
1044 | struct intel_engine_cs *engine; | 1056 | struct intel_engine_cs *engine; |
1045 | const u32 *hws; | 1057 | const u32 *hws; |
1046 | int i; | 1058 | int i; |
@@ -1151,7 +1163,7 @@ static int | |||
1151 | i915_next_seqno_get(void *data, u64 *val) | 1163 | i915_next_seqno_get(void *data, u64 *val) |
1152 | { | 1164 | { |
1153 | struct drm_device *dev = data; | 1165 | struct drm_device *dev = data; |
1154 | struct drm_i915_private *dev_priv = dev->dev_private; | 1166 | struct drm_i915_private *dev_priv = to_i915(dev); |
1155 | int ret; | 1167 | int ret; |
1156 | 1168 | ||
1157 | ret = mutex_lock_interruptible(&dev->struct_mutex); | 1169 | ret = mutex_lock_interruptible(&dev->struct_mutex); |
@@ -1188,7 +1200,7 @@ static int i915_frequency_info(struct seq_file *m, void *unused) | |||
1188 | { | 1200 | { |
1189 | struct drm_info_node *node = m->private; | 1201 | struct drm_info_node *node = m->private; |
1190 | struct drm_device *dev = node->minor->dev; | 1202 | struct drm_device *dev = node->minor->dev; |
1191 | struct drm_i915_private *dev_priv = dev->dev_private; | 1203 | struct drm_i915_private *dev_priv = to_i915(dev); |
1192 | int ret = 0; | 1204 | int ret = 0; |
1193 | 1205 | ||
1194 | intel_runtime_pm_get(dev_priv); | 1206 | intel_runtime_pm_get(dev_priv); |
@@ -1391,7 +1403,7 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused) | |||
1391 | { | 1403 | { |
1392 | struct drm_info_node *node = m->private; | 1404 | struct drm_info_node *node = m->private; |
1393 | struct drm_device *dev = node->minor->dev; | 1405 | struct drm_device *dev = node->minor->dev; |
1394 | struct drm_i915_private *dev_priv = dev->dev_private; | 1406 | struct drm_i915_private *dev_priv = to_i915(dev); |
1395 | struct intel_engine_cs *engine; | 1407 | struct intel_engine_cs *engine; |
1396 | u64 acthd[I915_NUM_ENGINES]; | 1408 | u64 acthd[I915_NUM_ENGINES]; |
1397 | u32 seqno[I915_NUM_ENGINES]; | 1409 | u32 seqno[I915_NUM_ENGINES]; |
@@ -1408,7 +1420,7 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused) | |||
1408 | 1420 | ||
1409 | for_each_engine_id(engine, dev_priv, id) { | 1421 | for_each_engine_id(engine, dev_priv, id) { |
1410 | acthd[id] = intel_ring_get_active_head(engine); | 1422 | acthd[id] = intel_ring_get_active_head(engine); |
1411 | seqno[id] = engine->get_seqno(engine); | 1423 | seqno[id] = intel_engine_get_seqno(engine); |
1412 | } | 1424 | } |
1413 | 1425 | ||
1414 | i915_get_extra_instdone(dev_priv, instdone); | 1426 | i915_get_extra_instdone(dev_priv, instdone); |
@@ -1428,9 +1440,11 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused) | |||
1428 | engine->hangcheck.seqno, | 1440 | engine->hangcheck.seqno, |
1429 | seqno[id], | 1441 | seqno[id], |
1430 | engine->last_submitted_seqno); | 1442 | engine->last_submitted_seqno); |
1431 | 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", | ||
1432 | engine->hangcheck.user_interrupts, | 1446 | engine->hangcheck.user_interrupts, |
1433 | READ_ONCE(engine->user_interrupts)); | 1447 | READ_ONCE(engine->breadcrumbs.irq_wakeups)); |
1434 | seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n", | 1448 | seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n", |
1435 | (long long)engine->hangcheck.acthd, | 1449 | (long long)engine->hangcheck.acthd, |
1436 | (long long)acthd[id]); | 1450 | (long long)acthd[id]); |
@@ -1460,7 +1474,7 @@ static int ironlake_drpc_info(struct seq_file *m) | |||
1460 | { | 1474 | { |
1461 | struct drm_info_node *node = m->private; | 1475 | struct drm_info_node *node = m->private; |
1462 | struct drm_device *dev = node->minor->dev; | 1476 | struct drm_device *dev = node->minor->dev; |
1463 | struct drm_i915_private *dev_priv = dev->dev_private; | 1477 | struct drm_i915_private *dev_priv = to_i915(dev); |
1464 | u32 rgvmodectl, rstdbyctl; | 1478 | u32 rgvmodectl, rstdbyctl; |
1465 | u16 crstandvid; | 1479 | u16 crstandvid; |
1466 | int ret; | 1480 | int ret; |
@@ -1528,7 +1542,7 @@ static int i915_forcewake_domains(struct seq_file *m, void *data) | |||
1528 | { | 1542 | { |
1529 | struct drm_info_node *node = m->private; | 1543 | struct drm_info_node *node = m->private; |
1530 | struct drm_device *dev = node->minor->dev; | 1544 | struct drm_device *dev = node->minor->dev; |
1531 | struct drm_i915_private *dev_priv = dev->dev_private; | 1545 | struct drm_i915_private *dev_priv = to_i915(dev); |
1532 | struct intel_uncore_forcewake_domain *fw_domain; | 1546 | struct intel_uncore_forcewake_domain *fw_domain; |
1533 | 1547 | ||
1534 | spin_lock_irq(&dev_priv->uncore.lock); | 1548 | spin_lock_irq(&dev_priv->uncore.lock); |
@@ -1546,7 +1560,7 @@ static int vlv_drpc_info(struct seq_file *m) | |||
1546 | { | 1560 | { |
1547 | struct drm_info_node *node = m->private; | 1561 | struct drm_info_node *node = m->private; |
1548 | struct drm_device *dev = node->minor->dev; | 1562 | struct drm_device *dev = node->minor->dev; |
1549 | struct drm_i915_private *dev_priv = dev->dev_private; | 1563 | struct drm_i915_private *dev_priv = to_i915(dev); |
1550 | u32 rpmodectl1, rcctl1, pw_status; | 1564 | u32 rpmodectl1, rcctl1, pw_status; |
1551 | 1565 | ||
1552 | intel_runtime_pm_get(dev_priv); | 1566 | intel_runtime_pm_get(dev_priv); |
@@ -1586,7 +1600,7 @@ static int gen6_drpc_info(struct seq_file *m) | |||
1586 | { | 1600 | { |
1587 | struct drm_info_node *node = m->private; | 1601 | struct drm_info_node *node = m->private; |
1588 | struct drm_device *dev = node->minor->dev; | 1602 | struct drm_device *dev = node->minor->dev; |
1589 | struct drm_i915_private *dev_priv = dev->dev_private; | 1603 | struct drm_i915_private *dev_priv = to_i915(dev); |
1590 | u32 rpmodectl1, gt_core_status, rcctl1, rc6vids = 0; | 1604 | u32 rpmodectl1, gt_core_status, rcctl1, rc6vids = 0; |
1591 | unsigned forcewake_count; | 1605 | unsigned forcewake_count; |
1592 | int count = 0, ret; | 1606 | int count = 0, ret; |
@@ -1698,7 +1712,7 @@ static int i915_frontbuffer_tracking(struct seq_file *m, void *unused) | |||
1698 | { | 1712 | { |
1699 | struct drm_info_node *node = m->private; | 1713 | struct drm_info_node *node = m->private; |
1700 | struct drm_device *dev = node->minor->dev; | 1714 | struct drm_device *dev = node->minor->dev; |
1701 | struct drm_i915_private *dev_priv = dev->dev_private; | 1715 | struct drm_i915_private *dev_priv = to_i915(dev); |
1702 | 1716 | ||
1703 | seq_printf(m, "FB tracking busy bits: 0x%08x\n", | 1717 | seq_printf(m, "FB tracking busy bits: 0x%08x\n", |
1704 | dev_priv->fb_tracking.busy_bits); | 1718 | dev_priv->fb_tracking.busy_bits); |
@@ -1713,7 +1727,7 @@ static int i915_fbc_status(struct seq_file *m, void *unused) | |||
1713 | { | 1727 | { |
1714 | struct drm_info_node *node = m->private; | 1728 | struct drm_info_node *node = m->private; |
1715 | struct drm_device *dev = node->minor->dev; | 1729 | struct drm_device *dev = node->minor->dev; |
1716 | struct drm_i915_private *dev_priv = dev->dev_private; | 1730 | struct drm_i915_private *dev_priv = to_i915(dev); |
1717 | 1731 | ||
1718 | if (!HAS_FBC(dev)) { | 1732 | if (!HAS_FBC(dev)) { |
1719 | seq_puts(m, "FBC unsupported on this chipset\n"); | 1733 | seq_puts(m, "FBC unsupported on this chipset\n"); |
@@ -1743,7 +1757,7 @@ static int i915_fbc_status(struct seq_file *m, void *unused) | |||
1743 | static int i915_fbc_fc_get(void *data, u64 *val) | 1757 | static int i915_fbc_fc_get(void *data, u64 *val) |
1744 | { | 1758 | { |
1745 | struct drm_device *dev = data; | 1759 | struct drm_device *dev = data; |
1746 | struct drm_i915_private *dev_priv = dev->dev_private; | 1760 | struct drm_i915_private *dev_priv = to_i915(dev); |
1747 | 1761 | ||
1748 | if (INTEL_INFO(dev)->gen < 7 || !HAS_FBC(dev)) | 1762 | if (INTEL_INFO(dev)->gen < 7 || !HAS_FBC(dev)) |
1749 | return -ENODEV; | 1763 | return -ENODEV; |
@@ -1756,7 +1770,7 @@ static int i915_fbc_fc_get(void *data, u64 *val) | |||
1756 | static int i915_fbc_fc_set(void *data, u64 val) | 1770 | static int i915_fbc_fc_set(void *data, u64 val) |
1757 | { | 1771 | { |
1758 | struct drm_device *dev = data; | 1772 | struct drm_device *dev = data; |
1759 | struct drm_i915_private *dev_priv = dev->dev_private; | 1773 | struct drm_i915_private *dev_priv = to_i915(dev); |
1760 | u32 reg; | 1774 | u32 reg; |
1761 | 1775 | ||
1762 | if (INTEL_INFO(dev)->gen < 7 || !HAS_FBC(dev)) | 1776 | if (INTEL_INFO(dev)->gen < 7 || !HAS_FBC(dev)) |
@@ -1783,7 +1797,7 @@ static int i915_ips_status(struct seq_file *m, void *unused) | |||
1783 | { | 1797 | { |
1784 | struct drm_info_node *node = m->private; | 1798 | struct drm_info_node *node = m->private; |
1785 | struct drm_device *dev = node->minor->dev; | 1799 | struct drm_device *dev = node->minor->dev; |
1786 | struct drm_i915_private *dev_priv = dev->dev_private; | 1800 | struct drm_i915_private *dev_priv = to_i915(dev); |
1787 | 1801 | ||
1788 | if (!HAS_IPS(dev)) { | 1802 | if (!HAS_IPS(dev)) { |
1789 | seq_puts(m, "not supported\n"); | 1803 | seq_puts(m, "not supported\n"); |
@@ -1813,7 +1827,7 @@ static int i915_sr_status(struct seq_file *m, void *unused) | |||
1813 | { | 1827 | { |
1814 | struct drm_info_node *node = m->private; | 1828 | struct drm_info_node *node = m->private; |
1815 | struct drm_device *dev = node->minor->dev; | 1829 | struct drm_device *dev = node->minor->dev; |
1816 | struct drm_i915_private *dev_priv = dev->dev_private; | 1830 | struct drm_i915_private *dev_priv = to_i915(dev); |
1817 | bool sr_enabled = false; | 1831 | bool sr_enabled = false; |
1818 | 1832 | ||
1819 | intel_runtime_pm_get(dev_priv); | 1833 | intel_runtime_pm_get(dev_priv); |
@@ -1842,7 +1856,7 @@ static int i915_emon_status(struct seq_file *m, void *unused) | |||
1842 | { | 1856 | { |
1843 | struct drm_info_node *node = m->private; | 1857 | struct drm_info_node *node = m->private; |
1844 | struct drm_device *dev = node->minor->dev; | 1858 | struct drm_device *dev = node->minor->dev; |
1845 | struct drm_i915_private *dev_priv = dev->dev_private; | 1859 | struct drm_i915_private *dev_priv = to_i915(dev); |
1846 | unsigned long temp, chipset, gfx; | 1860 | unsigned long temp, chipset, gfx; |
1847 | int ret; | 1861 | int ret; |
1848 | 1862 | ||
@@ -1870,7 +1884,7 @@ static int i915_ring_freq_table(struct seq_file *m, void *unused) | |||
1870 | { | 1884 | { |
1871 | struct drm_info_node *node = m->private; | 1885 | struct drm_info_node *node = m->private; |
1872 | struct drm_device *dev = node->minor->dev; | 1886 | struct drm_device *dev = node->minor->dev; |
1873 | struct drm_i915_private *dev_priv = dev->dev_private; | 1887 | struct drm_i915_private *dev_priv = to_i915(dev); |
1874 | int ret = 0; | 1888 | int ret = 0; |
1875 | int gpu_freq, ia_freq; | 1889 | int gpu_freq, ia_freq; |
1876 | unsigned int max_gpu_freq, min_gpu_freq; | 1890 | unsigned int max_gpu_freq, min_gpu_freq; |
@@ -1925,7 +1939,7 @@ static int i915_opregion(struct seq_file *m, void *unused) | |||
1925 | { | 1939 | { |
1926 | struct drm_info_node *node = m->private; | 1940 | struct drm_info_node *node = m->private; |
1927 | struct drm_device *dev = node->minor->dev; | 1941 | struct drm_device *dev = node->minor->dev; |
1928 | struct drm_i915_private *dev_priv = dev->dev_private; | 1942 | struct drm_i915_private *dev_priv = to_i915(dev); |
1929 | struct intel_opregion *opregion = &dev_priv->opregion; | 1943 | struct intel_opregion *opregion = &dev_priv->opregion; |
1930 | int ret; | 1944 | int ret; |
1931 | 1945 | ||
@@ -1946,7 +1960,7 @@ static int i915_vbt(struct seq_file *m, void *unused) | |||
1946 | { | 1960 | { |
1947 | struct drm_info_node *node = m->private; | 1961 | struct drm_info_node *node = m->private; |
1948 | struct drm_device *dev = node->minor->dev; | 1962 | struct drm_device *dev = node->minor->dev; |
1949 | struct drm_i915_private *dev_priv = dev->dev_private; | 1963 | struct drm_i915_private *dev_priv = to_i915(dev); |
1950 | struct intel_opregion *opregion = &dev_priv->opregion; | 1964 | struct intel_opregion *opregion = &dev_priv->opregion; |
1951 | 1965 | ||
1952 | if (opregion->vbt) | 1966 | if (opregion->vbt) |
@@ -1968,19 +1982,19 @@ static int i915_gem_framebuffer_info(struct seq_file *m, void *data) | |||
1968 | return ret; | 1982 | return ret; |
1969 | 1983 | ||
1970 | #ifdef CONFIG_DRM_FBDEV_EMULATION | 1984 | #ifdef CONFIG_DRM_FBDEV_EMULATION |
1971 | if (to_i915(dev)->fbdev) { | 1985 | if (to_i915(dev)->fbdev) { |
1972 | fbdev_fb = to_intel_framebuffer(to_i915(dev)->fbdev->helper.fb); | 1986 | fbdev_fb = to_intel_framebuffer(to_i915(dev)->fbdev->helper.fb); |
1973 | 1987 | ||
1974 | 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 ", |
1975 | fbdev_fb->base.width, | 1989 | fbdev_fb->base.width, |
1976 | fbdev_fb->base.height, | 1990 | fbdev_fb->base.height, |
1977 | fbdev_fb->base.depth, | 1991 | fbdev_fb->base.depth, |
1978 | fbdev_fb->base.bits_per_pixel, | 1992 | fbdev_fb->base.bits_per_pixel, |
1979 | fbdev_fb->base.modifier[0], | 1993 | fbdev_fb->base.modifier[0], |
1980 | drm_framebuffer_read_refcount(&fbdev_fb->base)); | 1994 | drm_framebuffer_read_refcount(&fbdev_fb->base)); |
1981 | describe_obj(m, fbdev_fb->obj); | 1995 | describe_obj(m, fbdev_fb->obj); |
1982 | seq_putc(m, '\n'); | 1996 | seq_putc(m, '\n'); |
1983 | } | 1997 | } |
1984 | #endif | 1998 | #endif |
1985 | 1999 | ||
1986 | mutex_lock(&dev->mode_config.fb_lock); | 2000 | mutex_lock(&dev->mode_config.fb_lock); |
@@ -2017,7 +2031,7 @@ static int i915_context_status(struct seq_file *m, void *unused) | |||
2017 | { | 2031 | { |
2018 | struct drm_info_node *node = m->private; | 2032 | struct drm_info_node *node = m->private; |
2019 | struct drm_device *dev = node->minor->dev; | 2033 | struct drm_device *dev = node->minor->dev; |
2020 | struct drm_i915_private *dev_priv = dev->dev_private; | 2034 | struct drm_i915_private *dev_priv = to_i915(dev); |
2021 | struct intel_engine_cs *engine; | 2035 | struct intel_engine_cs *engine; |
2022 | struct i915_gem_context *ctx; | 2036 | struct i915_gem_context *ctx; |
2023 | int ret; | 2037 | int ret; |
@@ -2114,7 +2128,7 @@ static int i915_dump_lrc(struct seq_file *m, void *unused) | |||
2114 | { | 2128 | { |
2115 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 2129 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
2116 | struct drm_device *dev = node->minor->dev; | 2130 | struct drm_device *dev = node->minor->dev; |
2117 | struct drm_i915_private *dev_priv = dev->dev_private; | 2131 | struct drm_i915_private *dev_priv = to_i915(dev); |
2118 | struct intel_engine_cs *engine; | 2132 | struct intel_engine_cs *engine; |
2119 | struct i915_gem_context *ctx; | 2133 | struct i915_gem_context *ctx; |
2120 | int ret; | 2134 | int ret; |
@@ -2141,7 +2155,7 @@ static int i915_execlists(struct seq_file *m, void *data) | |||
2141 | { | 2155 | { |
2142 | struct drm_info_node *node = (struct drm_info_node *)m->private; | 2156 | struct drm_info_node *node = (struct drm_info_node *)m->private; |
2143 | struct drm_device *dev = node->minor->dev; | 2157 | struct drm_device *dev = node->minor->dev; |
2144 | struct drm_i915_private *dev_priv = dev->dev_private; | 2158 | struct drm_i915_private *dev_priv = to_i915(dev); |
2145 | struct intel_engine_cs *engine; | 2159 | struct intel_engine_cs *engine; |
2146 | u32 status_pointer; | 2160 | u32 status_pointer; |
2147 | u8 read_pointer; | 2161 | u8 read_pointer; |
@@ -2244,7 +2258,7 @@ static int i915_swizzle_info(struct seq_file *m, void *data) | |||
2244 | { | 2258 | { |
2245 | struct drm_info_node *node = m->private; | 2259 | struct drm_info_node *node = m->private; |
2246 | struct drm_device *dev = node->minor->dev; | 2260 | struct drm_device *dev = node->minor->dev; |
2247 | struct drm_i915_private *dev_priv = dev->dev_private; | 2261 | struct drm_i915_private *dev_priv = to_i915(dev); |
2248 | int ret; | 2262 | int ret; |
2249 | 2263 | ||
2250 | ret = mutex_lock_interruptible(&dev->struct_mutex); | 2264 | ret = mutex_lock_interruptible(&dev->struct_mutex); |
@@ -2317,7 +2331,7 @@ static int per_file_ctx(int id, void *ptr, void *data) | |||
2317 | 2331 | ||
2318 | static void gen8_ppgtt_info(struct seq_file *m, struct drm_device *dev) | 2332 | static void gen8_ppgtt_info(struct seq_file *m, struct drm_device *dev) |
2319 | { | 2333 | { |
2320 | struct drm_i915_private *dev_priv = dev->dev_private; | 2334 | struct drm_i915_private *dev_priv = to_i915(dev); |
2321 | struct intel_engine_cs *engine; | 2335 | struct intel_engine_cs *engine; |
2322 | struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt; | 2336 | struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt; |
2323 | int i; | 2337 | int i; |
@@ -2338,7 +2352,7 @@ static void gen8_ppgtt_info(struct seq_file *m, struct drm_device *dev) | |||
2338 | 2352 | ||
2339 | static void gen6_ppgtt_info(struct seq_file *m, struct drm_device *dev) | 2353 | static void gen6_ppgtt_info(struct seq_file *m, struct drm_device *dev) |
2340 | { | 2354 | { |
2341 | struct drm_i915_private *dev_priv = dev->dev_private; | 2355 | struct drm_i915_private *dev_priv = to_i915(dev); |
2342 | struct intel_engine_cs *engine; | 2356 | struct intel_engine_cs *engine; |
2343 | 2357 | ||
2344 | if (IS_GEN6(dev_priv)) | 2358 | if (IS_GEN6(dev_priv)) |
@@ -2372,7 +2386,7 @@ static int i915_ppgtt_info(struct seq_file *m, void *data) | |||
2372 | { | 2386 | { |
2373 | struct drm_info_node *node = m->private; | 2387 | struct drm_info_node *node = m->private; |
2374 | struct drm_device *dev = node->minor->dev; | 2388 | struct drm_device *dev = node->minor->dev; |
2375 | struct drm_i915_private *dev_priv = dev->dev_private; | 2389 | struct drm_i915_private *dev_priv = to_i915(dev); |
2376 | struct drm_file *file; | 2390 | struct drm_file *file; |
2377 | 2391 | ||
2378 | int ret = mutex_lock_interruptible(&dev->struct_mutex); | 2392 | int ret = mutex_lock_interruptible(&dev->struct_mutex); |
@@ -2415,7 +2429,7 @@ static int count_irq_waiters(struct drm_i915_private *i915) | |||
2415 | int count = 0; | 2429 | int count = 0; |
2416 | 2430 | ||
2417 | for_each_engine(engine, i915) | 2431 | for_each_engine(engine, i915) |
2418 | count += engine->irq_refcount; | 2432 | count += intel_engine_has_waiter(engine); |
2419 | 2433 | ||
2420 | return count; | 2434 | return count; |
2421 | } | 2435 | } |
@@ -2424,11 +2438,12 @@ static int i915_rps_boost_info(struct seq_file *m, void *data) | |||
2424 | { | 2438 | { |
2425 | struct drm_info_node *node = m->private; | 2439 | struct drm_info_node *node = m->private; |
2426 | struct drm_device *dev = node->minor->dev; | 2440 | struct drm_device *dev = node->minor->dev; |
2427 | struct drm_i915_private *dev_priv = dev->dev_private; | 2441 | struct drm_i915_private *dev_priv = to_i915(dev); |
2428 | struct drm_file *file; | 2442 | struct drm_file *file; |
2429 | 2443 | ||
2430 | seq_printf(m, "RPS enabled? %d\n", dev_priv->rps.enabled); | 2444 | seq_printf(m, "RPS enabled? %d\n", dev_priv->rps.enabled); |
2431 | 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); | ||
2432 | 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)); |
2433 | 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", |
2434 | intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq), | 2449 | intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq), |
@@ -2469,7 +2484,7 @@ static int i915_llc(struct seq_file *m, void *data) | |||
2469 | { | 2484 | { |
2470 | struct drm_info_node *node = m->private; | 2485 | struct drm_info_node *node = m->private; |
2471 | struct drm_device *dev = node->minor->dev; | 2486 | struct drm_device *dev = node->minor->dev; |
2472 | struct drm_i915_private *dev_priv = dev->dev_private; | 2487 | struct drm_i915_private *dev_priv = to_i915(dev); |
2473 | const bool edram = INTEL_GEN(dev_priv) > 8; | 2488 | const bool edram = INTEL_GEN(dev_priv) > 8; |
2474 | 2489 | ||
2475 | seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev))); | 2490 | seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev))); |
@@ -2482,7 +2497,7 @@ static int i915_llc(struct seq_file *m, void *data) | |||
2482 | static int i915_guc_load_status_info(struct seq_file *m, void *data) | 2497 | static int i915_guc_load_status_info(struct seq_file *m, void *data) |
2483 | { | 2498 | { |
2484 | struct drm_info_node *node = m->private; | 2499 | struct drm_info_node *node = m->private; |
2485 | struct drm_i915_private *dev_priv = node->minor->dev->dev_private; | 2500 | struct drm_i915_private *dev_priv = to_i915(node->minor->dev); |
2486 | struct intel_guc_fw *guc_fw = &dev_priv->guc.guc_fw; | 2501 | struct intel_guc_fw *guc_fw = &dev_priv->guc.guc_fw; |
2487 | u32 tmp, i; | 2502 | u32 tmp, i; |
2488 | 2503 | ||
@@ -2544,9 +2559,9 @@ static void i915_guc_client_info(struct seq_file *m, | |||
2544 | 2559 | ||
2545 | for_each_engine(engine, dev_priv) { | 2560 | for_each_engine(engine, dev_priv) { |
2546 | seq_printf(m, "\tSubmissions: %llu %s\n", | 2561 | seq_printf(m, "\tSubmissions: %llu %s\n", |
2547 | client->submissions[engine->guc_id], | 2562 | client->submissions[engine->id], |
2548 | engine->name); | 2563 | engine->name); |
2549 | tot += client->submissions[engine->guc_id]; | 2564 | tot += client->submissions[engine->id]; |
2550 | } | 2565 | } |
2551 | seq_printf(m, "\tTotal: %llu\n", tot); | 2566 | seq_printf(m, "\tTotal: %llu\n", tot); |
2552 | } | 2567 | } |
@@ -2555,7 +2570,7 @@ static int i915_guc_info(struct seq_file *m, void *data) | |||
2555 | { | 2570 | { |
2556 | struct drm_info_node *node = m->private; | 2571 | struct drm_info_node *node = m->private; |
2557 | struct drm_device *dev = node->minor->dev; | 2572 | struct drm_device *dev = node->minor->dev; |
2558 | struct drm_i915_private *dev_priv = dev->dev_private; | 2573 | struct drm_i915_private *dev_priv = to_i915(dev); |
2559 | struct intel_guc guc; | 2574 | struct intel_guc guc; |
2560 | struct i915_guc_client client = {}; | 2575 | struct i915_guc_client client = {}; |
2561 | struct intel_engine_cs *engine; | 2576 | struct intel_engine_cs *engine; |
@@ -2587,9 +2602,9 @@ static int i915_guc_info(struct seq_file *m, void *data) | |||
2587 | seq_printf(m, "\nGuC submissions:\n"); | 2602 | seq_printf(m, "\nGuC submissions:\n"); |
2588 | for_each_engine(engine, dev_priv) { | 2603 | for_each_engine(engine, dev_priv) { |
2589 | seq_printf(m, "\t%-24s: %10llu, last seqno 0x%08x\n", | 2604 | seq_printf(m, "\t%-24s: %10llu, last seqno 0x%08x\n", |
2590 | engine->name, guc.submissions[engine->guc_id], | 2605 | engine->name, guc.submissions[engine->id], |
2591 | guc.last_seqno[engine->guc_id]); | 2606 | guc.last_seqno[engine->id]); |
2592 | total += guc.submissions[engine->guc_id]; | 2607 | total += guc.submissions[engine->id]; |
2593 | } | 2608 | } |
2594 | seq_printf(m, "\t%s: %llu\n", "Total", total); | 2609 | seq_printf(m, "\t%s: %llu\n", "Total", total); |
2595 | 2610 | ||
@@ -2605,7 +2620,7 @@ static int i915_guc_log_dump(struct seq_file *m, void *data) | |||
2605 | { | 2620 | { |
2606 | struct drm_info_node *node = m->private; | 2621 | struct drm_info_node *node = m->private; |
2607 | struct drm_device *dev = node->minor->dev; | 2622 | struct drm_device *dev = node->minor->dev; |
2608 | struct drm_i915_private *dev_priv = dev->dev_private; | 2623 | struct drm_i915_private *dev_priv = to_i915(dev); |
2609 | 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; |
2610 | u32 *log; | 2625 | u32 *log; |
2611 | int i = 0, pg; | 2626 | int i = 0, pg; |
@@ -2633,7 +2648,7 @@ static int i915_edp_psr_status(struct seq_file *m, void *data) | |||
2633 | { | 2648 | { |
2634 | struct drm_info_node *node = m->private; | 2649 | struct drm_info_node *node = m->private; |
2635 | struct drm_device *dev = node->minor->dev; | 2650 | struct drm_device *dev = node->minor->dev; |
2636 | struct drm_i915_private *dev_priv = dev->dev_private; | 2651 | struct drm_i915_private *dev_priv = to_i915(dev); |
2637 | u32 psrperf = 0; | 2652 | u32 psrperf = 0; |
2638 | u32 stat[3]; | 2653 | u32 stat[3]; |
2639 | enum pipe pipe; | 2654 | enum pipe pipe; |
@@ -2701,7 +2716,6 @@ static int i915_sink_crc(struct seq_file *m, void *data) | |||
2701 | { | 2716 | { |
2702 | struct drm_info_node *node = m->private; | 2717 | struct drm_info_node *node = m->private; |
2703 | struct drm_device *dev = node->minor->dev; | 2718 | struct drm_device *dev = node->minor->dev; |
2704 | struct intel_encoder *encoder; | ||
2705 | struct intel_connector *connector; | 2719 | struct intel_connector *connector; |
2706 | struct intel_dp *intel_dp = NULL; | 2720 | struct intel_dp *intel_dp = NULL; |
2707 | int ret; | 2721 | int ret; |
@@ -2709,18 +2723,19 @@ static int i915_sink_crc(struct seq_file *m, void *data) | |||
2709 | 2723 | ||
2710 | drm_modeset_lock_all(dev); | 2724 | drm_modeset_lock_all(dev); |
2711 | for_each_intel_connector(dev, connector) { | 2725 | for_each_intel_connector(dev, connector) { |
2726 | struct drm_crtc *crtc; | ||
2712 | 2727 | ||
2713 | if (connector->base.dpms != DRM_MODE_DPMS_ON) | 2728 | if (!connector->base.state->best_encoder) |
2714 | continue; | 2729 | continue; |
2715 | 2730 | ||
2716 | if (!connector->base.encoder) | 2731 | crtc = connector->base.state->crtc; |
2732 | if (!crtc->state->active) | ||
2717 | continue; | 2733 | continue; |
2718 | 2734 | ||
2719 | encoder = to_intel_encoder(connector->base.encoder); | 2735 | if (connector->base.connector_type != DRM_MODE_CONNECTOR_eDP) |
2720 | if (encoder->type != INTEL_OUTPUT_EDP) | ||
2721 | continue; | 2736 | continue; |
2722 | 2737 | ||
2723 | intel_dp = enc_to_intel_dp(&encoder->base); | 2738 | intel_dp = enc_to_intel_dp(connector->base.state->best_encoder); |
2724 | 2739 | ||
2725 | ret = intel_dp_sink_crc(intel_dp, crc); | 2740 | ret = intel_dp_sink_crc(intel_dp, crc); |
2726 | if (ret) | 2741 | if (ret) |
@@ -2741,7 +2756,7 @@ static int i915_energy_uJ(struct seq_file *m, void *data) | |||
2741 | { | 2756 | { |
2742 | struct drm_info_node *node = m->private; | 2757 | struct drm_info_node *node = m->private; |
2743 | struct drm_device *dev = node->minor->dev; | 2758 | struct drm_device *dev = node->minor->dev; |
2744 | struct drm_i915_private *dev_priv = dev->dev_private; | 2759 | struct drm_i915_private *dev_priv = to_i915(dev); |
2745 | u64 power; | 2760 | u64 power; |
2746 | u32 units; | 2761 | u32 units; |
2747 | 2762 | ||
@@ -2767,12 +2782,12 @@ static int i915_runtime_pm_status(struct seq_file *m, void *unused) | |||
2767 | { | 2782 | { |
2768 | struct drm_info_node *node = m->private; | 2783 | struct drm_info_node *node = m->private; |
2769 | struct drm_device *dev = node->minor->dev; | 2784 | struct drm_device *dev = node->minor->dev; |
2770 | struct drm_i915_private *dev_priv = dev->dev_private; | 2785 | struct drm_i915_private *dev_priv = to_i915(dev); |
2771 | 2786 | ||
2772 | if (!HAS_RUNTIME_PM(dev_priv)) | 2787 | if (!HAS_RUNTIME_PM(dev_priv)) |
2773 | seq_puts(m, "Runtime power management not supported\n"); | 2788 | seq_puts(m, "Runtime power management not supported\n"); |
2774 | 2789 | ||
2775 | 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)); |
2776 | seq_printf(m, "IRQs disabled: %s\n", | 2791 | seq_printf(m, "IRQs disabled: %s\n", |
2777 | yesno(!intel_irqs_enabled(dev_priv))); | 2792 | yesno(!intel_irqs_enabled(dev_priv))); |
2778 | #ifdef CONFIG_PM | 2793 | #ifdef CONFIG_PM |
@@ -2782,8 +2797,8 @@ static int i915_runtime_pm_status(struct seq_file *m, void *unused) | |||
2782 | seq_printf(m, "Device Power Management (CONFIG_PM) disabled\n"); | 2797 | seq_printf(m, "Device Power Management (CONFIG_PM) disabled\n"); |
2783 | #endif | 2798 | #endif |
2784 | seq_printf(m, "PCI device power state: %s [%d]\n", | 2799 | seq_printf(m, "PCI device power state: %s [%d]\n", |
2785 | pci_power_name(dev_priv->dev->pdev->current_state), | 2800 | pci_power_name(dev_priv->drm.pdev->current_state), |
2786 | dev_priv->dev->pdev->current_state); | 2801 | dev_priv->drm.pdev->current_state); |
2787 | 2802 | ||
2788 | return 0; | 2803 | return 0; |
2789 | } | 2804 | } |
@@ -2792,7 +2807,7 @@ static int i915_power_domain_info(struct seq_file *m, void *unused) | |||
2792 | { | 2807 | { |
2793 | struct drm_info_node *node = m->private; | 2808 | struct drm_info_node *node = m->private; |
2794 | struct drm_device *dev = node->minor->dev; | 2809 | struct drm_device *dev = node->minor->dev; |
2795 | struct drm_i915_private *dev_priv = dev->dev_private; | 2810 | struct drm_i915_private *dev_priv = to_i915(dev); |
2796 | struct i915_power_domains *power_domains = &dev_priv->power_domains; | 2811 | struct i915_power_domains *power_domains = &dev_priv->power_domains; |
2797 | int i; | 2812 | int i; |
2798 | 2813 | ||
@@ -2827,7 +2842,7 @@ static int i915_dmc_info(struct seq_file *m, void *unused) | |||
2827 | { | 2842 | { |
2828 | struct drm_info_node *node = m->private; | 2843 | struct drm_info_node *node = m->private; |
2829 | struct drm_device *dev = node->minor->dev; | 2844 | struct drm_device *dev = node->minor->dev; |
2830 | struct drm_i915_private *dev_priv = dev->dev_private; | 2845 | struct drm_i915_private *dev_priv = to_i915(dev); |
2831 | struct intel_csr *csr; | 2846 | struct intel_csr *csr; |
2832 | 2847 | ||
2833 | if (!HAS_CSR(dev)) { | 2848 | if (!HAS_CSR(dev)) { |
@@ -2950,7 +2965,7 @@ static void intel_dp_info(struct seq_file *m, | |||
2950 | 2965 | ||
2951 | 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]); |
2952 | 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)); |
2953 | if (intel_encoder->type == INTEL_OUTPUT_EDP) | 2968 | if (intel_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) |
2954 | intel_panel_info(m, &intel_connector->panel); | 2969 | intel_panel_info(m, &intel_connector->panel); |
2955 | } | 2970 | } |
2956 | 2971 | ||
@@ -2989,14 +3004,26 @@ static void intel_connector_info(struct seq_file *m, | |||
2989 | seq_printf(m, "\tCEA rev: %d\n", | 3004 | seq_printf(m, "\tCEA rev: %d\n", |
2990 | connector->display_info.cea_rev); | 3005 | connector->display_info.cea_rev); |
2991 | } | 3006 | } |
2992 | if (intel_encoder) { | 3007 | |
2993 | if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT || | 3008 | if (!intel_encoder || intel_encoder->type == INTEL_OUTPUT_DP_MST) |
2994 | intel_encoder->type == INTEL_OUTPUT_EDP) | 3009 | return; |
2995 | intel_dp_info(m, intel_connector); | 3010 | |
2996 | else if (intel_encoder->type == INTEL_OUTPUT_HDMI) | 3011 | switch (connector->connector_type) { |
2997 | intel_hdmi_info(m, intel_connector); | 3012 | case DRM_MODE_CONNECTOR_DisplayPort: |
2998 | 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) | ||
2999 | 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; | ||
3000 | } | 3027 | } |
3001 | 3028 | ||
3002 | seq_printf(m, "\tmodes:\n"); | 3029 | seq_printf(m, "\tmodes:\n"); |
@@ -3006,7 +3033,7 @@ static void intel_connector_info(struct seq_file *m, | |||
3006 | 3033 | ||
3007 | static bool cursor_active(struct drm_device *dev, int pipe) | 3034 | static bool cursor_active(struct drm_device *dev, int pipe) |
3008 | { | 3035 | { |
3009 | struct drm_i915_private *dev_priv = dev->dev_private; | 3036 | struct drm_i915_private *dev_priv = to_i915(dev); |
3010 | u32 state; | 3037 | u32 state; |
3011 | 3038 | ||
3012 | if (IS_845G(dev) || IS_I865G(dev)) | 3039 | if (IS_845G(dev) || IS_I865G(dev)) |
@@ -3019,7 +3046,7 @@ static bool cursor_active(struct drm_device *dev, int pipe) | |||
3019 | 3046 | ||
3020 | static bool cursor_position(struct drm_device *dev, int pipe, int *x, int *y) | 3047 | static bool cursor_position(struct drm_device *dev, int pipe, int *x, int *y) |
3021 | { | 3048 | { |
3022 | struct drm_i915_private *dev_priv = dev->dev_private; | 3049 | struct drm_i915_private *dev_priv = to_i915(dev); |
3023 | u32 pos; | 3050 | u32 pos; |
3024 | 3051 | ||
3025 | pos = I915_READ(CURPOS(pipe)); | 3052 | pos = I915_READ(CURPOS(pipe)); |
@@ -3140,7 +3167,7 @@ static int i915_display_info(struct seq_file *m, void *unused) | |||
3140 | { | 3167 | { |
3141 | struct drm_info_node *node = m->private; | 3168 | struct drm_info_node *node = m->private; |
3142 | struct drm_device *dev = node->minor->dev; | 3169 | struct drm_device *dev = node->minor->dev; |
3143 | struct drm_i915_private *dev_priv = dev->dev_private; | 3170 | struct drm_i915_private *dev_priv = to_i915(dev); |
3144 | struct intel_crtc *crtc; | 3171 | struct intel_crtc *crtc; |
3145 | struct drm_connector *connector; | 3172 | struct drm_connector *connector; |
3146 | 3173 | ||
@@ -3195,7 +3222,7 @@ static int i915_semaphore_status(struct seq_file *m, void *unused) | |||
3195 | { | 3222 | { |
3196 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 3223 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
3197 | struct drm_device *dev = node->minor->dev; | 3224 | struct drm_device *dev = node->minor->dev; |
3198 | struct drm_i915_private *dev_priv = dev->dev_private; | 3225 | struct drm_i915_private *dev_priv = to_i915(dev); |
3199 | struct intel_engine_cs *engine; | 3226 | struct intel_engine_cs *engine; |
3200 | int num_rings = hweight32(INTEL_INFO(dev)->ring_mask); | 3227 | int num_rings = hweight32(INTEL_INFO(dev)->ring_mask); |
3201 | enum intel_engine_id id; | 3228 | enum intel_engine_id id; |
@@ -3268,7 +3295,7 @@ static int i915_shared_dplls_info(struct seq_file *m, void *unused) | |||
3268 | { | 3295 | { |
3269 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 3296 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
3270 | struct drm_device *dev = node->minor->dev; | 3297 | struct drm_device *dev = node->minor->dev; |
3271 | struct drm_i915_private *dev_priv = dev->dev_private; | 3298 | struct drm_i915_private *dev_priv = to_i915(dev); |
3272 | int i; | 3299 | int i; |
3273 | 3300 | ||
3274 | drm_modeset_lock_all(dev); | 3301 | drm_modeset_lock_all(dev); |
@@ -3298,7 +3325,7 @@ static int i915_wa_registers(struct seq_file *m, void *unused) | |||
3298 | struct intel_engine_cs *engine; | 3325 | struct intel_engine_cs *engine; |
3299 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 3326 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
3300 | struct drm_device *dev = node->minor->dev; | 3327 | struct drm_device *dev = node->minor->dev; |
3301 | struct drm_i915_private *dev_priv = dev->dev_private; | 3328 | struct drm_i915_private *dev_priv = to_i915(dev); |
3302 | struct i915_workarounds *workarounds = &dev_priv->workarounds; | 3329 | struct i915_workarounds *workarounds = &dev_priv->workarounds; |
3303 | enum intel_engine_id id; | 3330 | enum intel_engine_id id; |
3304 | 3331 | ||
@@ -3336,7 +3363,7 @@ static int i915_ddb_info(struct seq_file *m, void *unused) | |||
3336 | { | 3363 | { |
3337 | struct drm_info_node *node = m->private; | 3364 | struct drm_info_node *node = m->private; |
3338 | struct drm_device *dev = node->minor->dev; | 3365 | struct drm_device *dev = node->minor->dev; |
3339 | struct drm_i915_private *dev_priv = dev->dev_private; | 3366 | struct drm_i915_private *dev_priv = to_i915(dev); |
3340 | struct skl_ddb_allocation *ddb; | 3367 | struct skl_ddb_allocation *ddb; |
3341 | struct skl_ddb_entry *entry; | 3368 | struct skl_ddb_entry *entry; |
3342 | enum pipe pipe; | 3369 | enum pipe pipe; |
@@ -3374,31 +3401,16 @@ static int i915_ddb_info(struct seq_file *m, void *unused) | |||
3374 | static void drrs_status_per_crtc(struct seq_file *m, | 3401 | static void drrs_status_per_crtc(struct seq_file *m, |
3375 | struct drm_device *dev, struct intel_crtc *intel_crtc) | 3402 | struct drm_device *dev, struct intel_crtc *intel_crtc) |
3376 | { | 3403 | { |
3377 | struct intel_encoder *intel_encoder; | 3404 | struct drm_i915_private *dev_priv = to_i915(dev); |
3378 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
3379 | struct i915_drrs *drrs = &dev_priv->drrs; | 3405 | struct i915_drrs *drrs = &dev_priv->drrs; |
3380 | int vrefresh = 0; | 3406 | int vrefresh = 0; |
3407 | struct drm_connector *connector; | ||
3381 | 3408 | ||
3382 | for_each_encoder_on_crtc(dev, &intel_crtc->base, intel_encoder) { | 3409 | drm_for_each_connector(connector, dev) { |
3383 | /* Encoder connected on this CRTC */ | 3410 | if (connector->state->crtc != &intel_crtc->base) |
3384 | switch (intel_encoder->type) { | 3411 | continue; |
3385 | case INTEL_OUTPUT_EDP: | 3412 | |
3386 | seq_puts(m, "eDP:\n"); | 3413 | seq_printf(m, "%s:\n", connector->name); |
3387 | break; | ||
3388 | case INTEL_OUTPUT_DSI: | ||
3389 | seq_puts(m, "DSI:\n"); | ||
3390 | break; | ||
3391 | case INTEL_OUTPUT_HDMI: | ||
3392 | seq_puts(m, "HDMI:\n"); | ||
3393 | break; | ||
3394 | case INTEL_OUTPUT_DISPLAYPORT: | ||
3395 | seq_puts(m, "DP:\n"); | ||
3396 | break; | ||
3397 | default: | ||
3398 | seq_printf(m, "Other encoder (id=%d).\n", | ||
3399 | intel_encoder->type); | ||
3400 | return; | ||
3401 | } | ||
3402 | } | 3414 | } |
3403 | 3415 | ||
3404 | if (dev_priv->vbt.drrs_type == STATIC_DRRS_SUPPORT) | 3416 | if (dev_priv->vbt.drrs_type == STATIC_DRRS_SUPPORT) |
@@ -3461,18 +3473,16 @@ static int i915_drrs_status(struct seq_file *m, void *unused) | |||
3461 | struct intel_crtc *intel_crtc; | 3473 | struct intel_crtc *intel_crtc; |
3462 | int active_crtc_cnt = 0; | 3474 | int active_crtc_cnt = 0; |
3463 | 3475 | ||
3476 | drm_modeset_lock_all(dev); | ||
3464 | for_each_intel_crtc(dev, intel_crtc) { | 3477 | for_each_intel_crtc(dev, intel_crtc) { |
3465 | drm_modeset_lock(&intel_crtc->base.mutex, NULL); | ||
3466 | |||
3467 | if (intel_crtc->base.state->active) { | 3478 | if (intel_crtc->base.state->active) { |
3468 | active_crtc_cnt++; | 3479 | active_crtc_cnt++; |
3469 | seq_printf(m, "\nCRTC %d: ", active_crtc_cnt); | 3480 | seq_printf(m, "\nCRTC %d: ", active_crtc_cnt); |
3470 | 3481 | ||
3471 | drrs_status_per_crtc(m, dev, intel_crtc); | 3482 | drrs_status_per_crtc(m, dev, intel_crtc); |
3472 | } | 3483 | } |
3473 | |||
3474 | drm_modeset_unlock(&intel_crtc->base.mutex); | ||
3475 | } | 3484 | } |
3485 | drm_modeset_unlock_all(dev); | ||
3476 | 3486 | ||
3477 | if (!active_crtc_cnt) | 3487 | if (!active_crtc_cnt) |
3478 | seq_puts(m, "No active crtc found\n"); | 3488 | seq_puts(m, "No active crtc found\n"); |
@@ -3490,17 +3500,23 @@ static int i915_dp_mst_info(struct seq_file *m, void *unused) | |||
3490 | { | 3500 | { |
3491 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 3501 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
3492 | struct drm_device *dev = node->minor->dev; | 3502 | struct drm_device *dev = node->minor->dev; |
3493 | struct drm_encoder *encoder; | ||
3494 | struct intel_encoder *intel_encoder; | 3503 | struct intel_encoder *intel_encoder; |
3495 | struct intel_digital_port *intel_dig_port; | 3504 | struct intel_digital_port *intel_dig_port; |
3505 | struct drm_connector *connector; | ||
3506 | |||
3496 | drm_modeset_lock_all(dev); | 3507 | drm_modeset_lock_all(dev); |
3497 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { | 3508 | drm_for_each_connector(connector, dev) { |
3498 | intel_encoder = to_intel_encoder(encoder); | 3509 | if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) |
3499 | if (intel_encoder->type != INTEL_OUTPUT_DISPLAYPORT) | 3510 | continue; |
3511 | |||
3512 | intel_encoder = intel_attached_encoder(connector); | ||
3513 | if (!intel_encoder || intel_encoder->type == INTEL_OUTPUT_DP_MST) | ||
3500 | continue; | 3514 | continue; |
3501 | intel_dig_port = enc_to_dig_port(encoder); | 3515 | |
3516 | intel_dig_port = enc_to_dig_port(&intel_encoder->base); | ||
3502 | if (!intel_dig_port->dp.can_mst) | 3517 | if (!intel_dig_port->dp.can_mst) |
3503 | continue; | 3518 | continue; |
3519 | |||
3504 | seq_printf(m, "MST Source Port %c\n", | 3520 | seq_printf(m, "MST Source Port %c\n", |
3505 | port_name(intel_dig_port->port)); | 3521 | port_name(intel_dig_port->port)); |
3506 | 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); |
@@ -3512,7 +3528,7 @@ static int i915_dp_mst_info(struct seq_file *m, void *unused) | |||
3512 | static int i915_pipe_crc_open(struct inode *inode, struct file *filep) | 3528 | static int i915_pipe_crc_open(struct inode *inode, struct file *filep) |
3513 | { | 3529 | { |
3514 | struct pipe_crc_info *info = inode->i_private; | 3530 | struct pipe_crc_info *info = inode->i_private; |
3515 | struct drm_i915_private *dev_priv = info->dev->dev_private; | 3531 | struct drm_i915_private *dev_priv = to_i915(info->dev); |
3516 | 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]; |
3517 | 3533 | ||
3518 | if (info->pipe >= INTEL_INFO(info->dev)->num_pipes) | 3534 | if (info->pipe >= INTEL_INFO(info->dev)->num_pipes) |
@@ -3536,7 +3552,7 @@ static int i915_pipe_crc_open(struct inode *inode, struct file *filep) | |||
3536 | static int i915_pipe_crc_release(struct inode *inode, struct file *filep) | 3552 | static int i915_pipe_crc_release(struct inode *inode, struct file *filep) |
3537 | { | 3553 | { |
3538 | struct pipe_crc_info *info = inode->i_private; | 3554 | struct pipe_crc_info *info = inode->i_private; |
3539 | struct drm_i915_private *dev_priv = info->dev->dev_private; | 3555 | struct drm_i915_private *dev_priv = to_i915(info->dev); |
3540 | 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]; |
3541 | 3557 | ||
3542 | spin_lock_irq(&pipe_crc->lock); | 3558 | spin_lock_irq(&pipe_crc->lock); |
@@ -3564,7 +3580,7 @@ i915_pipe_crc_read(struct file *filep, char __user *user_buf, size_t count, | |||
3564 | { | 3580 | { |
3565 | struct pipe_crc_info *info = filep->private_data; | 3581 | struct pipe_crc_info *info = filep->private_data; |
3566 | struct drm_device *dev = info->dev; | 3582 | struct drm_device *dev = info->dev; |
3567 | struct drm_i915_private *dev_priv = dev->dev_private; | 3583 | struct drm_i915_private *dev_priv = to_i915(dev); |
3568 | 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]; |
3569 | char buf[PIPE_CRC_BUFFER_LEN]; | 3585 | char buf[PIPE_CRC_BUFFER_LEN]; |
3570 | int n_entries; | 3586 | int n_entries; |
@@ -3697,7 +3713,7 @@ static const char *pipe_crc_source_name(enum intel_pipe_crc_source source) | |||
3697 | static int display_crc_ctl_show(struct seq_file *m, void *data) | 3713 | static int display_crc_ctl_show(struct seq_file *m, void *data) |
3698 | { | 3714 | { |
3699 | struct drm_device *dev = m->private; | 3715 | struct drm_device *dev = m->private; |
3700 | struct drm_i915_private *dev_priv = dev->dev_private; | 3716 | struct drm_i915_private *dev_priv = to_i915(dev); |
3701 | int i; | 3717 | int i; |
3702 | 3718 | ||
3703 | for (i = 0; i < I915_MAX_PIPES; i++) | 3719 | for (i = 0; i < I915_MAX_PIPES; i++) |
@@ -3758,7 +3774,7 @@ static int i9xx_pipe_crc_auto_source(struct drm_device *dev, enum pipe pipe, | |||
3758 | case INTEL_OUTPUT_TVOUT: | 3774 | case INTEL_OUTPUT_TVOUT: |
3759 | *source = INTEL_PIPE_CRC_SOURCE_TV; | 3775 | *source = INTEL_PIPE_CRC_SOURCE_TV; |
3760 | break; | 3776 | break; |
3761 | case INTEL_OUTPUT_DISPLAYPORT: | 3777 | case INTEL_OUTPUT_DP: |
3762 | case INTEL_OUTPUT_EDP: | 3778 | case INTEL_OUTPUT_EDP: |
3763 | dig_port = enc_to_dig_port(&encoder->base); | 3779 | dig_port = enc_to_dig_port(&encoder->base); |
3764 | switch (dig_port->port) { | 3780 | switch (dig_port->port) { |
@@ -3791,7 +3807,7 @@ static int vlv_pipe_crc_ctl_reg(struct drm_device *dev, | |||
3791 | enum intel_pipe_crc_source *source, | 3807 | enum intel_pipe_crc_source *source, |
3792 | uint32_t *val) | 3808 | uint32_t *val) |
3793 | { | 3809 | { |
3794 | struct drm_i915_private *dev_priv = dev->dev_private; | 3810 | struct drm_i915_private *dev_priv = to_i915(dev); |
3795 | bool need_stable_symbols = false; | 3811 | bool need_stable_symbols = false; |
3796 | 3812 | ||
3797 | if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) { | 3813 | if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) { |
@@ -3862,7 +3878,7 @@ static int i9xx_pipe_crc_ctl_reg(struct drm_device *dev, | |||
3862 | enum intel_pipe_crc_source *source, | 3878 | enum intel_pipe_crc_source *source, |
3863 | uint32_t *val) | 3879 | uint32_t *val) |
3864 | { | 3880 | { |
3865 | struct drm_i915_private *dev_priv = dev->dev_private; | 3881 | struct drm_i915_private *dev_priv = to_i915(dev); |
3866 | bool need_stable_symbols = false; | 3882 | bool need_stable_symbols = false; |
3867 | 3883 | ||
3868 | if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) { | 3884 | if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) { |
@@ -3936,7 +3952,7 @@ static int i9xx_pipe_crc_ctl_reg(struct drm_device *dev, | |||
3936 | static void vlv_undo_pipe_scramble_reset(struct drm_device *dev, | 3952 | static void vlv_undo_pipe_scramble_reset(struct drm_device *dev, |
3937 | enum pipe pipe) | 3953 | enum pipe pipe) |
3938 | { | 3954 | { |
3939 | struct drm_i915_private *dev_priv = dev->dev_private; | 3955 | struct drm_i915_private *dev_priv = to_i915(dev); |
3940 | uint32_t tmp = I915_READ(PORT_DFT2_G4X); | 3956 | uint32_t tmp = I915_READ(PORT_DFT2_G4X); |
3941 | 3957 | ||
3942 | switch (pipe) { | 3958 | switch (pipe) { |
@@ -3961,7 +3977,7 @@ static void vlv_undo_pipe_scramble_reset(struct drm_device *dev, | |||
3961 | static void g4x_undo_pipe_scramble_reset(struct drm_device *dev, | 3977 | static void g4x_undo_pipe_scramble_reset(struct drm_device *dev, |
3962 | enum pipe pipe) | 3978 | enum pipe pipe) |
3963 | { | 3979 | { |
3964 | struct drm_i915_private *dev_priv = dev->dev_private; | 3980 | struct drm_i915_private *dev_priv = to_i915(dev); |
3965 | uint32_t tmp = I915_READ(PORT_DFT2_G4X); | 3981 | uint32_t tmp = I915_READ(PORT_DFT2_G4X); |
3966 | 3982 | ||
3967 | if (pipe == PIPE_A) | 3983 | if (pipe == PIPE_A) |
@@ -4004,7 +4020,7 @@ static int ilk_pipe_crc_ctl_reg(enum intel_pipe_crc_source *source, | |||
4004 | 4020 | ||
4005 | static void hsw_trans_edp_pipe_A_crc_wa(struct drm_device *dev, bool enable) | 4021 | static void hsw_trans_edp_pipe_A_crc_wa(struct drm_device *dev, bool enable) |
4006 | { | 4022 | { |
4007 | struct drm_i915_private *dev_priv = dev->dev_private; | 4023 | struct drm_i915_private *dev_priv = to_i915(dev); |
4008 | struct intel_crtc *crtc = | 4024 | struct intel_crtc *crtc = |
4009 | to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_A]); | 4025 | to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_A]); |
4010 | struct intel_crtc_state *pipe_config; | 4026 | struct intel_crtc_state *pipe_config; |
@@ -4072,7 +4088,7 @@ static int ivb_pipe_crc_ctl_reg(struct drm_device *dev, | |||
4072 | static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, | 4088 | static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, |
4073 | enum intel_pipe_crc_source source) | 4089 | enum intel_pipe_crc_source source) |
4074 | { | 4090 | { |
4075 | struct drm_i915_private *dev_priv = dev->dev_private; | 4091 | struct drm_i915_private *dev_priv = to_i915(dev); |
4076 | struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe]; | 4092 | struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe]; |
4077 | 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, |
4078 | pipe)); | 4094 | pipe)); |
@@ -4579,7 +4595,7 @@ static void wm_latency_show(struct seq_file *m, const uint16_t wm[8]) | |||
4579 | static int pri_wm_latency_show(struct seq_file *m, void *data) | 4595 | static int pri_wm_latency_show(struct seq_file *m, void *data) |
4580 | { | 4596 | { |
4581 | struct drm_device *dev = m->private; | 4597 | struct drm_device *dev = m->private; |
4582 | struct drm_i915_private *dev_priv = dev->dev_private; | 4598 | struct drm_i915_private *dev_priv = to_i915(dev); |
4583 | const uint16_t *latencies; | 4599 | const uint16_t *latencies; |
4584 | 4600 | ||
4585 | if (INTEL_INFO(dev)->gen >= 9) | 4601 | if (INTEL_INFO(dev)->gen >= 9) |
@@ -4595,7 +4611,7 @@ static int pri_wm_latency_show(struct seq_file *m, void *data) | |||
4595 | static int spr_wm_latency_show(struct seq_file *m, void *data) | 4611 | static int spr_wm_latency_show(struct seq_file *m, void *data) |
4596 | { | 4612 | { |
4597 | struct drm_device *dev = m->private; | 4613 | struct drm_device *dev = m->private; |
4598 | struct drm_i915_private *dev_priv = dev->dev_private; | 4614 | struct drm_i915_private *dev_priv = to_i915(dev); |
4599 | const uint16_t *latencies; | 4615 | const uint16_t *latencies; |
4600 | 4616 | ||
4601 | if (INTEL_INFO(dev)->gen >= 9) | 4617 | if (INTEL_INFO(dev)->gen >= 9) |
@@ -4611,7 +4627,7 @@ static int spr_wm_latency_show(struct seq_file *m, void *data) | |||
4611 | static int cur_wm_latency_show(struct seq_file *m, void *data) | 4627 | static int cur_wm_latency_show(struct seq_file *m, void *data) |
4612 | { | 4628 | { |
4613 | struct drm_device *dev = m->private; | 4629 | struct drm_device *dev = m->private; |
4614 | struct drm_i915_private *dev_priv = dev->dev_private; | 4630 | struct drm_i915_private *dev_priv = to_i915(dev); |
4615 | const uint16_t *latencies; | 4631 | const uint16_t *latencies; |
4616 | 4632 | ||
4617 | if (INTEL_INFO(dev)->gen >= 9) | 4633 | if (INTEL_INFO(dev)->gen >= 9) |
@@ -4702,7 +4718,7 @@ static ssize_t pri_wm_latency_write(struct file *file, const char __user *ubuf, | |||
4702 | { | 4718 | { |
4703 | struct seq_file *m = file->private_data; | 4719 | struct seq_file *m = file->private_data; |
4704 | struct drm_device *dev = m->private; | 4720 | struct drm_device *dev = m->private; |
4705 | struct drm_i915_private *dev_priv = dev->dev_private; | 4721 | struct drm_i915_private *dev_priv = to_i915(dev); |
4706 | uint16_t *latencies; | 4722 | uint16_t *latencies; |
4707 | 4723 | ||
4708 | if (INTEL_INFO(dev)->gen >= 9) | 4724 | if (INTEL_INFO(dev)->gen >= 9) |
@@ -4718,7 +4734,7 @@ static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf, | |||
4718 | { | 4734 | { |
4719 | struct seq_file *m = file->private_data; | 4735 | struct seq_file *m = file->private_data; |
4720 | struct drm_device *dev = m->private; | 4736 | struct drm_device *dev = m->private; |
4721 | struct drm_i915_private *dev_priv = dev->dev_private; | 4737 | struct drm_i915_private *dev_priv = to_i915(dev); |
4722 | uint16_t *latencies; | 4738 | uint16_t *latencies; |
4723 | 4739 | ||
4724 | if (INTEL_INFO(dev)->gen >= 9) | 4740 | if (INTEL_INFO(dev)->gen >= 9) |
@@ -4734,7 +4750,7 @@ static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf, | |||
4734 | { | 4750 | { |
4735 | struct seq_file *m = file->private_data; | 4751 | struct seq_file *m = file->private_data; |
4736 | struct drm_device *dev = m->private; | 4752 | struct drm_device *dev = m->private; |
4737 | struct drm_i915_private *dev_priv = dev->dev_private; | 4753 | struct drm_i915_private *dev_priv = to_i915(dev); |
4738 | uint16_t *latencies; | 4754 | uint16_t *latencies; |
4739 | 4755 | ||
4740 | if (INTEL_INFO(dev)->gen >= 9) | 4756 | if (INTEL_INFO(dev)->gen >= 9) |
@@ -4776,7 +4792,7 @@ static int | |||
4776 | i915_wedged_get(void *data, u64 *val) | 4792 | i915_wedged_get(void *data, u64 *val) |
4777 | { | 4793 | { |
4778 | struct drm_device *dev = data; | 4794 | struct drm_device *dev = data; |
4779 | struct drm_i915_private *dev_priv = dev->dev_private; | 4795 | struct drm_i915_private *dev_priv = to_i915(dev); |
4780 | 4796 | ||
4781 | *val = i915_terminally_wedged(&dev_priv->gpu_error); | 4797 | *val = i915_terminally_wedged(&dev_priv->gpu_error); |
4782 | 4798 | ||
@@ -4787,7 +4803,7 @@ static int | |||
4787 | i915_wedged_set(void *data, u64 val) | 4803 | i915_wedged_set(void *data, u64 val) |
4788 | { | 4804 | { |
4789 | struct drm_device *dev = data; | 4805 | struct drm_device *dev = data; |
4790 | struct drm_i915_private *dev_priv = dev->dev_private; | 4806 | struct drm_i915_private *dev_priv = to_i915(dev); |
4791 | 4807 | ||
4792 | /* | 4808 | /* |
4793 | * There is no safeguard against this debugfs entry colliding | 4809 | * There is no safeguard against this debugfs entry colliding |
@@ -4815,44 +4831,10 @@ DEFINE_SIMPLE_ATTRIBUTE(i915_wedged_fops, | |||
4815 | "%llu\n"); | 4831 | "%llu\n"); |
4816 | 4832 | ||
4817 | static int | 4833 | static int |
4818 | i915_ring_stop_get(void *data, u64 *val) | ||
4819 | { | ||
4820 | struct drm_device *dev = data; | ||
4821 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
4822 | |||
4823 | *val = dev_priv->gpu_error.stop_rings; | ||
4824 | |||
4825 | return 0; | ||
4826 | } | ||
4827 | |||
4828 | static int | ||
4829 | i915_ring_stop_set(void *data, u64 val) | ||
4830 | { | ||
4831 | struct drm_device *dev = data; | ||
4832 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
4833 | int ret; | ||
4834 | |||
4835 | DRM_DEBUG_DRIVER("Stopping rings 0x%08llx\n", val); | ||
4836 | |||
4837 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
4838 | if (ret) | ||
4839 | return ret; | ||
4840 | |||
4841 | dev_priv->gpu_error.stop_rings = val; | ||
4842 | mutex_unlock(&dev->struct_mutex); | ||
4843 | |||
4844 | return 0; | ||
4845 | } | ||
4846 | |||
4847 | DEFINE_SIMPLE_ATTRIBUTE(i915_ring_stop_fops, | ||
4848 | i915_ring_stop_get, i915_ring_stop_set, | ||
4849 | "0x%08llx\n"); | ||
4850 | |||
4851 | static int | ||
4852 | i915_ring_missed_irq_get(void *data, u64 *val) | 4834 | i915_ring_missed_irq_get(void *data, u64 *val) |
4853 | { | 4835 | { |
4854 | struct drm_device *dev = data; | 4836 | struct drm_device *dev = data; |
4855 | struct drm_i915_private *dev_priv = dev->dev_private; | 4837 | struct drm_i915_private *dev_priv = to_i915(dev); |
4856 | 4838 | ||
4857 | *val = dev_priv->gpu_error.missed_irq_rings; | 4839 | *val = dev_priv->gpu_error.missed_irq_rings; |
4858 | return 0; | 4840 | return 0; |
@@ -4862,7 +4844,7 @@ static int | |||
4862 | i915_ring_missed_irq_set(void *data, u64 val) | 4844 | i915_ring_missed_irq_set(void *data, u64 val) |
4863 | { | 4845 | { |
4864 | struct drm_device *dev = data; | 4846 | struct drm_device *dev = data; |
4865 | struct drm_i915_private *dev_priv = dev->dev_private; | 4847 | struct drm_i915_private *dev_priv = to_i915(dev); |
4866 | int ret; | 4848 | int ret; |
4867 | 4849 | ||
4868 | /* Lock against concurrent debugfs callers */ | 4850 | /* Lock against concurrent debugfs callers */ |
@@ -4883,7 +4865,7 @@ static int | |||
4883 | i915_ring_test_irq_get(void *data, u64 *val) | 4865 | i915_ring_test_irq_get(void *data, u64 *val) |
4884 | { | 4866 | { |
4885 | struct drm_device *dev = data; | 4867 | struct drm_device *dev = data; |
4886 | struct drm_i915_private *dev_priv = dev->dev_private; | 4868 | struct drm_i915_private *dev_priv = to_i915(dev); |
4887 | 4869 | ||
4888 | *val = dev_priv->gpu_error.test_irq_rings; | 4870 | *val = dev_priv->gpu_error.test_irq_rings; |
4889 | 4871 | ||
@@ -4894,18 +4876,11 @@ static int | |||
4894 | i915_ring_test_irq_set(void *data, u64 val) | 4876 | i915_ring_test_irq_set(void *data, u64 val) |
4895 | { | 4877 | { |
4896 | struct drm_device *dev = data; | 4878 | struct drm_device *dev = data; |
4897 | struct drm_i915_private *dev_priv = dev->dev_private; | 4879 | struct drm_i915_private *dev_priv = to_i915(dev); |
4898 | int ret; | ||
4899 | 4880 | ||
4881 | val &= INTEL_INFO(dev_priv)->ring_mask; | ||
4900 | DRM_DEBUG_DRIVER("Masking interrupts on rings 0x%08llx\n", val); | 4882 | DRM_DEBUG_DRIVER("Masking interrupts on rings 0x%08llx\n", val); |
4901 | |||
4902 | /* Lock against concurrent debugfs callers */ | ||
4903 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
4904 | if (ret) | ||
4905 | return ret; | ||
4906 | |||
4907 | dev_priv->gpu_error.test_irq_rings = val; | 4883 | dev_priv->gpu_error.test_irq_rings = val; |
4908 | mutex_unlock(&dev->struct_mutex); | ||
4909 | 4884 | ||
4910 | return 0; | 4885 | return 0; |
4911 | } | 4886 | } |
@@ -4934,7 +4909,7 @@ static int | |||
4934 | i915_drop_caches_set(void *data, u64 val) | 4909 | i915_drop_caches_set(void *data, u64 val) |
4935 | { | 4910 | { |
4936 | struct drm_device *dev = data; | 4911 | struct drm_device *dev = data; |
4937 | struct drm_i915_private *dev_priv = dev->dev_private; | 4912 | struct drm_i915_private *dev_priv = to_i915(dev); |
4938 | int ret; | 4913 | int ret; |
4939 | 4914 | ||
4940 | DRM_DEBUG("Dropping caches: 0x%08llx\n", val); | 4915 | DRM_DEBUG("Dropping caches: 0x%08llx\n", val); |
@@ -4946,7 +4921,7 @@ i915_drop_caches_set(void *data, u64 val) | |||
4946 | return ret; | 4921 | return ret; |
4947 | 4922 | ||
4948 | if (val & DROP_ACTIVE) { | 4923 | if (val & DROP_ACTIVE) { |
4949 | ret = i915_gpu_idle(dev); | 4924 | ret = i915_gem_wait_for_idle(dev_priv); |
4950 | if (ret) | 4925 | if (ret) |
4951 | goto unlock; | 4926 | goto unlock; |
4952 | } | 4927 | } |
@@ -4974,7 +4949,7 @@ static int | |||
4974 | i915_max_freq_get(void *data, u64 *val) | 4949 | i915_max_freq_get(void *data, u64 *val) |
4975 | { | 4950 | { |
4976 | struct drm_device *dev = data; | 4951 | struct drm_device *dev = data; |
4977 | struct drm_i915_private *dev_priv = dev->dev_private; | 4952 | struct drm_i915_private *dev_priv = to_i915(dev); |
4978 | int ret; | 4953 | int ret; |
4979 | 4954 | ||
4980 | if (INTEL_INFO(dev)->gen < 6) | 4955 | if (INTEL_INFO(dev)->gen < 6) |
@@ -4996,7 +4971,7 @@ static int | |||
4996 | i915_max_freq_set(void *data, u64 val) | 4971 | i915_max_freq_set(void *data, u64 val) |
4997 | { | 4972 | { |
4998 | struct drm_device *dev = data; | 4973 | struct drm_device *dev = data; |
4999 | struct drm_i915_private *dev_priv = dev->dev_private; | 4974 | struct drm_i915_private *dev_priv = to_i915(dev); |
5000 | u32 hw_max, hw_min; | 4975 | u32 hw_max, hw_min; |
5001 | int ret; | 4976 | int ret; |
5002 | 4977 | ||
@@ -5041,7 +5016,7 @@ static int | |||
5041 | i915_min_freq_get(void *data, u64 *val) | 5016 | i915_min_freq_get(void *data, u64 *val) |
5042 | { | 5017 | { |
5043 | struct drm_device *dev = data; | 5018 | struct drm_device *dev = data; |
5044 | struct drm_i915_private *dev_priv = dev->dev_private; | 5019 | struct drm_i915_private *dev_priv = to_i915(dev); |
5045 | int ret; | 5020 | int ret; |
5046 | 5021 | ||
5047 | if (INTEL_INFO(dev)->gen < 6) | 5022 | if (INTEL_INFO(dev)->gen < 6) |
@@ -5063,7 +5038,7 @@ static int | |||
5063 | i915_min_freq_set(void *data, u64 val) | 5038 | i915_min_freq_set(void *data, u64 val) |
5064 | { | 5039 | { |
5065 | struct drm_device *dev = data; | 5040 | struct drm_device *dev = data; |
5066 | struct drm_i915_private *dev_priv = dev->dev_private; | 5041 | struct drm_i915_private *dev_priv = to_i915(dev); |
5067 | u32 hw_max, hw_min; | 5042 | u32 hw_max, hw_min; |
5068 | int ret; | 5043 | int ret; |
5069 | 5044 | ||
@@ -5108,7 +5083,7 @@ static int | |||
5108 | i915_cache_sharing_get(void *data, u64 *val) | 5083 | i915_cache_sharing_get(void *data, u64 *val) |
5109 | { | 5084 | { |
5110 | struct drm_device *dev = data; | 5085 | struct drm_device *dev = data; |
5111 | struct drm_i915_private *dev_priv = dev->dev_private; | 5086 | struct drm_i915_private *dev_priv = to_i915(dev); |
5112 | u32 snpcr; | 5087 | u32 snpcr; |
5113 | int ret; | 5088 | int ret; |
5114 | 5089 | ||
@@ -5123,7 +5098,7 @@ i915_cache_sharing_get(void *data, u64 *val) | |||
5123 | snpcr = I915_READ(GEN6_MBCUNIT_SNPCR); | 5098 | snpcr = I915_READ(GEN6_MBCUNIT_SNPCR); |
5124 | 5099 | ||
5125 | intel_runtime_pm_put(dev_priv); | 5100 | intel_runtime_pm_put(dev_priv); |
5126 | mutex_unlock(&dev_priv->dev->struct_mutex); | 5101 | mutex_unlock(&dev_priv->drm.struct_mutex); |
5127 | 5102 | ||
5128 | *val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT; | 5103 | *val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT; |
5129 | 5104 | ||
@@ -5134,7 +5109,7 @@ static int | |||
5134 | i915_cache_sharing_set(void *data, u64 val) | 5109 | i915_cache_sharing_set(void *data, u64 val) |
5135 | { | 5110 | { |
5136 | struct drm_device *dev = data; | 5111 | struct drm_device *dev = data; |
5137 | struct drm_i915_private *dev_priv = dev->dev_private; | 5112 | struct drm_i915_private *dev_priv = to_i915(dev); |
5138 | u32 snpcr; | 5113 | u32 snpcr; |
5139 | 5114 | ||
5140 | if (!(IS_GEN6(dev) || IS_GEN7(dev))) | 5115 | if (!(IS_GEN6(dev) || IS_GEN7(dev))) |
@@ -5171,7 +5146,7 @@ struct sseu_dev_status { | |||
5171 | static void cherryview_sseu_device_status(struct drm_device *dev, | 5146 | static void cherryview_sseu_device_status(struct drm_device *dev, |
5172 | struct sseu_dev_status *stat) | 5147 | struct sseu_dev_status *stat) |
5173 | { | 5148 | { |
5174 | struct drm_i915_private *dev_priv = dev->dev_private; | 5149 | struct drm_i915_private *dev_priv = to_i915(dev); |
5175 | int ss_max = 2; | 5150 | int ss_max = 2; |
5176 | int ss; | 5151 | int ss; |
5177 | u32 sig1[ss_max], sig2[ss_max]; | 5152 | u32 sig1[ss_max], sig2[ss_max]; |
@@ -5203,7 +5178,7 @@ static void cherryview_sseu_device_status(struct drm_device *dev, | |||
5203 | static void gen9_sseu_device_status(struct drm_device *dev, | 5178 | static void gen9_sseu_device_status(struct drm_device *dev, |
5204 | struct sseu_dev_status *stat) | 5179 | struct sseu_dev_status *stat) |
5205 | { | 5180 | { |
5206 | struct drm_i915_private *dev_priv = dev->dev_private; | 5181 | struct drm_i915_private *dev_priv = to_i915(dev); |
5207 | int s_max = 3, ss_max = 4; | 5182 | int s_max = 3, ss_max = 4; |
5208 | int s, ss; | 5183 | int s, ss; |
5209 | 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]; |
@@ -5268,7 +5243,7 @@ static void gen9_sseu_device_status(struct drm_device *dev, | |||
5268 | static void broadwell_sseu_device_status(struct drm_device *dev, | 5243 | static void broadwell_sseu_device_status(struct drm_device *dev, |
5269 | struct sseu_dev_status *stat) | 5244 | struct sseu_dev_status *stat) |
5270 | { | 5245 | { |
5271 | struct drm_i915_private *dev_priv = dev->dev_private; | 5246 | struct drm_i915_private *dev_priv = to_i915(dev); |
5272 | int s; | 5247 | int s; |
5273 | u32 slice_info = I915_READ(GEN8_GT_SLICE_INFO); | 5248 | u32 slice_info = I915_READ(GEN8_GT_SLICE_INFO); |
5274 | 5249 | ||
@@ -5347,7 +5322,7 @@ static int i915_sseu_status(struct seq_file *m, void *unused) | |||
5347 | static int i915_forcewake_open(struct inode *inode, struct file *file) | 5322 | static int i915_forcewake_open(struct inode *inode, struct file *file) |
5348 | { | 5323 | { |
5349 | struct drm_device *dev = inode->i_private; | 5324 | struct drm_device *dev = inode->i_private; |
5350 | struct drm_i915_private *dev_priv = dev->dev_private; | 5325 | struct drm_i915_private *dev_priv = to_i915(dev); |
5351 | 5326 | ||
5352 | if (INTEL_INFO(dev)->gen < 6) | 5327 | if (INTEL_INFO(dev)->gen < 6) |
5353 | return 0; | 5328 | return 0; |
@@ -5361,7 +5336,7 @@ static int i915_forcewake_open(struct inode *inode, struct file *file) | |||
5361 | static int i915_forcewake_release(struct inode *inode, struct file *file) | 5336 | static int i915_forcewake_release(struct inode *inode, struct file *file) |
5362 | { | 5337 | { |
5363 | struct drm_device *dev = inode->i_private; | 5338 | struct drm_device *dev = inode->i_private; |
5364 | struct drm_i915_private *dev_priv = dev->dev_private; | 5339 | struct drm_i915_private *dev_priv = to_i915(dev); |
5365 | 5340 | ||
5366 | if (INTEL_INFO(dev)->gen < 6) | 5341 | if (INTEL_INFO(dev)->gen < 6) |
5367 | return 0; | 5342 | return 0; |
@@ -5477,7 +5452,6 @@ static const struct i915_debugfs_files { | |||
5477 | {"i915_max_freq", &i915_max_freq_fops}, | 5452 | {"i915_max_freq", &i915_max_freq_fops}, |
5478 | {"i915_min_freq", &i915_min_freq_fops}, | 5453 | {"i915_min_freq", &i915_min_freq_fops}, |
5479 | {"i915_cache_sharing", &i915_cache_sharing_fops}, | 5454 | {"i915_cache_sharing", &i915_cache_sharing_fops}, |
5480 | {"i915_ring_stop", &i915_ring_stop_fops}, | ||
5481 | {"i915_ring_missed_irq", &i915_ring_missed_irq_fops}, | 5455 | {"i915_ring_missed_irq", &i915_ring_missed_irq_fops}, |
5482 | {"i915_ring_test_irq", &i915_ring_test_irq_fops}, | 5456 | {"i915_ring_test_irq", &i915_ring_test_irq_fops}, |
5483 | {"i915_gem_drop_caches", &i915_drop_caches_fops}, | 5457 | {"i915_gem_drop_caches", &i915_drop_caches_fops}, |
@@ -5495,7 +5469,7 @@ static const struct i915_debugfs_files { | |||
5495 | 5469 | ||
5496 | void intel_display_crc_init(struct drm_device *dev) | 5470 | void intel_display_crc_init(struct drm_device *dev) |
5497 | { | 5471 | { |
5498 | struct drm_i915_private *dev_priv = dev->dev_private; | 5472 | struct drm_i915_private *dev_priv = to_i915(dev); |
5499 | enum pipe pipe; | 5473 | enum pipe pipe; |
5500 | 5474 | ||
5501 | for_each_pipe(dev_priv, pipe) { | 5475 | for_each_pipe(dev_priv, pipe) { |
@@ -5507,8 +5481,9 @@ void intel_display_crc_init(struct drm_device *dev) | |||
5507 | } | 5481 | } |
5508 | } | 5482 | } |
5509 | 5483 | ||
5510 | int i915_debugfs_init(struct drm_minor *minor) | 5484 | int i915_debugfs_register(struct drm_i915_private *dev_priv) |
5511 | { | 5485 | { |
5486 | struct drm_minor *minor = dev_priv->drm.primary; | ||
5512 | int ret, i; | 5487 | int ret, i; |
5513 | 5488 | ||
5514 | ret = i915_forcewake_create(minor->debugfs_root, minor); | 5489 | ret = i915_forcewake_create(minor->debugfs_root, minor); |
@@ -5534,8 +5509,9 @@ int i915_debugfs_init(struct drm_minor *minor) | |||
5534 | minor->debugfs_root, minor); | 5509 | minor->debugfs_root, minor); |
5535 | } | 5510 | } |
5536 | 5511 | ||
5537 | void i915_debugfs_cleanup(struct drm_minor *minor) | 5512 | void i915_debugfs_unregister(struct drm_i915_private *dev_priv) |
5538 | { | 5513 | { |
5514 | struct drm_minor *minor = dev_priv->drm.primary; | ||
5539 | int i; | 5515 | int i; |
5540 | 5516 | ||
5541 | drm_debugfs_remove_files(i915_debugfs_list, | 5517 | drm_debugfs_remove_files(i915_debugfs_list, |