All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wesley Cheng <quic_wcheng@quicinc.com>
To: <srinivas.kandagatla@linaro.org>, <mathias.nyman@intel.com>,
	<perex@perex.cz>, <conor+dt@kernel.org>, <corbet@lwn.net>,
	<lgirdwood@gmail.com>, <andersson@kernel.org>,
	<krzysztof.kozlowski+dt@linaro.org>, <gregkh@linuxfoundation.org>,
	<Thinh.Nguyen@synopsys.com>, <broonie@kernel.org>,
	<bgoswami@quicinc.com>, <tiwai@suse.com>, <robh+dt@kernel.org>,
	<konrad.dybcio@linaro.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>,
	Wesley Cheng <quic_wcheng@quicinc.com>
Subject: [PATCH v16 17/50] usb: host: xhci-mem: Allow for interrupter clients to choose specific index
Date: Thu, 15 Feb 2024 19:58:50 -0800	[thread overview]
Message-ID: <20240216035923.23392-18-quic_wcheng@quicinc.com> (raw)
In-Reply-To: <20240216035923.23392-1-quic_wcheng@quicinc.com>

Some clients may operate only on a specific XHCI interrupter instance.
Allow for the associated class driver to request for the interrupter that
it requires.

Change-Id: I7545cbd48b735bebc4557cfdb235bf5fe446dfcf
Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
---
 drivers/usb/host/xhci-mem.c       | 30 ++++++++++++++++--------------
 drivers/usb/host/xhci-sideband.c  |  4 ++--
 drivers/usb/host/xhci.h           |  2 +-
 include/linux/usb/xhci-sideband.h |  2 +-
 4 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index e4c13f056c1a..ae28dac7a747 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -2360,7 +2360,7 @@ xhci_add_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir,
 }
 
 struct xhci_interrupter *
-xhci_create_secondary_interrupter(struct usb_hcd *hcd, int num_seg)
+xhci_create_secondary_interrupter(struct usb_hcd *hcd, int num_seg, int intr_num)
 {
 	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
 	struct xhci_interrupter *ir;
@@ -2375,28 +2375,30 @@ xhci_create_secondary_interrupter(struct usb_hcd *hcd, int num_seg)
 		return NULL;
 
 	spin_lock_irq(&xhci->lock);
-
-	/* Find available secondary interrupter, interrupter 0 is reserved for primary */
+	/* Find available secondary interrupter, interrupter 0 is reserverd for primary */
 	for (i = 1; i < xhci->max_interrupters; i++) {
-		if (xhci->interrupters[i] == NULL) {
-			err = xhci_add_interrupter(xhci, ir, i);
-			break;
+		if ((intr_num > 0 && i == intr_num) || intr_num <= 0) {
+			if (xhci->interrupters[i] == NULL) {
+				err = xhci_add_interrupter(xhci, ir, i);
+				if (err) {
+					spin_unlock_irq(&xhci->lock);
+					goto free_ir;
+				}
+				break;
+			}
 		}
 	}
-
 	spin_unlock_irq(&xhci->lock);
 
-	if (err) {
-		xhci_warn(xhci, "Failed to add secondary interrupter, max interrupters %d\n",
-			  xhci->max_interrupters);
-		xhci_free_interrupter(xhci, ir);
-		return NULL;
-	}
-
 	xhci_dbg(xhci, "Add secondary interrupter %d, max interrupters %d\n",
 		 i, xhci->max_interrupters);
 
 	return ir;
+
+free_ir:
+	xhci_free_interrupter(xhci, ir);
+
+	return NULL;
 }
 EXPORT_SYMBOL_GPL(xhci_create_secondary_interrupter);
 
diff --git a/drivers/usb/host/xhci-sideband.c b/drivers/usb/host/xhci-sideband.c
index 504a6f1586b5..3acbf23095e9 100644
--- a/drivers/usb/host/xhci-sideband.c
+++ b/drivers/usb/host/xhci-sideband.c
@@ -278,7 +278,7 @@ EXPORT_SYMBOL_GPL(xhci_sideband_enable_interrupt);
  */
 int
 xhci_sideband_create_interrupter(struct xhci_sideband *sb, int num_seg,
-				 bool ip_autoclear)
+				 int intr_num, bool ip_autoclear)
 {
 	int ret = 0;
 
@@ -292,7 +292,7 @@ xhci_sideband_create_interrupter(struct xhci_sideband *sb, int num_seg,
 	}
 
 	sb->ir = xhci_create_secondary_interrupter(xhci_to_hcd(sb->xhci),
-			num_seg);
+			num_seg, intr_num);
 	if (!sb->ir) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index 92ff1cf23556..dc5f472f5501 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1837,7 +1837,7 @@ struct xhci_container_ctx *xhci_alloc_container_ctx(struct xhci_hcd *xhci,
 void xhci_free_container_ctx(struct xhci_hcd *xhci,
 		struct xhci_container_ctx *ctx);
 struct xhci_interrupter *
-xhci_create_secondary_interrupter(struct usb_hcd *hcd, int num_seg);
+xhci_create_secondary_interrupter(struct usb_hcd *hcd, int num_seg, int intr_num);
 void xhci_remove_secondary_interrupter(struct usb_hcd
 				       *hcd, struct xhci_interrupter *ir);
 void xhci_skip_sec_intr_events(struct xhci_hcd *xhci,
diff --git a/include/linux/usb/xhci-sideband.h b/include/linux/usb/xhci-sideband.h
index a749ae307ba7..1026502739c5 100644
--- a/include/linux/usb/xhci-sideband.h
+++ b/include/linux/usb/xhci-sideband.h
@@ -58,7 +58,7 @@ int xhci_sideband_enable_interrupt(struct xhci_sideband *sb, u32 imod_interval);
 
 int
 xhci_sideband_create_interrupter(struct xhci_sideband *sb, int num_seg,
-				 bool ip_autoclear);
+				 int intr_num, bool ip_autoclear);
 
 void
 xhci_sideband_remove_interrupter(struct xhci_sideband *sb);

  parent reply	other threads:[~2024-02-16  4:00 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-16  3:58 [PATCH v16 00/50] Introduce QC USB SND audio offloading support Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 01/50] xhci: Add interrupt pending autoclear flag to each interrupter Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 02/50] xhci: Add helper to set an interrupters interrupt moderation interval Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 03/50] xhci: make isoc_bei_interval variable interrupter specific Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 04/50] xhci: remove unnecessary event_ring_deq parameter from xhci_handle_event() Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 05/50] xhci: update event ring dequeue pointer position to controller correctly Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 06/50] xhci: move event processing for one interrupter to a separate function Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 07/50] xhci: add helper that checks for unhandled events on a event ring Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 08/50] xhci: Don't check if the event ring is valid before every event TRB Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 09/50] xhci: Decouple handling an event from checking for unhandled events Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 10/50] xhci: add helper to stop endpoint and wait for completion Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 11/50] usb: host: xhci: Export enable and disable interrupter APIs Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 12/50] usb: host: xhci: Repurpose event handler for skipping interrupter events Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 13/50] xhci: export XHCI IMOD setting helper for interrupters Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 14/50] xhci: sideband: add initial api to register a sideband entity Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 15/50] usb: host: xhci-sideband: Expose a sideband interrupter enable API Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 16/50] usb: host: xhci-mem: Cleanup pending secondary event ring events Wesley Cheng
