diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index f62ffc04c21d..71860f8680f9 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -2646,11 +2646,13 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, | |||
2646 | return; | 2646 | return; |
2647 | 2647 | ||
2648 | valid_fb: | 2648 | valid_fb: |
2649 | plane_state->src_x = plane_state->src_y = 0; | 2649 | plane_state->src_x = 0; |
2650 | plane_state->src_y = 0; | ||
2650 | plane_state->src_w = fb->width << 16; | 2651 | plane_state->src_w = fb->width << 16; |
2651 | plane_state->src_h = fb->height << 16; | 2652 | plane_state->src_h = fb->height << 16; |
2652 | 2653 | ||
2653 | plane_state->crtc_x = plane_state->src_y = 0; | 2654 | plane_state->crtc_x = 0; |
2655 | plane_state->crtc_y = 0; | ||
2654 | plane_state->crtc_w = fb->width; | 2656 | plane_state->crtc_w = fb->width; |
2655 | plane_state->crtc_h = fb->height; | 2657 | plane_state->crtc_h = fb->height; |
2656 | 2658 | ||
@@ -4237,6 +4239,7 @@ struct intel_shared_dpll *intel_get_shared_dpll(struct intel_crtc *crtc, | |||
4237 | struct intel_shared_dpll *pll; | 4239 | struct intel_shared_dpll *pll; |
4238 | struct intel_shared_dpll_config *shared_dpll; | 4240 | struct intel_shared_dpll_config *shared_dpll; |
4239 | enum intel_dpll_id i; | 4241 | enum intel_dpll_id i; |
4242 | int max = dev_priv->num_shared_dpll; | ||
4240 | 4243 | ||
4241 | shared_dpll = intel_atomic_get_shared_dpll_state(crtc_state->base.state); | 4244 | shared_dpll = intel_atomic_get_shared_dpll_state(crtc_state->base.state); |
4242 | 4245 | ||
@@ -4271,9 +4274,11 @@ struct intel_shared_dpll *intel_get_shared_dpll(struct intel_crtc *crtc, | |||
4271 | WARN_ON(shared_dpll[i].crtc_mask); | 4274 | WARN_ON(shared_dpll[i].crtc_mask); |
4272 | 4275 | ||
4273 | goto found; | 4276 | goto found; |
4274 | } | 4277 | } else if (INTEL_INFO(dev_priv)->gen < 9 && HAS_DDI(dev_priv)) |
4278 | /* Do not consider SPLL */ | ||
4279 | max = 2; | ||
4275 | 4280 | ||
4276 | for (i = 0; i < dev_priv->num_shared_dpll; i++) { | 4281 | for (i = 0; i < max; i++) { |
4277 | pll = &dev_priv->shared_dplls[i]; | 4282 | pll = &dev_priv->shared_dplls[i]; |
4278 | 4283 | ||
4279 | /* Only want to check enabled timings first */ | 4284 | /* Only want to check enabled timings first */ |
@@ -9723,6 +9728,8 @@ static void haswell_get_ddi_pll(struct drm_i915_private *dev_priv, | |||
9723 | case PORT_CLK_SEL_WRPLL2: | 9728 | case PORT_CLK_SEL_WRPLL2: |
9724 | pipe_config->shared_dpll = DPLL_ID_WRPLL2; | 9729 | pipe_config->shared_dpll = DPLL_ID_WRPLL2; |
9725 | break; | 9730 | break; |
9731 | case PORT_CLK_SEL_SPLL: | ||
9732 | pipe_config->shared_dpll = DPLL_ID_SPLL; | ||
9726 | } | 9733 | } |
9727 | } | 9734 | } |
9728 | 9735 | ||
@@ -12003,9 +12010,10 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc, | |||
12003 | pipe_config->dpll_hw_state.cfgcr1, | 12010 | pipe_config->dpll_hw_state.cfgcr1, |
12004 | pipe_config->dpll_hw_state.cfgcr2); | 12011 | pipe_config->dpll_hw_state.cfgcr2); |
12005 | } else if (HAS_DDI(dev)) { | 12012 | } else if (HAS_DDI(dev)) { |
12006 | DRM_DEBUG_KMS("ddi_pll_sel: %u; dpll_hw_state: wrpll: 0x%x\n", | 12013 | DRM_DEBUG_KMS("ddi_pll_sel: %u; dpll_hw_state: wrpll: 0x%x spll: 0x%x\n", |
12007 | pipe_config->ddi_pll_sel, | 12014 | pipe_config->ddi_pll_sel, |
12008 | pipe_config->dpll_hw_state.wrpll); | 12015 | pipe_config->dpll_hw_state.wrpll, |
12016 | pipe_config->dpll_hw_state.spll); | ||
12009 | } else { | 12017 | } else { |
12010 | DRM_DEBUG_KMS("dpll_hw_state: dpll: 0x%x, dpll_md: 0x%x, " | 12018 | DRM_DEBUG_KMS("dpll_hw_state: dpll: 0x%x, dpll_md: 0x%x, " |
12011 | "fp0: 0x%x, fp1: 0x%x\n", | 12019 | "fp0: 0x%x, fp1: 0x%x\n", |
@@ -12528,6 +12536,7 @@ intel_pipe_config_compare(struct drm_device *dev, | |||
12528 | PIPE_CONF_CHECK_X(dpll_hw_state.fp0); | 12536 | PIPE_CONF_CHECK_X(dpll_hw_state.fp0); |
12529 | PIPE_CONF_CHECK_X(dpll_hw_state.fp1); | 12537 | PIPE_CONF_CHECK_X(dpll_hw_state.fp1); |
12530 | PIPE_CONF_CHECK_X(dpll_hw_state.wrpll); | 12538 | PIPE_CONF_CHECK_X(dpll_hw_state.wrpll); |
12539 | PIPE_CONF_CHECK_X(dpll_hw_state.spll); | ||
12531 | PIPE_CONF_CHECK_X(dpll_hw_state.ctrl1); | 12540 | PIPE_CONF_CHECK_X(dpll_hw_state.ctrl1); |
12532 | PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr1); | 12541 | PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr1); |
12533 | PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr2); | 12542 | PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr2); |
@@ -13032,6 +13041,9 @@ static int intel_atomic_check(struct drm_device *dev, | |||
13032 | struct intel_crtc_state *pipe_config = | 13041 | struct intel_crtc_state *pipe_config = |
13033 | to_intel_crtc_state(crtc_state); | 13042 | to_intel_crtc_state(crtc_state); |
13034 | 13043 | ||
13044 | memset(&to_intel_crtc(crtc)->atomic, 0, | ||
13045 | sizeof(struct intel_crtc_atomic_commit)); | ||
13046 | |||
13035 | /* Catch I915_MODE_FLAG_INHERITED */ | 13047 | /* Catch I915_MODE_FLAG_INHERITED */ |
13036 | if (crtc_state->mode.private_flags != crtc->state->mode.private_flags) | 13048 | if (crtc_state->mode.private_flags != crtc->state->mode.private_flags) |
13037 | crtc_state->mode_changed = true; | 13049 | crtc_state->mode_changed = true; |
@@ -13056,7 +13068,8 @@ static int intel_atomic_check(struct drm_device *dev, | |||
13056 | if (ret) | 13068 | if (ret) |
13057 | return ret; | 13069 | return ret; |
13058 | 13070 | ||
13059 | if (intel_pipe_config_compare(state->dev, | 13071 | if (i915.fastboot && |
13072 | intel_pipe_config_compare(state->dev, | ||
13060 | to_intel_crtc_state(crtc->state), | 13073 | to_intel_crtc_state(crtc->state), |
13061 | pipe_config, true)) { | 13074 | pipe_config, true)) { |
13062 | crtc_state->mode_changed = false; | 13075 | crtc_state->mode_changed = false; |
@@ -14364,16 +14377,17 @@ static int intel_framebuffer_init(struct drm_device *dev, | |||
14364 | static struct drm_framebuffer * | 14377 | static struct drm_framebuffer * |
14365 | intel_user_framebuffer_create(struct drm_device *dev, | 14378 | intel_user_framebuffer_create(struct drm_device *dev, |
14366 | struct drm_file *filp, | 14379 | struct drm_file *filp, |
14367 | struct drm_mode_fb_cmd2 *mode_cmd) | 14380 | struct drm_mode_fb_cmd2 *user_mode_cmd) |
14368 | { | 14381 | { |
14369 | struct drm_i915_gem_object *obj; | 14382 | struct drm_i915_gem_object *obj; |
14383 | struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd; | ||
14370 | 14384 | ||
14371 | obj = to_intel_bo(drm_gem_object_lookup(dev, filp, | 14385 | obj = to_intel_bo(drm_gem_object_lookup(dev, filp, |
14372 | mode_cmd->handles[0])); | 14386 | mode_cmd.handles[0])); |
14373 | if (&obj->base == NULL) | 14387 | if (&obj->base == NULL) |
14374 | return ERR_PTR(-ENOENT); | 14388 | return ERR_PTR(-ENOENT); |
14375 | 14389 | ||
14376 | return intel_framebuffer_create(dev, mode_cmd, obj); | 14390 | return intel_framebuffer_create(dev, &mode_cmd, obj); |
14377 | } | 14391 | } |
14378 | 14392 | ||
14379 | #ifndef CONFIG_DRM_FBDEV_EMULATION | 14393 | #ifndef CONFIG_DRM_FBDEV_EMULATION |
@@ -14705,6 +14719,9 @@ static struct intel_quirk intel_quirks[] = { | |||
14705 | /* Apple Macbook 2,1 (Core 2 T7400) */ | 14719 | /* Apple Macbook 2,1 (Core 2 T7400) */ |
14706 | { 0x27a2, 0x8086, 0x7270, quirk_backlight_present }, | 14720 | { 0x27a2, 0x8086, 0x7270, quirk_backlight_present }, |
14707 | 14721 | ||
14722 | /* Apple Macbook 4,1 */ | ||
14723 | { 0x2a02, 0x106b, 0x00a1, quirk_backlight_present }, | ||
14724 | |||
14708 | /* Toshiba CB35 Chromebook (Celeron 2955U) */ | 14725 | /* Toshiba CB35 Chromebook (Celeron 2955U) */ |
14709 | { 0x0a06, 0x1179, 0x0a88, quirk_backlight_present }, | 14726 | { 0x0a06, 0x1179, 0x0a88, quirk_backlight_present }, |
14710 | 14727 | ||