aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_debugfs.c
diff options
context:
space:
mode:
authorBen Widawsky <ben@bwidawsk.net>2011-10-05 14:44:54 -0400
committerKeith Packard <keithp@keithp.com>2011-11-03 12:19:14 -0400
commit616fdb5afb12b4d5bb9e36df40d039e86aaaefc2 (patch)
tree574528a670a1e974bb07371c0c1927c1cbb8c28d /drivers/gpu/drm/i915/i915_debugfs.c
parentff56b0bc84c01fb2c5d2ec6438becfe0f5f2f78f (diff)
drm/i915: forcewake warning fixes in debugfs
Some more unsafe debugfs access are fixed with this patch. I tested all reads, but didn't thoroughly test the writes. Cc: "Nicolas Kalkhof" <nkalkhof@web.de> Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_debugfs.c')
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c57
1 files changed, 51 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 8e95d66800b0..f2e02075d510 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -635,11 +635,16 @@ static int i915_ringbuffer_info(struct seq_file *m, void *data)
635 struct drm_device *dev = node->minor->dev; 635 struct drm_device *dev = node->minor->dev;
636 drm_i915_private_t *dev_priv = dev->dev_private; 636 drm_i915_private_t *dev_priv = dev->dev_private;
637 struct intel_ring_buffer *ring; 637 struct intel_ring_buffer *ring;
638 int ret;
638 639
639 ring = &dev_priv->ring[(uintptr_t)node->info_ent->data]; 640 ring = &dev_priv->ring[(uintptr_t)node->info_ent->data];
640 if (ring->size == 0) 641 if (ring->size == 0)
641 return 0; 642 return 0;
642 643
644 ret = mutex_lock_interruptible(&dev->struct_mutex);
645 if (ret)
646 return ret;
647
643 seq_printf(m, "Ring %s:\n", ring->name); 648 seq_printf(m, "Ring %s:\n", ring->name);
644 seq_printf(m, " Head : %08x\n", I915_READ_HEAD(ring) & HEAD_ADDR); 649 seq_printf(m, " Head : %08x\n", I915_READ_HEAD(ring) & HEAD_ADDR);
645 seq_printf(m, " Tail : %08x\n", I915_READ_TAIL(ring) & TAIL_ADDR); 650 seq_printf(m, " Tail : %08x\n", I915_READ_TAIL(ring) & TAIL_ADDR);
@@ -653,6 +658,8 @@ static int i915_ringbuffer_info(struct seq_file *m, void *data)
653 seq_printf(m, " Control : %08x\n", I915_READ_CTL(ring)); 658 seq_printf(m, " Control : %08x\n", I915_READ_CTL(ring));
654 seq_printf(m, " Start : %08x\n", I915_READ_START(ring)); 659 seq_printf(m, " Start : %08x\n", I915_READ_START(ring));
655 660
661 mutex_unlock(&dev->struct_mutex);
662
656 return 0; 663 return 0;
657} 664}
658 665
@@ -841,7 +848,16 @@ static int i915_rstdby_delays(struct seq_file *m, void *unused)
841 struct drm_info_node *node = (struct drm_info_node *) m->private; 848 struct drm_info_node *node = (struct drm_info_node *) m->private;
842 struct drm_device *dev = node->minor->dev; 849 struct drm_device *dev = node->minor->dev;
843 drm_i915_private_t *dev_priv = dev->dev_private; 850 drm_i915_private_t *dev_priv = dev->dev_private;
844 u16 crstanddelay = I915_READ16(CRSTANDVID); 851 u16 crstanddelay;
852 int ret;
853
854 ret = mutex_lock_interruptible(&dev->struct_mutex);
855 if (ret)
856 return ret;
857
858 crstanddelay = I915_READ16(CRSTANDVID);
859
860 mutex_unlock(&dev->struct_mutex);
845 861
846 seq_printf(m, "w/ctx: %d, w/o ctx: %d\n", (crstanddelay >> 8) & 0x3f, (crstanddelay & 0x3f)); 862 seq_printf(m, "w/ctx: %d, w/o ctx: %d\n", (crstanddelay >> 8) & 0x3f, (crstanddelay & 0x3f));
847 863
@@ -939,7 +955,11 @@ static int i915_delayfreq_table(struct seq_file *m, void *unused)
939 struct drm_device *dev = node->minor->dev; 955 struct drm_device *dev = node->minor->dev;
940 drm_i915_private_t *dev_priv = dev->dev_private; 956 drm_i915_private_t *dev_priv = dev->dev_private;
941 u32 delayfreq; 957 u32 delayfreq;
942 int i; 958 int ret, i;
959
960 ret = mutex_lock_interruptible(&dev->struct_mutex);
961 if (ret)
962 return ret;
943 963
944 for (i = 0; i < 16; i++) { 964 for (i = 0; i < 16; i++) {
945 delayfreq = I915_READ(PXVFREQ_BASE + i * 4); 965 delayfreq = I915_READ(PXVFREQ_BASE + i * 4);
@@ -947,6 +967,8 @@ static int i915_delayfreq_table(struct seq_file *m, void *unused)
947 (delayfreq & PXVFREQ_PX_MASK) >> PXVFREQ_PX_SHIFT); 967 (delayfreq & PXVFREQ_PX_MASK) >> PXVFREQ_PX_SHIFT);
948 } 968 }
949 969
970 mutex_unlock(&dev->struct_mutex);
971
950 return 0; 972 return 0;
951} 973}
952 974
@@ -961,13 +983,19 @@ static int i915_inttoext_table(struct seq_file *m, void *unused)
961 struct drm_device *dev = node->minor->dev; 983 struct drm_device *dev = node->minor->dev;
962 drm_i915_private_t *dev_priv = dev->dev_private; 984 drm_i915_private_t *dev_priv = dev->dev_private;
963 u32 inttoext; 985 u32 inttoext;
964 int i; 986 int ret, i;
987
988 ret = mutex_lock_interruptible(&dev->struct_mutex);
989 if (ret)
990 return ret;
965 991
966 for (i = 1; i <= 32; i++) { 992 for (i = 1; i <= 32; i++) {
967 inttoext = I915_READ(INTTOEXT_BASE_ILK + i * 4); 993 inttoext = I915_READ(INTTOEXT_BASE_ILK + i * 4);
968 seq_printf(m, "INTTOEXT%02d: 0x%08x\n", i, inttoext); 994 seq_printf(m, "INTTOEXT%02d: 0x%08x\n", i, inttoext);
969 } 995 }
970 996
997 mutex_unlock(&dev->struct_mutex);
998
971 return 0; 999 return 0;
972} 1000}
973 1001
@@ -976,9 +1004,19 @@ static int i915_drpc_info(struct seq_file *m, void *unused)
976 struct drm_info_node *node = (struct drm_info_node *) m->private; 1004 struct drm_info_node *node = (struct drm_info_node *) m->private;
977 struct drm_device *dev = node->minor->dev; 1005 struct drm_device *dev = node->minor->dev;
978 drm_i915_private_t *dev_priv = dev->dev_private; 1006 drm_i915_private_t *dev_priv = dev->dev_private;
979 u32 rgvmodectl = I915_READ(MEMMODECTL); 1007 u32 rgvmodectl, rstdbyctl;
980 u32 rstdbyctl = I915_READ(RSTDBYCTL); 1008 u16 crstandvid;
981 u16 crstandvid = I915_READ16(CRSTANDVID); 1009 int ret;
1010
1011 ret = mutex_lock_interruptible(&dev->struct_mutex);
1012 if (ret)
1013 return ret;
1014
1015 rgvmodectl = I915_READ(MEMMODECTL);
1016 rstdbyctl = I915_READ(RSTDBYCTL);
1017 crstandvid = I915_READ16(CRSTANDVID);
1018
1019 mutex_unlock(&dev->struct_mutex);
982 1020
983 seq_printf(m, "HD boost: %s\n", (rgvmodectl & MEMMODE_BOOST_EN) ? 1021 seq_printf(m, "HD boost: %s\n", (rgvmodectl & MEMMODE_BOOST_EN) ?
984 "yes" : "no"); 1022 "yes" : "no");
@@ -1166,9 +1204,16 @@ static int i915_gfxec(struct seq_file *m, void *unused)
1166 struct drm_info_node *node = (struct drm_info_node *) m->private; 1204 struct drm_info_node *node = (struct drm_info_node *) m->private;
1167 struct drm_device *dev = node->minor->dev; 1205 struct drm_device *dev = node->minor->dev;
1168 drm_i915_private_t *dev_priv = dev->dev_private; 1206 drm_i915_private_t *dev_priv = dev->dev_private;
1207 int ret;
1208
1209 ret = mutex_lock_interruptible(&dev->struct_mutex);
1210 if (ret)
1211 return ret;
1169 1212
1170 seq_printf(m, "GFXEC: %ld\n", (unsigned long)I915_READ(0x112f4)); 1213 seq_printf(m, "GFXEC: %ld\n", (unsigned long)I915_READ(0x112f4));
1171 1214
1215 mutex_unlock(&dev->struct_mutex);
1216
1172 return 0; 1217 return 0;
1173} 1218}
1174 1219