diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-08 18:12:25 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-08 18:12:25 -0400 |
| commit | 20624d17963c737bbd9f242402bf3136cb664d10 (patch) | |
| tree | 478f43128e8c445a497efce0fba9699c85552660 | |
| parent | 9a08da1c8b4865a16eb991776d4c53770eb6f31f (diff) | |
| parent | f4274e23fb16721449d973ed607505f5dbdcd2df (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.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 14 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 1 |
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 | ||
| 2202 | out: | 2202 | out: |
| 2203 | drm_modeset_unlock(&dev->mode_config.connection_mutex); | 2203 | drm_modeset_unlock(&dev->mode_config.connection_mutex); |
| 2204 | |||
| 2205 | out_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 | ||
