Commit fdbc5d68 authored by Ville Syrjälä's avatar Ville Syrjälä

drm/i915: Introduce intel_dpll_get_hw_state()

Add a wrapper for the pll .get_hw_state() vfunc. Makes life
a bit less miserable when you don't have to worry where the
function pointer is stored.
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201109231239.17002-1-ville.syrjala@linux.intel.comReviewed-by: default avatarImre Deak <imre.deak@intel.com>
parent 3df3fe24
...@@ -10857,6 +10857,7 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc, ...@@ -10857,6 +10857,7 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc,
if (intel_de_read(dev_priv, PCH_TRANSCONF(crtc->pipe)) & TRANS_ENABLE) { if (intel_de_read(dev_priv, PCH_TRANSCONF(crtc->pipe)) & TRANS_ENABLE) {
struct intel_shared_dpll *pll; struct intel_shared_dpll *pll;
enum intel_dpll_id pll_id; enum intel_dpll_id pll_id;
bool pll_active;
pipe_config->has_pch_encoder = true; pipe_config->has_pch_encoder = true;
...@@ -10884,8 +10885,9 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc, ...@@ -10884,8 +10885,9 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc,
intel_get_shared_dpll_by_id(dev_priv, pll_id); intel_get_shared_dpll_by_id(dev_priv, pll_id);
pll = pipe_config->shared_dpll; pll = pipe_config->shared_dpll;
drm_WARN_ON(dev, !pll->info->funcs->get_hw_state(dev_priv, pll, pll_active = intel_dpll_get_hw_state(dev_priv, pll,
&pipe_config->dpll_hw_state)); &pipe_config->dpll_hw_state);
drm_WARN_ON(dev, !pll_active);
tmp = pipe_config->dpll_hw_state.dpll; tmp = pipe_config->dpll_hw_state.dpll;
pipe_config->pixel_multiplier = pipe_config->pixel_multiplier =
...@@ -11276,9 +11278,9 @@ static void hsw_get_ddi_port_state(struct intel_crtc *crtc, ...@@ -11276,9 +11278,9 @@ static void hsw_get_ddi_port_state(struct intel_crtc *crtc,
pll = pipe_config->shared_dpll; pll = pipe_config->shared_dpll;
if (pll) { if (pll) {
drm_WARN_ON(&dev_priv->drm, bool pll_active = intel_dpll_get_hw_state(dev_priv, pll,
!pll->info->funcs->get_hw_state(dev_priv, pll, &pipe_config->dpll_hw_state);
&pipe_config->dpll_hw_state)); drm_WARN_ON(&dev_priv->drm, !pll_active);
} }
/* /*
...@@ -14553,7 +14555,7 @@ verify_single_dpll_state(struct drm_i915_private *dev_priv, ...@@ -14553,7 +14555,7 @@ verify_single_dpll_state(struct drm_i915_private *dev_priv,
drm_dbg_kms(&dev_priv->drm, "%s\n", pll->info->name); drm_dbg_kms(&dev_priv->drm, "%s\n", pll->info->name);
active = pll->info->funcs->get_hw_state(dev_priv, pll, &dpll_hw_state); active = intel_dpll_get_hw_state(dev_priv, pll, &dpll_hw_state);
if (!(pll->info->flags & INTEL_DPLL_ALWAYS_ON)) { if (!(pll->info->flags & INTEL_DPLL_ALWAYS_ON)) {
I915_STATE_WARN(!pll->on && pll->active_mask, I915_STATE_WARN(!pll->on && pll->active_mask,
......
...@@ -141,7 +141,7 @@ void assert_shared_dpll(struct drm_i915_private *dev_priv, ...@@ -141,7 +141,7 @@ void assert_shared_dpll(struct drm_i915_private *dev_priv,
"asserting DPLL %s with no DPLL\n", onoff(state))) "asserting DPLL %s with no DPLL\n", onoff(state)))
return; return;
cur_state = pll->info->funcs->get_hw_state(dev_priv, pll, &hw_state); cur_state = intel_dpll_get_hw_state(dev_priv, pll, &hw_state);
I915_STATE_WARN(cur_state != state, I915_STATE_WARN(cur_state != state,
"%s assertion failure (expected %s, current %s)\n", "%s assertion failure (expected %s, current %s)\n",
pll->info->name, onoff(state), onoff(cur_state)); pll->info->name, onoff(state), onoff(cur_state));
...@@ -4527,13 +4527,27 @@ int intel_dpll_get_freq(struct drm_i915_private *i915, ...@@ -4527,13 +4527,27 @@ int intel_dpll_get_freq(struct drm_i915_private *i915,
return pll->info->funcs->get_freq(i915, pll); return pll->info->funcs->get_freq(i915, pll);
} }
/**
* intel_dpll_get_hw_state - readout the DPLL's hardware state
* @i915: i915 device
* @pll: DPLL for which to calculate the output frequency
* @hw_state: DPLL's hardware state
*
* Read out @pll's hardware state into @hw_state.
*/
bool intel_dpll_get_hw_state(struct drm_i915_private *i915,
struct intel_shared_dpll *pll,
struct intel_dpll_hw_state *hw_state)
{
return pll->info->funcs->get_hw_state(i915, pll, hw_state);
}
static void readout_dpll_hw_state(struct drm_i915_private *i915, static void readout_dpll_hw_state(struct drm_i915_private *i915,
struct intel_shared_dpll *pll) struct intel_shared_dpll *pll)
{ {
struct intel_crtc *crtc; struct intel_crtc *crtc;
pll->on = pll->info->funcs->get_hw_state(i915, pll, pll->on = intel_dpll_get_hw_state(i915, pll, &pll->state.hw_state);
&pll->state.hw_state);
if (IS_JSL_EHL(i915) && pll->on && if (IS_JSL_EHL(i915) && pll->on &&
pll->info->id == DPLL_ID_EHL_DPLL4) { pll->info->id == DPLL_ID_EHL_DPLL4) {
......
...@@ -400,6 +400,9 @@ void intel_update_active_dpll(struct intel_atomic_state *state, ...@@ -400,6 +400,9 @@ void intel_update_active_dpll(struct intel_atomic_state *state,
struct intel_encoder *encoder); struct intel_encoder *encoder);
int intel_dpll_get_freq(struct drm_i915_private *i915, int intel_dpll_get_freq(struct drm_i915_private *i915,
const struct intel_shared_dpll *pll); const struct intel_shared_dpll *pll);
bool intel_dpll_get_hw_state(struct drm_i915_private *i915,
struct intel_shared_dpll *pll,
struct intel_dpll_hw_state *hw_state);
void intel_prepare_shared_dpll(const struct intel_crtc_state *crtc_state); void intel_prepare_shared_dpll(const struct intel_crtc_state *crtc_state);
void intel_enable_shared_dpll(const struct intel_crtc_state *crtc_state); void intel_enable_shared_dpll(const struct intel_crtc_state *crtc_state);
void intel_disable_shared_dpll(const struct intel_crtc_state *crtc_state); void intel_disable_shared_dpll(const struct intel_crtc_state *crtc_state);
......
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