diff options
author | Dave Airlie <airlied@redhat.com> | 2018-05-09 21:27:47 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2018-05-09 21:27:47 -0400 |
commit | 03a0a3e572dc05f266672e0e72c7f47aee96db8d (patch) | |
tree | 51a5c936535107c37a6fe926ad9976a4b0d2b875 | |
parent | 87bf742b080f4f23e5005e24db4c99c23715a780 (diff) | |
parent | e8f48f96db7e482995743f461b3e8a5c1a102533 (diff) |
Merge tag 'drm-intel-fixes-2018-05-09' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes
- Increase LVDS panel timeout to 5s to avoid spurious *ERROR*
- Fix 2 WARNS: BIOS framebuffer related (FDO #105992) and eDP cdclk mismatch
* tag 'drm-intel-fixes-2018-05-09' of git://anongit.freedesktop.org/drm/drm-intel:
drm/i915: Fix drm:intel_enable_lvds ERROR message in kernel log
drm/i915: Correctly populate user mode h/vdisplay with pipe src size during readout
drm/i915: Adjust eDP's logical vco in a reliable place.
-rw-r--r-- | drivers/gpu/drm/i915/intel_cdclk.c | 41 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 3 |
4 files changed, 41 insertions, 25 deletions
diff --git a/drivers/gpu/drm/i915/intel_cdclk.c b/drivers/gpu/drm/i915/intel_cdclk.c index 32d24c69da3c..704ddb4d3ca7 100644 --- a/drivers/gpu/drm/i915/intel_cdclk.c +++ b/drivers/gpu/drm/i915/intel_cdclk.c | |||
@@ -2302,9 +2302,44 @@ static int bdw_modeset_calc_cdclk(struct drm_atomic_state *state) | |||
2302 | return 0; | 2302 | return 0; |
2303 | } | 2303 | } |
2304 | 2304 | ||
2305 | static int skl_dpll0_vco(struct intel_atomic_state *intel_state) | ||
2306 | { | ||
2307 | struct drm_i915_private *dev_priv = to_i915(intel_state->base.dev); | ||
2308 | struct intel_crtc *crtc; | ||
2309 | struct intel_crtc_state *crtc_state; | ||
2310 | int vco, i; | ||
2311 | |||
2312 | vco = intel_state->cdclk.logical.vco; | ||
2313 | if (!vco) | ||
2314 | vco = dev_priv->skl_preferred_vco_freq; | ||
2315 | |||
2316 | for_each_new_intel_crtc_in_state(intel_state, crtc, crtc_state, i) { | ||
2317 | if (!crtc_state->base.enable) | ||
2318 | continue; | ||
2319 | |||
2320 | if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP)) | ||
2321 | continue; | ||
2322 | |||
2323 | /* | ||
2324 | * DPLL0 VCO may need to be adjusted to get the correct | ||
2325 | * clock for eDP. This will affect cdclk as well. | ||
2326 | */ | ||
2327 | switch (crtc_state->port_clock / 2) { | ||
2328 | case 108000: | ||
2329 | case 216000: | ||
2330 | vco = 8640000; | ||
2331 | break; | ||
2332 | default: | ||
2333 | vco = 8100000; | ||
2334 | break; | ||
2335 | } | ||
2336 | } | ||
2337 | |||
2338 | return vco; | ||
2339 | } | ||
2340 | |||
2305 | static int skl_modeset_calc_cdclk(struct drm_atomic_state *state) | 2341 | static int skl_modeset_calc_cdclk(struct drm_atomic_state *state) |
2306 | { | 2342 | { |
2307 | struct drm_i915_private *dev_priv = to_i915(state->dev); | ||
2308 | struct intel_atomic_state *intel_state = to_intel_atomic_state(state); | 2343 | struct intel_atomic_state *intel_state = to_intel_atomic_state(state); |
2309 | int min_cdclk, cdclk, vco; | 2344 | int min_cdclk, cdclk, vco; |
2310 | 2345 | ||
@@ -2312,9 +2347,7 @@ static int skl_modeset_calc_cdclk(struct drm_atomic_state *state) | |||
2312 | if (min_cdclk < 0) | 2347 | if (min_cdclk < 0) |
2313 | return min_cdclk; | 2348 | return min_cdclk; |
2314 | 2349 | ||
2315 | vco = intel_state->cdclk.logical.vco; | 2350 | vco = skl_dpll0_vco(intel_state); |
2316 | if (!vco) | ||
2317 | vco = dev_priv->skl_preferred_vco_freq; | ||
2318 | 2351 | ||
2319 | /* | 2352 | /* |
2320 | * FIXME should also account for plane ratio | 2353 | * FIXME should also account for plane ratio |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 3b48fd2561fe..56004ffbd8bb 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -15178,6 +15178,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) | |||
15178 | memset(&crtc->base.mode, 0, sizeof(crtc->base.mode)); | 15178 | memset(&crtc->base.mode, 0, sizeof(crtc->base.mode)); |
15179 | if (crtc_state->base.active) { | 15179 | if (crtc_state->base.active) { |
15180 | intel_mode_from_pipe_config(&crtc->base.mode, crtc_state); | 15180 | intel_mode_from_pipe_config(&crtc->base.mode, crtc_state); |
15181 | crtc->base.mode.hdisplay = crtc_state->pipe_src_w; | ||
15182 | crtc->base.mode.vdisplay = crtc_state->pipe_src_h; | ||
15181 | intel_mode_from_pipe_config(&crtc_state->base.adjusted_mode, crtc_state); | 15183 | intel_mode_from_pipe_config(&crtc_state->base.adjusted_mode, crtc_state); |
15182 | WARN_ON(drm_atomic_set_mode_for_crtc(crtc->base.state, &crtc->base.mode)); | 15184 | WARN_ON(drm_atomic_set_mode_for_crtc(crtc->base.state, &crtc->base.mode)); |
15183 | 15185 | ||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 9a4a51e79fa1..b7b4cfdeb974 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -1881,26 +1881,6 @@ found: | |||
1881 | reduce_m_n); | 1881 | reduce_m_n); |
1882 | } | 1882 | } |
1883 | 1883 | ||
1884 | /* | ||
1885 | * DPLL0 VCO may need to be adjusted to get the correct | ||
1886 | * clock for eDP. This will affect cdclk as well. | ||
1887 | */ | ||
1888 | if (intel_dp_is_edp(intel_dp) && IS_GEN9_BC(dev_priv)) { | ||
1889 | int vco; | ||
1890 | |||
1891 | switch (pipe_config->port_clock / 2) { | ||
1892 | case 108000: | ||
1893 | case 216000: | ||
1894 | vco = 8640000; | ||
1895 | break; | ||
1896 | default: | ||
1897 | vco = 8100000; | ||
1898 | break; | ||
1899 | } | ||
1900 | |||
1901 | to_intel_atomic_state(pipe_config->base.state)->cdclk.logical.vco = vco; | ||
1902 | } | ||
1903 | |||
1904 | if (!HAS_DDI(dev_priv)) | 1884 | if (!HAS_DDI(dev_priv)) |
1905 | intel_dp_set_clock(encoder, pipe_config); | 1885 | intel_dp_set_clock(encoder, pipe_config); |
1906 | 1886 | ||
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index d35d2d50f595..8691c86f579c 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
@@ -326,7 +326,8 @@ static void intel_enable_lvds(struct intel_encoder *encoder, | |||
326 | 326 | ||
327 | I915_WRITE(PP_CONTROL(0), I915_READ(PP_CONTROL(0)) | PANEL_POWER_ON); | 327 | I915_WRITE(PP_CONTROL(0), I915_READ(PP_CONTROL(0)) | PANEL_POWER_ON); |
328 | POSTING_READ(lvds_encoder->reg); | 328 | POSTING_READ(lvds_encoder->reg); |
329 | if (intel_wait_for_register(dev_priv, PP_STATUS(0), PP_ON, PP_ON, 1000)) | 329 | |
330 | if (intel_wait_for_register(dev_priv, PP_STATUS(0), PP_ON, PP_ON, 5000)) | ||
330 | DRM_ERROR("timed out waiting for panel to power on\n"); | 331 | DRM_ERROR("timed out waiting for panel to power on\n"); |
331 | 332 | ||
332 | intel_panel_enable_backlight(pipe_config, conn_state); | 333 | intel_panel_enable_backlight(pipe_config, conn_state); |