From: Jani Nikula <jani.nikula@linux.intel.com>
To: Uma Shankar <uma.shankar@intel.com>, intel-gfx@lists.freedesktop.org
Cc: shobhit.kumar@intel.com
Subject: Re: [BXT MIPI PATCH v4 07/14] drm/i915/bxt: Program Tx Rx and Dphy clocks
Date: Mon, 28 Sep 2015 16:04:07 +0300 [thread overview]
Message-ID: <87io6uk854.fsf@intel.com> (raw)
In-Reply-To: <1443031037-11856-1-git-send-email-uma.shankar@intel.com>
On Wed, 23 Sep 2015, Uma Shankar <uma.shankar@intel.com> wrote:
> From: Shashank Sharma <shashank.sharma@intel.com>
>
> BXT DSI clocks are different than previous platforms. So adding a
> new function to program following clocks and dividers:
> 1. Program variable divider to generate input to Tx clock divider
> (Output value must be < 39.5Mhz)
> 2. Select divide by 2 option to get < 20Mhz for Tx clock
> 3. Program 8by3 divider to generate Rx clock
>
> v2: Fixed Jani's review comments. Adjusted the Macro definition as
> per convention. Simplified the logic for bit definitions for
> MIPI PORT A and PORT C in same registers.
>
> v3: Refactored the macros for TX, RX Escape and DPHY clocks as per
> Jani's suggestion.
>
> v4: Addressed Jani's review comments.
>
> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/i915_reg.h | 62 ++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/i915/intel_dsi_pll.c | 42 +++++++++++++++++++++++
> 2 files changed, 104 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 57c5dbf..88a16e2 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -7362,6 +7362,68 @@ enum skl_disp_power_wells {
>
> #define _MIPI_PORT(port, a, c) _PORT3(port, a, 0, c) /* ports A and C only */
>
> +/* BXT MIPI clock controls */
> +#define BXT_MAX_VAR_OUTPUT_KHZ 39500
> +
> +#define BXT_MIPI_CLOCK_CTL 0x46090
> +#define BXT_MIPI1_DIV_SHIFT 26
> +#define BXT_MIPI2_DIV_SHIFT 10
> +#define BXT_MIPI_DIV_SHIFT(port) \
> + _MIPI_PORT(port, BXT_MIPI1_DIV_SHIFT, \
> + BXT_MIPI2_DIV_SHIFT)
> +/* Var clock divider to generate TX source. Result must be < 39.5 M */
> +#define BXT_MIPI1_ESCLK_VAR_DIV_MASK (0x3F << 26)
> +#define BXT_MIPI2_ESCLK_VAR_DIV_MASK (0x3F << 10)
> +#define BXT_MIPI_ESCLK_VAR_DIV_MASK(port) \
> + _MIPI_PORT(port, BXT_MIPI1_ESCLK_VAR_DIV_MASK, \
> + BXT_MIPI2_ESCLK_VAR_DIV_MASK)
> +
> +#define BXT_MIPI_ESCLK_VAR_DIV(port, val) \
> + (val << BXT_MIPI_DIV_SHIFT(port))
> +/* TX control divider to select actual TX clock output from (8x/var) */
> +#define BXT_MIPI1_TX_ESCLK_SHIFT 21
> +#define BXT_MIPI2_TX_ESCLK_SHIFT 5
> +#define BXT_MIPI_TX_ESCLK_SHIFT(port) \
> + _MIPI_PORT(port, BXT_MIPI1_TX_ESCLK_SHIFT, \
> + BXT_MIPI2_TX_ESCLK_SHIFT)
> +#define BXT_MIPI1_TX_ESCLK_FIXDIV_MASK (3 << 21)
> +#define BXT_MIPI2_TX_ESCLK_FIXDIV_MASK (3 << 5)
> +#define BXT_MIPI_TX_ESCLK_FIXDIV_MASK(port) \
> + _MIPI_PORT(port, BXT_MIPI1_TX_ESCLK_FIXDIV_MASK, \
> + BXT_MIPI2_TX_ESCLK_FIXDIV_MASK)
> +#define BXT_MIPI_TX_ESCLK_8XDIV_BY2(port) \
> + (0x0 << BXT_MIPI_TX_ESCLK_SHIFT(port))
> +#define BXT_MIPI_TX_ESCLK_8XDIV_BY4(port) \
> + (0x1 << BXT_MIPI_TX_ESCLK_SHIFT(port))
> +#define BXT_MIPI_TX_ESCLK_8XDIV_BY8(port) \
> + (0x2 << BXT_MIPI_TX_ESCLK_SHIFT(port))
> +/* RX control divider to select actual RX clock output from 8x*/
> +#define BXT_MIPI1_RX_ESCLK_SHIFT 19
> +#define BXT_MIPI2_RX_ESCLK_SHIFT 3
> +#define BXT_MIPI_RX_ESCLK_SHIFT(port) \
> + _MIPI_PORT(port, BXT_MIPI1_RX_ESCLK_SHIFT, \
> + BXT_MIPI2_RX_ESCLK_SHIFT)
> +#define BXT_MIPI1_RX_ESCLK_FIXDIV_MASK (3 << 19)
> +#define BXT_MIPI2_RX_ESCLK_FIXDIV_MASK (3 << 3)
> +#define BXT_MIPI_RX_ESCLK_FIXDIV_MASK(port) \
> + (3 << BXT_MIPI_RX_ESCLK_SHIFT(port))
> +#define BXT_MIPI_RX_ESCLK_8X_BY2(port) \
> + (1 << BXT_MIPI_RX_ESCLK_SHIFT(port))
> +#define BXT_MIPI_RX_ESCLK_8X_BY3(port) \
> + (2 << BXT_MIPI_RX_ESCLK_SHIFT(port))
> +#define BXT_MIPI_RX_ESCLK_8X_BY4(port) \
> + (3 << BXT_MIPI_RX_ESCLK_SHIFT(port))
> +/* BXT-A WA: Always prog DPHY dividers to 00 */
> +#define BXT_MIPI1_DPHY_DIV_SHIFT 16
> +#define BXT_MIPI2_DPHY_DIV_SHIFT 0
> +#define BXT_MIPI_DPHY_DIV_SHIFT(port) \
> + _MIPI_PORT(port, BXT_MIPI1_DPHY_DIV_SHIFT, \
> + BXT_MIPI2_DPHY_DIV_SHIFT)
> +#define BXT_MIPI_1_DPHY_DIVIDER_MASK (3 << 16)
> +#define BXT_MIPI_2_DPHY_DIVIDER_MASK (3 << 0)
> +#define BXT_MIPI_DPHY_DIVIDER_MASK(port) \
> + (3 << BXT_MIPI_DPHY_DIV_SHIFT(port))
> +
> /* BXT MIPI mode configure */
> #define _BXT_MIPIA_TRANS_HACTIVE 0x6B0F8
> #define _BXT_MIPIC_TRANS_HACTIVE 0x6B8F8
> diff --git a/drivers/gpu/drm/i915/intel_dsi_pll.c b/drivers/gpu/drm/i915/intel_dsi_pll.c
> index 21a2e37..e62729f 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_pll.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_pll.c
> @@ -389,6 +389,42 @@ u32 vlv_get_dsi_pclk(struct intel_encoder *encoder, int pipe_bpp)
> return pclk;
> }
>
> +/* Program BXT Mipi clocks and dividers */
> +static void bxt_dsi_program_clocks(struct drm_device *dev, enum port port)
> +{
> + u32 tmp;
> + u32 divider;
> + u32 dsi_rate;
> + u32 pll_ratio;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> +
> + /* Clear old configurations */
> + tmp = I915_READ(BXT_MIPI_CLOCK_CTL);
> + tmp &= ~(BXT_MIPI_TX_ESCLK_FIXDIV_MASK(port));
> + tmp &= ~(BXT_MIPI_RX_ESCLK_FIXDIV_MASK(port));
> + tmp &= ~(BXT_MIPI_ESCLK_VAR_DIV_MASK(port));
> + tmp &= ~(BXT_MIPI_DPHY_DIVIDER_MASK(port));
> +
> + /* Get the current DSI rate(actual) */
> + pll_ratio = I915_READ(BXT_DSI_PLL_CTL) &
> + BXT_DSI_PLL_RATIO_MASK;
> + dsi_rate = (BXT_REF_CLOCK_KHZ * pll_ratio) / 2;
> +
> + /* Max possible output of clock is 39.5 MHz, program value -1 */
> + divider = (dsi_rate / BXT_MAX_VAR_OUTPUT_KHZ) - 1;
> + tmp |= BXT_MIPI_ESCLK_VAR_DIV(port, divider);
> +
> + /*
> + * Tx escape clock must be as close to 20MHz possible, but should
> + * not exceed it. Hence select divide by 2
> + */
> + tmp |= BXT_MIPI_TX_ESCLK_8XDIV_BY2(port);
> +
> + tmp |= BXT_MIPI_RX_ESCLK_8X_BY3(port);
> +
> + I915_WRITE(BXT_MIPI_CLOCK_CTL, tmp);
> +}
> +
> static bool bxt_configure_dsi_pll(struct intel_encoder *encoder)
> {
> struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
> @@ -440,6 +476,8 @@ static bool bxt_configure_dsi_pll(struct intel_encoder *encoder)
> static void bxt_enable_dsi_pll(struct intel_encoder *encoder)
> {
> struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
> + struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> + enum port port;
> u32 val;
>
> DRM_DEBUG_KMS("\n");
> @@ -458,6 +496,10 @@ static void bxt_enable_dsi_pll(struct intel_encoder *encoder)
> return;
> }
>
> + /* Program TX, RX, Dphy clocks */
> + for_each_dsi_port(port, intel_dsi->ports)
> + bxt_dsi_program_clocks(encoder->base.dev, port);
> +
> /* Enable DSI PLL */
> val = I915_READ(BXT_DSI_PLL_ENABLE);
> val |= BXT_DSI_PLL_DO_ENABLE;
> --
> 1.7.9.5
>
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-09-28 13:00 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-01 14:11 [BXT MIPI PATCH v3 00/14] MIPI DSI Support for BXT Uma Shankar
2015-09-01 14:11 ` [BXT MIPI PATCH v3 01/14] drm/i915/bxt: Initialize MIPI " Uma Shankar
2015-09-18 12:17 ` Jani Nikula
2015-09-23 8:08 ` Daniel Vetter
2015-09-01 14:11 ` [BXT MIPI PATCH v3 02/14] drm/i915/bxt: Enable BXT DSI PLL Uma Shankar
2015-09-18 12:32 ` Jani Nikula
2015-09-01 14:11 ` [BXT MIPI PATCH v3 03/14] drm/i915/bxt: Disable DSI PLL for BXT Uma Shankar
2015-09-18 12:57 ` Jani Nikula
2015-09-01 14:11 ` [BXT MIPI PATCH v3 04/14] drm/i915/bxt: DSI prepare changes " Uma Shankar
2015-09-18 13:05 ` Jani Nikula
2015-09-23 8:16 ` Daniel Vetter
2015-09-01 14:11 ` [BXT MIPI PATCH v3 05/14] drm/i915/bxt: DSI encoder support in CRTC modeset Uma Shankar
2015-09-18 14:18 ` Jani Nikula
2015-09-21 10:41 ` Shankar, Uma
2015-09-23 8:15 ` Daniel Vetter
2015-09-23 12:43 ` Jani Nikula
2015-09-23 13:11 ` Daniel Vetter
2015-09-23 14:44 ` Shankar, Uma
2015-09-23 12:53 ` Jani Nikula
2015-09-23 14:49 ` Shankar, Uma
2015-09-23 17:03 ` Shankar, Uma
2015-09-23 17:53 ` [BXT MIPI PATCH v4 " Uma Shankar
2015-09-28 13:28 ` Jani Nikula
2015-09-28 16:57 ` Shankar, Uma
2015-09-29 7:29 ` Jani Nikula
2015-09-30 16:33 ` Shankar, Uma
2015-10-01 9:56 ` Jani Nikula
2015-09-30 17:03 ` [BXT MIPI PATCH v5 " Uma Shankar
2015-10-01 9:54 ` Jani Nikula
2015-10-01 16:22 ` Shankar, Uma
2015-10-01 16:53 ` Uma Shankar
2015-10-02 11:05 ` Jani Nikula
2015-10-02 12:34 ` Daniel Vetter
2015-10-05 16:06 ` Shankar, Uma
2015-10-06 6:05 ` Jani Nikula
2015-09-01 14:11 ` [BXT MIPI PATCH v3 06/14] drm/i915/bxt: DSI enable for BXT Uma Shankar
2015-09-18 13:17 ` Jani Nikula
2015-09-21 9:33 ` Shankar, Uma
2015-09-01 14:11 ` [BXT MIPI PATCH v3 07/14] drm/i915/bxt: Program Tx Rx and Dphy clocks Uma Shankar
2015-09-18 13:27 ` Jani Nikula
2015-09-21 10:11 ` Shankar, Uma
2015-09-23 17:57 ` [BXT MIPI PATCH v4 " Uma Shankar
2015-09-28 13:04 ` Jani Nikula [this message]
2015-09-01 14:11 ` [BXT MIPI PATCH v3 08/14] drm/i915/bxt: DSI disable and post-disable Uma Shankar
2015-09-18 13:29 ` Jani Nikula
2015-09-01 14:11 ` [BXT MIPI PATCH v3 09/14] drm/i915/bxt: get_hw_state for BXT Uma Shankar
2015-09-18 13:30 ` Jani Nikula
2015-09-01 14:11 ` [BXT MIPI PATCH v3 10/14] drm/i915/bxt: get DSI pixelclock Uma Shankar
2015-09-18 13:30 ` Jani Nikula
2015-09-01 14:11 ` [BXT MIPI PATCH v3 11/14] drm/i915/bxt: Modify BXT BLC according to VBT changes Uma Shankar
2015-09-18 13:51 ` Jani Nikula
2015-09-21 10:26 ` Shankar, Uma
2015-09-23 17:59 ` [BXT MIPI PATCH v4 " Uma Shankar
2015-09-28 13:13 ` Jani Nikula
2015-09-30 17:04 ` [BXT MIPI PATCH v5 " Uma Shankar
2015-10-01 10:16 ` Jani Nikula
2015-10-02 12:58 ` Daniel Vetter
2015-09-01 14:11 ` [BXT MIPI PATCH v3 12/14] drm/i915/bxt: Program Backlight PWM frequency Uma Shankar
2015-09-18 13:33 ` Jani Nikula
2015-09-21 10:18 ` Shankar, Uma
2015-09-01 14:11 ` [BXT MIPI PATCH v3 13/14] drm/i915/bxt: Remove DSP CLK_GATE programming for BXT Uma Shankar
2015-09-18 13:38 ` Jani Nikula
2015-10-02 13:02 ` Daniel Vetter
2015-09-01 14:11 ` [BXT MIPI PATCH v3 14/14] drm/i915: Added BXT DSI backlight support Uma Shankar
2015-09-18 13:37 ` Jani Nikula
2015-09-21 10:22 ` Shankar, Uma
2015-09-23 18:00 ` [BXT MIPI PATCH v4 " Uma Shankar
2015-09-24 16:58 ` Ville Syrjälä
2015-09-25 10:15 ` Shankar, Uma
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=87io6uk854.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=shobhit.kumar@intel.com \
--cc=uma.shankar@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.