drm/i915: Use new_config and new_enabled to simplify the VLV cdclk code
On VLV we need to compute the new cdclk before we've updated the current state. The code achieved that in a somewhat complex way. Now that we have new_enabled and new_config, we can simplify the code quite a bit. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
50741abcd1
commit
2f2d7aa154
|
@ -4088,9 +4088,8 @@ static int valleyview_calc_cdclk(struct drm_i915_private *dev_priv,
|
||||||
/* Looks like the 200MHz CDclk freq doesn't work on some configs */
|
/* Looks like the 200MHz CDclk freq doesn't work on some configs */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int intel_mode_max_pixclk(struct drm_i915_private *dev_priv,
|
/* compute the max pixel clock for new configuration */
|
||||||
unsigned modeset_pipes,
|
static int intel_mode_max_pixclk(struct drm_i915_private *dev_priv)
|
||||||
struct intel_crtc_config *pipe_config)
|
|
||||||
{
|
{
|
||||||
struct drm_device *dev = dev_priv->dev;
|
struct drm_device *dev = dev_priv->dev;
|
||||||
struct intel_crtc *intel_crtc;
|
struct intel_crtc *intel_crtc;
|
||||||
|
@ -4098,31 +4097,26 @@ static int intel_mode_max_pixclk(struct drm_i915_private *dev_priv,
|
||||||
|
|
||||||
list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list,
|
list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list,
|
||||||
base.head) {
|
base.head) {
|
||||||
if (modeset_pipes & (1 << intel_crtc->pipe))
|
if (intel_crtc->new_enabled)
|
||||||
max_pixclk = max(max_pixclk,
|
max_pixclk = max(max_pixclk,
|
||||||
pipe_config->adjusted_mode.crtc_clock);
|
intel_crtc->new_config->adjusted_mode.crtc_clock);
|
||||||
else if (intel_crtc->base.enabled)
|
|
||||||
max_pixclk = max(max_pixclk,
|
|
||||||
intel_crtc->config.adjusted_mode.crtc_clock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return max_pixclk;
|
return max_pixclk;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void valleyview_modeset_global_pipes(struct drm_device *dev,
|
static void valleyview_modeset_global_pipes(struct drm_device *dev,
|
||||||
unsigned *prepare_pipes,
|
unsigned *prepare_pipes)
|
||||||
unsigned modeset_pipes,
|
|
||||||
struct intel_crtc_config *pipe_config)
|
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct intel_crtc *intel_crtc;
|
struct intel_crtc *intel_crtc;
|
||||||
int max_pixclk = intel_mode_max_pixclk(dev_priv, modeset_pipes,
|
int max_pixclk = intel_mode_max_pixclk(dev_priv);
|
||||||
pipe_config);
|
|
||||||
int cur_cdclk = valleyview_cur_cdclk(dev_priv);
|
int cur_cdclk = valleyview_cur_cdclk(dev_priv);
|
||||||
|
|
||||||
if (valleyview_calc_cdclk(dev_priv, max_pixclk) == cur_cdclk)
|
if (valleyview_calc_cdclk(dev_priv, max_pixclk) == cur_cdclk)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* disable/enable all currently active pipes while we change cdclk */
|
||||||
list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list,
|
list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list,
|
||||||
base.head)
|
base.head)
|
||||||
if (intel_crtc->base.enabled)
|
if (intel_crtc->base.enabled)
|
||||||
|
@ -4132,7 +4126,7 @@ static void valleyview_modeset_global_pipes(struct drm_device *dev,
|
||||||
static void valleyview_modeset_global_resources(struct drm_device *dev)
|
static void valleyview_modeset_global_resources(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
int max_pixclk = intel_mode_max_pixclk(dev_priv, 0, NULL);
|
int max_pixclk = intel_mode_max_pixclk(dev_priv);
|
||||||
int cur_cdclk = valleyview_cur_cdclk(dev_priv);
|
int cur_cdclk = valleyview_cur_cdclk(dev_priv);
|
||||||
int req_cdclk = valleyview_calc_cdclk(dev_priv, max_pixclk);
|
int req_cdclk = valleyview_calc_cdclk(dev_priv, max_pixclk);
|
||||||
|
|
||||||
|
@ -9668,8 +9662,7 @@ static int __intel_set_mode(struct drm_crtc *crtc,
|
||||||
* adjusted_mode bits in the crtc directly.
|
* adjusted_mode bits in the crtc directly.
|
||||||
*/
|
*/
|
||||||
if (IS_VALLEYVIEW(dev)) {
|
if (IS_VALLEYVIEW(dev)) {
|
||||||
valleyview_modeset_global_pipes(dev, &prepare_pipes,
|
valleyview_modeset_global_pipes(dev, &prepare_pipes);
|
||||||
modeset_pipes, pipe_config);
|
|
||||||
|
|
||||||
/* may have added more to prepare_pipes than we should */
|
/* may have added more to prepare_pipes than we should */
|
||||||
prepare_pipes &= ~disable_pipes;
|
prepare_pipes &= ~disable_pipes;
|
||||||
|
|
Loading…
Reference in New Issue