linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mathias Nyman <mathias.nyman@linux.intel.com>
To: Wesley Cheng <quic_wcheng@quicinc.com>,
	srinivas.kandagatla@linaro.org, mathias.nyman@intel.com,
	perex@perex.cz, conor+dt@kernel.org, corbet@lwn.net,
	gregkh@linuxfoundation.org, lgirdwood@gmail.com,
	andersson@kernel.org, krzysztof.kozlowski+dt@linaro.org,
	konrad.dybcio@linaro.org, Thinh.Nguyen@synopsys.com,
	broonie@kernel.org, bgoswami@quicinc.com, tiwai@suse.com,
	robh+dt@kernel.org, agross@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, "Neronin,
	Niklas" <niklas.neronin@intel.com>
Subject: Re: [PATCH v12 04/41] usb: host: xhci-mem: Cleanup pending secondary event ring events
Date: Mon, 29 Jan 2024 17:44:58 +0200	[thread overview]
Message-ID: <44a3d4db-7759-dd93-782a-1efbebfdb22c@linux.intel.com> (raw)
In-Reply-To: <ff0bff8b-f26a-87bd-9762-9f2af98abcca@quicinc.com>

On 26.1.2024 23.13, Wesley Cheng wrote:
> Hi Mathias,
> 
> On 1/16/2024 12:24 PM, Wesley Cheng wrote:
>> Hi Mathias,
>>
>> On 1/15/2024 6:01 AM, Mathias Nyman wrote:
>>> On 10.1.2024 1.42, Wesley Cheng wrote:
>>>> Hi Mathias,
>>>>
>>>> On 1/8/2024 12:51 PM, Wesley Cheng wrote:
>>>>> Hi Mathias,
>>>>>
>>>>> On 1/4/2024 6:48 AM, Mathias Nyman wrote:
>>>>>> On 2.1.2024 23.45, Wesley Cheng wrote:
>>>>>>> As part of xHCI bus suspend, the XHCI is halted.  However, if there are
>>>>>>> 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>
>>>>>> ...
>>>>>>> +/*
>>>>>>> + * 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
>>>>>>> + * 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 *erdp_trb, *current_trb;
>>>>>>> +    u64 erdp_reg;
>>>>>>> +    u32 iman_reg;
>>>>>>> +    dma_addr_t deq;
>>>>>>> +
>>>>>>> +    /* disable irq, ack pending interrupt and ack all pending events */
>>>>>>> +    xhci_disable_interrupter(ir);
>>>>>>> +    iman_reg = readl_relaxed(&ir->ir_set->irq_pending);
>>>>>>> +    if (iman_reg & IMAN_IP)
>>>>>>> +        writel_relaxed(iman_reg, &ir->ir_set->irq_pending);
>>>>>>> +
>>>>>>> +    /* last acked event trb is in erdp reg  */
>>>>>>> +    erdp_reg = xhci_read_64(xhci, &ir->ir_set->erst_dequeue);
>>>>>>> +    deq = (dma_addr_t)(erdp_reg & ERST_PTR_MASK);
>>>>>>> +    if (!deq) {
>>>>>>> +        xhci_err(xhci, "event ring handling not required\n");
>>>>>>> +        return;
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    erdp_trb = current_trb = ir->event_ring->dequeue;
>>>>>>> +    /* read cycle state of the last acked trb to find out CCS */
>>>>>>> +    ring->cycle_state = le32_to_cpu(current_trb->event_cmd.flags) & TRB_CYCLE;
>>>>>>> +
>>>>>>> +    while (1) {
>>>>>>> +        inc_deq(xhci, ir->event_ring);
>>>>>>> +        erdp_trb = ir->event_ring->dequeue;
>>>>>>> +        /* cycle state transition */
>>>>>>> +        if ((le32_to_cpu(erdp_trb->event_cmd.flags) & TRB_CYCLE) !=
>>>>>>> +            ring->cycle_state)
>>>>>>> +            break;
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    xhci_update_erst_dequeue(xhci, ir, current_trb, true);
>>>>>>> +}
>>>>>>
>>>>>> Code above is very similar to the existing event ring processing parts of xhci_irq()
>>>>>> and xhci_handle_event()
>>>>>>
>>>>>> I'll see if I can refactor the existing event ring processing, decouple it from
>>>>>> event handling so that it could be used by primary and secondary interrupters with
>>>>>> handlers, and this case where we just want to clear the event ring.
>>>>>>
>>>>>
>>>>> Thanks, that makes sense.  Will take a look as well.
>>>>>
>>>>
>>>> How about something like the below?  Tested this on my set up and everything looks to be working fine.  Had to add another param to struct xhci_interrupters to tell the XHCI interrupt handler to say if that particular interrupter wants to skip_events (handling).  This way, its something that the class driver utilizing the interrupter will have to tell XHCI sideband.  It would allow the user to determine if they want to use the interrupter to actually handle events or not on the proc running Linux.
>>>>
>>>
>>> Yes, I have something similar.
>>> I'll share it soon, just need to
>>> clean it up a bit fist.
>>>
>>
>> Sure, no worries.  Will test it when its available.  Thanks!
>>
> 
> Was just wondering if you had the time to clean up the changes?  If not, maybe you can provide a patch with whatever you have, and I can try my best to clean it up to your liking?  Thanks!

Sure, got stuck fixing other issues.

Code is not yet cleaned up, commit messages are not ready etc, but current work is in
a fix_eventhandling branch:

git://git.kernel.org/pub/scm/linux/kernel/git/mnyman/xhci.git  fix_eventhandling
https://git.kernel.org/pub/scm/linux/kernel/git/mnyman/xhci.git/log/?h=fix_eventhandling

I was in the middle of figuring out when and where the ip_autoclear and interrupt
moderation values should be set for secondary interrupters

Thanks
Mathias


  reply	other threads:[~2024-01-29 15:43 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-02 21:45 [PATCH v12 00/41] Introduce QC USB SND audio offloading support Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 01/41] xhci: add support to allocate several interrupters Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 02/41] xhci: add helper to stop endpoint and wait for completion Wesley Cheng
