mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Wesley Cheng <quic_wcheng@quicinc.com>
To: "Amadeusz Sławiński" <amadeuszx.slawinski@linux.intel.com>,
	srinivas.kandagatla@linaro.org, mathias.nyman@intel.com,
	perex@perex.cz, conor+dt@kernel.org, corbet@lwn.net,
	broonie@kernel.org, lgirdwood@gmail.com, krzk+dt@kernel.org,
	Thinh.Nguyen@synopsys.com, bgoswami@quicinc.com, tiwai@suse.com,
	gregkh@linuxfoundation.org, robh@kernel.org
Cc: <linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-sound@vger.kernel.org>, <linux-usb@vger.kernel.org>,
	<linux-arm-msm@vger.kernel.org>, <linux-doc@vger.kernel.org>,
	<alsa-devel@alsa-project.org>
Subject: Re: [PATCH v24 05/34] usb: host: xhci-mem: Cleanup pending secondary event ring events
Date: Tue, 20 Aug 2024 11:18:18 -0700	[thread overview]
Message-ID: <638d5561-4fa0-4e14-a852-9905956445e4@quicinc.com> (raw)
In-Reply-To: <b8e67410-49a0-4ee8-a0a5-4b7ba03483c8@linux.intel.com>

Hi Amadeusz,

