aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-04-08 18:12:25 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-04-08 18:12:25 -0400
commit20624d17963c737bbd9f242402bf3136cb664d10 (patch)
tree478f43128e8c445a497efce0fba9699c85552660
parent9a08da1c8b4865a16eb991776d4c53770eb6f31f (diff)
parentf4274e23fb16721449d973ed607505f5dbdcd2df (diff)
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "Final drm fixes: one core locking imbalance regression, and a bunch of i915 baytrail s/r fixes" * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: drm: fix drm_mode_getconnector() locking imbalance regression drm/i915/vlv: remove wait for previous GFX clk disable request drm/i915/chv: Remove Wait for a previous gfx force-off drm/i915/vlv: save/restore the power context base reg
-rw-r--r--drivers/gpu/drm/drm_crtc.c4
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c14
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h1
3 files changed, 6 insertions, 13 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 679b10e34fb5..b6f076b213bc 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2121,7 +2121,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
2121 connector = drm_connector_find(dev, out_resp->connector_id); 2121 connector = drm_connector_find(dev, out_resp->connector_id);
2122 if (!connector) { 2122 if (!connector) {
2123 ret = -ENOENT; 2123 ret = -ENOENT;
2124 goto out; 2124 goto out_unlock;
2125 } 2125 }
2126 2126
2127 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) 2127 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
@@ -2201,6 +2201,8 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
2201 2201
2202out: 2202out:
2203 drm_modeset_unlock(&dev->mode_config.connection_mutex); 2203 drm_modeset_unlock(&dev->mode_config.connection_mutex);
2204
2205out_unlock:
2204 mutex_unlock(&dev->mode_config.mutex); 2206 mutex_unlock(&dev->mode_config.mutex);
2205 2207
2206 return ret; 2208 return ret;
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index cc6ea53d2b81..5c66b568bb81 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1095,6 +1095,7 @@ static void vlv_save_gunit_s0ix_state(struct drm_i915_private *dev_priv)
1095 /* Gunit-Display CZ domain, 0x182028-0x1821CF */ 1095 /* Gunit-Display CZ domain, 0x182028-0x1821CF */
1096 s->gu_ctl0 = I915_READ(VLV_GU_CTL0); 1096 s->gu_ctl0 = I915_READ(VLV_GU_CTL0);
1097 s->gu_ctl1 = I915_READ(VLV_GU_CTL1); 1097 s->gu_ctl1 = I915_READ(VLV_GU_CTL1);
1098 s->pcbr = I915_READ(VLV_PCBR);
1098 s->clock_gate_dis2 = I915_READ(VLV_GUNIT_CLOCK_GATE2); 1099 s->clock_gate_dis2 = I915_READ(VLV_GUNIT_CLOCK_GATE2);
1099 1100
1100 /* 1101 /*
@@ -1189,6 +1190,7 @@ static void vlv_restore_gunit_s0ix_state(struct drm_i915_private *dev_priv)
1189 /* Gunit-Display CZ domain, 0x182028-0x1821CF */ 1190 /* Gunit-Display CZ domain, 0x182028-0x1821CF */
1190 I915_WRITE(VLV_GU_CTL0, s->gu_ctl0); 1191 I915_WRITE(VLV_GU_CTL0, s->gu_ctl0);
1191 I915_WRITE(VLV_GU_CTL1, s->gu_ctl1); 1192 I915_WRITE(VLV_GU_CTL1, s->gu_ctl1);
1193 I915_WRITE(VLV_PCBR, s->pcbr);
1192 I915_WRITE(VLV_GUNIT_CLOCK_GATE2, s->clock_gate_dis2); 1194 I915_WRITE(VLV_GUNIT_CLOCK_GATE2, s->clock_gate_dis2);
1193} 1195}
1194 1196
@@ -1197,19 +1199,7 @@ int vlv_force_gfx_clock(struct drm_i915_private *dev_priv, bool force_on)
1197 u32 val; 1199 u32 val;
1198 int err; 1200 int err;
1199 1201
1200 val = I915_READ(VLV_GTLC_SURVIVABILITY_REG);
1201 WARN_ON(!!(val & VLV_GFX_CLK_FORCE_ON_BIT) == force_on);
1202
1203#define COND (I915_READ(VLV_GTLC_SURVIVABILITY_REG) & VLV_GFX_CLK_STATUS_BIT) 1202#define COND (I915_READ(VLV_GTLC_SURVIVABILITY_REG) & VLV_GFX_CLK_STATUS_BIT)
1204 /* Wait for a previous force-off to settle */
1205 if (force_on) {
1206 err = wait_for(!COND, 20);
1207 if (err) {
1208 DRM_ERROR("timeout waiting for GFX clock force-off (%08x)\n",
1209 I915_READ(VLV_GTLC_SURVIVABILITY_REG));
1210 return err;
1211 }
1212 }
1213 1203
1214 val = I915_READ(VLV_GTLC_SURVIVABILITY_REG); 1204 val = I915_READ(VLV_GTLC_SURVIVABILITY_REG);
1215 val &= ~VLV_GFX_CLK_FORCE_ON_BIT; 1205 val &= ~VLV_GFX_CLK_FORCE_ON_BIT;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 8727086cf48c..b4faa2df9d3d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1094,6 +1094,7 @@ struct vlv_s0ix_state {
1094 /* Display 2 CZ domain */ 1094 /* Display 2 CZ domain */
1095 u32 gu_ctl0; 1095 u32 gu_ctl0;
1096 u32 gu_ctl1; 1096 u32 gu_ctl1;
1097 u32 pcbr;
1097 u32 clock_gate_dis2; 1098 u32 clock_gate_dis2;
1098}; 1099};
1099 1100