Module Name: src Committed By: riastradh Date: Sun Dec 19 12:40:31 UTC 2021
Modified Files: src/sys/external/bsd/drm2/dist/drm/i915/display: intel_dp.c intel_gmbus.c Log Message: i915: Fix some timeout return values in gmbus and dp logic. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_gmbus.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c:1.6 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c:1.5 Sun Dec 19 12:03:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c Sun Dec 19 12:40:31 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_dp.c,v 1.5 2021/12/19 12:03:57 riastradh Exp $ */ +/* $NetBSD: intel_dp.c,v 1.6 2021/12/19 12:40:31 riastradh Exp $ */ /* * Copyright © 2008 Intel Corporation @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_dp.c,v 1.5 2021/12/19 12:03:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_dp.c,v 1.6 2021/12/19 12:40:31 riastradh Exp $"); #include <linux/export.h> #include <linux/i2c.h> @@ -1197,12 +1197,12 @@ intel_dp_aux_wait_done(struct intel_dp * &i915->gmbus_wait_queue, &i915->gmbus_wait_lock, msecs_to_jiffies_timeout(timeout_ms), C); - if (ret < 0) /* Failure: pretend same as done. */ - done = true; - else if (ret == 0) /* Timed out: not done. */ - done = false; - else /* Succeeded (ret > 0): done. */ - done = true; + /* + * ret<0 on error (-ERESTARTSYS, interrupt); ret=0 on + * timeout; ret>0 on success. We care about success + * only. + */ + done = (ret > 0); spin_unlock(&i915->gmbus_wait_lock); } else { done = wait_for_atomic(C, timeout_ms) == 0; Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_gmbus.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_gmbus.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_gmbus.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_gmbus.c:1.3 Sun Dec 19 11:45:01 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_gmbus.c Sun Dec 19 12:40:31 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_gmbus.c,v 1.3 2021/12/19 11:45:01 riastradh Exp $ */ +/* $NetBSD: intel_gmbus.c,v 1.4 2021/12/19 12:40:31 riastradh Exp $ */ /* * Copyright (c) 2006 Dave Airlie <airl...@linux.ie> @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_gmbus.c,v 1.3 2021/12/19 11:45:01 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_gmbus.c,v 1.4 2021/12/19 12:40:31 riastradh Exp $"); #include <linux/export.h> #include <linux/i2c-algo-bit.h> @@ -371,6 +371,21 @@ static int gmbus_wait(struct drm_i915_pr GMBUS2)) & GMBUS_ACTIVE) == 0)); + /* + * After DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL, ret<0 on + * error (-ERESTARTSYS, interrupt), ret=0 on timeout, + * ret>0 on success (time remaining). + * + * We want ret=-ETIMEDOUT on timeout and ret=0 on + * success. + */ + if (ret < 0) { + /* error */ + } else if (ret == 0) { + ret = -ETIMEDOUT; + } else { + ret = 0; + } } I915_WRITE_FW(GMBUS4, 0); @@ -420,6 +435,21 @@ gmbus_wait_idle(struct drm_i915_private ((intel_uncore_read_fw(&dev_priv->uncore, GMBUS2) & GMBUS_ACTIVE) == 0)); + /* + * After DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL, ret<0 on + * error (-ERESTARTSYS, interrupt), ret=0 on timeout, + * ret>0 on success (time remaining). + * + * We want ret=-ETIMEDOUT on timeout and ret=0 on + * success. + */ + if (ret < 0) { + /* error */ + } else if (ret == 0) { + ret = -ETIMEDOUT; + } else { + ret = 0; + } } I915_WRITE_FW(GMBUS4, 0);