diff --git a/conf/fstab.gs201.in b/conf/fstab.gs201.in index 2fe2161f..353d17dd 100644 --- a/conf/fstab.gs201.in +++ b/conf/fstab.gs201.in @@ -7,7 +7,7 @@ system /system erofs ro wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 # During compliance testing, the previous line would fail (because GSI is ext4), and the next line would be used to mount GSI. system /system ext4 ro,barrier=1 wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 -system_dlkm /system_dlkm erofs ro,barrier=1 wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 +system_dlkm /system_dlkm erofs ro wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 system_ext /system_ext erofs ro wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 product /product erofs ro wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 vendor /vendor erofs ro wait,slotselect,avb=vbmeta_vendor,logical,first_stage_mount,readahead_size_kb=128 diff --git a/conf/init.gs201.usb.rc b/conf/init.gs201.usb.rc index c784c54c..87245709 100644 --- a/conf/init.gs201.usb.rc +++ b/conf/init.gs201.usb.rc @@ -71,6 +71,83 @@ on early-boot # acm function for uwb mkdir /config/usb_gadget/g1/functions/acm.uwb0 + # chown file/folder permission + chown system system /config/usb_gadget/ + chown system system /config/usb_gadget/g1 + chown system system /config/usb_gadget/g1/UDC + chown system system /config/usb_gadget/g1/bDeviceClass + chown system system /config/usb_gadget/g1/bDeviceProtocol + chown system system /config/usb_gadget/g1/bDeviceSubClass + chown system system /config/usb_gadget/g1/bMaxPacketSize0 + chown system system /config/usb_gadget/g1/bcdDevice + chown system system /config/usb_gadget/g1/bcdUSB + chown system system /config/usb_gadget/g1/configs + chown system system /config/usb_gadget/g1/configs/b.1 + chown system system /config/usb_gadget/g1/configs/b.1/MaxPower + chown system system /config/usb_gadget/g1/configs/b.1/bmAttributes + chown system system /config/usb_gadget/g1/configs/b.1/strings + chown system system /config/usb_gadget/g1/functions + chown system system /config/usb_gadget/g1/functions/accessory.gs2 + chown system system /config/usb_gadget/g1/functions/acm.gs6 + chown system system /config/usb_gadget/g1/functions/acm.gs6/port_num + chown system system /config/usb_gadget/g1/functions/acm.uwb0 + chown system system /config/usb_gadget/g1/functions/acm.uwb0/port_num + chown system system /config/usb_gadget/g1/functions/audio_source.gs3 + chown system system /config/usb_gadget/g1/functions/dm.gs7 + chown system system /config/usb_gadget/g1/functions/ffs.adb + chown system system /config/usb_gadget/g1/functions/ffs.mtp + chown system system /config/usb_gadget/g1/functions/ffs.ptp + chown system system /config/usb_gadget/g1/functions/midi.gs5 + chown system system /config/usb_gadget/g1/functions/midi.gs5/buflen + chown system system /config/usb_gadget/g1/functions/midi.gs5/id + chown system system /config/usb_gadget/g1/functions/midi.gs5/in_ports + chown system system /config/usb_gadget/g1/functions/midi.gs5/index + chown system system /config/usb_gadget/g1/functions/midi.gs5/out_ports + chown system system /config/usb_gadget/g1/functions/midi.gs5/qlen + chown system system /config/usb_gadget/g1/functions/mtp.gs0 + chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc + chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP + chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/compatible_id + chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/sub_compatible_id + chown system system /config/usb_gadget/g1/functions/ncm.gs9 + chown system system /config/usb_gadget/g1/functions/ncm.gs9/dev_addr + chown system system /config/usb_gadget/g1/functions/ncm.gs9/host_addr + chown system system /config/usb_gadget/g1/functions/ncm.gs9/ifname + chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc + chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm + chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id + chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/sub_compatible_id + chown system system /config/usb_gadget/g1/functions/ncm.gs9/qmult + chown system system /config/usb_gadget/g1/functions/ptp.gs1 + chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc + chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP + chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/compatible_id + chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/sub_compatible_id + chown system system /config/usb_gadget/g1/functions/rndis.gs4 + chown system system /config/usb_gadget/g1/functions/rndis.gs4/class + chown system system /config/usb_gadget/g1/functions/rndis.gs4/dev_addr + chown system system /config/usb_gadget/g1/functions/rndis.gs4/host_addr + chown system system /config/usb_gadget/g1/functions/rndis.gs4/ifname + chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc + chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis + chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/compatible_id + chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/sub_compatible_id + chown system system /config/usb_gadget/g1/functions/rndis.gs4/protocol + chown system system /config/usb_gadget/g1/functions/rndis.gs4/qmult + chown system system /config/usb_gadget/g1/functions/rndis.gs4/subclass + chown system system /config/usb_gadget/g1/idProduct + chown system system /config/usb_gadget/g1/idVendor + chown system system /config/usb_gadget/g1/max_speed + chown system system /config/usb_gadget/g1/os_desc + chown system system /config/usb_gadget/g1/os_desc/b.1 + chown system system /config/usb_gadget/g1/os_desc/b_vendor_code + chown system system /config/usb_gadget/g1/os_desc/qw_sign + chown system system /config/usb_gadget/g1/os_desc/use + chown system system /config/usb_gadget/g1/strings + chown system system /config/usb_gadget/g1/strings/0x409 + chown system system /config/usb_gadget/g1/strings/0x409/manufacturer + chown system system /config/usb_gadget/g1/strings/0x409/product + chown system system /config/usb_gadget/g1/strings/0x409/serialnumber setprop vendor.usb.functions.ready 1 on boot diff --git a/conf/ueventd.gs201.rc b/conf/ueventd.gs201.rc index b894ea32..b9a9f7c6 100644 --- a/conf/ueventd.gs201.rc +++ b/conf/ueventd.gs201.rc @@ -171,6 +171,9 @@ # Storage: for factory reset protection feature /dev/block/by-name/frp 0660 system system +# Storage: for UDFPS calibration data sideload feature +/dev/block/by-name/mfg_data 0660 system system + # TPU /dev/janeiro 0660 system system diff --git a/radio/config/logging.conf b/radio/config/logging.conf index d57c82aa..deb09dbe 100644 --- a/radio/config/logging.conf +++ b/radio/config/logging.conf @@ -1 +1 @@ -modem_logging_control START -o /data/vendor/radio/logs/always-on -n 10 -s 20 -m /vendor/etc/modem/default.cfg --enable_exmetric --enable_exmetric_internal \ No newline at end of file +modem_logging_control START -o /data/vendor/radio/logs/always-on -n 20 -s 50 -m /vendor/etc/modem/default.cfg --enable_exmetric --enable_exmetric_internal diff --git a/usb/gadget/UsbGadget.cpp b/usb/gadget/UsbGadget.cpp index 23e56597..9fdf2acc 100644 --- a/usb/gadget/UsbGadget.cpp +++ b/usb/gadget/UsbGadget.cpp @@ -33,13 +33,55 @@ namespace gadget { namespace V1_2 { namespace implementation { -UsbGadget::UsbGadget() { +UsbGadget::UsbGadget() : mGadgetIrqPath("") { if (access(OS_DESC_PATH, R_OK) != 0) { ALOGE("configfs setup not done yet"); abort(); } } +V1_0::Status UsbGadget::getUsbGadgetIrqPath() { + std::string irqs; + size_t read_pos = 0; + size_t found_pos = 0; + + if (!ReadFileToString(kProcInterruptsPath, &irqs)) { + ALOGE("cannot read all interrupts"); + return Status::ERROR; + } + + while (true) { + found_pos = irqs.find_first_of("\n", read_pos); + if (found_pos == std::string::npos) { + ALOGI("the string of all interrupts is unexpected"); + return Status::ERROR; + } + + std::string single_irq = irqs.substr(read_pos, found_pos - read_pos); + + if (single_irq.find("dwc3", 0) != std::string::npos) { + unsigned int dwc3_irq_number; + size_t dwc3_pos = single_irq.find_first_of(":"); + if (!ParseUint(single_irq.substr(0, dwc3_pos), &dwc3_irq_number)) { + ALOGI("unknown IRQ strings"); + return Status::ERROR; + } + + mGadgetIrqPath = kProcIrqPath + single_irq.substr(0, dwc3_pos) + kSmpAffinityList; + break; + } + + if (found_pos == irqs.npos) { + ALOGI("USB gadget doesn't start"); + return Status::ERROR; + } + + read_pos = found_pos + 1; + } + + return Status::SUCCESS; +} + void currentFunctionsAppliedCallback(bool functionsApplied, void *payload) { UsbGadget *gadget = (UsbGadget *)payload; gadget->mCurrentUsbFunctionsApplied = functionsApplied; @@ -359,6 +401,10 @@ Return UsbGadget::setCurrentUsbFunctions(uint64_t functions, mCurrentUsbFunctions = functions; mCurrentUsbFunctionsApplied = false; + // Get the gadget IRQ number before tearDownGadget() + if (mGadgetIrqPath.empty()) + getUsbGadgetIrqPath(); + // Unlink the gadget and stop the monitor if running. V1_0::Status status = tearDownGadget(); if (status != Status::SUCCESS) { @@ -391,9 +437,15 @@ Return UsbGadget::setCurrentUsbFunctions(uint64_t functions, } if (functions & GadgetFunction::NCM) { - SetProperty("vendor.usb.dwc3_irq", "big"); + if (!mGadgetIrqPath.empty()) { + if (!WriteStringToFile(BIG_CORE, mGadgetIrqPath)) + ALOGI("Cannot move gadget IRQ to big core, path:%s", mGadgetIrqPath.c_str()); + } } else { - SetProperty("vendor.usb.dwc3_irq", "medium"); + if (!mGadgetIrqPath.empty()) { + if (!WriteStringToFile(MEDIUM_CORE, mGadgetIrqPath)) + ALOGI("Cannot move gadget IRQ to medium core, path:%s", mGadgetIrqPath.c_str()); + } } ALOGI("Usb Gadget setcurrent functions called successfully"); diff --git a/usb/gadget/UsbGadget.h b/usb/gadget/UsbGadget.h index 0e5a0062..782fb021 100644 --- a/usb/gadget/UsbGadget.h +++ b/usb/gadget/UsbGadget.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,7 @@ namespace implementation { using ::android::sp; using ::android::base::GetProperty; using ::android::base::SetProperty; +using ::android::base::ParseUint; using ::android::base::unique_fd; using ::android::base::ReadFileToString; using ::android::base::Trim; @@ -71,6 +73,9 @@ using ::android::hardware::usb::gadget::V1_2::GadgetFunction; using ::std::string; constexpr char kGadgetName[] = "11210000.dwc3"; +constexpr char kProcInterruptsPath[] = "/proc/interrupts"; +constexpr char kProcIrqPath[] = "/proc/irq/"; +constexpr char kSmpAffinityList[] = "/smp_affinity_list"; #ifndef UDC_PATH #define UDC_PATH "/sys/class/udc/11210000.dwc3/" #endif @@ -78,11 +83,15 @@ static MonitorFfs monitorFfs(kGadgetName); #define SPEED_PATH UDC_PATH "current_speed" +#define BIG_CORE "6" +#define MEDIUM_CORE "4" + struct UsbGadget : public IUsbGadget { UsbGadget(); // Makes sure that only one request is processed at a time. std::mutex mLockSetCurrentFunction; + std::string mGadgetIrqPath; uint64_t mCurrentUsbFunctions; bool mCurrentUsbFunctionsApplied; UsbSpeed mUsbSpeed; @@ -99,6 +108,7 @@ struct UsbGadget : public IUsbGadget { private: Status tearDownGadget(); + Status getUsbGadgetIrqPath(); Status setupFunctions(uint64_t functions, const sp &callback, uint64_t timeout); }; diff --git a/usb/gadget/android.hardware.usb.gadget-service.rc b/usb/gadget/android.hardware.usb.gadget-service.rc index 49979d90..e3c3b0db 100644 --- a/usb/gadget/android.hardware.usb.gadget-service.rc +++ b/usb/gadget/android.hardware.usb.gadget-service.rc @@ -17,81 +17,3 @@ on post-fs chmod 664 /sys/devices/platform/11210000.usb/dwc3_exynos_otg_b_sess chmod 664 /sys/devices/platform/11210000.usb/dwc3_exynos_otg_id chmod 664 /sys/devices/platform/11210000.usb/usb_data_enabled - -on property:vendor.usb.functions.ready=1 - chown system system /config/usb_gadget/ - chown system system /config/usb_gadget/g1 - chown system system /config/usb_gadget/g1/UDC - chown system system /config/usb_gadget/g1/bDeviceClass - chown system system /config/usb_gadget/g1/bDeviceProtocol - chown system system /config/usb_gadget/g1/bDeviceSubClass - chown system system /config/usb_gadget/g1/bMaxPacketSize0 - chown system system /config/usb_gadget/g1/bcdDevice - chown system system /config/usb_gadget/g1/bcdUSB - chown system system /config/usb_gadget/g1/configs - chown system system /config/usb_gadget/g1/configs/b.1 - chown system system /config/usb_gadget/g1/configs/b.1/MaxPower - chown system system /config/usb_gadget/g1/configs/b.1/bmAttributes - chown system system /config/usb_gadget/g1/configs/b.1/strings - chown system system /config/usb_gadget/g1/functions - chown system system /config/usb_gadget/g1/functions/accessory.gs2 - chown system system /config/usb_gadget/g1/functions/acm.gs6 - chown system system /config/usb_gadget/g1/functions/acm.gs6/port_num - chown system system /config/usb_gadget/g1/functions/acm.uwb0 - chown system system /config/usb_gadget/g1/functions/acm.uwb0/port_num - chown system system /config/usb_gadget/g1/functions/audio_source.gs3 - chown system system /config/usb_gadget/g1/functions/dm.gs7 - chown system system /config/usb_gadget/g1/functions/ffs.adb - chown system system /config/usb_gadget/g1/functions/ffs.mtp - chown system system /config/usb_gadget/g1/functions/ffs.ptp - chown system system /config/usb_gadget/g1/functions/midi.gs5 - chown system system /config/usb_gadget/g1/functions/midi.gs5/buflen - chown system system /config/usb_gadget/g1/functions/midi.gs5/id - chown system system /config/usb_gadget/g1/functions/midi.gs5/in_ports - chown system system /config/usb_gadget/g1/functions/midi.gs5/index - chown system system /config/usb_gadget/g1/functions/midi.gs5/out_ports - chown system system /config/usb_gadget/g1/functions/midi.gs5/qlen - chown system system /config/usb_gadget/g1/functions/mtp.gs0 - chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc - chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP - chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/compatible_id - chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/sub_compatible_id - chown system system /config/usb_gadget/g1/functions/ncm.gs9 - chown system system /config/usb_gadget/g1/functions/ncm.gs9/dev_addr - chown system system /config/usb_gadget/g1/functions/ncm.gs9/host_addr - chown system system /config/usb_gadget/g1/functions/ncm.gs9/ifname - chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc - chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm - chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id - chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/sub_compatible_id - chown system system /config/usb_gadget/g1/functions/ncm.gs9/qmult - chown system system /config/usb_gadget/g1/functions/ptp.gs1 - chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc - chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP - chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/compatible_id - chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/sub_compatible_id - chown system system /config/usb_gadget/g1/functions/rndis.gs4 - chown system system /config/usb_gadget/g1/functions/rndis.gs4/class - chown system system /config/usb_gadget/g1/functions/rndis.gs4/dev_addr - chown system system /config/usb_gadget/g1/functions/rndis.gs4/host_addr - chown system system /config/usb_gadget/g1/functions/rndis.gs4/ifname - chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc - chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis - chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/compatible_id - chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/sub_compatible_id - chown system system /config/usb_gadget/g1/functions/rndis.gs4/protocol - chown system system /config/usb_gadget/g1/functions/rndis.gs4/qmult - chown system system /config/usb_gadget/g1/functions/rndis.gs4/subclass - chown system system /config/usb_gadget/g1/idProduct - chown system system /config/usb_gadget/g1/idVendor - chown system system /config/usb_gadget/g1/max_speed - chown system system /config/usb_gadget/g1/os_desc - chown system system /config/usb_gadget/g1/os_desc/b.1 - chown system system /config/usb_gadget/g1/os_desc/b_vendor_code - chown system system /config/usb_gadget/g1/os_desc/qw_sign - chown system system /config/usb_gadget/g1/os_desc/use - chown system system /config/usb_gadget/g1/strings - chown system system /config/usb_gadget/g1/strings/0x409 - chown system system /config/usb_gadget/g1/strings/0x409/manufacturer - chown system system /config/usb_gadget/g1/strings/0x409/product - chown system system /config/usb_gadget/g1/strings/0x409/serialnumber