diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2014-04-01 13:55:08 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-04-01 16:41:47 -0400 |
commit | cf67c70fa213cdf760b97f143b68eed7630efe78 (patch) | |
tree | 284e1fe8698f5d505e9232ef61756e773df49e1e | |
parent | aa0b3b5bb8768c1a6a6788869d9c7015eae7e80c (diff) |
drm/i915: get runtime PM at i915_reg_read_ioctl
To avoid WARNs when we call it.
Testcase: igt/pm_pc8/reg-read-ioctl
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=75693
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_uncore.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index c47853bd60be..f729dc71d5be 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c | |||
@@ -866,7 +866,7 @@ int i915_reg_read_ioctl(struct drm_device *dev, | |||
866 | struct drm_i915_private *dev_priv = dev->dev_private; | 866 | struct drm_i915_private *dev_priv = dev->dev_private; |
867 | struct drm_i915_reg_read *reg = data; | 867 | struct drm_i915_reg_read *reg = data; |
868 | struct register_whitelist const *entry = whitelist; | 868 | struct register_whitelist const *entry = whitelist; |
869 | int i; | 869 | int i, ret = 0; |
870 | 870 | ||
871 | for (i = 0; i < ARRAY_SIZE(whitelist); i++, entry++) { | 871 | for (i = 0; i < ARRAY_SIZE(whitelist); i++, entry++) { |
872 | if (entry->offset == reg->offset && | 872 | if (entry->offset == reg->offset && |
@@ -877,6 +877,8 @@ int i915_reg_read_ioctl(struct drm_device *dev, | |||
877 | if (i == ARRAY_SIZE(whitelist)) | 877 | if (i == ARRAY_SIZE(whitelist)) |
878 | return -EINVAL; | 878 | return -EINVAL; |
879 | 879 | ||
880 | intel_runtime_pm_get(dev_priv); | ||
881 | |||
880 | switch (entry->size) { | 882 | switch (entry->size) { |
881 | case 8: | 883 | case 8: |
882 | reg->val = I915_READ64(reg->offset); | 884 | reg->val = I915_READ64(reg->offset); |
@@ -892,10 +894,13 @@ int i915_reg_read_ioctl(struct drm_device *dev, | |||
892 | break; | 894 | break; |
893 | default: | 895 | default: |
894 | WARN_ON(1); | 896 | WARN_ON(1); |
895 | return -EINVAL; | 897 | ret = -EINVAL; |
898 | goto out; | ||
896 | } | 899 | } |
897 | 900 | ||
898 | return 0; | 901 | out: |
902 | intel_runtime_pm_put(dev_priv); | ||
903 | return ret; | ||
899 | } | 904 | } |
900 | 905 | ||
901 | int i915_get_reset_stats_ioctl(struct drm_device *dev, | 906 | int i915_get_reset_stats_ioctl(struct drm_device *dev, |