From: Jani Nikula <jani.nikula@linux.intel.com>
To: Arun R Murthy <arun.r.murthy@intel.com>, intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH] drm/i915/display/dp: On AUX xfer timeout restart freshly
Date: Thu, 08 Jun 2023 12:08:12 +0300 [thread overview]
Message-ID: <87r0qms4n7.fsf@intel.com> (raw)
In-Reply-To: <20230608082800.509420-1-arun.r.murthy@intel.com>
On Thu, 08 Jun 2023, Arun R Murthy <arun.r.murthy@intel.com> wrote:
> As part of restart on AUX xfer timeout, check for busy status and then
> start sending the data.
Why?
Always answer the question "why" in the commit messages. The commit
message is completely inadequate for the changes.
BR,
Jani.
>
> Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp_aux.c | 50 +++++++++------------
> 1 file changed, 22 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux.c b/drivers/gpu/drm/i915/display/intel_dp_aux.c
> index 197c6e81db14..25090542dd9f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux.c
> @@ -273,30 +273,6 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
> * it using the same AUX CH simultaneously
> */
>
> - /* Try to wait for any previous AUX channel activity */
> - for (try = 0; try < 3; try++) {
> - status = intel_de_read_notrace(i915, ch_ctl);
> - if ((status & DP_AUX_CH_CTL_SEND_BUSY) == 0)
> - break;
> - msleep(1);
> - }
> - /* just trace the final value */
> - trace_i915_reg_rw(false, ch_ctl, status, sizeof(status), true);
> -
> - if (try == 3) {
> - const u32 status = intel_de_read(i915, ch_ctl);
> -
> - if (status != intel_dp->aux_busy_last_status) {
> - drm_WARN(&i915->drm, 1,
> - "%s: not started (status 0x%08x)\n",
> - intel_dp->aux.name, status);
> - intel_dp->aux_busy_last_status = status;
> - }
> -
> - ret = -EBUSY;
> - goto out;
> - }
> -
> /* Only 5 data registers! */
> if (drm_WARN_ON(&i915->drm, send_bytes > 20 || recv_size > 20)) {
> ret = -E2BIG;
> @@ -304,14 +280,31 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
> }
>
> while ((aux_clock_divider = intel_dp->get_aux_clock_divider(intel_dp, clock++))) {
> - u32 send_ctl = intel_dp->get_aux_send_ctl(intel_dp,
> + /* Must try at least 3 times according to DP spec */
> + for (try = 0; try < 5; try++) {
> + u32 send_ctl = intel_dp->get_aux_send_ctl(intel_dp,
> send_bytes,
> aux_clock_divider);
>
> - send_ctl |= aux_send_ctl_flags;
> + send_ctl |= aux_send_ctl_flags;
> +
> + /* Try to wait for any previous AUX channel activity */
> + status = intel_dp_aux_wait_done(intel_dp);
> + /* just trace the final value */
> + trace_i915_reg_rw(false, ch_ctl, status, sizeof(status), true);
> +
> + if (status & DP_AUX_CH_CTL_SEND_BUSY) {
> + drm_WARN(&i915->drm, 1,
> + "%s: not started, previous Tx still in process (status 0x%08x)\n",
> + intel_dp->aux.name, status);
> + intel_dp->aux_busy_last_status = status;
> + if (try > 3) {
> + ret = -EBUSY;
> + goto out;
> + } else
> + continue;
> + }
>
> - /* Must try at least 3 times according to DP spec */
> - for (try = 0; try < 5; try++) {
> /* Load the send data into the aux channel data registers */
> for (i = 0; i < send_bytes; i += 4)
> intel_de_write(i915, ch_data[i >> 2],
> @@ -321,6 +314,7 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
> /* Send the command and wait for it to complete */
> intel_de_write(i915, ch_ctl, send_ctl);
>
> + /* TODO: if typeC then 4.2ms else 800us. For DG2 add 1.5ms for both cases */
> status = intel_dp_aux_wait_done(intel_dp);
>
> /* Clear done status and any errors */
--
Jani Nikula, Intel Open Source Graphics Center
prev parent reply other threads:[~2023-06-08 9:09 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-08 8:28 [Intel-gfx] [PATCH] drm/i915/display/dp: On AUX xfer timeout restart freshly Arun R Murthy
2023-06-08 9:08 ` Jani Nikula [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r0qms4n7.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=arun.r.murthy@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.