diff options
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 11 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 14 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_i2c.c | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_panel.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 41 |
5 files changed, 43 insertions, 43 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 88913a47cd34..a69a3d0d3acf 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -3754,17 +3754,6 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc, | |||
| 3754 | continue; | 3754 | continue; |
| 3755 | } | 3755 | } |
| 3756 | 3756 | ||
| 3757 | if (intel_encoder->type == INTEL_OUTPUT_EDP) { | ||
| 3758 | /* Use VBT settings if we have an eDP panel */ | ||
| 3759 | unsigned int edp_bpc = dev_priv->edp.bpp / 3; | ||
| 3760 | |||
| 3761 | if (edp_bpc < display_bpc) { | ||
| 3762 | DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc); | ||
| 3763 | display_bpc = edp_bpc; | ||
| 3764 | } | ||
| 3765 | continue; | ||
| 3766 | } | ||
| 3767 | |||
| 3768 | /* Not one of the known troublemakers, check the EDID */ | 3757 | /* Not one of the known troublemakers, check the EDID */ |
| 3769 | list_for_each_entry(connector, &dev->mode_config.connector_list, | 3758 | list_for_each_entry(connector, &dev->mode_config.connector_list, |
| 3770 | head) { | 3759 | head) { |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 0a56b9ab0f58..a6c426afaa7a 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
| @@ -1174,10 +1174,14 @@ static void ironlake_edp_panel_off(struct intel_dp *intel_dp) | |||
| 1174 | WARN(!intel_dp->want_panel_vdd, "Need VDD to turn off panel\n"); | 1174 | WARN(!intel_dp->want_panel_vdd, "Need VDD to turn off panel\n"); |
| 1175 | 1175 | ||
| 1176 | pp = ironlake_get_pp_control(dev_priv); | 1176 | pp = ironlake_get_pp_control(dev_priv); |
| 1177 | pp &= ~(POWER_TARGET_ON | PANEL_POWER_RESET | EDP_BLC_ENABLE); | 1177 | /* We need to switch off panel power _and_ force vdd, for otherwise some |
| 1178 | * panels get very unhappy and cease to work. */ | ||
| 1179 | pp &= ~(POWER_TARGET_ON | EDP_FORCE_VDD | PANEL_POWER_RESET | EDP_BLC_ENABLE); | ||
| 1178 | I915_WRITE(PCH_PP_CONTROL, pp); | 1180 | I915_WRITE(PCH_PP_CONTROL, pp); |
| 1179 | POSTING_READ(PCH_PP_CONTROL); | 1181 | POSTING_READ(PCH_PP_CONTROL); |
| 1180 | 1182 | ||
| 1183 | intel_dp->want_panel_vdd = false; | ||
| 1184 | |||
| 1181 | ironlake_wait_panel_off(intel_dp); | 1185 | ironlake_wait_panel_off(intel_dp); |
| 1182 | } | 1186 | } |
| 1183 | 1187 | ||
| @@ -1287,11 +1291,9 @@ static void intel_dp_prepare(struct drm_encoder *encoder) | |||
| 1287 | * ensure that we have vdd while we switch off the panel. */ | 1291 | * ensure that we have vdd while we switch off the panel. */ |
| 1288 | ironlake_edp_panel_vdd_on(intel_dp); | 1292 | ironlake_edp_panel_vdd_on(intel_dp); |
| 1289 | ironlake_edp_backlight_off(intel_dp); | 1293 | ironlake_edp_backlight_off(intel_dp); |
| 1290 | ironlake_edp_panel_off(intel_dp); | ||
| 1291 | |||
| 1292 | intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON); | 1294 | intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON); |
| 1295 | ironlake_edp_panel_off(intel_dp); | ||
| 1293 | intel_dp_link_down(intel_dp); | 1296 | intel_dp_link_down(intel_dp); |
| 1294 | ironlake_edp_panel_vdd_off(intel_dp, false); | ||
| 1295 | } | 1297 | } |
| 1296 | 1298 | ||
| 1297 | static void intel_dp_commit(struct drm_encoder *encoder) | 1299 | static void intel_dp_commit(struct drm_encoder *encoder) |
| @@ -1326,11 +1328,9 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode) | |||
| 1326 | /* Switching the panel off requires vdd. */ | 1328 | /* Switching the panel off requires vdd. */ |
| 1327 | ironlake_edp_panel_vdd_on(intel_dp); | 1329 | ironlake_edp_panel_vdd_on(intel_dp); |
| 1328 | ironlake_edp_backlight_off(intel_dp); | 1330 | ironlake_edp_backlight_off(intel_dp); |
| 1329 | ironlake_edp_panel_off(intel_dp); | ||
| 1330 | |||
| 1331 | intel_dp_sink_dpms(intel_dp, mode); | 1331 | intel_dp_sink_dpms(intel_dp, mode); |
| 1332 | ironlake_edp_panel_off(intel_dp); | ||
| 1332 | intel_dp_link_down(intel_dp); | 1333 | intel_dp_link_down(intel_dp); |
| 1333 | ironlake_edp_panel_vdd_off(intel_dp, false); | ||
| 1334 | 1334 | ||
| 1335 | if (is_cpu_edp(intel_dp)) | 1335 | if (is_cpu_edp(intel_dp)) |
| 1336 | ironlake_edp_pll_off(encoder); | 1336 | ironlake_edp_pll_off(encoder); |
diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c index d79500bc1ce5..b9755f6378d8 100644 --- a/drivers/gpu/drm/i915/intel_i2c.c +++ b/drivers/gpu/drm/i915/intel_i2c.c | |||
| @@ -486,9 +486,6 @@ int intel_setup_gmbus(struct drm_device *dev) | |||
| 486 | bus->dev_priv = dev_priv; | 486 | bus->dev_priv = dev_priv; |
| 487 | 487 | ||
| 488 | bus->adapter.algo = &gmbus_algorithm; | 488 | bus->adapter.algo = &gmbus_algorithm; |
| 489 | ret = i2c_add_adapter(&bus->adapter); | ||
| 490 | if (ret) | ||
| 491 | goto err; | ||
| 492 | 489 | ||
| 493 | /* By default use a conservative clock rate */ | 490 | /* By default use a conservative clock rate */ |
| 494 | bus->reg0 = port | GMBUS_RATE_100KHZ; | 491 | bus->reg0 = port | GMBUS_RATE_100KHZ; |
| @@ -498,6 +495,10 @@ int intel_setup_gmbus(struct drm_device *dev) | |||
| 498 | bus->force_bit = true; | 495 | bus->force_bit = true; |
| 499 | 496 | ||
| 500 | intel_gpio_setup(bus, port); | 497 | intel_gpio_setup(bus, port); |
| 498 | |||
| 499 | ret = i2c_add_adapter(&bus->adapter); | ||
| 500 | if (ret) | ||
| 501 | goto err; | ||
| 501 | } | 502 | } |
| 502 | 503 | ||
| 503 | intel_i2c_reset(dev_priv->dev); | 504 | intel_i2c_reset(dev_priv->dev); |
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c index 9474488db948..3df4f5fa892a 100644 --- a/drivers/gpu/drm/i915/intel_panel.c +++ b/drivers/gpu/drm/i915/intel_panel.c | |||
| @@ -311,9 +311,6 @@ void intel_panel_enable_backlight(struct drm_device *dev, | |||
| 311 | if (dev_priv->backlight_level == 0) | 311 | if (dev_priv->backlight_level == 0) |
| 312 | dev_priv->backlight_level = intel_panel_get_max_backlight(dev); | 312 | dev_priv->backlight_level = intel_panel_get_max_backlight(dev); |
| 313 | 313 | ||
| 314 | dev_priv->backlight_enabled = true; | ||
| 315 | intel_panel_actually_set_backlight(dev, dev_priv->backlight_level); | ||
| 316 | |||
| 317 | if (INTEL_INFO(dev)->gen >= 4) { | 314 | if (INTEL_INFO(dev)->gen >= 4) { |
| 318 | uint32_t reg, tmp; | 315 | uint32_t reg, tmp; |
| 319 | 316 | ||
| @@ -326,7 +323,7 @@ void intel_panel_enable_backlight(struct drm_device *dev, | |||
| 326 | * we don't track the backlight dpms state, hence check whether | 323 | * we don't track the backlight dpms state, hence check whether |
| 327 | * we have to do anything first. */ | 324 | * we have to do anything first. */ |
| 328 | if (tmp & BLM_PWM_ENABLE) | 325 | if (tmp & BLM_PWM_ENABLE) |
| 329 | return; | 326 | goto set_level; |
| 330 | 327 | ||
| 331 | if (dev_priv->num_pipe == 3) | 328 | if (dev_priv->num_pipe == 3) |
| 332 | tmp &= ~BLM_PIPE_SELECT_IVB; | 329 | tmp &= ~BLM_PIPE_SELECT_IVB; |
| @@ -347,6 +344,14 @@ void intel_panel_enable_backlight(struct drm_device *dev, | |||
| 347 | I915_WRITE(BLC_PWM_PCH_CTL1, tmp); | 344 | I915_WRITE(BLC_PWM_PCH_CTL1, tmp); |
| 348 | } | 345 | } |
| 349 | } | 346 | } |
| 347 | |||
| 348 | set_level: | ||
| 349 | /* Call below after setting BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1. | ||
| 350 | * BLC_PWM_CPU_CTL may be cleared to zero automatically when these | ||
| 351 | * registers are set. | ||
| 352 | */ | ||
| 353 | dev_priv->backlight_enabled = true; | ||
| 354 | intel_panel_actually_set_backlight(dev, dev_priv->backlight_level); | ||
| 350 | } | 355 | } |
| 351 | 356 | ||
| 352 | static void intel_panel_init_backlight(struct drm_device *dev) | 357 | static void intel_panel_init_backlight(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 414af1e2973b..e2a73b38abe9 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
| @@ -227,31 +227,36 @@ gen6_render_ring_flush(struct intel_ring_buffer *ring, | |||
| 227 | * number of bits based on the write domains has little performance | 227 | * number of bits based on the write domains has little performance |
| 228 | * impact. | 228 | * impact. |
| 229 | */ | 229 | */ |
| 230 | flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH; | 230 | if (flush_domains) { |
| 231 | flags |= PIPE_CONTROL_TLB_INVALIDATE; | 231 | flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH; |
| 232 | flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE; | 232 | flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH; |
| 233 | flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE; | 233 | /* |
| 234 | flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH; | 234 | * Ensure that any following seqno writes only happen |
| 235 | flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE; | 235 | * when the render cache is indeed flushed. |
| 236 | flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE; | 236 | */ |
| 237 | flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE; | ||
| 238 | /* | ||
| 239 | * Ensure that any following seqno writes only happen when the render | ||
| 240 | * cache is indeed flushed (but only if the caller actually wants that). | ||
| 241 | */ | ||
| 242 | if (flush_domains) | ||
| 243 | flags |= PIPE_CONTROL_CS_STALL; | 237 | flags |= PIPE_CONTROL_CS_STALL; |
| 238 | } | ||
| 239 | if (invalidate_domains) { | ||
| 240 | flags |= PIPE_CONTROL_TLB_INVALIDATE; | ||
| 241 | flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE; | ||
| 242 | flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE; | ||
| 243 | flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE; | ||
| 244 | flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE; | ||
| 245 | flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE; | ||
| 246 | /* | ||
| 247 | * TLB invalidate requires a post-sync write. | ||
| 248 | */ | ||
| 249 | flags |= PIPE_CONTROL_QW_WRITE; | ||
| 250 | } | ||
| 244 | 251 | ||
| 245 | ret = intel_ring_begin(ring, 6); | 252 | ret = intel_ring_begin(ring, 4); |
| 246 | if (ret) | 253 | if (ret) |
| 247 | return ret; | 254 | return ret; |
| 248 | 255 | ||
| 249 | intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5)); | 256 | intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4)); |
| 250 | intel_ring_emit(ring, flags); | 257 | intel_ring_emit(ring, flags); |
| 251 | intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); | 258 | intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); |
| 252 | intel_ring_emit(ring, 0); /* lower dword */ | 259 | intel_ring_emit(ring, 0); |
| 253 | intel_ring_emit(ring, 0); /* uppwer dword */ | ||
| 254 | intel_ring_emit(ring, MI_NOOP); | ||
| 255 | intel_ring_advance(ring); | 260 | intel_ring_advance(ring); |
| 256 | 261 | ||
| 257 | return 0; | 262 | return 0; |
