aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/early-quirks.c4
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h1
-rw-r--r--drivers/gpu/drm/i915/intel_bios.c7
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c20
-rw-r--r--drivers/gpu/drm/i915/intel_display.c33
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c2
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c4
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c8
-rw-r--r--drivers/gpu/drm/i915/intel_uncore.c26
9 files changed, 81 insertions, 24 deletions
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
index 96f958d8cd45..bc4a088f9023 100644
--- a/arch/x86/kernel/early-quirks.c
+++ b/arch/x86/kernel/early-quirks.c
@@ -330,8 +330,8 @@ static struct pci_device_id intel_stolen_ids[] __initdata = {
330 INTEL_I915GM_IDS(gen3_stolen_size), 330 INTEL_I915GM_IDS(gen3_stolen_size),
331 INTEL_I945G_IDS(gen3_stolen_size), 331 INTEL_I945G_IDS(gen3_stolen_size),
332 INTEL_I945GM_IDS(gen3_stolen_size), 332 INTEL_I945GM_IDS(gen3_stolen_size),
333 INTEL_VLV_M_IDS(gen3_stolen_size), 333 INTEL_VLV_M_IDS(gen6_stolen_size),
334 INTEL_VLV_D_IDS(gen3_stolen_size), 334 INTEL_VLV_D_IDS(gen6_stolen_size),
335 INTEL_PINEVIEW_IDS(gen3_stolen_size), 335 INTEL_PINEVIEW_IDS(gen3_stolen_size),
336 INTEL_I965G_IDS(gen3_stolen_size), 336 INTEL_I965G_IDS(gen3_stolen_size),
337 INTEL_G33_IDS(gen3_stolen_size), 337 INTEL_G33_IDS(gen3_stolen_size),
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 8600c315b4c4..ccdbecca070d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1816,6 +1816,7 @@ struct drm_i915_file_private {
1816#define HAS_POWER_WELL(dev) (IS_HASWELL(dev) || IS_BROADWELL(dev)) 1816#define HAS_POWER_WELL(dev) (IS_HASWELL(dev) || IS_BROADWELL(dev))
1817#define HAS_FPGA_DBG_UNCLAIMED(dev) (INTEL_INFO(dev)->has_fpga_dbg) 1817#define HAS_FPGA_DBG_UNCLAIMED(dev) (INTEL_INFO(dev)->has_fpga_dbg)
1818#define HAS_PSR(dev) (IS_HASWELL(dev) || IS_BROADWELL(dev)) 1818#define HAS_PSR(dev) (IS_HASWELL(dev) || IS_BROADWELL(dev))
1819#define HAS_PC8(dev) (IS_HASWELL(dev)) /* XXX HSW:ULX */
1819 1820
1820#define INTEL_PCH_DEVICE_ID_MASK 0xff00 1821#define INTEL_PCH_DEVICE_ID_MASK 0xff00
1821#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00 1822#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 6dd622d733b9..e4fba39631a5 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -790,7 +790,12 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
790 790
791 /* Default to using SSC */ 791 /* Default to using SSC */
792 dev_priv->vbt.lvds_use_ssc = 1; 792 dev_priv->vbt.lvds_use_ssc = 1;
793 dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1); 793 /*
794 * Core/SandyBridge/IvyBridge use alternative (120MHz) reference
795 * clock for LVDS.
796 */
797 dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev,
798 !HAS_PCH_SPLIT(dev));
794 DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->vbt.lvds_ssc_freq); 799 DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->vbt.lvds_ssc_freq);
795 800
796 for (port = PORT_A; port < I915_MAX_PORTS; port++) { 801 for (port = PORT_A; port < I915_MAX_PORTS; port++) {
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 1591576a6101..330077bcd0bd 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1406,6 +1406,26 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
1406 default: 1406 default:
1407 break; 1407 break;
1408 } 1408 }
1409
1410 if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp_bpp &&
1411 pipe_config->pipe_bpp > dev_priv->vbt.edp_bpp) {
1412 /*
1413 * This is a big fat ugly hack.
1414 *
1415 * Some machines in UEFI boot mode provide us a VBT that has 18
1416 * bpp and 1.62 GHz link bandwidth for eDP, which for reasons
1417 * unknown we fail to light up. Yet the same BIOS boots up with
1418 * 24 bpp and 2.7 GHz link. Use the same bpp as the BIOS uses as
1419 * max, not what it tells us to use.
1420 *
1421 * Note: This will still be broken if the eDP panel is not lit
1422 * up by the BIOS, and thus we can't get the mode at module
1423 * load.
1424 */
1425 DRM_DEBUG_KMS("pipe has %d bpp for eDP panel, overriding BIOS-provided max %d bpp\n",
1426 pipe_config->pipe_bpp, dev_priv->vbt.edp_bpp);
1427 dev_priv->vbt.edp_bpp = pipe_config->pipe_bpp;
1428 }
1409} 1429}
1410 1430
1411static void intel_ddi_destroy(struct drm_encoder *encoder) 1431static void intel_ddi_destroy(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3cddd508d110..7ec8b488bb1d 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6518,6 +6518,9 @@ static void __hsw_disable_package_c8(struct drm_i915_private *dev_priv)
6518 6518
6519void hsw_enable_package_c8(struct drm_i915_private *dev_priv) 6519void hsw_enable_package_c8(struct drm_i915_private *dev_priv)
6520{ 6520{
6521 if (!HAS_PC8(dev_priv->dev))
6522 return;
6523
6521 mutex_lock(&dev_priv->pc8.lock); 6524 mutex_lock(&dev_priv->pc8.lock);
6522 __hsw_enable_package_c8(dev_priv); 6525 __hsw_enable_package_c8(dev_priv);
6523 mutex_unlock(&dev_priv->pc8.lock); 6526 mutex_unlock(&dev_priv->pc8.lock);
@@ -6525,6 +6528,9 @@ void hsw_enable_package_c8(struct drm_i915_private *dev_priv)
6525 6528
6526void hsw_disable_package_c8(struct drm_i915_private *dev_priv) 6529void hsw_disable_package_c8(struct drm_i915_private *dev_priv)
6527{ 6530{
6531 if (!HAS_PC8(dev_priv->dev))
6532 return;
6533
6528 mutex_lock(&dev_priv->pc8.lock); 6534 mutex_lock(&dev_priv->pc8.lock);
6529 __hsw_disable_package_c8(dev_priv); 6535 __hsw_disable_package_c8(dev_priv);
6530 mutex_unlock(&dev_priv->pc8.lock); 6536 mutex_unlock(&dev_priv->pc8.lock);
@@ -6562,6 +6568,9 @@ static void hsw_update_package_c8(struct drm_device *dev)
6562 struct drm_i915_private *dev_priv = dev->dev_private; 6568 struct drm_i915_private *dev_priv = dev->dev_private;
6563 bool allow; 6569 bool allow;
6564 6570
6571 if (!HAS_PC8(dev_priv->dev))
6572 return;
6573
6565 if (!i915_enable_pc8) 6574 if (!i915_enable_pc8)
6566 return; 6575 return;
6567 6576
@@ -6585,18 +6594,28 @@ done:
6585 6594
6586static void hsw_package_c8_gpu_idle(struct drm_i915_private *dev_priv) 6595static void hsw_package_c8_gpu_idle(struct drm_i915_private *dev_priv)
6587{ 6596{
6597 if (!HAS_PC8(dev_priv->dev))
6598 return;
6599
6600 mutex_lock(&dev_priv->pc8.lock);
6588 if (!dev_priv->pc8.gpu_idle) { 6601 if (!dev_priv->pc8.gpu_idle) {
6589 dev_priv->pc8.gpu_idle = true; 6602 dev_priv->pc8.gpu_idle = true;
6590 hsw_enable_package_c8(dev_priv); 6603 __hsw_enable_package_c8(dev_priv);
6591 } 6604 }
6605 mutex_unlock(&dev_priv->pc8.lock);
6592} 6606}
6593 6607
6594static void hsw_package_c8_gpu_busy(struct drm_i915_private *dev_priv) 6608static void hsw_package_c8_gpu_busy(struct drm_i915_private *dev_priv)
6595{ 6609{
6610 if (!HAS_PC8(dev_priv->dev))
6611 return;
6612
6613 mutex_lock(&dev_priv->pc8.lock);
6596 if (dev_priv->pc8.gpu_idle) { 6614 if (dev_priv->pc8.gpu_idle) {
6597 dev_priv->pc8.gpu_idle = false; 6615 dev_priv->pc8.gpu_idle = false;
6598 hsw_disable_package_c8(dev_priv); 6616 __hsw_disable_package_c8(dev_priv);
6599 } 6617 }
6618 mutex_unlock(&dev_priv->pc8.lock);
6600} 6619}
6601 6620
6602#define for_each_power_domain(domain, mask) \ 6621#define for_each_power_domain(domain, mask) \
@@ -7184,7 +7203,9 @@ static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base)
7184 intel_crtc->cursor_visible = visible; 7203 intel_crtc->cursor_visible = visible;
7185 } 7204 }
7186 /* and commit changes on next vblank */ 7205 /* and commit changes on next vblank */
7206 POSTING_READ(CURCNTR(pipe));
7187 I915_WRITE(CURBASE(pipe), base); 7207 I915_WRITE(CURBASE(pipe), base);
7208 POSTING_READ(CURBASE(pipe));
7188} 7209}
7189 7210
7190static void ivb_update_cursor(struct drm_crtc *crtc, u32 base) 7211static void ivb_update_cursor(struct drm_crtc *crtc, u32 base)
@@ -7213,7 +7234,9 @@ static void ivb_update_cursor(struct drm_crtc *crtc, u32 base)
7213 intel_crtc->cursor_visible = visible; 7234 intel_crtc->cursor_visible = visible;
7214 } 7235 }
7215 /* and commit changes on next vblank */ 7236 /* and commit changes on next vblank */
7237 POSTING_READ(CURCNTR_IVB(pipe));
7216 I915_WRITE(CURBASE_IVB(pipe), base); 7238 I915_WRITE(CURBASE_IVB(pipe), base);
7239