[LUCID SRU] request pull i915: fix ironlake edp panel setup (v4)

Manoj Iyer manoj.iyer at canonical.com
Thu Aug 26 21:29:11 UTC 2010


Any idea when this SRU will be reviewed ?


Cheers
--- manjo

On Wed, 11 Aug 2010, Manoj Iyer wrote:

>
> FYI: stable patch is on gkh queue, as per his email.
>
>
> Cheers
> --- manjo
>
> On Wed, 11 Aug 2010, Manoj Iyer wrote:
>
>> 
>> BUG
>> ===
>> http://launchpad.net/bugs/561802
>> 
>> SRU JUSTIFICATION
>> ================
>> During installation, bootup (plymouth) and while inside X, screen remains
>> blank. Switching VTs yields no results (screen remains blank). This patch
>> is required to fix this issue.
>> 
>> TESTING
>> =======
>> The patch was tested by James Ferguson @ canonical on E6510 and E6410 and
>> reported to work. It does introduce any regressions on other systems I
>> tested.
>> 
>> PATCH
>> =====
>> The patch is not readily application from upstream to Lucid, it needs to
>> be back ported. I have already submitted the patch to stable at kernel.org for
>> stable inclusion 3.6.34.y.
>> 
>> The following changes since commit
>> f093f69b09ba908509e031d9578e92b2ce8d3582:
>>   Adam Jackson (1):
>>         drm/i915: Make G4X-style PLL search more permissive
>> 
>> are available in the git repository at:
>> 
>> 
>> git://kernel.ubuntu.com/git/manjo/ubuntu-lucid.git lp561802
>> 
>> Dave Airlie (1):
>>       i915: fix ironlake edp panel setup (v4)
>>
>>  drivers/gpu/drm/i915/intel_dp.c |   27 ++++++++++++++++++++++++---
>>  1 files changed, 24 insertions(+), 3 deletions(-)
>> 
>> From 39d72c68727400af464103d209fe0dcba832b21f Mon Sep 17 00:00:00 2001
>> From: Dave Airlie <airlied at redhat.com>
>> Date: Wed, 30 Jun 2010 11:46:17 +1000
>> Subject: [PATCH] i915: fix ironlake edp panel setup (v4)
>> 
>> The eDP spec claims a 20% overhead for the 8:10 encoding scheme used
>> on the wire. Take this into account when picking the lane/clock speed
>> for the panel.
>> 
>> v3: some panels are out of spec, try our best to deal with them, don't
>> refuse modes on eDP panels, and try the largest allowed settings if
>> all else fails on eDP.
>> v4: fix stupid typo, forgot to git add before amending.
>> 
>> Fixes several reports in bugzilla:
>>
>>       https://bugs.freedesktop.org/show_bug.cgi?id=28070
>> 
>> Signed-off-by: Dave Airlie <airlied at redhat.com>
>> Signed-off-by: Eric Anholt <eric at anholt.net>
>> Signed-off-by: Manoj Iyer <manoj.iyer at canonical.com>
>> 
>> Buglink: http://launchpad.net/bugs/561802
>> 
>> This patch is backported from upstream patch SHAID: 
>> fe27d53e5c597ee5ba5d72a29d517091f244e974
>> ---
>>  drivers/gpu/drm/i915/intel_dp.c |   27 ++++++++++++++++++++++++---
>>  1 files changed, 24 insertions(+), 3 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/i915/intel_dp.c 
>> b/drivers/gpu/drm/i915/intel_dp.c
>> index 6b62762..63ea21e 100644
>> --- a/drivers/gpu/drm/i915/intel_dp.c
>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>> @@ -137,6 +137,12 @@ intel_dp_link_required(struct drm_device *dev,
>>  }
>>
>>  static int
>> +intel_dp_max_data_rate(int max_link_clock, int max_lanes)
>> +{
>> +	return (max_link_clock * max_lanes * 8) / 10;
>> +}
>> +
>> +static int
>>  intel_dp_mode_valid(struct drm_connector *connector,
>>  		    struct drm_display_mode *mode)
>>  {
>> @@ -144,8 +150,11 @@ intel_dp_mode_valid(struct drm_connector *connector,
>>  	int max_link_clock = 
>> intel_dp_link_clock(intel_dp_max_link_bw(intel_output));
>>  	int max_lanes = intel_dp_max_lane_count(intel_output);
>> 
>> -	if (intel_dp_link_required(connector->dev, intel_output, mode->clock)
>> -			> max_link_clock * max_lanes)
>> +	/* only refuse the mode on non eDP since we have seen some wierd eDP 
>> panels
>> +	   which are outside spec tolerances but somehow work by magic */
>> +	if (!IS_eDP(intel_output) &&
>> +	    (intel_dp_link_required(connector->dev, intel_output, 
>> mode->clock)
>> +	     > intel_dp_max_data_rate(max_link_clock, max_lanes)))
>>  		return MODE_CLOCK_HIGH;
>>
>>  	if (mode->clock < 10000)
>> @@ -497,7 +506,7 @@ intel_dp_mode_fixup(struct drm_encoder *encoder, struct 
>> drm_display_mode *mode,
>>
>>  	for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) 
>> {
>>  		for (clock = 0; clock <= max_clock; clock++) {
>> -			int link_avail = intel_dp_link_clock(bws[clock]) * 
>> lane_count;
>> +			int link_avail = 
>> intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count);
>>
>>  			if (intel_dp_link_required(encoder->dev, 
>> intel_output, mode->clock)
>>  					<= link_avail) {
>> @@ -512,6 +521,18 @@ intel_dp_mode_fixup(struct drm_encoder *encoder, 
>> struct drm_display_mode *mode,
>>  			}
>>  		}
>>  	}
>> +
>> +	if (IS_eDP(intel_output)) {
>> +		/* okay we failed just pick the highest */
>> +		dp_priv->lane_count = max_lane_count;
>> +		dp_priv->link_bw = bws[max_clock];
>> +		adjusted_mode->clock = intel_dp_link_clock(dp_priv->link_bw);
>> +		DRM_DEBUG_KMS("Force picking display port link bw %02x lane "
>> +			      "count %d clock %d\n",
>> +			      dp_priv->link_bw, dp_priv->lane_count,
>> +			      adjusted_mode->clock);
>> +		return true;
>> +	}
>>  	return false;
>>  }
>> 
>> -- 
>> 1.7.0.4
>> 
>> 
>> 
>> Cheers
>> --- manjo
>> 
>> -- 
>> kernel-team mailing list
>> kernel-team at lists.ubuntu.com
>> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>> 
>




More information about the kernel-team mailing list