On 8/6/2024 7:50 AM, Amadeusz Sławiński wrote:
> On 8/1/2024 3:17 AM, Wesley Cheng wrote:
>> As part of xHCI bus suspend, the XHCI is halted.  However, if there are
>
> XHCI -> xHCI
>
Got it.
>> pending events in the secondary event ring, it is observed that the xHCI
>> controller stops responding to further commands upon host or device
>> initiated bus resume.  Iterate through all pending events and update the
>> dequeue pointer to the beginning of the event ring.
>>
>> Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
>> ---
>>   drivers/usb/host/xhci-mem.c  |  7 ++++++-
>>   drivers/usb/host/xhci-ring.c | 33 ++++++++++++++++++++++++++++++++-
>>   drivers/usb/host/xhci.c      |  2 +-
>>   drivers/usb/host/xhci.h      |  6 ++++++
>>   4 files changed, 45 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
>> index 2ca5937b73f4..60dfc59260d8 100644
>> --- a/drivers/usb/host/xhci-mem.c
>> +++ b/drivers/usb/host/xhci-mem.c
>> @@ -1816,7 +1816,7 @@ xhci_remove_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir)
>>           tmp &= ERST_SIZE_MASK;
>>           writel(tmp, &ir->ir_set->erst_size);
>>   -        xhci_write_64(xhci, ERST_EHB, &ir->ir_set->erst_dequeue);
>> +        xhci_update_erst_dequeue(xhci, ir, true);
>>       }
>>   }
>>   @@ -1859,6 +1859,11 @@ void xhci_remove_secondary_interrupter(struct usb_hcd *hcd, struct xhci_interrup
>>           return;
>>       }
>>   +    /*
>> +     * Cleanup secondary interrupter to ensure there are no pending events.
>> +     * This also updates event ring dequeue pointer back to the start.
>> +     */
>> +    xhci_skip_sec_intr_events(xhci, ir->event_ring, ir);
>>       intr_num = ir->intr_num;
>>         xhci_remove_interrupter(xhci, ir);
>> diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
>> index 80dca780317a..a012ddf94fb5 100644
>> --- a/drivers/usb/host/xhci-ring.c
>> +++ b/drivers/usb/host/xhci-ring.c
>> @@ -3012,7 +3012,7 @@ static int xhci_handle_event_trb(struct xhci_hcd *xhci, struct xhci_interrupter
>>    * - When all events have finished
>>    * - To avoid "Event Ring Full Error" condition
>>    */
>> -static void xhci_update_erst_dequeue(struct xhci_hcd *xhci,
>> +void xhci_update_erst_dequeue(struct xhci_hcd *xhci,
>>                        struct xhci_interrupter *ir,
>>                        bool clear_ehb)
>>   {
>> @@ -3112,6 +3112,37 @@ static int xhci_handle_events(struct xhci_hcd *xhci, struct xhci_interrupter *ir
>>       return 0;
>>   }
>>   +/*
>> + * Move the event ring dequeue pointer to skip events kept in the secondary
>> + * event ring.  This is used to ensure that pending events in the ring are
>> + * acknowledged, so the XHCI HCD can properly enter suspend/resume.  The
>
> XHCI -> xHCI
>
Will fix.
>> + * secondary ring is typically maintained by an external component.
>> + */
>> +void xhci_skip_sec_intr_events(struct xhci_hcd *xhci,
>> +    struct xhci_ring *ring,    struct xhci_interrupter *ir)
>> +{
>> +    union xhci_trb *current_trb;
>> +    u64 erdp_reg;
>> +    dma_addr_t deq;
>> +
>> +    /* disable irq, ack pending interrupt and ack all pending events */
>> +    xhci_disable_interrupter(ir);
>
> That seems like a bit weird place to disable interrupter? Perhaps suspend and resume functions should be updated to handle more interrupters instead?
>
At least in the current implementation that we have, during cases where autosuspend is enabled, we obviously have to ensure that the audio offload path is fully stopped before we can have the HCD suspend the bus.  We don't want to run into a situation where the audio DSP is trying to execute audio transfers over the link while we're suspending.  So in short, the xhci_skip_sec_intr_events() is currently only used for cases where we are cleaning up the secondary interrupter. (due to the stopping of the audio offload session)  This will ensure that if the audio DSP didn't clean up the event ring properly, we'll just skip the pending events, since they will be stale once the audio stream is restarted at a later time.

Thanks

Wesley Cheng


  reply	other threads:[~2024-08-20 18:19 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-01  1:16 [PATCH v24 00/34] Introduce QC USB SND audio offloading support Wesley Cheng
2024-08-01  1:16 ` [PATCH v24 01/34] xhci: add helper to stop endpoint and wait for completion Wesley Cheng
2024-08-01  1:16 ` [PATCH v24 02/34] usb: host: xhci: Repurpose event handler for skipping interrupter events Wesley Cheng
2024-08-01  1:16 ` [PATCH v24 03/34] xhci: sideband: add initial api to register a sideband entity Wesley Cheng
2024-08-06 14:49   ` Amadeusz Sławiński
2024-08-20 18:03     ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 04/34] usb: xhci: Allow for secondary interrupter to set IMOD Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 05/34] usb: host: xhci-mem: Cleanup pending secondary event ring events Wesley Cheng
2024-08-06 14:50   ` Amadeusz Sławiński
2024-08-20 18:18     ` Wesley Cheng [this message]
2024-08-01  1:17 ` [PATCH v24 06/34] usb: host: xhci-mem: Allow for interrupter clients to choose specific index Wesley Cheng
2024-08-06 14:50   ` Amadeusz Sławiński
2024-08-01  1:17 ` [PATCH v24 07/34] usb: host: xhci-plat: Set XHCI max interrupters if property is present Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 08/34] usb: dwc3: Specify maximum number of XHCI interrupters Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 09/34] ASoC: Add SOC USB APIs for adding an USB backend Wesley Cheng
2024-08-01  8:02   ` Pierre-Louis Bossart
2024-08-01 21:43     ` Wesley Cheng
2024-08-02  6:26       ` Pierre-Louis Bossart
2024-08-06 19:52         ` Wesley Cheng
2024-08-16 21:48           ` Wesley Cheng
2024-08-19  6:26             ` Pierre-Louis Bossart
2024-08-13 22:57         ` Wesley Cheng
2024-08-14  9:20           ` Pierre-Louis Bossart
2024-08-01  1:17 ` [PATCH v24 10/34] ASoC: usb: Create SOC USB SND jack kcontrol Wesley Cheng
2024-08-01  8:07   ` Pierre-Louis Bossart
2024-08-01 22:43     ` Wesley Cheng
2024-08-06 14:51       ` Amadeusz Sławiński
2024-08-08  1:24         ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 11/34] ASoC: usb: Fetch ASoC card and pcm device information Wesley Cheng
2024-08-01  8:11   ` Pierre-Louis Bossart
2024-08-01 22:46     ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 12/34] ASoC: doc: Add documentation for SOC USB Wesley Cheng
2024-08-01  8:26   ` Pierre-Louis Bossart
2024-08-01 23:50     ` Wesley Cheng
2024-08-06 14:51   ` Amadeusz Sławiński
2024-08-08  1:23     ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 13/34] ASoC: dt-bindings: Update example for enabling USB offload on SM8250 Wesley Cheng
2024-08-01  2:22   ` Rob Herring (Arm)
2024-08-01  1:17 ` [PATCH v24 14/34] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 15/34] ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp Wesley Cheng
2024-08-01  8:30   ` Pierre-Louis Bossart
2024-08-01  1:17 ` [PATCH v24 16/34] ASoC: qcom: qdsp6: q6afe: Increase APR timeout Wesley Cheng
2024-08-01  8:33   ` Pierre-Louis Bossart
2024-08-01 23:04     ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 17/34] ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6 Wesley Cheng
2024-08-01  8:40   ` Pierre-Louis Bossart
2024-08-01 23:10     ` Wesley Cheng
2024-08-02  6:32       ` Pierre-Louis Bossart
2024-08-07 20:05         ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 18/34] ASoC: qcom: qdsp6: Add headphone jack for offload connection status Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 19/34] ASoC: qcom: qdsp6: Fetch USB offload mapped card and PCM device Wesley Cheng
2024-08-01  8:46   ` Pierre-Louis Bossart
2024-08-01  1:17 ` [PATCH v24 20/34] ALSA: usb-audio: Introduce USB SND platform op callbacks Wesley Cheng
2024-08-01  8:49   ` Pierre-Louis Bossart
2024-08-01  1:17 ` [PATCH v24 21/34] ALSA: usb-audio: Export USB SND APIs for modules Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 22/34] ALSA: usb-audio: Save UAC sample size information Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 23/34] ALSA: usb-audio: Prevent starting of audio stream if in use Wesley Cheng
2024-08-06 14:51   ` Amadeusz Sławiński
2024-08-08  1:19     ` Wesley Cheng
2024-08-08 12:11       ` Amadeusz Sławiński
2024-08-08 12:36         ` Pierre-Louis Bossart
2024-08-08 14:54           ` Amadeusz Sławiński
2024-08-08 19:47             ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 24/34] ALSA: usb-audio: qcom: Add USB QMI definitions Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 25/34] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 26/34] ALSA: usb-audio: qcom: Don't allow USB offload path if PCM device is in use Wesley Cheng
2024-08-01  8:57   ` Pierre-Louis Bossart
2024-08-08  1:03     ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 27/34] ALSA: usb-audio: qcom: Use card and PCM index from QMI request Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 28/34] ALSA: usb-audio: qcom: Populate PCM and USB chip information Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 29/34] ALSA: usb-audio: qcom: Add USB offload route kcontrol Wesley Cheng
2024-08-01  9:02   ` Pierre-Louis Bossart
2024-08-08  1:10     ` Wesley Cheng
2024-08-20  2:33     ` Wesley Cheng
2024-08-20  6:39       ` Pierre-Louis Bossart
2024-08-20 17:37         ` Wesley Cheng
2024-08-20 23:38           ` Wesley Cheng
2024-08-21  7:02             ` Pierre-Louis Bossart
2024-08-21 19:21               ` Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 30/34] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 31/34] ASoC: usb: Rediscover USB SND devices on USB port add Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 32/34] ALSA: usb-audio: Check for support for requested audio format Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 33/34] ASoC: usb: Add PCM format check API for USB backend Wesley Cheng
2024-08-01  1:17 ` [PATCH v24 34/34] ASoC: qcom: qdsp6: Ensure PCM format is supported by USB audio device Wesley Cheng
2024-08-01  9:04   ` Pierre-Louis Bossart
2024-08-01  8:36 ` [PATCH v24 00/34] Introduce QC USB SND audio offloading support Krzysztof Kozlowski
2024-08-01  9:10 ` Pierre-Louis Bossart

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=638d5561-4fa0-4e14-a852-9905956445e4@quicinc.com \
    --to=quic_wcheng@quicinc.com \
    --cc=Thinh.Nguyen@synopsys.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=amadeuszx.slawinski@linux.intel.com \
    --cc=bgoswami@quicinc.com \
    --cc=broonie@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=krzk+dt@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mathias.nyman@intel.com \
    --cc=perex@perex.cz \
    --cc=robh@kernel.org \
    --cc=srinivas.kandagatla@linaro.org \
    --cc=tiwai@suse.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®