2024-02-16  3:58 ` Wesley Cheng [this message]
2024-02-16  3:58 ` [PATCH v16 18/50] ASoC: Add SOC USB APIs for adding an USB backend Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 19/50] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 20/50] ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 21/50] ASoC: qdsp6: q6afe: Increase APR timeout Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 22/50] ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6 Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 23/50] ALSA: usb-audio: Introduce USB SND platform op callbacks Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 24/50] ALSA: usb-audio: Export USB SND APIs for modules Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 25/50] ALSA: usb-audio: Save UAC sample size information Wesley Cheng
2024-02-16  3:58 ` [PATCH v16 26/50] usb: dwc3: Specify maximum number of XHCI interrupters Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 27/50] usb: host: xhci-plat: Set XHCI max interrupters if property is present Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 28/50] ALSA: usb-audio: qcom: Add USB QMI definitions Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 29/50] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 30/50] ALSA: usb-audio: Check for support for requested audio format Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 31/50] ASoC: usb: Add PCM format check API for USB backend Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 32/50] ASoC: qcom: qdsp6: Ensure PCM format is supported by USB audio device Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 33/50] ALSA: usb-audio: Prevent starting of audio stream if in use Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 34/50] ALSA: usb-audio: Do not allow USB offload path if PCM device is " Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 35/50] ASoC: dt-bindings: Add Q6USB backend Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 36/50] ASoC: dt-bindings: Update example for enabling USB offload on SM8250 Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 37/50] ALSA: usb-audio: qcom: Populate PCM and USB chip information Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 38/50] ASoC: qcom: qdsp6: Add support to track available USB PCM devices Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 39/50] ASoC: Introduce SND kcontrols to select sound card and PCM device Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 40/50] ASoC: qcom: qdsp6: Add SOC USB offload select get/put callbacks Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 41/50] ASoC: Introduce SND kcontrols to track USB offloading state Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 42/50] ASoC: qcom: qdsp6: Add PCM ops to track current state Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 43/50] ASoC: usb: Create SOC USB SND jack kcontrol Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 44/50] ASoC: qcom: qdsp6: Add headphone jack for offload connection status Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 45/50] ASoC: usb: Fetch ASoC sound card information Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 46/50] ALSA: usb-audio: Add USB offloading capable kcontrol Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 47/50] ALSA: usb-audio: qcom: Use card and PCM index from QMI request Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 48/50] ASoC: usb: Rediscover USB SND devices on USB port add Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 49/50] ASoC: qcom: Populate SoC components string Wesley Cheng
2024-02-16  3:59 ` [PATCH v16 50/50] ASoC: doc: Add documentation for SOC USB Wesley Cheng
2024-02-16 23:36 ` [PATCH v16 00/50] Introduce QC USB SND audio offloading support 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=20240216035923.23392-18-quic_wcheng@quicinc.com \
    --to=quic_wcheng@quicinc.com \
    --cc=Thinh.Nguyen@synopsys.com \
    --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=perex@perex.cz \
    --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 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.