Message ID | 20181003072203.12848-6-mahesh1.kumar@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Refactor and Add helper function for combophy/tc ports | expand |
On Wed, Oct 03, 2018 at 12:52:00PM +0530, Mahesh Kumar wrote: > From: Vandita Kulkarni <vandita.kulkarni@intel.com> > > This patch adds helper function for identifying > whether the given PLL is combo PHY PLL or not. > This helper function is used inside various ICL > functions to make them scalable. > > Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com> > Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com> > Cc: Madhav Chauhan <madhav.chauhan@intel.com> > Cc: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Lucas De Marchi > --- > drivers/gpu/drm/i915/intel_display.c | 2 +- > drivers/gpu/drm/i915/intel_dpll_mgr.c | 54 +++++++++++------------------------ > drivers/gpu/drm/i915/intel_dpll_mgr.h | 1 + > 3 files changed, 19 insertions(+), 38 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index e31d71526afd..a1c6891cf14b 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -9301,7 +9301,7 @@ static void icelake_get_ddi_pll(struct drm_i915_private *dev_priv, > DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); > id = temp >> DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port); > > - if (WARN_ON(id != DPLL_ID_ICL_DPLL0 && id != DPLL_ID_ICL_DPLL1)) > + if (WARN_ON(!intel_dpll_is_combophy(id))) > return; > } else if (intel_port_is_tc(dev_priv, port)) { > id = icl_port_to_mg_pll_id(port); > diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c > index 5b2ee49aee14..93e8e2307989 100644 > --- a/drivers/gpu/drm/i915/intel_dpll_mgr.c > +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c > @@ -2633,6 +2633,11 @@ enum intel_dpll_id icl_port_to_mg_pll_id(enum port port) > return port - PORT_C + DPLL_ID_ICL_MGPLL1; > } > > +bool intel_dpll_is_combophy(enum intel_dpll_id id) > +{ > + return id == DPLL_ID_ICL_DPLL0 || id == DPLL_ID_ICL_DPLL1; > +} > + > static bool icl_mg_pll_find_divisors(int clock_khz, bool is_dp, bool use_ssc, > uint32_t *target_dco_khz, > struct intel_dpll_hw_state *state) > @@ -2926,21 +2931,16 @@ icl_get_dpll(struct intel_crtc *crtc, struct intel_crtc_state *crtc_state, > > static i915_reg_t icl_pll_id_to_enable_reg(enum intel_dpll_id id) > { > - switch (id) { > - default: > - MISSING_CASE(id); > - /* fall through */ > - case DPLL_ID_ICL_DPLL0: > - case DPLL_ID_ICL_DPLL1: > + if (intel_dpll_is_combophy(id)) > return CNL_DPLL_ENABLE(id); > - case DPLL_ID_ICL_TBTPLL: > + else if (id == DPLL_ID_ICL_TBTPLL) > return TBT_PLL_ENABLE; > - case DPLL_ID_ICL_MGPLL1: > - case DPLL_ID_ICL_MGPLL2: > - case DPLL_ID_ICL_MGPLL3: > - case DPLL_ID_ICL_MGPLL4: > + else > + /* > + * TODO: Make MG_PLL macros use > + * tc port id instead of port id > + */ > return MG_PLL_ENABLE(icl_mg_pll_id_to_port(id)); > - } > } > > static bool icl_pll_get_hw_state(struct drm_i915_private *dev_priv, > @@ -2959,17 +2959,11 @@ static bool icl_pll_get_hw_state(struct drm_i915_private *dev_priv, > if (!(val & PLL_ENABLE)) > goto out; > > - switch (id) { > - case DPLL_ID_ICL_DPLL0: > - case DPLL_ID_ICL_DPLL1: > - case DPLL_ID_ICL_TBTPLL: > + if (intel_dpll_is_combophy(id) || > + id == DPLL_ID_ICL_TBTPLL) { > hw_state->cfgcr0 = I915_READ(ICL_DPLL_CFGCR0(id)); > hw_state->cfgcr1 = I915_READ(ICL_DPLL_CFGCR1(id)); > - break; > - case DPLL_ID_ICL_MGPLL1: > - case DPLL_ID_ICL_MGPLL2: > - case DPLL_ID_ICL_MGPLL3: > - case DPLL_ID_ICL_MGPLL4: > + } else { > port = icl_mg_pll_id_to_port(id); > hw_state->mg_refclkin_ctl = I915_READ(MG_REFCLKIN_CTL(port)); > hw_state->mg_refclkin_ctl &= MG_REFCLKIN_CTL_OD_2_MUX_MASK; > @@ -3007,9 +3001,6 @@ static bool icl_pll_get_hw_state(struct drm_i915_private *dev_priv, > > hw_state->mg_pll_tdc_coldst_bias &= hw_state->mg_pll_tdc_coldst_bias_mask; > hw_state->mg_pll_bias &= hw_state->mg_pll_bias_mask; > - break; > - default: > - MISSING_CASE(id); > } > > ret = true; > @@ -3098,21 +3089,10 @@ static void icl_pll_enable(struct drm_i915_private *dev_priv, > PLL_POWER_STATE, 1)) > DRM_ERROR("PLL %d Power not enabled\n", id); > > - switch (id) { > - case DPLL_ID_ICL_DPLL0: > - case DPLL_ID_ICL_DPLL1: > - case DPLL_ID_ICL_TBTPLL: > + if (intel_dpll_is_combophy(id) || id == DPLL_ID_ICL_TBTPLL) > icl_dpll_write(dev_priv, pll); > - break; > - case DPLL_ID_ICL_MGPLL1: > - case DPLL_ID_ICL_MGPLL2: > - case DPLL_ID_ICL_MGPLL3: > - case DPLL_ID_ICL_MGPLL4: > + else > icl_mg_pll_write(dev_priv, pll); > - break; > - default: > - MISSING_CASE(id); > - } > > /* > * DVFS pre sequence would be here, but in our driver the cdclk code > diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.h b/drivers/gpu/drm/i915/intel_dpll_mgr.h > index 5305ce1c2175..6a79ced923e9 100644 > --- a/drivers/gpu/drm/i915/intel_dpll_mgr.h > +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.h > @@ -346,5 +346,6 @@ int icl_calc_dp_combo_pll_link(struct drm_i915_private *dev_priv, > uint32_t pll_id); > int cnl_hdmi_pll_ref_clock(struct drm_i915_private *dev_priv); > enum intel_dpll_id icl_port_to_mg_pll_id(enum port port); > +bool intel_dpll_is_combophy(enum intel_dpll_id id); > > #endif /* _INTEL_DPLL_MGR_H_ */ > -- > 2.16.2 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index e31d71526afd..a1c6891cf14b 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -9301,7 +9301,7 @@ static void icelake_get_ddi_pll(struct drm_i915_private *dev_priv, DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); id = temp >> DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port); - if (WARN_ON(id != DPLL_ID_ICL_DPLL0 && id != DPLL_ID_ICL_DPLL1)) + if (WARN_ON(!intel_dpll_is_combophy(id))) return; } else if (intel_port_is_tc(dev_priv, port)) { id = icl_port_to_mg_pll_id(port); diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c index 5b2ee49aee14..93e8e2307989 100644 --- a/drivers/gpu/drm/i915/intel_dpll_mgr.c +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c @@ -2633,6 +2633,11 @@ enum intel_dpll_id icl_port_to_mg_pll_id(enum port port) return port - PORT_C + DPLL_ID_ICL_MGPLL1; } +bool intel_dpll_is_combophy(enum intel_dpll_id id) +{ + return id == DPLL_ID_ICL_DPLL0 || id == DPLL_ID_ICL_DPLL1; +} + static bool icl_mg_pll_find_divisors(int clock_khz, bool is_dp, bool use_ssc, uint32_t *target_dco_khz, struct intel_dpll_hw_state *state) @@ -2926,21 +2931,16 @@ icl_get_dpll(struct intel_crtc *crtc, struct intel_crtc_state *crtc_state, static i915_reg_t icl_pll_id_to_enable_reg(enum intel_dpll_id id) { - switch (id) { - default: - MISSING_CASE(id); - /* fall through */ - case DPLL_ID_ICL_DPLL0: - case DPLL_ID_ICL_DPLL1: + if (intel_dpll_is_combophy(id)) return CNL_DPLL_ENABLE(id); - case DPLL_ID_ICL_TBTPLL: + else if (id == DPLL_ID_ICL_TBTPLL) return TBT_PLL_ENABLE; - case DPLL_ID_ICL_MGPLL1: - case DPLL_ID_ICL_MGPLL2: - case DPLL_ID_ICL_MGPLL3: - case DPLL_ID_ICL_MGPLL4: + else + /* + * TODO: Make MG_PLL macros use + * tc port id instead of port id + */ return MG_PLL_ENABLE(icl_mg_pll_id_to_port(id)); - } } static bool icl_pll_get_hw_state(struct drm_i915_private *dev_priv, @@ -2959,17 +2959,11 @@ static bool icl_pll_get_hw_state(struct drm_i915_private *dev_priv, if (!(val & PLL_ENABLE)) goto out; - switch (id) { - case DPLL_ID_ICL_DPLL0: - case DPLL_ID_ICL_DPLL1: - case DPLL_ID_ICL_TBTPLL: + if (intel_dpll_is_combophy(id) || + id == DPLL_ID_ICL_TBTPLL) { hw_state->cfgcr0 = I915_READ(ICL_DPLL_CFGCR0(id)); hw_state->cfgcr1 = I915_READ(ICL_DPLL_CFGCR1(id)); - break; - case DPLL_ID_ICL_MGPLL1: - case DPLL_ID_ICL_MGPLL2: - case DPLL_ID_ICL_MGPLL3: - case DPLL_ID_ICL_MGPLL4: + } else { port = icl_mg_pll_id_to_port(id); hw_state->mg_refclkin_ctl = I915_READ(MG_REFCLKIN_CTL(port)); hw_state->mg_refclkin_ctl &= MG_REFCLKIN_CTL_OD_2_MUX_MASK; @@ -3007,9 +3001,6 @@ static bool icl_pll_get_hw_state(struct drm_i915_private *dev_priv, hw_state->mg_pll_tdc_coldst_bias &= hw_state->mg_pll_tdc_coldst_bias_mask; hw_state->mg_pll_bias &= hw_state->mg_pll_bias_mask; - break; - default: - MISSING_CASE(id); } ret = true; @@ -3098,21 +3089,10 @@ static void icl_pll_enable(struct drm_i915_private *dev_priv, PLL_POWER_STATE, 1)) DRM_ERROR("PLL %d Power not enabled\n", id); - switch (id) { - case DPLL_ID_ICL_DPLL0: - case DPLL_ID_ICL_DPLL1: - case DPLL_ID_ICL_TBTPLL: + if (intel_dpll_is_combophy(id) || id == DPLL_ID_ICL_TBTPLL) icl_dpll_write(dev_priv, pll); - break; - case DPLL_ID_ICL_MGPLL1: - case DPLL_ID_ICL_MGPLL2: - case DPLL_ID_ICL_MGPLL3: - case DPLL_ID_ICL_MGPLL4: + else icl_mg_pll_write(dev_priv, pll); - break; - default: - MISSING_CASE(id); - } /* * DVFS pre sequence would be here, but in our driver the cdclk code diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.h b/drivers/gpu/drm/i915/intel_dpll_mgr.h index 5305ce1c2175..6a79ced923e9 100644 --- a/drivers/gpu/drm/i915/intel_dpll_mgr.h +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.h @@ -346,5 +346,6 @@ int icl_calc_dp_combo_pll_link(struct drm_i915_private *dev_priv, uint32_t pll_id); int cnl_hdmi_pll_ref_clock(struct drm_i915_private *dev_priv); enum intel_dpll_id icl_port_to_mg_pll_id(enum port port); +bool intel_dpll_is_combophy(enum intel_dpll_id id); #endif /* _INTEL_DPLL_MGR_H_ */