2024-01-04 10:54   ` Hillf Danton
2024-01-02 21:45 ` [PATCH v12 03/41] xhci: sideband: add initial api to register a sideband entity Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 04/41] usb: host: xhci-mem: Cleanup pending secondary event ring events Wesley Cheng
2024-01-04 14:48   ` Mathias Nyman
2024-01-08 20:51     ` Wesley Cheng
2024-01-09 23:42       ` Wesley Cheng
2024-01-15 14:01         ` Mathias Nyman
2024-01-16 20:24           ` Wesley Cheng
2024-01-26 21:13             ` Wesley Cheng
2024-01-29 15:44               ` Mathias Nyman [this message]
2024-02-01  2:11                 ` Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 05/41] usb: host: xhci-mem: Allow for interrupter clients to choose specific index Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 06/41] ASoC: Add SOC USB APIs for adding an USB backend Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 07/41] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 08/41] ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 09/41] ASoC: qdsp6: q6afe: Increase APR timeout Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 10/41] ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6 Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 11/41] ALSA: usb-audio: Introduce USB SND platform op callbacks Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 12/41] ALSA: usb-audio: Export USB SND APIs for modules Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 13/41] ALSA: usb-audio: Save UAC sample size information Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 14/41] dt-bindings: usb: xhci: Add num-hc-interrupters definition Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 15/41] dt-bindings: usb: dwc3: Limit " Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 16/41] usb: dwc3: Specify maximum number of XHCI interrupters Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 17/41] usb: host: xhci-plat: Set XHCI max interrupters if property is present Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 18/41] ALSA: usb-audio: qcom: Add USB QMI definitions Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 19/41] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 20/41] ALSA: usb-audio: Check for support for requested audio format Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 21/41] ASoC: usb: Add PCM format check API for USB backend Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 22/41] ASoC: qcom: qdsp6: Ensure PCM format is supported by USB audio device Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 23/41] ALSA: usb-audio: Prevent starting of audio stream if in use Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 24/41] ALSA: usb-audio: Do not allow USB offload path if PCM device is " Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 25/41] ASoC: dt-bindings: Add Q6USB backend Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 26/41] ASoC: dt-bindings: Update example for enabling USB offload on SM8250 Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 27/41] ALSA: usb-audio: qcom: Populate PCM and USB chip information Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 28/41] ASoC: qcom: qdsp6: Add support to track available USB PCM devices Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 29/41] ASoC: Introduce SND kcontrols to select sound card and PCM device Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 30/41] ASoC: qcom: qdsp6: Add SOC USB offload select get/put callbacks Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 31/41] ASoC: Add SND kcontrol for fetching USB offload status Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 32/41] ASoC: qcom: qdsp6: Add PCM ops to track current state Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 33/41] ASoC: usb: Create SOC USB SND jack kcontrol Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 34/41] ASoC: qcom: qdsp6: Add headphone jack for offload connection status Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 35/41] ASoC: usb: Fetch ASoC sound card information Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 36/41] ALSA: usb-audio: mixer: Add USB offloading mixer control Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 37/41] ALSA: usb-audio: qcom: Use card and PCM index from QMI request Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 38/41] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 39/41] ASoC: usb: Rediscover USB SND devices on USB port add Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 40/41] ASoC: qcom: Populate SoC components string Wesley Cheng
2024-01-02 21:45 ` [PATCH v12 41/41] ASoC: doc: Add documentation for SOC USB Wesley Cheng
2024-01-06  8:54 ` [PATCH v12 00/41] Introduce QC USB SND audio offloading support Hillf Danton
2024-01-08 19:19   ` Wesley Cheng

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=44a3d4db-7759-dd93-782a-1efbebfdb22c@linux.intel.com \
    --to=mathias.nyman@linux.intel.com \
    --cc=Thinh.Nguyen@synopsys.com \
    --cc=agross@kernel.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=andersson@kernel.org \
    --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=konrad.dybcio@linaro.org \
    --cc=krzysztof.kozlowski+dt@linaro.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=niklas.neronin@intel.com \
    --cc=perex@perex.cz \
    --cc=quic_wcheng@quicinc.com \
    --cc=robh+dt@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;
as well as URLs for NNTP newsgroup(s).