From: Vijay Purushothaman <vijay.a.purushothaman@intel.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: Intel Graphics <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 9/9] drm/i915: Enable multi display support in VLV
Date: Thu, 27 Sep 2012 19:04:21 +0530 [thread overview]
Message-ID: <506455DD.8030400@intel.com> (raw)
In-Reply-To: <20120926144010.GM1980@bremse>
On 9/26/2012 8:10 PM, Daniel Vetter wrote:
> On Wed, Sep 26, 2012 at 07:07:38PM +0530, Vijay Purushothaman wrote:
>> From: "Bhat, Gajanan" <gajanan.bhat@intel.com>
>>
>> Clened up DPLL calculations for Valleyview. Moved DPLL register and DPIO
>> programming to vlv_update_pll function. With all the changes multi
>> display (clone, extended desktop) should work for VLV.
>>
>> Signed-off-by: Gajanan Bhat <gajanan.bhat@intel.com>
>
> I guess this patch will look much better once we don't disable the
> vlv_update_pll function in between (and apply my other suggestion to move
> i9xx_update_pll_divisors into the !vlv pll functions).
> -Daniel
I've merged patch 5 and 9 and took care of your suggestions.
Thanks,
Vijay
>
>> ---
>> drivers/gpu/drm/i915/i915_reg.h | 8 +--
>> drivers/gpu/drm/i915/intel_display.c | 105 ++++++++++++++++++----------------
>> 2 files changed, 58 insertions(+), 55 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
>> index d4ed30e..71aa0a7 100644
>> --- a/drivers/gpu/drm/i915/i915_reg.h
>> +++ b/drivers/gpu/drm/i915/i915_reg.h
>> @@ -385,12 +385,8 @@
>>
>> #define DPIO_FASTCLK_DISABLE 0x8100
>>
>> -#define _DPIO_DATA_LANE0 0x0220
>> -#define _DPIO_DATA_LANE1 0x0420
>> -#define _DPIO_DATA_LANE2 0x2620
>> -#define _DPIO_DATA_LANE3 0x2820
>> -#define DPIO_DATA_LANE_A(pipe) _PIPE(pipe, _DPIO_DATA_LANE0, _DPIO_DATA_LANE2)
>> -#define DPIO_DATA_LANE_B(pipe) _PIPE(pipe, _DPIO_DATA_LANE1, _DPIO_DATA_LANE3)
>> +#define DPIO_DATA_CHANNEL1 0x8220
>> +#define DPIO_DATA_CHANNEL2 0x8420
>>
>> /*
>> * Fence registers
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 647e311..e933031 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -4018,10 +4018,10 @@ static void intel_update_lvds(struct drm_crtc *crtc, intel_clock_t *clock,
>> }
>>
>> static void vlv_update_pll(struct drm_crtc *crtc,
>> - struct drm_display_mode *mode,
>> - struct drm_display_mode *adjusted_mode,
>> - intel_clock_t *clock, intel_clock_t *reduced_clock,
>> - int refclk, int num_connectors)
>> + struct drm_display_mode *mode,
>> + struct drm_display_mode *adjusted_mode,
>> + intel_clock_t *clock, intel_clock_t *reduced_clock,
>> + int num_connectors)
>> {
>> struct drm_device *dev = crtc->dev;
>> struct drm_i915_private *dev_priv = dev->dev_private;
>> @@ -4029,9 +4029,19 @@ static void vlv_update_pll(struct drm_crtc *crtc,
>> int pipe = intel_crtc->pipe;
>> u32 dpll, mdiv, pdiv;
>> u32 bestn, bestm1, bestm2, bestp1, bestp2;
>> - bool is_hdmi;
>> + bool is_sdvo;
>> + u32 temp;
>>
>> - is_hdmi = intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI);
>> + is_sdvo = intel_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ||
>> + intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI);
>> +
>> + dpll = DPLL_VGA_MODE_DIS;
>> + dpll |= DPLL_EXT_BUFFER_ENABLE_VLV;
>> + dpll |= DPLL_REFA_CLK_ENABLE_VLV;
>> + dpll |= DPLL_INTEGRATED_CLOCK_VLV;
>> +
>> + I915_WRITE(DPLL(pipe), dpll);
>> + POSTING_READ(DPLL(pipe));
>>
>> bestn = clock->n;
>> bestm1 = clock->m1;
>> @@ -4039,12 +4049,10 @@ static void vlv_update_pll(struct drm_crtc *crtc,
>> bestp1 = clock->p1;
>> bestp2 = clock->p2;
>>
>> - /* Enable DPIO clock input */
>> - dpll = DPLL_EXT_BUFFER_ENABLE_VLV | DPLL_REFA_CLK_ENABLE_VLV |
>> - DPLL_VGA_MODE_DIS | DPLL_INTEGRATED_CLOCK_VLV;
>> - I915_WRITE(DPLL(pipe), dpll);
>> - POSTING_READ(DPLL(pipe));
>> -
>> + /*
>> + * In Valleyview PLL and program lane counter registes are exposed
>> + * through DPIO interface
>> + */
>> mdiv = ((bestm1 << DPIO_M1DIV_SHIFT) | (bestm2 & DPIO_M2DIV_MASK));
>> mdiv |= ((bestp1 << DPIO_P1_SHIFT) | (bestp2 << DPIO_P2_SHIFT));
>> mdiv |= ((bestn << DPIO_N_SHIFT));
>> @@ -4069,21 +4077,47 @@ static void vlv_update_pll(struct drm_crtc *crtc,
>> if (wait_for(((I915_READ(DPLL(pipe)) & DPLL_LOCK_VLV) == DPLL_LOCK_VLV), 1))
>> DRM_ERROR("DPLL %d failed to lock\n", pipe);
>>
>> - if (is_hdmi) {
>> - u32 temp = intel_mode_get_pixel_multiplier(adjusted_mode);
>> + intel_dpio_write(dev_priv, DPIO_FASTCLK_DISABLE, 0x620);
>> +
>> + if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT))
>> + intel_dp_set_m_n(crtc, mode, adjusted_mode);
>> +
>> + I915_WRITE(DPLL(pipe), dpll);
>> +
>> + /* Wait for the clocks to stabilize. */
>> + POSTING_READ(DPLL(pipe));
>> + udelay(150);
>>
>> + temp = 0;
>> + if (is_sdvo) {
>> + temp = intel_mode_get_pixel_multiplier(adjusted_mode);
>> if (temp > 1)
>> temp = (temp - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT;
>> else
>> temp = 0;
>> -
>> - I915_WRITE(DPLL_MD(pipe), temp);
>> - POSTING_READ(DPLL_MD(pipe));
>> }
>> + I915_WRITE(DPLL_MD(pipe), temp);
>> + POSTING_READ(DPLL_MD(pipe));
>>
>> - intel_dpio_write(dev_priv, DPIO_FASTCLK_DISABLE, 0x620);
>> + /* Now program lane control registers */
>> + if(intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)
>> + || intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI))
>> + {
>> + temp = 0x1000C4;
>> + if(pipe == 1)
>> + temp |= (1 << 21);
>> + intel_dpio_write(dev_priv, DPIO_DATA_CHANNEL1, temp);
>> + }
>> + if(intel_pipe_has_type(crtc,INTEL_OUTPUT_EDP))
>> + {
>> + temp = 0x1000C4;
>> + if(pipe == 1)
>> + temp |= (1 << 21);
>> + intel_dpio_write(dev_priv, DPIO_DATA_CHANNEL2, temp);
>> + }
>> }
>>
>> +
>> static void i9xx_update_pll(struct drm_crtc *crtc,
>> struct drm_display_mode *mode,
>> struct drm_display_mode *adjusted_mode,
>> @@ -4096,10 +4130,8 @@ static void i9xx_update_pll(struct drm_crtc *crtc,
>> int pipe = intel_crtc->pipe;
>> u32 dpll;
>> bool is_sdvo;
>> -
>> is_sdvo = intel_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ||
>> intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI);
>> -
>> dpll = DPLL_VGA_MODE_DIS;
>>
>> if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
>> @@ -4117,12 +4149,6 @@ static void i9xx_update_pll(struct drm_crtc *crtc,
>> if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT))
>> dpll |= DPLL_DVO_HIGH_SPEED;
>>
>> - if (IS_VALLEYVIEW(dev)) {
>> - dpll |= DPLL_EXT_BUFFER_ENABLE_VLV;
>> - dpll |= DPLL_REFA_CLK_ENABLE_VLV;
>> - dpll |= DPLL_INTEGRATED_CLOCK_VLV;
>> - }
>> -
>> /* compute bitmask from p1 value */
>> if (IS_PINEVIEW(dev))
>> dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW;
>> @@ -4164,18 +4190,6 @@ static void i9xx_update_pll(struct drm_crtc *crtc,
>> I915_WRITE(DPLL(pipe), dpll & ~DPLL_VCO_ENABLE);
>> POSTING_READ(DPLL(pipe));
>>
>> - /*
>> - * In Valleyview PLL and program lane counter registes are exposed
>> - * through DPIO interface
>> - */
>> - if (IS_VALLEYVIEW(dev)) {
>> - int refclk;
>> - refclk = i9xx_get_refclk(crtc, num_connectors);
>> - vlv_update_pll(crtc, mode, adjusted_mode, clock, NULL, refclk,
>> - num_connectors);
>> - }
>> - udelay(150);
>> -
>> /* The LVDS pin pair needs to be on before the DPLLs are enabled.
>> * This is an exception to the general rule that mode_set doesn't turn
>> * things on.
>> @@ -4192,17 +4206,6 @@ static void i9xx_update_pll(struct drm_crtc *crtc,
>> POSTING_READ(DPLL(pipe));
>> udelay(150);
>>
>> - /* Now program lane control registers for Valleyview */
>> - if (IS_VALLEYVIEW(dev)) {
>> - u32 temp = 0;
>> - temp = intel_dpio_read(dev_priv, DPIO_DATA_LANE_A(pipe));
>> - temp |= (1 << 20);
>> - intel_dpio_write(dev_priv, DPIO_DATA_LANE_A(pipe), temp);
>> - temp = intel_dpio_read(dev_priv, DPIO_DATA_LANE_B(pipe));
>> - temp |= (1 << 20);
>> - intel_dpio_write(dev_priv, DPIO_DATA_LANE_B(pipe), temp);
>> - }
>> -
>> if (INTEL_INFO(dev)->gen >= 4) {
>> u32 temp = 0;
>> if (is_sdvo) {
>> @@ -4365,6 +4368,10 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
>>
>> if (IS_GEN2(dev))
>> i8xx_update_pll(crtc, adjusted_mode, &clock, num_connectors);
>> + else if (IS_VALLEYVIEW(dev))
>> + vlv_update_pll(crtc, mode, adjusted_mode, &clock,
>> + has_reduced_clock ? &reduced_clock : NULL,
>> + num_connectors);
>> else
>> i9xx_update_pll(crtc, mode, adjusted_mode, &clock,
>> has_reduced_clock ? &reduced_clock : NULL,
>> --
>> 1.7.9.5
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
prev parent reply other threads:[~2012-09-27 13:34 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-26 13:37 [PATCH 0/9] Enable all display interfaces in Valleyview Vijay Purushothaman
2012-09-26 13:37 ` [PATCH 1/9] drm/i915: Set aux clk to 100MHz for Valleyview Vijay Purushothaman
2012-09-26 13:37 ` [PATCH 2/9] drm/i915: Fix SDVO IER and status bits " Vijay Purushothaman
2012-09-26 13:37 ` [PATCH 3/9] drm/i915: Add Valleyview lane control definitions Vijay Purushothaman
2012-09-26 13:37 ` [PATCH 4/9] drm/i915: Program correct m n tu register for Valleyview Vijay Purushothaman
2012-09-26 13:37 ` [PATCH 5/9] drm/i915: Fix lanecontrol, vswing, preemp for Valleyview DisplayPort Vijay Purushothaman
2012-09-26 14:24 ` Daniel Vetter
2012-09-27 13:28 ` Vijay Purushothaman
2012-09-26 13:37 ` [PATCH 6/9] drm/i915: Add eDP support for Valleyview Vijay Purushothaman
2012-09-26 14:31 ` Daniel Vetter
2012-09-26 14:49 ` Daniel Vetter
2012-09-27 13:38 ` Vijay Purushothaman
2012-09-27 13:50 ` Daniel Vetter
2012-09-27 7:18 ` Jani Nikula
2012-09-27 13:39 ` Vijay Purushothaman
2012-09-26 13:37 ` [PATCH 7/9] drm/i915: panel power sequencing for VLV eDP Vijay Purushothaman
2012-09-26 14:34 ` Daniel Vetter
2012-09-26 13:37 ` [PATCH 8/9] drm/i915: Reverse min, max vco limits for VLV HDMI Vijay Purushothaman
2012-09-26 14:38 ` Daniel Vetter
2012-09-27 13:32 ` Vijay Purushothaman
2012-09-26 13:37 ` [PATCH 9/9] drm/i915: Enable multi display support in VLV Vijay Purushothaman
2012-09-26 14:40 ` Daniel Vetter
2012-09-27 13:34 ` Vijay Purushothaman [this message]
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=506455DD.8030400@intel.com \
--to=vijay.a.purushothaman@intel.com \
--cc=daniel@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
/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.