diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_debugfs.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index d14b44e13f51..004b048c5192 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -62,6 +62,7 @@ static int i915_capabilities(struct seq_file *m, void *data) | |||
62 | const struct intel_device_info *info = INTEL_INFO(dev); | 62 | const struct intel_device_info *info = INTEL_INFO(dev); |
63 | 63 | ||
64 | seq_printf(m, "gen: %d\n", info->gen); | 64 | seq_printf(m, "gen: %d\n", info->gen); |
65 | seq_printf(m, "pch: %d\n", INTEL_PCH_TYPE(dev)); | ||
65 | #define B(x) seq_printf(m, #x ": %s\n", yesno(info->x)) | 66 | #define B(x) seq_printf(m, #x ": %s\n", yesno(info->x)) |
66 | B(is_mobile); | 67 | B(is_mobile); |
67 | B(is_i85x); | 68 | B(is_i85x); |
@@ -636,11 +637,16 @@ static int i915_ringbuffer_info(struct seq_file *m, void *data) | |||
636 | struct drm_device *dev = node->minor->dev; | 637 | struct drm_device *dev = node->minor->dev; |
637 | drm_i915_private_t *dev_priv = dev->dev_private; | 638 | drm_i915_private_t *dev_priv = dev->dev_private; |
638 | struct intel_ring_buffer *ring; | 639 | struct intel_ring_buffer *ring; |
640 | int ret; | ||
639 | 641 | ||
640 | ring = &dev_priv->ring[(uintptr_t)node->info_ent->data]; | 642 | ring = &dev_priv->ring[(uintptr_t)node->info_ent->data]; |
641 | if (ring->size == 0) | 643 | if (ring->size == 0) |
642 | return 0; | 644 | return 0; |
643 | 645 | ||
646 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
647 | if (ret) | ||
648 | return ret; | ||
649 | |||
644 | seq_printf(m, "Ring %s:\n", ring->name); | 650 | seq_printf(m, "Ring %s:\n", ring->name); |
645 | seq_printf(m, " Head : %08x\n", I915_READ_HEAD(ring) & HEAD_ADDR); | 651 | seq_printf(m, " Head : %08x\n", I915_READ_HEAD(ring) & HEAD_ADDR); |
646 | seq_printf(m, " Tail : %08x\n", I915_READ_TAIL(ring) & TAIL_ADDR); | 652 | seq_printf(m, " Tail : %08x\n", I915_READ_TAIL(ring) & TAIL_ADDR); |
@@ -654,6 +660,8 @@ static int i915_ringbuffer_info(struct seq_file *m, void *data) | |||
654 | seq_printf(m, " Control : %08x\n", I915_READ_CTL(ring)); | 660 | seq_printf(m, " Control : %08x\n", I915_READ_CTL(ring)); |
655 | seq_printf(m, " Start : %08x\n", I915_READ_START(ring)); | 661 | seq_printf(m, " Start : %08x\n", I915_READ_START(ring)); |
656 | 662 | ||
663 | mutex_unlock(&dev->struct_mutex); | ||
664 | |||
657 | return 0; | 665 | return 0; |
658 | } | 666 | } |
659 | 667 | ||
@@ -842,7 +850,16 @@ static int i915_rstdby_delays(struct seq_file *m, void *unused) | |||
842 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 850 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
843 | struct drm_device *dev = node->minor->dev; | 851 | struct drm_device *dev = node->minor->dev; |
844 | drm_i915_private_t *dev_priv = dev->dev_private; | 852 | drm_i915_private_t *dev_priv = dev->dev_private; |
845 | u16 crstanddelay = I915_READ16(CRSTANDVID); | 853 | u16 crstanddelay; |
854 | int ret; | ||
855 | |||
856 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
857 | if (ret) | ||
858 | return ret; | ||
859 | |||
860 | crstanddelay = I915_READ16(CRSTANDVID); | ||
861 | |||
862 | mutex_unlock(&dev->struct_mutex); | ||
846 | 863 | ||
847 | seq_printf(m, "w/ctx: %d, w/o ctx: %d\n", (crstanddelay >> 8) & 0x3f, (crstanddelay & 0x3f)); | 864 | seq_printf(m, "w/ctx: %d, w/o ctx: %d\n", (crstanddelay >> 8) & 0x3f, (crstanddelay & 0x3f)); |
848 | 865 | ||
@@ -940,7 +957,11 @@ static int i915_delayfreq_table(struct seq_file *m, void *unused) | |||
940 | struct drm_device *dev = node->minor->dev; | 957 | struct drm_device *dev = node->minor->dev; |
941 | drm_i915_private_t *dev_priv = dev->dev_private; | 958 | drm_i915_private_t *dev_priv = dev->dev_private; |
942 | u32 delayfreq; | 959 | u32 delayfreq; |
943 | int i; | 960 | int ret, i; |
961 | |||
962 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
963 | if (ret) | ||
964 | return ret; | ||
944 | 965 | ||
945 | for (i = 0; i < 16; i++) { | 966 | for (i = 0; i < 16; i++) { |
946 | delayfreq = I915_READ(PXVFREQ_BASE + i * 4); | 967 | delayfreq = I915_READ(PXVFREQ_BASE + i * 4); |
@@ -948,6 +969,8 @@ static int i915_delayfreq_table(struct seq_file *m, void *unused) | |||
948 | (delayfreq & PXVFREQ_PX_MASK) >> PXVFREQ_PX_SHIFT); | 969 | (delayfreq & PXVFREQ_PX_MASK) >> PXVFREQ_PX_SHIFT); |
949 | } | 970 | } |
950 | 971 | ||
972 | mutex_unlock(&dev->struct_mutex); | ||
973 | |||
951 | return 0; | 974 | return 0; |
952 | } | 975 | } |
953 | 976 | ||
@@ -962,13 +985,19 @@ static int i915_inttoext_table(struct seq_file *m, void *unused) | |||
962 | struct drm_device *dev = node->minor->dev; | 985 | struct drm_device *dev = node->minor->dev; |
963 | drm_i915_private_t *dev_priv = dev->dev_private; | 986 | drm_i915_private_t *dev_priv = dev->dev_private; |
964 | u32 inttoext; | 987 | u32 inttoext; |
965 | int i; | 988 | int ret, i; |
989 | |||
990 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
991 | if (ret) | ||
992 | return ret; | ||
966 | 993 | ||
967 | for (i = 1; i <= 32; i++) { | 994 | for (i = 1; i <= 32; i++) { |
968 | inttoext = I915_READ(INTTOEXT_BASE_ILK + i * 4); | 995 | inttoext = I915_READ(INTTOEXT_BASE_ILK + i * 4); |
969 | seq_printf(m, "INTTOEXT%02d: 0x%08x\n", i, inttoext); | 996 | seq_printf(m, "INTTOEXT%02d: 0x%08x\n", i, inttoext); |
970 | } | 997 | } |
971 | 998 | ||
999 | mutex_unlock(&dev->struct_mutex); | ||
1000 | |||
972 | return 0; | 1001 | return 0; |
973 | } | 1002 | } |
974 | 1003 | ||
@@ -977,9 +1006,19 @@ static int i915_drpc_info(struct seq_file *m, void *unused) | |||
977 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 1006 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
978 | struct drm_device *dev = node->minor->dev; | 1007 | struct drm_device *dev = node->minor->dev; |
979 | drm_i915_private_t *dev_priv = dev->dev_private; | 1008 | drm_i915_private_t *dev_priv = dev->dev_private; |
980 | u32 rgvmodectl = I915_READ(MEMMODECTL); | 1009 | u32 rgvmodectl, rstdbyctl; |
981 | u32 rstdbyctl = I915_READ(RSTDBYCTL); | 1010 | u16 crstandvid; |
982 | u16 crstandvid = I915_READ16(CRSTANDVID); | 1011 | int ret; |
1012 | |||
1013 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
1014 | if (ret) | ||
1015 | return ret; | ||
1016 | |||
1017 | rgvmodectl = I915_READ(MEMMODECTL); | ||
1018 | rstdbyctl = I915_READ(RSTDBYCTL); | ||
1019 | crstandvid = I915_READ16(CRSTANDVID); | ||
1020 | |||
1021 | mutex_unlock(&dev->struct_mutex); | ||
983 | 1022 | ||
984 | seq_printf(m, "HD boost: %s\n", (rgvmodectl & MEMMODE_BOOST_EN) ? | 1023 | seq_printf(m, "HD boost: %s\n", (rgvmodectl & MEMMODE_BOOST_EN) ? |
985 | "yes" : "no"); | 1024 | "yes" : "no"); |
@@ -1167,9 +1206,16 @@ static int i915_gfxec(struct seq_file *m, void *unused) | |||
1167 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 1206 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
1168 | struct drm_device *dev = node->minor->dev; | 1207 | struct drm_device *dev = node->minor->dev; |
1169 | drm_i915_private_t *dev_priv = dev->dev_private; | 1208 | drm_i915_private_t *dev_priv = dev->dev_private; |
1209 | int ret; | ||
1210 | |||
1211 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
1212 | if (ret) | ||
1213 | return ret; | ||
1170 | 1214 | ||
1171 | seq_printf(m, "GFXEC: %ld\n", (unsigned long)I915_READ(0x112f4)); | 1215 | seq_printf(m, "GFXEC: %ld\n", (unsigned long)I915_READ(0x112f4)); |
1172 | 1216 | ||
1217 | mutex_unlock(&dev->struct_mutex); | ||
1218 | |||
1173 | return 0; | 1219 | return 0; |
1174 | } | 1220 | } |
1175 | 1221 | ||
@@ -1506,7 +1552,10 @@ drm_add_fake_info_node(struct drm_minor *minor, | |||
1506 | node->minor = minor; | 1552 | node->minor = minor; |
1507 | node->dent = ent; | 1553 | node->dent = ent; |
1508 | node->info_ent = (void *) key; | 1554 | node->info_ent = (void *) key; |
1509 | list_add(&node->list, &minor->debugfs_nodes.list); | 1555 | |
1556 | mutex_lock(&minor->debugfs_lock); | ||
1557 | list_add(&node->list, &minor->debugfs_list); | ||
1558 | mutex_unlock(&minor->debugfs_lock); | ||
1510 | 1559 | ||
1511 | return 0; | 1560 | return 0; |
1512 | } | 1561 | } |