[REGRESSION,KMS,INTEL] Wrong resolution in console and XWindow
diff mbox

Message ID 20120726123828.GE5326@phenom.ffwll.local
State New, archived
Headers show

Commit Message

Daniel Vetter July 26, 2012, 12:38 p.m. UTC
On Wed, Jul 25, 2012 at 01:55:59PM +0200, Daniel Vetter wrote:
> On Wed, Jul 25, 2012 at 12:57 PM, Maciej Rutecki
> <maciej.rutecki@gmail.com> wrote:
> > On ?roda, 25 lipca 2012 o 11:29:28 Daniel Vetter wrote:
> >> On Wed, Jul 25, 2012 at 10:54:25AM +0200, Maciej Rutecki wrote:
> >> > On ?roda, 25 lipca 2012 o 10:29:26 Daniel Vetter wrote:
> >> > > On Wed, Jul 25, 2012 at 10:20:47AM +0200, Maciej Rutecki wrote:
> >> > > > Last known good: 3.4.4
> >> > > > First bad: 3.5.0
> >> > > >
> >> > > > When booting 3.5.0 resolution (in console, and after in KDE) is set
> >> > > > to 1024x768 (60Hz). In 3.4.4 was correct: 1440x900 (60Hz).
> >> > >
> >> > > Can you please attach the output of xrandr --verbose for both kernels?
> >> > > Also, please boot with drm.debug=0xe added to your kernel cmdline and
> >> > > grab the dmesg (again for both kernels).
> >> >
> >> > Thanks for the ansfer.
> >> >
> >> > Here xrandr and dmesg outputs for 3.4.4 and 3.5.0
> >> >
> >> > http://mrutecki.pl/download/kernel/3.5/swinka/debug/
> >>
> >> Can you please test this quick hack:
> >>
> >>
> >> diff --git a/drivers/gpu/drm/i915/intel_i2c.c
> >> b/drivers/gpu/drm/i915/intel_i2c.c index 1991a44..abe1611 100644
> >> --- a/drivers/gpu/drm/i915/intel_i2c.c
> >> +++ b/drivers/gpu/drm/i915/intel_i2c.c
> >> @@ -405,7 +405,7 @@ clear_err:
> >>        * timing out seems to happen when there _is_ a ddc chip present, but
> >>        * it's slow responding and only answers on the 2nd retry.
> >>        */
> >> -     ret = -ENXIO;
> >> +     ret = 0;
> >>       if (wait_for((I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0,
> >>                    10)) {
> >>               DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n",
> >>
> >>
> >> Thanks, Daniel
> >
> > Still the same.
> 
> Hm, can you attach the dmesg again (with drm.debug=0xe)? If I haven't
> botched up something, we should now retry at least the ddc transfer
> ...

Also, another little snippet for you to test. Fyi I'll be on vacation next
week, so final patch (this one here should really work) might take a notch
longer.

Yours, Daniel
--
Mail: daniel@ffwll.ch
Mobile: +41 (0)79 365 57 48

Comments

Maciej Rutecki July 27, 2012, 11:46 a.m. UTC | #1
On czwartek, 26 lipca 2012 o 14:38:28 Daniel Vetter wrote:
> On Wed, Jul 25, 2012 at 01:55:59PM +0200, Daniel Vetter wrote:
> > On Wed, Jul 25, 2012 at 12:57 PM, Maciej Rutecki
> > 
> > <maciej.rutecki@gmail.com> wrote:
> > > On ?roda, 25 lipca 2012 o 11:29:28 Daniel Vetter wrote:
> > >> On Wed, Jul 25, 2012 at 10:54:25AM +0200, Maciej Rutecki wrote:
> > >> > On ?roda, 25 lipca 2012 o 10:29:26 Daniel Vetter wrote:
> > >> > > On Wed, Jul 25, 2012 at 10:20:47AM +0200, Maciej Rutecki wrote:
> > >> > > > Last known good: 3.4.4
> > >> > > > First bad: 3.5.0
> > >> > > > 
> > >> > > > When booting 3.5.0 resolution (in console, and after in KDE) is
> > >> > > > set to 1024x768 (60Hz). In 3.4.4 was correct: 1440x900 (60Hz).
> > >> > > 
> > >> > > Can you please attach the output of xrandr --verbose for both
> > >> > > kernels? Also, please boot with drm.debug=0xe added to your
> > >> > > kernel cmdline and grab the dmesg (again for both kernels).
> > >> > 
> > >> > Thanks for the ansfer.
> > >> > 
> > >> > Here xrandr and dmesg outputs for 3.4.4 and 3.5.0
> > >> > 
> > >> > http://mrutecki.pl/download/kernel/3.5/swinka/debug/
> > >> 
> > >> Can you please test this quick hack:
> > >> 
> > >> 
> > >> diff --git a/drivers/gpu/drm/i915/intel_i2c.c
> > >> b/drivers/gpu/drm/i915/intel_i2c.c index 1991a44..abe1611 100644
> > >> --- a/drivers/gpu/drm/i915/intel_i2c.c
> > >> +++ b/drivers/gpu/drm/i915/intel_i2c.c
> > >> 
> > >> @@ -405,7 +405,7 @@ clear_err:
> > >>        * timing out seems to happen when there _is_ a ddc chip
> > >>        present, but * it's slow responding and only answers on the
> > >>        2nd retry. */
> > >> 
> > >> -     ret = -ENXIO;
> > >> +     ret = 0;
> > >> 
> > >>       if (wait_for((I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) ==
> > >>       0,
> > >>       
> > >>                    10)) {
> > >>               
> > >>               DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n",
> > >> 
> > >> Thanks, Daniel
> > > 
> > > Still the same.
> > 
> > Hm, can you attach the dmesg again (with drm.debug=0xe)? If I haven't
> > botched up something, we should now retry at least the ddc transfer
> > ...
> 
> Also, another little snippet for you to test. Fyi I'll be on vacation next
> week, so final patch (this one here should really work) might take a notch
> longer.
> 
> Yours, Daniel
> --
> diff --git a/drivers/gpu/drm/i915/intel_crt.c
> b/drivers/gpu/drm/i915/intel_crt.c index bc5e2c9..85eca1c 100644
> --- a/drivers/gpu/drm/i915/intel_crt.c
> +++ b/drivers/gpu/drm/i915/intel_crt.c
> @@ -338,6 +338,7 @@ static bool intel_crt_detect_ddc(struct drm_connector
> *connector) BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG);
> 
>  	i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
> +	intel_gmbus_force_bit(i2c, true);
>  	edid = drm_get_edid(connector, i2c);
> 
>  	if (edid) {
> @@ -546,12 +547,14 @@ static int intel_crt_get_modes(struct drm_connector
> *connector) struct i2c_adapter *i2c;
> 
>  	i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
> +	intel_gmbus_force_bit(i2c, true);
>  	ret = intel_ddc_get_modes(connector, i2c);
>  	if (ret || !IS_G4X(dev))
>  		return ret;
> 
>  	/* Try to probe digital port for output in DVI-I -> VGA mode. */
>  	i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB);
> +	intel_gmbus_force_bit(i2c, true);
>  	return intel_ddc_get_modes(connector, i2c);
>  }

I have little problem with the patch:
$ patch -p1 < /tmp/latka.patch 
patching file drivers/gpu/drm/i915/intel_crt.c
Hunk #1 FAILED at 338.
patch unexpectedly ends in middle of line
Hunk #2 succeeded at 498 with fuzz 2 (offset -48 lines).
1 out of 2 hunks FAILED -- saving rejects to file 
drivers/gpu/drm/i915/intel_crt.c.rej

But I add "intel_gmbus_force_bit(i2c, true);" manually and now resolution is 
OK. Thanks for help.

PS. I also will be in vacation between 4-19 August, so my test may take 
longer.

Regards
Jani Nikula Aug. 13, 2012, 10:22 a.m. UTC | #2
Alex, Maciej, please test the following to see if it fixes the issue
[1], thanks.

BR,
Jani.


[1] https://bugzilla.kernel.org/show_bug.cgi?id=45881

Jani Nikula (2):
  drm/i915: extract connector update from intel_ddc_get_modes() for
    reuse
  drm/i915: fall back to bit-banging if GMBUS fails in CRT EDID reads

 drivers/gpu/drm/i915/intel_crt.c   |   36 +++++++++++++++++++++++++++++++++---
 drivers/gpu/drm/i915/intel_drv.h   |    2 ++
 drivers/gpu/drm/i915/intel_modes.c |   31 ++++++++++++++++++++++---------
 3 files changed, 57 insertions(+), 12 deletions(-)

Patch
diff mbox

diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index bc5e2c9..85eca1c 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -338,6 +338,7 @@  static bool intel_crt_detect_ddc(struct drm_connector *connector)
 	BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG);
 
 	i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
+	intel_gmbus_force_bit(i2c, true);
 	edid = drm_get_edid(connector, i2c);
 
 	if (edid) {
@@ -546,12 +547,14 @@  static int intel_crt_get_modes(struct drm_connector *connector)
 	struct i2c_adapter *i2c;
 
 	i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
+	intel_gmbus_force_bit(i2c, true);
 	ret = intel_ddc_get_modes(connector, i2c);
 	if (ret || !IS_G4X(dev))
 		return ret;
 
 	/* Try to probe digital port for output in DVI-I -> VGA mode. */
 	i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB);
+	intel_gmbus_force_bit(i2c, true);
 	return intel_ddc_get_modes(connector, i2c);
 }
-- 
Daniel Vetter