Message ID | 20120726123828.GE5326@phenom.ffwll.local (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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
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(-)
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