diff options
author | Dave Airlie <airlied@redhat.com> | 2012-08-27 02:22:20 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-08-27 02:22:20 -0400 |
commit | 93bb70e0c00f1be4cc857e4d8375c44058cce71e (patch) | |
tree | 7b6a11844e00b3f4bf8281c7a799e61494220819 /drivers/gpu/drm/i915 | |
parent | 6f314ebbaa2667d67a7206ba78f28e46cf47eda5 (diff) | |
parent | c182ae42cc3611f7b3fa803c0bcab6e5d29bea63 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into drm-next
There was some merge conflicts in -next and they weren't so pretty, so
backmerge now to avoid them.
Conflicts:
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/intel_modes.c
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_gtt.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_crt.c | 36 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_modes.c | 29 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 15 |
7 files changed, 67 insertions, 25 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 051459324826..31054fa44c47 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -2273,11 +2273,11 @@ int i915_gpu_idle(struct drm_device *dev) | |||
2273 | 2273 | ||
2274 | /* Flush everything onto the inactive list. */ | 2274 | /* Flush everything onto the inactive list. */ |
2275 | for_each_ring(ring, dev_priv, i) { | 2275 | for_each_ring(ring, dev_priv, i) { |
2276 | ret = i915_ring_idle(ring); | 2276 | ret = i915_switch_context(ring, NULL, DEFAULT_CONTEXT_ID); |
2277 | if (ret) | 2277 | if (ret) |
2278 | return ret; | 2278 | return ret; |
2279 | 2279 | ||
2280 | ret = i915_switch_context(ring, NULL, DEFAULT_CONTEXT_ID); | 2280 | ret = i915_ring_idle(ring); |
2281 | if (ret) | 2281 | if (ret) |
2282 | return ret; | 2282 | return ret; |
2283 | } | 2283 | } |
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c index 3b3b731a17c3..804d65345e2c 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c | |||
@@ -261,7 +261,10 @@ void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt, | |||
261 | pte_flags |= GEN6_PTE_CACHE_LLC; | 261 | pte_flags |= GEN6_PTE_CACHE_LLC; |
262 | break; | 262 | break; |
263 | case I915_CACHE_NONE: | 263 | case I915_CACHE_NONE: |
264 | pte_flags |= GEN6_PTE_UNCACHED; | 264 | if (IS_HASWELL(dev)) |
265 | pte_flags |= HSW_PTE_UNCACHED; | ||
266 | else | ||
267 | pte_flags |= GEN6_PTE_UNCACHED; | ||
265 | break; | 268 | break; |
266 | default: | 269 | default: |
267 | BUG(); | 270 | BUG(); |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 321ae7261320..ab8cffe193cd 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -115,6 +115,7 @@ | |||
115 | 115 | ||
116 | #define GEN6_PTE_VALID (1 << 0) | 116 | #define GEN6_PTE_VALID (1 << 0) |
117 | #define GEN6_PTE_UNCACHED (1 << 1) | 117 | #define GEN6_PTE_UNCACHED (1 << 1) |
118 | #define HSW_PTE_UNCACHED (0) | ||
118 | #define GEN6_PTE_CACHE_LLC (2 << 1) | 119 | #define GEN6_PTE_CACHE_LLC (2 << 1) |
119 | #define GEN6_PTE_CACHE_LLC_MLC (3 << 1) | 120 | #define GEN6_PTE_CACHE_LLC_MLC (3 << 1) |
120 | #define GEN6_PTE_CACHE_BITS (3 << 1) | 121 | #define GEN6_PTE_CACHE_BITS (3 << 1) |
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c index bc5e2c97db61..80bf3112dc1f 100644 --- a/drivers/gpu/drm/i915/intel_crt.c +++ b/drivers/gpu/drm/i915/intel_crt.c | |||
@@ -328,6 +328,36 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector) | |||
328 | return ret; | 328 | return ret; |
329 | } | 329 | } |
330 | 330 | ||
331 | static struct edid *intel_crt_get_edid(struct drm_connector *connector, | ||
332 | struct i2c_adapter *i2c) | ||
333 | { | ||
334 | struct edid *edid; | ||
335 | |||
336 | edid = drm_get_edid(connector, i2c); | ||
337 | |||
338 | if (!edid && !intel_gmbus_is_forced_bit(i2c)) { | ||
339 | DRM_DEBUG_KMS("CRT GMBUS EDID read failed, retry using GPIO bit-banging\n"); | ||
340 | intel_gmbus_force_bit(i2c, true); | ||
341 | edid = drm_get_edid(connector, i2c); | ||
342 | intel_gmbus_force_bit(i2c, false); | ||
343 | } | ||
344 | |||
345 | return edid; | ||
346 | } | ||
347 | |||
348 | /* local version of intel_ddc_get_modes() to use intel_crt_get_edid() */ | ||
349 | static int intel_crt_ddc_get_modes(struct drm_connector *connector, | ||
350 | struct i2c_adapter *adapter) | ||
351 | { | ||
352 | struct edid *edid; | ||
353 | |||
354 | edid = intel_crt_get_edid(connector, adapter); | ||
355 | if (!edid) | ||
356 | return 0; | ||
357 | |||
358 | return intel_connector_update_modes(connector, edid); | ||
359 | } | ||
360 | |||
331 | static bool intel_crt_detect_ddc(struct drm_connector *connector) | 361 | static bool intel_crt_detect_ddc(struct drm_connector *connector) |
332 | { | 362 | { |
333 | struct intel_crt *crt = intel_attached_crt(connector); | 363 | struct intel_crt *crt = intel_attached_crt(connector); |
@@ -338,7 +368,7 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector) | |||
338 | BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG); | 368 | BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG); |
339 | 369 | ||
340 | i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin); | 370 | i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin); |
341 | edid = drm_get_edid(connector, i2c); | 371 | edid = intel_crt_get_edid(connector, i2c); |
342 | 372 | ||
343 | if (edid) { | 373 | if (edid) { |
344 | bool is_digital = edid->input & DRM_EDID_INPUT_DIGITAL; | 374 | bool is_digital = edid->input & DRM_EDID_INPUT_DIGITAL; |
@@ -546,13 +576,13 @@ static int intel_crt_get_modes(struct drm_connector *connector) | |||
546 | struct i2c_adapter *i2c; | 576 | struct i2c_adapter *i2c; |
547 | 577 | ||
548 | i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin); | 578 | i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin); |
549 | ret = intel_ddc_get_modes(connector, i2c); | 579 | ret = intel_crt_ddc_get_modes(connector, i2c); |
550 | if (ret || !IS_G4X(dev)) | 580 | if (ret || !IS_G4X(dev)) |
551 | return ret; | 581 | return ret; |
552 | 582 | ||
553 | /* Try to probe digital port for output in DVI-I -> VGA mode. */ | 583 | /* Try to probe digital port for output in DVI-I -> VGA mode. */ |
554 | i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB); | 584 | i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB); |
555 | return intel_ddc_get_modes(connector, i2c); | 585 | return intel_crt_ddc_get_modes(connector, i2c); |
556 | } | 586 | } |
557 | 587 | ||
558 | static int intel_crt_set_property(struct drm_connector *connector, | 588 | static int intel_crt_set_property(struct drm_connector *connector, |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 6920bc26a2e9..e86b3a20d70b 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -358,6 +358,8 @@ struct intel_fbc_work { | |||
358 | int interval; | 358 | int interval; |
359 | }; | 359 | }; |
360 | 360 | ||
361 | int intel_connector_update_modes(struct drm_connector *connector, | ||
362 | struct edid *edid); | ||
361 | int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter); | 363 | int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter); |
362 | 364 | ||
363 | extern void intel_attach_force_audio_property(struct drm_connector *connector); | 365 | extern void intel_attach_force_audio_property(struct drm_connector *connector); |
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c index 7a5238fc1a02..4bc1c0fc342a 100644 --- a/drivers/gpu/drm/i915/intel_modes.c +++ b/drivers/gpu/drm/i915/intel_modes.c | |||
@@ -33,6 +33,24 @@ | |||
33 | #include "i915_drv.h" | 33 | #include "i915_drv.h" |
34 | 34 | ||
35 | /** | 35 | /** |
36 | * intel_connector_update_modes - update connector from edid | ||
37 | * @connector: DRM connector device to use | ||
38 | * @edid: previously read EDID information | ||
39 | */ | ||
40 | int intel_connector_update_modes(struct drm_connector *connector, | ||
41 | struct edid *edid) | ||
42 | { | ||
43 | int ret; | ||
44 | |||
45 | drm_mode_connector_update_edid_property(connector, edid); | ||
46 | ret = drm_add_edid_modes(connector, edid); | ||
47 | drm_edid_to_eld(connector, edid); | ||
48 | kfree(edid); | ||
49 | |||
50 | return ret; | ||
51 | } | ||
52 | |||
53 | /** | ||
36 | * intel_ddc_get_modes - get modelist from monitor | 54 | * intel_ddc_get_modes - get modelist from monitor |
37 | * @connector: DRM connector device to use | 55 | * @connector: DRM connector device to use |
38 | * @adapter: i2c adapter | 56 | * @adapter: i2c adapter |
@@ -43,17 +61,12 @@ int intel_ddc_get_modes(struct drm_connector *connector, | |||
43 | struct i2c_adapter *adapter) | 61 | struct i2c_adapter *adapter) |
44 | { | 62 | { |
45 | struct edid *edid; | 63 | struct edid *edid; |
46 | int ret = 0; | ||
47 | 64 | ||
48 | edid = drm_get_edid(connector, adapter); | 65 | edid = drm_get_edid(connector, adapter); |
49 | if (edid) { | 66 | if (!edid) |
50 | drm_mode_connector_update_edid_property(connector, edid); | 67 | return 0; |
51 | ret = drm_add_edid_modes(connector, edid); | ||
52 | drm_edid_to_eld(connector, edid); | ||
53 | kfree(edid); | ||
54 | } | ||
55 | 68 | ||
56 | return ret; | 69 | return intel_connector_update_modes(connector, edid); |
57 | } | 70 | } |
58 | 71 | ||
59 | static const struct drm_prop_enum_list force_audio_names[] = { | 72 | static const struct drm_prop_enum_list force_audio_names[] = { |
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index c0407aa5baac..9b05f7832dc2 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -2482,17 +2482,10 @@ static void gen6_enable_rps(struct drm_device *dev) | |||
2482 | dev_priv->rps.max_delay << 24 | | 2482 | dev_priv->rps.max_delay << 24 | |
2483 | dev_priv->rps.min_delay << 16); | 2483 | dev_priv->rps.min_delay << 16); |
2484 | 2484 | ||
2485 | if (IS_HASWELL(dev)) { | 2485 | I915_WRITE(GEN6_RP_UP_THRESHOLD, 59400); |
2486 | I915_WRITE(GEN6_RP_UP_THRESHOLD, 59400); | 2486 | I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 245000); |
2487 | I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 245000); | 2487 | I915_WRITE(GEN6_RP_UP_EI, 66000); |
2488 | I915_WRITE(GEN6_RP_UP_EI, 66000); | 2488 | I915_WRITE(GEN6_RP_DOWN_EI, 350000); |
2489 | I915_WRITE(GEN6_RP_DOWN_EI, 350000); | ||
2490 | } else { | ||
2491 | I915_WRITE(GEN6_RP_UP_THRESHOLD, 10000); | ||
2492 | I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 1000000); | ||
2493 | I915_WRITE(GEN6_RP_UP_EI, 100000); | ||
2494 | I915_WRITE(GEN6_RP_DOWN_EI, 5000000); | ||
2495 | } | ||
2496 | 2489 | ||
2497 | I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10); | 2490 | I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10); |
2498 | I915_WRITE(GEN6_RP_CONTROL, | 2491 | I915_WRITE(GEN6_RP_CONTROL, |