From a24469c9d0bc0feb21491f5a9a45020104a008b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Fri, 25 Jun 2021 11:42:01 -0700 Subject: [PATCH] tune usb irq (dwc3) based on usb function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This among other things greatly increases tethering performance. Bug: 185092876 Test: TreeHugger, built and booted on an oriole, enabled tethering Signed-off-by: Maciej Żenczykowski Change-Id: Ic9f0b4bef05250bb38c91dc1e046366098d98dc0 --- conf/init.gs101.usb.rc | 6 ++++++ device.mk | 1 + set_usb_irq.sh | 16 ++++++++++++++++ usb/UsbGadget.cpp | 6 ++++++ 4 files changed, 29 insertions(+) create mode 100755 set_usb_irq.sh diff --git a/conf/init.gs101.usb.rc b/conf/init.gs101.usb.rc index b8ffc0a4..d0f19a3a 100644 --- a/conf/init.gs101.usb.rc +++ b/conf/init.gs101.usb.rc @@ -85,6 +85,12 @@ on property:vendor.usb.config=* on property:persist.vendor.usb.usbradio.config=* start usbd +on property:vendor.usb.dwc3_irq=medium + exec /vendor/bin/hw/set_usb_irq.sh medium + +on property:vendor.usb.dwc3_irq=big + exec /vendor/bin/hw/set_usb_irq.sh big + on charger mkdir /config/usb_gadget/g1 mkdir /config/usb_gadget/g1/strings/0x409 diff --git a/device.mk b/device.mk index 9c6d1da1..5a523c8a 100644 --- a/device.mk +++ b/device.mk @@ -261,6 +261,7 @@ PRODUCT_COPY_FILES += \ # Shell scripts PRODUCT_COPY_FILES += \ device/google/gs101/init.insmod.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.insmod.sh \ + device/google/gs101/set_usb_irq.sh:$(TARGET_COPY_OUT_VENDOR)/bin/hw/set_usb_irq.sh \ # insmod files PRODUCT_COPY_FILES += \ diff --git a/set_usb_irq.sh b/set_usb_irq.sh new file mode 100755 index 00000000..29d37812 --- /dev/null +++ b/set_usb_irq.sh @@ -0,0 +1,16 @@ +#!/vendor/bin/sh + +# Switch into /proc/irq/$IRQ for the dwc3 usb controller +cd /proc/irq/*/dwc3/.. || exit 7 + +# Move the USB Controller (DWC3) interrupt as requested +# Modem and DIT are on 0/2/5 depending on throughput, so avoid those. +# 0-3 small, 4-5 medium, 6-7 big +case "$1" in + medium) core=4;; + big) core=6;; + *) core=0;; +esac + +# This can sometimes fail due to smp_affinity_list no longer existing... +echo "${core}" > smp_affinity_list diff --git a/usb/UsbGadget.cpp b/usb/UsbGadget.cpp index b153e203..909fb485 100644 --- a/usb/UsbGadget.cpp +++ b/usb/UsbGadget.cpp @@ -367,6 +367,12 @@ Return UsbGadget::setCurrentUsbFunctions(uint64_t functions, goto error; } + if (functions & GadgetFunction::NCM) { + SetProperty("vendor.usb.dwc3_irq", "big"); + } else { + SetProperty("vendor.usb.dwc3_irq", "medium"); + } + ALOGI("Usb Gadget setcurrent functions called successfully"); return Void();