> Date: Tue, 10 Oct 2017 15:42:26 -0500
> From: joshua stein <j...@openbsd.org>
> 
> On my Kaby Lake laptop, running xbacklight or xrandr causes the
> audio and mouse cursor to pause briefly.  This is because those
> codepaths do DRM operations that have to probe all of the available
> connectors, even disconnected ones.  For HDMI, it does i2c
> operations that have to timeout.
> 
> Reducing the DELAY() calls to 100us avoids this, while still making
> HDMI output work when it's actually connected.
> 
> intel_gmbus_exec appears to be an OpenBSD-specific function.

This will need careful testing on older hardware, especially with
multi-screen desktop setups.

> Index: sys/dev/pci/drm/i915/intel_i2c.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/drm/i915/intel_i2c.c,v
> retrieving revision 1.12
> diff -u -p -u -p -r1.12 intel_i2c.c
> --- sys/dev/pci/drm/i915/intel_i2c.c  30 Sep 2017 07:36:56 -0000      1.12
> +++ sys/dev/pci/drm/i915/intel_i2c.c  10 Oct 2017 20:32:59 -0000
> @@ -231,7 +231,7 @@ intel_gmbus_exec(void *cookie, i2c_op_t 
>                               st = I915_READ(GMBUS2);
>                               if (st & (GMBUS_SATOER | GMBUS_HW_RDY))
>                                       break;
> -                             DELAY(1000);
> +                             DELAY(100);
>                       }
>                       if (st & GMBUS_SATOER) {
>                               bus_err = 1;
> @@ -254,7 +254,7 @@ intel_gmbus_exec(void *cookie, i2c_op_t 
>                               st = I915_READ(GMBUS2);
>                               if (st & (GMBUS_SATOER | GMBUS_HW_RDY))
>                                       break;
> -                             DELAY(1000);
> +                             DELAY(100);
>                       }
>                       if (st & GMBUS_SATOER) {
>                               bus_err = 1;
> @@ -279,7 +279,7 @@ out:
>                               bus_err = 1;
>                       if ((st & GMBUS_ACTIVE) == 0)
>                               break;
> -                     DELAY(1000);
> +                     DELAY(100);
>               }
>               if (st & GMBUS_ACTIVE)
>                       return (ETIMEDOUT);
> 
> 

Reply via email to