* [PATCH v2] usb: dwc3: Update nominal max votes for qcom usb
@ 2026-11-05 10:02 Akash Kumar
2026-11-05 15:41 ` Konrad Dybcio
0 siblings, 1 reply; 3+ messages in thread
From: Akash Kumar @ 2026-11-05 10:02 UTC (permalink / raw)
To: Greg Kroah-Hartman, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Dmitry Baryshkov, Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, linux-kernel, linux-arm-msm, devicetree
Increase the nominal max USB memory bandwidth vote to let DDR scale
higher within its nominal corner, fixing glitches seen during
simultaneous USB audio use cases.
USB_MEMORY_PEAK_SS_BW is raised from 2500 MB/s to 4500 MB/s (+2000
MB/s, ~1.8x). This ICC vote does not by itself determine DDR
frequency; the vote-to-frequency mapping is platform-specific and
comes from each target's interconnect/OPP table. On the tested
targets, the old vote kept DDR pinned at 1 GHz within the nominal
corner, even though DDR can run at 1.5 GHz (+50%) within the same
corner. At 1 GHz, glitches were observed during multiple concurrent
USB audio use cases.
Tested internally on RB3, RB4, RB8, Shikra, and other KLM targets.
With the updated vote, DDR is allowed to run at the higher nominal
frequency, and the following were measured (not merely projected):
- USB memory throughput: 125 MB/s -> 145 MB/s (+16%)
- RTD-USBC audio latency: 17.9 ms -> 16.6 ms (-7.3%)
RTD-USBC is the round-trip audio latency measured over a USB-C audio
path; lower is better. Note the +50% DDR frequency headroom does not
map linearly to the +16% throughput gain, since throughput is also
bounded by other factors along the USB/DDR path; the frequency
increase is necessary but not sufficient to explain the full gain on
its own.
Signed-off-by: Akash Kumar <akash.kumar@oss.qualcomm.com>
---
v2: Added Details of targets Tested.
Added details for usb vote.
Added KPI Details.
Dropped USB AVG BW vote change which is not needed.
Link to v1: https://lore.kernel.org/all/20260611081831.2743464-1-akash.kumar@oss.qualcomm.com/
---
drivers/usb/dwc3/dwc3-qcom.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
index ac68b4218b56..3a19385969dc 100644
--- a/drivers/usb/dwc3/dwc3-qcom.c
+++ b/drivers/usb/dwc3/dwc3-qcom.c
@@ -46,7 +46,7 @@
#define USB_MEMORY_AVG_HS_BW MBps_to_icc(240)
#define USB_MEMORY_PEAK_HS_BW MBps_to_icc(700)
#define USB_MEMORY_AVG_SS_BW MBps_to_icc(1000)
-#define USB_MEMORY_PEAK_SS_BW MBps_to_icc(2500)
+#define USB_MEMORY_PEAK_SS_BW MBps_to_icc(4500)
#define APPS_USB_AVG_BW 0
#define APPS_USB_PEAK_BW MBps_to_icc(40)
--
2.43.0
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v2] usb: dwc3: Update nominal max votes for qcom usb
2026-11-05 10:02 [PATCH v2] usb: dwc3: Update nominal max votes for qcom usb Akash Kumar
@ 2026-11-05 15:41 ` Konrad Dybcio
2026-11-08 7:22 ` Akash Kumar
0 siblings, 1 reply; 3+ messages in thread
From: Konrad Dybcio @ 2026-11-05 15:41 UTC (permalink / raw)
To: Akash Kumar, Greg Kroah-Hartman, Bjorn Andersson, Konrad Dybcio,
Rob Herring, Dmitry Baryshkov, Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, linux-kernel, linux-arm-msm, devicetree
On 11/5/26 11:02 AM, Akash Kumar wrote:
> Increase the nominal max USB memory bandwidth vote to let DDR scale
> higher within its nominal corner, fixing glitches seen during
> simultaneous USB audio use cases.
>
> USB_MEMORY_PEAK_SS_BW is raised from 2500 MB/s to 4500 MB/s (+2000
> MB/s, ~1.8x). This ICC vote does not by itself determine DDR
Can we scale this depending of the real speed of the connected
device adjusted for the real data throughput? i.e. if we walk
the tree and min/max as appropriate, we end up with say 10G
wire speed, out of which we can shave off some static overhead
4500 MB/s is 36 Gb/s which is way beyond what USB3 can do, in
any configuration.
Konrad
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] usb: dwc3: Update nominal max votes for qcom usb
2026-11-05 15:41 ` Konrad Dybcio
@ 2026-11-08 7:22 ` Akash Kumar
0 siblings, 0 replies; 3+ messages in thread
From: Akash Kumar @ 2026-11-08 7:22 UTC (permalink / raw)
To: Konrad Dybcio, Greg Kroah-Hartman, Bjorn Andersson,
Konrad Dybcio, Rob Herring, Dmitry Baryshkov,
Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, linux-kernel, linux-arm-msm, devicetree
On 05-11-2026 21:11, Konrad Dybcio wrote:
> On 11/5/26 11:02 AM, Akash Kumar wrote:
>> Increase the nominal max USB memory bandwidth vote to let DDR scale
>> higher within its nominal corner, fixing glitches seen during
>> simultaneous USB audio use cases.
>>
>> USB_MEMORY_PEAK_SS_BW is raised from 2500 MB/s to 4500 MB/s (+2000
>> MB/s, ~1.8x). This ICC vote does not by itself determine DDR
> Can we scale this depending of the real speed of the connected
> device adjusted for the real data throughput? i.e. if we walk
> the tree and min/max as appropriate, we end up with say 10G
> wire speed, out of which we can shave off some static overhead
>
> 4500 MB/s is 36 Gb/s which is way beyond what USB3 can do, in
> any configuration.
>
> Konrad
>
> Hi Konrad,
>
> Two things worth separating here:
>
> 1) The ICC vote is not a USB wire-speed requirement, so it
> shouldn't be compared directly against the USB3 line rate. This
> number is a DDR/memory-interconnect bandwidth vote; the platform's
> interconnect/OPP table is what maps a given vote to a DDR
> frequency/voltage corner. 4500 MB/s doesn't mean we expect 36 Gb/s
> on the wire - it means we want the memory subsystem's bus matrix to
> have enough headroom that the platform's table picks the higher
> in-corner DDR frequency instead of pinning it at the lower one. The
> vote intentionally carries margin for the aggregate memory traffic
> of the whole USB subsystem (descriptors, buffering, concurrent
> audio capture/playback, etc.), not just the raw bulk payload of one
> device, which is why it doesn't map 1:1 to link speed.
>
> 2) We do already have a speed-based split for this, just not a
> per-device dynamic one. dwc3_qcom_interconnect_init() picks between
> the HS and SS vote pairs based on usb_get_maximum_speed() of the
> controller:
>
> max_speed = usb_get_maximum_speed(qcom->dwc.dev);
> if (max_speed >= USB_SPEED_SUPER || max_speed == USB_SPEED_UNKNOWN)
> ret = icc_set_bw(qcom->icc_path_ddr,
> USB_MEMORY_AVG_SS_BW, USB_MEMORY_PEAK_SS_BW);
> else
> ret = icc_set_bw(qcom->icc_path_ddr,
> USB_MEMORY_AVG_HS_BW, USB_MEMORY_PEAK_HS_BW);
>
> This patch only touches the SS tier's peak value; a controller
> whose maximum speed is HS is unaffected. It's set once at probe
> based on the controller's maximum capability rather than walking
> the topology for the actually-negotiated speed of whatever is
> plugged in at a given moment, so it's intentionally a worst-case
> value rather than a precise per-device figure - which is also why
> it's sized for the glitch we saw under concurrent audio+bulk load
> rather than for a single device's best-case throughput.
>
> Thanks,
> Akash
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-08 7:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-05 10:02 [PATCH v2] usb: dwc3: Update nominal max votes for qcom usb Akash Kumar
2026-11-05 15:41 ` Konrad Dybcio
2026-11-08 7:22 ` Akash Kumar
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®