[Intel-gfx] [PATCH 5/8] drm/i915/icl: Refactor icl pll functions
Lucas De Marchi
lucas.de.marchi at gmail.com
Thu Oct 4 21:24:43 UTC 2018
On Wed, Oct 03, 2018 at 12:52:00PM +0530, Mahesh Kumar wrote:
> From: Vandita Kulkarni <vandita.kulkarni at 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 at intel.com>
> Signed-off-by: Mahesh Kumar <mahesh1.kumar at intel.com>
> Cc: Madhav Chauhan <madhav.chauhan at intel.com>
> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list