diff mbox

[08/14] drm/i915: fix Haswell DP M/N registers

Message ID 1350327102-4463-9-git-send-email-przanoni@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Paulo Zanoni Oct. 15, 2012, 6:51 p.m. UTC
From: Paulo Zanoni <paulo.r.zanoni@intel.com>

We have to write the correct values inside intel_dp_set_m_n and then
prevent these values from being overwritten later.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 3 ++-
 drivers/gpu/drm/i915/intel_dp.c      | 7 ++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

Comments

Adam Jackson Oct. 15, 2012, 8:29 p.m. UTC | #1
On 10/15/12 2:51 PM, Paulo Zanoni wrote:

> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index f48986b9..ba40aa7 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -5356,7 +5356,8 @@ static int haswell_crtc_mode_set(struct drm_crtc *crtc,
>
>   	intel_set_pipe_timings(intel_crtc, mode, adjusted_mode);
>
> -	ironlake_set_m_n(crtc, mode, adjusted_mode);
> +	if (!(is_dp && !is_cpu_edp))
> +		ironlake_set_m_n(crtc, mode, adjusted_mode);

The double-negation here hurts my brain.  I think this would be clearer 
and equivalent phrased positively:

     if (!is_dp || is_pch_edp)
         ironlake_set_m_n(crtc, mode, adjusted_mode);

- ajax
Daniel Vetter Oct. 15, 2012, 8:39 p.m. UTC | #2
On Mon, Oct 15, 2012 at 10:29 PM, Adam Jackson <ajax@redhat.com> wrote:
> On 10/15/12 2:51 PM, Paulo Zanoni wrote:
>
>> diff --git a/drivers/gpu/drm/i915/intel_display.c
>> b/drivers/gpu/drm/i915/intel_display.c
>> index f48986b9..ba40aa7 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -5356,7 +5356,8 @@ static int haswell_crtc_mode_set(struct drm_crtc
>> *crtc,
>>
>>         intel_set_pipe_timings(intel_crtc, mode, adjusted_mode);
>>
>> -       ironlake_set_m_n(crtc, mode, adjusted_mode);
>> +       if (!(is_dp && !is_cpu_edp))
>> +               ironlake_set_m_n(crtc, mode, adjusted_mode);
>
>
> The double-negation here hurts my brain.  I think this would be clearer and
> equivalent phrased positively:
>
>     if (!is_dp || is_pch_edp)
>         ironlake_set_m_n(crtc, mode, adjusted_mode);

pch_edp doesn't really exist (since nothing much is still on the pch,
only the vga port is left), so not really clearer. I suspect we
actually want a !is_dp check in there - since the eDP enabling is
later in the series all edp checks don't really matter anyway.
-Daniel
Paulo Zanoni Oct. 15, 2012, 8:45 p.m. UTC | #3
Hi

2012/10/15 Daniel Vetter <daniel@ffwll.ch>:
> On Mon, Oct 15, 2012 at 10:29 PM, Adam Jackson <ajax@redhat.com> wrote:
>> On 10/15/12 2:51 PM, Paulo Zanoni wrote:
>>
>>> diff --git a/drivers/gpu/drm/i915/intel_display.c
>>> b/drivers/gpu/drm/i915/intel_display.c
>>> index f48986b9..ba40aa7 100644
>>> --- a/drivers/gpu/drm/i915/intel_display.c
>>> +++ b/drivers/gpu/drm/i915/intel_display.c
>>> @@ -5356,7 +5356,8 @@ static int haswell_crtc_mode_set(struct drm_crtc
>>> *crtc,
>>>
>>>         intel_set_pipe_timings(intel_crtc, mode, adjusted_mode);
>>>
>>> -       ironlake_set_m_n(crtc, mode, adjusted_mode);
>>> +       if (!(is_dp && !is_cpu_edp))
>>> +               ironlake_set_m_n(crtc, mode, adjusted_mode);
>>
>>
>> The double-negation here hurts my brain.  I think this would be clearer and
>> equivalent phrased positively:
>>
>>     if (!is_dp || is_pch_edp)
>>         ironlake_set_m_n(crtc, mode, adjusted_mode);
>
> pch_edp doesn't really exist (since nothing much is still on the pch,
> only the vga port is left),

I believe Adam wanted to say "if (!is_dp || is_cpu_edp)", there's no
pch_edp check :)

The check is in its current form because a few lines above there's a
"if (is_dp && !is_cpu_edp)", so this one just added a negation to the
previous test. I also agree that double-negation hurts brains, so no
problem in changing that.

> so not really clearer. I suspect we
> actually want a !is_dp check in there - since the eDP enabling is
> later in the series all edp checks don't really matter anyway.
> -Daniel
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index f48986b9..ba40aa7 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5356,7 +5356,8 @@  static int haswell_crtc_mode_set(struct drm_crtc *crtc,
 
 	intel_set_pipe_timings(intel_crtc, mode, adjusted_mode);
 
-	ironlake_set_m_n(crtc, mode, adjusted_mode);
+	if (!(is_dp && !is_cpu_edp))
+		ironlake_set_m_n(crtc, mode, adjusted_mode);
 
 	if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev))
 		if (is_cpu_edp)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 52b5453..22702df 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -793,7 +793,12 @@  intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode,
 	intel_dp_compute_m_n(intel_crtc->bpp, lane_count,
 			     mode->clock, adjusted_mode->clock, &m_n);
 
-	if (HAS_PCH_SPLIT(dev)) {
+	if (IS_HASWELL(dev)) {
+		I915_WRITE(PIPE_DATA_M1(pipe), TU_SIZE(m_n.tu) | m_n.gmch_m);
+		I915_WRITE(PIPE_DATA_N1(pipe), m_n.gmch_n);
+		I915_WRITE(PIPE_LINK_M1(pipe), m_n.link_m);
+		I915_WRITE(PIPE_LINK_N1(pipe), m_n.link_n);
+	} else if (HAS_PCH_SPLIT(dev)) {
 		I915_WRITE(TRANSDATA_M1(pipe), TU_SIZE(m_n.tu) | m_n.gmch_m);
 		I915_WRITE(TRANSDATA_N1(pipe), m_n.gmch_n);
 		I915_WRITE(TRANSDPLINK_M1(pipe), m_n.link_m);