Commit 27c329ed authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Daniel Vetter

drm/i915: Make cdclk part of the atomic state.

The skylake scalers depend on the cdclk freq, but that frequency can
change during a modeset. So when a modeset happens calculate the new
cdclk in the atomic state. With the transitional helpers gone the
cached value can be used in the scaler, and committed after all
crtc's are disabled.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90874Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Tested-by(IVB): Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent c389c9c4
...@@ -619,7 +619,8 @@ struct drm_i915_display_funcs { ...@@ -619,7 +619,8 @@ struct drm_i915_display_funcs {
struct drm_crtc *crtc, struct drm_crtc *crtc,
uint32_t sprite_width, uint32_t sprite_height, uint32_t sprite_width, uint32_t sprite_height,
int pixel_size, bool enable, bool scaled); int pixel_size, bool enable, bool scaled);
void (*modeset_global_resources)(struct drm_atomic_state *state); int (*modeset_calc_cdclk)(struct drm_atomic_state *state);
void (*modeset_commit_cdclk)(struct drm_atomic_state *state);
/* Returns the active state of the crtc, and if the crtc is active, /* Returns the active state of the crtc, and if the crtc is active,
* fills out the pipe-config with the hw state. */ * fills out the pipe-config with the hw state. */
bool (*get_pipe_config)(struct intel_crtc *, bool (*get_pipe_config)(struct intel_crtc *,
......
...@@ -54,6 +54,8 @@ int intel_atomic_check(struct drm_device *dev, ...@@ -54,6 +54,8 @@ int intel_atomic_check(struct drm_device *dev,
int i; int i;
bool not_nuclear = false; bool not_nuclear = false;
to_intel_atomic_state(state)->cdclk = to_i915(dev)->cdclk_freq;
/* /*
* FIXME: At the moment, we only support "nuclear pageflip" on a * FIXME: At the moment, we only support "nuclear pageflip" on a
* single CRTC. Cross-crtc updates will be added later. * single CRTC. Cross-crtc updates will be added later.
......
This diff is collapsed.
...@@ -244,6 +244,7 @@ typedef struct dpll { ...@@ -244,6 +244,7 @@ typedef struct dpll {
struct intel_atomic_state { struct intel_atomic_state {
struct drm_atomic_state base; struct drm_atomic_state base;
unsigned int cdclk;
bool dpll_set; bool dpll_set;
struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS]; struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS];
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment