From: Jani Nikula <jani.nikula@linux.intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH v2 3/8] drm/i915: Clean up bxt/glk PLL registers
Date: Wed, 09 Mar 2022 11:22:54 +0200 [thread overview]
Message-ID: <877d931nv5.fsf@intel.com> (raw)
In-Reply-To: <20220307233940.4161-4-ville.syrjala@linux.intel.com>
On Tue, 08 Mar 2022, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Use REG_BIT() & co. for bxt/glk PLL registers.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 32 +++++-----
> drivers/gpu/drm/i915/gvt/handlers.c | 15 +++--
> drivers/gpu/drm/i915/i915_reg.h | 61 ++++++++++---------
> 3 files changed, 57 insertions(+), 51 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 4595795d694f..2a88c6fa1f34 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -1898,7 +1898,7 @@ static void bxt_ddi_pll_enable(struct drm_i915_private *dev_priv,
>
> /* Write M2 integer */
> temp = intel_de_read(dev_priv, BXT_PORT_PLL(phy, ch, 0));
> - temp &= ~PORT_PLL_M2_MASK;
> + temp &= ~PORT_PLL_M2_INT_MASK;
> temp |= pll->state.hw_state.pll0;
> intel_de_write(dev_priv, BXT_PORT_PLL(phy, ch, 0), temp);
>
> @@ -2034,7 +2034,7 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
> hw_state->ebb4 &= PORT_PLL_10BIT_CLK_ENABLE;
>
> hw_state->pll0 = intel_de_read(dev_priv, BXT_PORT_PLL(phy, ch, 0));
> - hw_state->pll0 &= PORT_PLL_M2_MASK;
> + hw_state->pll0 &= PORT_PLL_M2_INT_MASK;
>
> hw_state->pll1 = intel_de_read(dev_priv, BXT_PORT_PLL(phy, ch, 1));
> hw_state->pll1 &= PORT_PLL_N_MASK;
> @@ -2200,23 +2200,23 @@ static bool bxt_ddi_set_dpll_hw_state(struct intel_crtc_state *crtc_state,
> lanestagger = 0x02;
>
> dpll_hw_state->ebb0 = PORT_PLL_P1(clk_div->p1) | PORT_PLL_P2(clk_div->p2);
> - dpll_hw_state->pll0 = clk_div->m2_int;
> + dpll_hw_state->pll0 = PORT_PLL_M2_INT(clk_div->m2_int);
> dpll_hw_state->pll1 = PORT_PLL_N(clk_div->n);
> - dpll_hw_state->pll2 = clk_div->m2_frac;
> + dpll_hw_state->pll2 = PORT_PLL_M2_FRAC(clk_div->m2_frac);
>
> if (clk_div->m2_frac)
> dpll_hw_state->pll3 = PORT_PLL_M2_FRAC_ENABLE;
>
> - dpll_hw_state->pll6 = prop_coef | PORT_PLL_INT_COEFF(int_coef);
> - dpll_hw_state->pll6 |= PORT_PLL_GAIN_CTL(gain_ctl);
> + dpll_hw_state->pll6 = PORT_PLL_PROP_COEFF(prop_coef) |
> + PORT_PLL_INT_COEFF(int_coef) |
> + PORT_PLL_GAIN_CTL(gain_ctl);
>
> - dpll_hw_state->pll8 = targ_cnt;
> + dpll_hw_state->pll8 = PORT_PLL_TARGET_CNT(targ_cnt);
>
> - dpll_hw_state->pll9 = 5 << PORT_PLL_LOCK_THRESHOLD_SHIFT;
> + dpll_hw_state->pll9 = PORT_PLL_LOCK_THRESHOLD(5);
>
> - dpll_hw_state->pll10 =
> - PORT_PLL_DCO_AMP(PORT_PLL_DCO_AMP_DEFAULT)
> - | PORT_PLL_DCO_AMP_OVR_EN_H;
> + dpll_hw_state->pll10 = PORT_PLL_DCO_AMP(15) |
> + PORT_PLL_DCO_AMP_OVR_EN_H;
>
> dpll_hw_state->ebb4 = PORT_PLL_10BIT_CLK_ENABLE;
>
> @@ -2252,12 +2252,12 @@ static int bxt_ddi_pll_get_freq(struct drm_i915_private *i915,
> struct dpll clock;
>
> clock.m1 = 2;
> - clock.m2 = (pll_state->pll0 & PORT_PLL_M2_MASK) << 22;
> + clock.m2 = REG_FIELD_GET(PORT_PLL_M2_INT_MASK, pll_state->pll0) << 22;
> if (pll_state->pll3 & PORT_PLL_M2_FRAC_ENABLE)
> - clock.m2 |= pll_state->pll2 & PORT_PLL_M2_FRAC_MASK;
> - clock.n = (pll_state->pll1 & PORT_PLL_N_MASK) >> PORT_PLL_N_SHIFT;
> - clock.p1 = (pll_state->ebb0 & PORT_PLL_P1_MASK) >> PORT_PLL_P1_SHIFT;
> - clock.p2 = (pll_state->ebb0 & PORT_PLL_P2_MASK) >> PORT_PLL_P2_SHIFT;
> + clock.m2 |= REG_FIELD_GET(PORT_PLL_M2_FRAC_MASK, pll_state->pll2);
> + clock.n = REG_FIELD_GET(PORT_PLL_N_MASK, pll_state->pll1);
> + clock.p1 = REG_FIELD_GET(PORT_PLL_P1_MASK, pll_state->ebb0);
> + clock.p2 = REG_FIELD_GET(PORT_PLL_P2_MASK, pll_state->ebb0);
>
> return chv_calc_dpll_params(i915->dpll.ref_clks.nssc, &clock);
> }
> diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
> index efdd2f3f9d73..0ee3ecc83234 100644
> --- a/drivers/gpu/drm/i915/gvt/handlers.c
> +++ b/drivers/gpu/drm/i915/gvt/handlers.c
> @@ -576,12 +576,17 @@ static u32 bxt_vgpu_get_dp_bitrate(struct intel_vgpu *vgpu, enum port port)
> }
>
> clock.m1 = 2;
> - clock.m2 = (vgpu_vreg_t(vgpu, BXT_PORT_PLL(phy, ch, 0)) & PORT_PLL_M2_MASK) << 22;
> + clock.m2 = REG_FIELD_GET(PORT_PLL_M2_INT_MASK,
> + vgpu_vreg_t(vgpu, BXT_PORT_PLL(phy, ch, 0))) << 22;
> if (vgpu_vreg_t(vgpu, BXT_PORT_PLL(phy, ch, 3)) & PORT_PLL_M2_FRAC_ENABLE)
> - clock.m2 |= vgpu_vreg_t(vgpu, BXT_PORT_PLL(phy, ch, 2)) & PORT_PLL_M2_FRAC_MASK;
> - clock.n = (vgpu_vreg_t(vgpu, BXT_PORT_PLL(phy, ch, 1)) & PORT_PLL_N_MASK) >> PORT_PLL_N_SHIFT;
> - clock.p1 = (vgpu_vreg_t(vgpu, BXT_PORT_PLL_EBB_0(phy, ch)) & PORT_PLL_P1_MASK) >> PORT_PLL_P1_SHIFT;
> - clock.p2 = (vgpu_vreg_t(vgpu, BXT_PORT_PLL_EBB_0(phy, ch)) & PORT_PLL_P2_MASK) >> PORT_PLL_P2_SHIFT;
> + clock.m2 |= REG_FIELD_GET(PORT_PLL_M2_FRAC_MASK,
> + vgpu_vreg_t(vgpu, BXT_PORT_PLL(phy, ch, 2)));
> + clock.n = REG_FIELD_GET(PORT_PLL_N_MASK,
> + vgpu_vreg_t(vgpu, BXT_PORT_PLL(phy, ch, 1)));
> + clock.p1 = REG_FIELD_GET(PORT_PLL_P1_MASK,
> + vgpu_vreg_t(vgpu, BXT_PORT_PLL_EBB_0(phy, ch)));
> + clock.p2 = REG_FIELD_GET(PORT_PLL_P2_MASK,
> + vgpu_vreg_t(vgpu, BXT_PORT_PLL_EBB_0(phy, ch)));
> clock.m = clock.m1 * clock.m2;
> clock.p = clock.p1 * clock.p2 * 5;
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 70484f6f2b8b..80be197cd6eb 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -644,22 +644,20 @@
> #define _PORT_PLL_A 0x46074
> #define _PORT_PLL_B 0x46078
> #define _PORT_PLL_C 0x4607c
> -#define PORT_PLL_ENABLE (1 << 31)
> -#define PORT_PLL_LOCK (1 << 30)
> -#define PORT_PLL_REF_SEL (1 << 27)
> -#define PORT_PLL_POWER_ENABLE (1 << 26)
> -#define PORT_PLL_POWER_STATE (1 << 25)
> +#define PORT_PLL_ENABLE REG_BIT(31)
> +#define PORT_PLL_LOCK REG_BIT(30)
> +#define PORT_PLL_REF_SEL REG_BIT(27)
> +#define PORT_PLL_POWER_ENABLE REG_BIT(26)
> +#define PORT_PLL_POWER_STATE REG_BIT(25)
> #define BXT_PORT_PLL_ENABLE(port) _MMIO_PORT(port, _PORT_PLL_A, _PORT_PLL_B)
>
> #define _PORT_PLL_EBB_0_A 0x162034
> #define _PORT_PLL_EBB_0_B 0x6C034
> #define _PORT_PLL_EBB_0_C 0x6C340
> -#define PORT_PLL_P1_SHIFT 13
> -#define PORT_PLL_P1_MASK (0x07 << PORT_PLL_P1_SHIFT)
> -#define PORT_PLL_P1(x) ((x) << PORT_PLL_P1_SHIFT)
> -#define PORT_PLL_P2_SHIFT 8
> -#define PORT_PLL_P2_MASK (0x1f << PORT_PLL_P2_SHIFT)
> -#define PORT_PLL_P2(x) ((x) << PORT_PLL_P2_SHIFT)
> +#define PORT_PLL_P1_MASK REG_GENMASK(15, 13)
> +#define PORT_PLL_P1(p1) REG_FIELD_PREP(PORT_PLL_P1_MASK, (p1))
> +#define PORT_PLL_P2_MASK REG_GENMASK(12, 8)
> +#define PORT_PLL_P2(p2) REG_FIELD_PREP(PORT_PLL_P2_MASK, (p2))
> #define BXT_PORT_PLL_EBB_0(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
> _PORT_PLL_EBB_0_B, \
> _PORT_PLL_EBB_0_C)
> @@ -667,8 +665,8 @@
> #define _PORT_PLL_EBB_4_A 0x162038
> #define _PORT_PLL_EBB_4_B 0x6C038
> #define _PORT_PLL_EBB_4_C 0x6C344
> -#define PORT_PLL_10BIT_CLK_ENABLE (1 << 13)
> -#define PORT_PLL_RECALIBRATE (1 << 14)
> +#define PORT_PLL_RECALIBRATE REG_BIT(14)
> +#define PORT_PLL_10BIT_CLK_ENABLE REG_BIT(13)
> #define BXT_PORT_PLL_EBB_4(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
> _PORT_PLL_EBB_4_B, \
> _PORT_PLL_EBB_4_C)
> @@ -677,31 +675,34 @@
> #define _PORT_PLL_0_B 0x6C100
> #define _PORT_PLL_0_C 0x6C380
> /* PORT_PLL_0_A */
> -#define PORT_PLL_M2_MASK 0xFF
> +#define PORT_PLL_M2_INT_MASK REG_GENMASK(7, 0)
> +#define PORT_PLL_M2_INT(m2_int) REG_FIELD_PREP(PORT_PLL_M2_INT_MASK, (m2_int))
> /* PORT_PLL_1_A */
> -#define PORT_PLL_N_SHIFT 8
> -#define PORT_PLL_N_MASK (0x0F << PORT_PLL_N_SHIFT)
> -#define PORT_PLL_N(x) ((x) << PORT_PLL_N_SHIFT)
> +#define PORT_PLL_N_MASK REG_GENMASK(11, 8)
> +#define PORT_PLL_N(n) REG_FIELD_PREP(PORT_PLL_N_MASK, (n))
> /* PORT_PLL_2_A */
> -#define PORT_PLL_M2_FRAC_MASK 0x3FFFFF
> +#define PORT_PLL_M2_FRAC_MASK REG_GENMASK(21, 0)
> +#define PORT_PLL_M2_FRAC(m2_frac) REG_FIELD_PREP(PORT_PLL_M2_FRAC_MASK, (m2_frac))
> /* PORT_PLL_3_A */
> -#define PORT_PLL_M2_FRAC_ENABLE (1 << 16)
> +#define PORT_PLL_M2_FRAC_ENABLE REG_BIT(16)
> /* PORT_PLL_6_A */
> -#define PORT_PLL_PROP_COEFF_MASK 0xF
> -#define PORT_PLL_INT_COEFF_MASK (0x1F << 8)
> -#define PORT_PLL_INT_COEFF(x) ((x) << 8)
> -#define PORT_PLL_GAIN_CTL_MASK (0x07 << 16)
> -#define PORT_PLL_GAIN_CTL(x) ((x) << 16)
> +#define PORT_PLL_PROP_COEFF_MASK REG_GENMASK(3, 0)
> +#define PORT_PLL_PROP_COEFF(x) REG_FIELD_PREP(PORT_PLL_PROP_COEFF_MASK, (x))
> +#define PORT_PLL_INT_COEFF_MASK REG_GENMASK(12, 8)
> +#define PORT_PLL_INT_COEFF(x) REG_FIELD_PREP(PORT_PLL_INT_COEFF_MASK, (x))
> +#define PORT_PLL_GAIN_CTL_MASK REG_GENMASK(18, 16)
> +#define PORT_PLL_GAIN_CTL(x) REG_FIELD_PREP(PORT_PLL_GAIN_CTL_MASK, (x))
> /* PORT_PLL_8_A */
> -#define PORT_PLL_TARGET_CNT_MASK 0x3FF
> +#define PORT_PLL_TARGET_CNT_MASK REG_GENMASK(9, 0)
> +#define PORT_PLL_TARGET_CNT(x) REG_FIELD_PREP(PORT_PLL_TARGET_CNT_MASK, (x))
> /* PORT_PLL_9_A */
> -#define PORT_PLL_LOCK_THRESHOLD_SHIFT 1
> -#define PORT_PLL_LOCK_THRESHOLD_MASK (0x7 << PORT_PLL_LOCK_THRESHOLD_SHIFT)
> +#define PORT_PLL_LOCK_THRESHOLD_MASK REG_GENMASK(3, 1)
> +#define PORT_PLL_LOCK_THRESHOLD(x) REG_FIELD_PREP(PORT_PLL_LOCK_THRESHOLD_MASK, (x))
> /* PORT_PLL_10_A */
> -#define PORT_PLL_DCO_AMP_OVR_EN_H (1 << 27)
> +#define PORT_PLL_DCO_AMP_OVR_EN_H REG_BIT(27)
> #define PORT_PLL_DCO_AMP_DEFAULT 15
> -#define PORT_PLL_DCO_AMP_MASK 0x3c00
> -#define PORT_PLL_DCO_AMP(x) ((x) << 10)
> +#define PORT_PLL_DCO_AMP_MASK REG_GENMASK(13, 10)
> +#define PORT_PLL_DCO_AMP(x) REG_FIELD_PREP(PORT_PLL_DCO_AMP_MASK, (x))
> #define _PORT_PLL_BASE(phy, ch) _BXT_PHY_CH(phy, ch, \
> _PORT_PLL_0_B, \
> _PORT_PLL_0_C)
--
Jani Nikula, Intel Open Source Graphics Center
next prev parent reply other threads:[~2022-03-09 9:23 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-07 23:39 [Intel-gfx] [PATCH v2 0/8] drm/i915: Clean up some dpll stuff Ville Syrjala
2022-03-07 23:39 ` [Intel-gfx] [PATCH v2 1/8] drm/i915: Store the /5 target clock in struct dpll on vlv/chv Ville Syrjala
2022-03-09 9:53 ` Jani Nikula
2022-03-09 21:43 ` [Intel-gfx] [PATCH v3 " Ville Syrjala
2022-03-07 23:39 ` [Intel-gfx] [PATCH v2 2/8] drm/i915: Remove redundant/wrong comments Ville Syrjala
2022-03-09 9:50 ` Jani Nikula
2022-03-07 23:39 ` [Intel-gfx] [PATCH v2 3/8] drm/i915: Clean up bxt/glk PLL registers Ville Syrjala
2022-03-09 9:22 ` Jani Nikula [this message]
2022-03-07 23:39 ` [Intel-gfx] [PATCH v2 4/8] drm/i915: Store the m2 divider as a whole in bxt_clk_div Ville Syrjala
2022-03-09 9:27 ` Jani Nikula
2022-03-07 23:39 ` [Intel-gfx] [PATCH v2 5/8] drm/i915: Replace bxt_clk_div with struct dpll Ville Syrjala
2022-03-07 23:39 ` [Intel-gfx] [PATCH v2 6/8] drm/i915: Replace hand rolled bxt vco calculation with chv_calc_dpll_params() Ville Syrjala
2022-03-09 9:46 ` Jani Nikula
2022-03-07 23:39 ` [Intel-gfx] [PATCH v2 7/8] drm/i915: Populate bxt/glk DPLL clock limits a bit more Ville Syrjala
2022-03-09 9:30 ` Jani Nikula
2022-03-07 23:39 ` [Intel-gfx] [PATCH v2 8/8] drm/i915: Remove struct dp_link_dpll Ville Syrjala
2022-03-09 9:34 ` Jani Nikula
2022-03-07 23:50 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915: Clean up some dpll stuff (rev3) Patchwork
2022-03-08 13:31 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-03-09 2:48 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915: Clean up some dpll stuff (rev4) Patchwork
2022-03-09 3:22 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-03-09 18:23 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915: Clean up some dpll stuff (rev5) Patchwork
2022-03-09 18:59 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-03-09 22:02 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915: Clean up some dpll stuff (rev6) Patchwork
2022-03-09 22:35 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-03-10 7:29 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877d931nv5.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.