From 796a10b44014235cc7632e56febc3fbb4bfdded7 Mon Sep 17 00:00:00 2001 From: Daniel Lowe Date: Thu, 5 Dec 2024 19:14:52 +0000 Subject: [PATCH 01/25] [Pixel VPN] Apply reviewed default permissions Pregrantting below permissions: READ_PHONE_STATE Flag: EXEMPT add permission pregranted in b/337725984 Bug: 373686360 Test: presubmit, manual install Change-Id: I2f2cf9e1bd2e60dd04afac8fdf6d1c7f5f654778 --- default-permissions.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/default-permissions.xml b/default-permissions.xml index 45a2d303..428b7193 100644 --- a/default-permissions.xml +++ b/default-permissions.xml @@ -185,5 +185,9 @@ + + + From dc10f550c0b38ca3d356e0b62294e7eee3508ccb Mon Sep 17 00:00:00 2001 From: Chungkai Mei Date: Mon, 25 Nov 2024 06:03:17 +0000 Subject: [PATCH 02/25] set input to 100 explicitly in task_profile instead of using ADPF, let's use task_profile to boost input tasks' priroity Bug: 378761104 Flag: EXEMPT new task_profile behavior Change-Id: Ice311b1abcf3d629917e16f1490d4cb63fd83796 Signed-off-by: Chungkai Mei --- task_profiles.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/task_profiles.json b/task_profiles.json index 6b9b1ee3..103ff202 100644 --- a/task_profiles.json +++ b/task_profiles.json @@ -488,6 +488,19 @@ } } ] + }, + { + "Name": "HighestCfsPrioScheduling", + "Actions": [ + { + "Name": "SetSchedulerPolicy", + "Params": + { + "Policy": "SCHED_OTHER", + "Nice": "-20" + } + } + ] } ], @@ -526,7 +539,7 @@ }, { "Name": "InputPolicy", - "Profiles": [ "MaxPerformance", "SCHED_QOS_SENSITIVE_EXTREME_SET" ] + "Profiles": [ "HighestCfsPrioScheduling", "MaxPerformance", "SCHED_QOS_SENSITIVE_EXTREME_SET" ] } ] } From 8cca4af88c9097b98520f41b9ab102ba47ae0bca Mon Sep 17 00:00:00 2001 From: Piotr Klasa Date: Mon, 9 Dec 2024 14:37:08 +0100 Subject: [PATCH 03/25] Move all vendor_sched parameters and permissions to init.pixel.perf.rc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: 335874870 Test: Checked that permissions and values ​​for all affected files are correct (ls -l, cat) Flag: EXEMPT not supported by this component yet Change-Id: I018b7b564bcc533212d2ada0dda85678c41feead --- conf/init.gs201.rc | 138 --------------------------------------------- 1 file changed, 138 deletions(-) diff --git a/conf/init.gs201.rc b/conf/init.gs201.rc index fa8edc30..d5e2da37 100644 --- a/conf/init.gs201.rc +++ b/conf/init.gs201.rc @@ -20,36 +20,6 @@ on init # Disable util-awareness write /proc/vendor_sched/teo_util_threshold "1024 1024 1024" - chown system system /proc/vendor_sched/groups/bg/set_task_group - chown system system /proc/vendor_sched/groups/cam/set_task_group - chown system system /proc/vendor_sched/groups/fg/set_task_group - chown system system /proc/vendor_sched/groups/nnapi/set_task_group - chown system system /proc/vendor_sched/groups/sys/set_task_group - chown system system /proc/vendor_sched/groups/sys_bg/set_task_group - chown system system /proc/vendor_sched/groups/ta/set_task_group - chown system system /proc/vendor_sched/groups/rt/set_task_group - chown system system /proc/vendor_sched/groups/sf/set_task_group - chown system system /proc/vendor_sched/groups/dex2oat/set_task_group - chown system system /proc/vendor_sched/groups/cam_power/set_task_group - chown system system /proc/vendor_sched/groups/ota/set_task_group - chown system system /proc/vendor_sched/groups/bg/set_proc_group - chown system system /proc/vendor_sched/groups/cam/set_proc_group - chown system system /proc/vendor_sched/groups/fg/set_proc_group - chown system system /proc/vendor_sched/groups/nnapi/set_proc_group - chown system system /proc/vendor_sched/groups/sys/set_proc_group - chown system system /proc/vendor_sched/groups/sys_bg/set_proc_group - chown system system /proc/vendor_sched/groups/ta/set_proc_group - chown system system /proc/vendor_sched/groups/rt/set_proc_group - chown system system /proc/vendor_sched/groups/sf/set_proc_group - chown system system /proc/vendor_sched/groups/dex2oat/set_proc_group - chown system system /proc/vendor_sched/groups/cam_power/set_proc_group - chown system system /proc/vendor_sched/groups/ota/set_proc_group - chown system system /proc/vendor_sched/prefer_idle_set - chown system system /proc/vendor_sched/prefer_idle_clear - chown system system /proc/vendor_sched/pmu_poll_enable - chown system system /proc/vendor_sched/pmu_poll_time - chown system system /proc/vendor_sched/uclamp_fork_reset_clear - chown system system /proc/vendor_sched/uclamp_fork_reset_set chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/lcpi_threshold chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/spc_threshold chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/limit_frequency @@ -71,116 +41,8 @@ on init chown system system /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu6_memlat@17000010/memlat_cpuidle_state_aware chown system system /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu7_memlat@17000010/memlat_cpuidle_state_aware - chmod 0220 /proc/vendor_sched/groups/bg/set_task_group - chmod 0220 /proc/vendor_sched/groups/cam/set_task_group - chmod 0220 /proc/vendor_sched/groups/fg/set_task_group - chmod 0220 /proc/vendor_sched/groups/nnapi/set_task_group - chmod 0220 /proc/vendor_sched/groups/sys/set_task_group - chmod 0220 /proc/vendor_sched/groups/sys_bg/set_task_group - chmod 0220 /proc/vendor_sched/groups/ta/set_task_group - chmod 0220 /proc/vendor_sched/groups/rt/set_task_group - chmod 0220 /proc/vendor_sched/groups/sf/set_task_group - chmod 0220 /proc/vendor_sched/groups/dex2oat/set_task_group - chmod 0220 /proc/vendor_sched/groups/cam_power/set_task_group - chmod 0220 /proc/vendor_sched/groups/ota/set_task_group - chmod 0220 /proc/vendor_sched/groups/bg/set_proc_group - chmod 0220 /proc/vendor_sched/groups/cam/set_proc_group - chmod 0220 /proc/vendor_sched/groups/fg/set_proc_group - chmod 0220 /proc/vendor_sched/groups/nnapi/set_proc_group - chmod 0220 /proc/vendor_sched/groups/sys/set_proc_group - chmod 0220 /proc/vendor_sched/groups/sys_bg/set_proc_group - chmod 0220 /proc/vendor_sched/groups/ta/set_proc_group - chmod 0220 /proc/vendor_sched/groups/rt/set_proc_group - chmod 0220 /proc/vendor_sched/groups/sf/set_proc_group - chmod 0220 /proc/vendor_sched/groups/dex2oat/set_proc_group - chmod 0220 /proc/vendor_sched/groups/cam_power/set_proc_group - chmod 0220 /proc/vendor_sched/groups/ota/set_proc_group - chmod 0220 /proc/vendor_sched/prefer_idle_set - chmod 0220 /proc/vendor_sched/prefer_idle_clear - chmod 0660 /proc/vendor_sched/pmu_poll_enable - chmod 0220 /proc/vendor_sched/pmu_poll_time - chmod 0220 /proc/vendor_sched/uclamp_fork_reset_clear - chmod 0220 /proc/vendor_sched/uclamp_fork_reset_set - start vendor.keymaster-4-0 - # Change permission of sched qos nodes - chown system system /proc/vendor_sched/sched_qos/adpf_set - chown system system /proc/vendor_sched/sched_qos/adpf_clear - chown system system /proc/vendor_sched/sched_qos/auto_uclamp_max_set - chown system system /proc/vendor_sched/sched_qos/auto_uclamp_max_clear - chown system system /proc/vendor_sched/sched_qos/boost_prio_set - chown system system /proc/vendor_sched/sched_qos/boost_prio_clear - chown system system /proc/vendor_sched/sched_qos/preempt_wakeup_set - chown system system /proc/vendor_sched/sched_qos/preempt_wakeup_clear - chown system system /proc/vendor_sched/sched_qos/prefer_fit_set - chown system system /proc/vendor_sched/sched_qos/prefer_fit_clear - chown system system /proc/vendor_sched/sched_qos/prefer_high_cap_set - chown system system /proc/vendor_sched/sched_qos/prefer_high_cap_clear - chown system system /proc/vendor_sched/sched_qos/prefer_idle_set - chown system system /proc/vendor_sched/sched_qos/prefer_idle_clear - chown system system /proc/vendor_sched/sched_qos/rampup_multiplier_set - chown system system /proc/vendor_sched/sched_qos/rampup_multiplier_clear - - chmod 0220 /proc/vendor_sched/sched_qos/adpf_set - chmod 0220 /proc/vendor_sched/sched_qos/adpf_clear - chmod 0220 /proc/vendor_sched/sched_qos/auto_uclamp_max_set - chmod 0220 /proc/vendor_sched/sched_qos/auto_uclamp_max_clear - chmod 0220 /proc/vendor_sched/sched_qos/boost_prio_set - chmod 0220 /proc/vendor_sched/sched_qos/boost_prio_clear - chmod 0220 /proc/vendor_sched/sched_qos/preempt_wakeup_set - chmod 0220 /proc/vendor_sched/sched_qos/preempt_wakeup_clear - chmod 0220 /proc/vendor_sched/sched_qos/prefer_fit_set - chmod 0220 /proc/vendor_sched/sched_qos/prefer_fit_clear - chmod 0220 /proc/vendor_sched/sched_qos/prefer_high_cap_set - chmod 0220 /proc/vendor_sched/sched_qos/prefer_high_cap_clear - chmod 0220 /proc/vendor_sched/sched_qos/prefer_idle_set - chmod 0220 /proc/vendor_sched/sched_qos/prefer_idle_clear - chmod 0220 /proc/vendor_sched/sched_qos/rampup_multiplier_set - chmod 0220 /proc/vendor_sched/sched_qos/rampup_multiplier_clear - - # Enable sched_qos for some groups - write /proc/vendor_sched/groups/ta/qos_adpf_enable 1 - write /proc/vendor_sched/groups/ta/qos_auto_uclamp_max_enable 1 - write /proc/vendor_sched/groups/ta/qos_boost_prio_enable 1 - write /proc/vendor_sched/groups/ta/qos_preempt_wakeup_enable 1 - write /proc/vendor_sched/groups/ta/qos_prefer_fit_enable 1 - write /proc/vendor_sched/groups/ta/qos_prefer_high_cap_enable 1 - write /proc/vendor_sched/groups/ta/qos_prefer_idle_enable 1 - write /proc/vendor_sched/groups/ta/qos_rampup_multiplier_enable 1 - write /proc/vendor_sched/groups/fg/qos_adpf_enable 1 - write /proc/vendor_sched/groups/fg/qos_auto_uclamp_max_enable 1 - write /proc/vendor_sched/groups/fg/qos_boost_prio_enable 1 - write /proc/vendor_sched/groups/fg/qos_preempt_wakeup_enable 1 - write /proc/vendor_sched/groups/fg/qos_prefer_fit_enable 1 - write /proc/vendor_sched/groups/fg/qos_prefer_high_cap_enable 1 - write /proc/vendor_sched/groups/fg/qos_prefer_idle_enable 1 - write /proc/vendor_sched/groups/fg/qos_rampup_multiplier_enable 1 - write /proc/vendor_sched/groups/fg_wi/qos_adpf_enable 1 - write /proc/vendor_sched/groups/fg_wi/qos_auto_uclamp_max_enable 1 - write /proc/vendor_sched/groups/fg_wi/qos_boost_prio_enable 1 - write /proc/vendor_sched/groups/fg_wi/qos_preempt_wakeup_enable 1 - write /proc/vendor_sched/groups/fg_wi/qos_prefer_fit_enable 1 - write /proc/vendor_sched/groups/fg_wi/qos_prefer_high_cap_enable 1 - write /proc/vendor_sched/groups/fg_wi/qos_prefer_idle_enable 1 - write /proc/vendor_sched/groups/fg_wi/qos_rampup_multiplier_enable 1 - write /proc/vendor_sched/groups/cam/qos_adpf_enable 1 - write /proc/vendor_sched/groups/cam/qos_auto_uclamp_max_enable 1 - write /proc/vendor_sched/groups/cam/qos_prefer_fit_enable 1 - write /proc/vendor_sched/groups/cam/qos_prefer_high_cap_enable 1 - write /proc/vendor_sched/groups/cam/qos_prefer_idle_enable 1 - write /proc/vendor_sched/groups/cam/qos_rampup_multiplier_enable 1 - write /proc/vendor_sched/groups/cam_power/qos_adpf_enable 1 - write /proc/vendor_sched/groups/cam_power/qos_auto_uclamp_max_enable 1 - write /proc/vendor_sched/groups/cam_power/qos_prefer_fit_enable 1 - write /proc/vendor_sched/groups/cam_power/qos_prefer_high_cap_enable 1 - write /proc/vendor_sched/groups/cam_power/qos_prefer_idle_enable 1 - write /proc/vendor_sched/groups/cam_power/qos_rampup_multiplier_enable 1 - write /proc/vendor_sched/groups/rt/qos_adpf_enable 1 - write /proc/vendor_sched/groups/rt/qos_rampup_multiplier_enable 1 - write /proc/vendor_sched/groups/sf/qos_adpf_enable 1 - write /proc/vendor_sched/groups/sf/qos_rampup_multiplier_enable 1 - # ZRAM setup write /sys/block/zram0/comp_algorithm lz77eh write /proc/sys/vm/page-cluster 0 From c74b1a6c605bb1effdc160b52a96fd059853fc19 Mon Sep 17 00:00:00 2001 From: Paulsu Su Date: Thu, 12 Dec 2024 22:24:26 -0800 Subject: [PATCH 04/25] Set initial value for foreground_window group For multi-window foreground app group. Bug: 200769420 Change-Id: I2d9cd9d90e9011593c53facf5fd47a4414e3f1cf Test: build pass Flag: NONE vendor init file does not support flag --- conf/init.gs201.rc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/init.gs201.rc b/conf/init.gs201.rc index d5e2da37..59bc55a3 100644 --- a/conf/init.gs201.rc +++ b/conf/init.gs201.rc @@ -615,6 +615,7 @@ on property:sys.boot_completed=1 # Setup final cpuset write /dev/cpuset/top-app/cpus ${persist.device_config.vendor_system_native.top-app_cpuset:-0-7} write /dev/cpuset/foreground/cpus ${persist.device_config.vendor_system_native.foreground_cpuset:-0-3,4-5} + write /dev/cpuset/foreground_window/cpus ${persist.device_config.vendor_system_native.foreground_window_cpuset:-0-3,4-5} write /dev/cpuset/background/cpus ${persist.device_config.vendor_system_native.background_cpuset:-0-3} write /dev/cpuset/system-background/cpus ${persist.device_config.vendor_system_native.system-background_cpuset:-0-3} write /dev/cpuset/restricted/cpus ${persist.device_config.vendor_system_native.restricted_cpuset:-0-3} @@ -948,6 +949,8 @@ on property:persist.device_config.vendor_system_native.top-app_cpuset=* write /dev/cpuset/top-app/cpus ${persist.device_config.vendor_system_native.top-app_cpuset:-0-7} on property:persist.device_config.vendor_system_native.foreground_cpuset=* write /dev/cpuset/foreground/cpus ${persist.device_config.vendor_system_native.foreground_cpuset:-0-3,4-5} +on property:persist.device_config.vendor_system_native.foreground_window_cpuset=* + write /dev/cpuset/foreground/cpus ${persist.device_config.vendor_system_native.foreground_window_cpuset:-0-3,4-5} on property:persist.device_config.vendor_system_native.background_cpuset=* write /dev/cpuset/background/cpus ${persist.device_config.vendor_system_native.background_cpuset:-0-3} on property:persist.device_config.vendor_system_native.system-background_cpuset=* From 7270e65cfd2386802f8290e05133662fe8959468 Mon Sep 17 00:00:00 2001 From: Jack Wu Date: Fri, 20 Dec 2024 18:00:10 +0800 Subject: [PATCH 05/25] dump_power: add battery caretaker dump into bugreport logging for AACR(+H), AAFV, AACT, AACC and AACP Version Bug: 384737509 Test: adb bugreport Flag: EXEMPT bugfix Change-Id: I366adec774866a9561067e1a3e42f9c794d3ccb8 Signed-off-by: Jack Wu --- dumpstate/dump_power.cpp | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp index 08f68d37..878f26aa 100644 --- a/dumpstate/dump_power.cpp +++ b/dumpstate/dump_power.cpp @@ -301,6 +301,48 @@ void dumpBatteryDefend() { files.clear(); } } +void dumpBatteryCaretaker() { + const char* aacpConfig [][3] { + {"AACP Version", + "/sys/devices/platform/google,battery/power_supply/battery/", "aacp_"}, + {"AACR Config", + "/sys/devices/platform/google,battery/power_supply/battery/", "aacr_"}, + {"AAFV Config", + "/sys/devices/platform/google,battery/power_supply/battery/", "aafv_"}, + {"AACT Config", + "/sys/devices/platform/google,battery/power_supply/battery/", "aact_"}, + {"AACC", + "/sys/devices/platform/google,battery/power_supply/battery/", "aacc"}, + }; + std::vector files; + struct dirent *entry; + std::string content; + std::string fileLocation; + for (auto &config : aacpConfig) { + DIR *dir = opendir(config[1]); + if (dir == NULL) + continue; + printTitle(config[0]); + while ((entry = readdir(dir)) != NULL) { + if (std::string(entry->d_name).find(config[2]) != std::string::npos && + strncmp(config[2], entry->d_name, strlen(config[2])) == 0) { + files.push_back(entry->d_name); + } + } + closedir(dir); + sort(files.begin(), files.end()); + for (auto &file : files) { + fileLocation = std::string(config[1]) + std::string(file); + if (!android::base::ReadFileToString(fileLocation, &content) || content.empty()) { + content = "\n"; + } + printf("%s: %s", file.c_str(), content.c_str()); + if (content.back() != '\n') + printf("\n"); + } + files.clear(); + } +} void printValuesOfDirectory(const char *directory, std::string debugfs, const char *strMatch) { std::vector files; auto info = directory; @@ -763,6 +805,7 @@ int main() { dumpPdEngine(); dumpBatteryHealth(); dumpBatteryDefend(); + dumpBatteryCaretaker(); dumpChg(); dumpChgUserDebug(); dumpBatteryEeprom(); From a0676aa9d86b00c54145adaabb579b09ba23423f Mon Sep 17 00:00:00 2001 From: Nelson Li Date: Thu, 26 Dec 2024 02:56:45 +0000 Subject: [PATCH 06/25] Refactor: Use googleDeviceConfig namespace in gs201 BoardConfig Replaces the `CitadelProvision` Soong config namespace with the more generic `googleDeviceConfig` in device/google/gs201/BoardConfig-common.mk. This improves clarity and consistency, as the namespace is used for configurations beyond Citadel-related functionality. Flag: EXEMPT refactor Bug: 386114735 Test: m CitadelProvision Change-Id: If4b3428b391762e65fbf6631f7bd60e02d73b250 --- BoardConfig-common.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 4d34a7df..b55906f8 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -22,7 +22,7 @@ TARGET_SOC := gs201 TARGET_SOC_NAME := google USES_DEVICE_GOOGLE_GS201 := true -$(call soong_config_set,CitadelProvision,target_soc,gs201) +$(call soong_config_set,googleDeviceConfig,target_soc,gs201) TARGET_ARCH := arm64 TARGET_ARCH_VARIANT := armv8-2a From ff2584a9ace4694702e2b030ca3d6131e3b7e9b8 Mon Sep 17 00:00:00 2001 From: Hung-Yeh Lee Date: Wed, 4 Dec 2024 14:52:48 +0800 Subject: [PATCH 07/25] display-dump: make display dump project-specific Bug: 376426334 Test: adb bugreport Test: adb shell /vendor/bin/dump/dump_*_display Test: adb shell /vendor/bin/dump/dump_*_second_display Flag: EXEMPT bugfix Change-Id: I838f95abc934644063fd0c46e8106af4dbb105f8 --- device.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.mk b/device.mk index 5b2e734c..6ef1b9dc 100644 --- a/device.mk +++ b/device.mk @@ -25,7 +25,7 @@ include device/google/gs-common/thermal/dump/thermal.mk include device/google/gs-common/thermal/thermal_hal/device.mk include device/google/gs-common/pixel_metrics/pixel_metrics.mk include device/google/gs-common/performance/perf.mk -include device/google/gs-common/display/dump.mk +include device/google/gs-common/display/dump_exynos_display.mk include device/google/gs-common/camera/dump.mk include device/google/gs-common/gxp/gxp.mk include device/google/gs-common/gps/dump/log.mk From 341185cc5f0c03f3fc02096febcbe3ab6e415595 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 20 Dec 2024 08:11:38 +0000 Subject: [PATCH 08/25] Update IDisplay to V13-V14 V14 is not frozen yet. We should still allow V13 for 'next' build. Bug: 381463038 Bug: 378407278 Test: build pass Flag: EXEMPT bugfix Change-Id: Ieffe2c96ce2225560815158a8e89975e19f16499 --- device_framework_matrix_product.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device_framework_matrix_product.xml b/device_framework_matrix_product.xml index c0b4deb2..f4410c13 100644 --- a/device_framework_matrix_product.xml +++ b/device_framework_matrix_product.xml @@ -78,7 +78,7 @@ com.google.hardware.pixel.display - 13 + 13-14 IDisplay default From bfd81c690795985aceb496be75b46d6439325df8 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Sat, 21 Dec 2024 15:41:16 +0000 Subject: [PATCH 09/25] Remove ResetUclamp profiles Replaced with sched qos profiles. Bug: 355612114 Flag: NONE vendor task_profiles.json does not support flag Test: build pass Change-Id: I025a31b3303acc409b74e3f33ce589f68ae2385e --- task_profiles.json | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/task_profiles.json b/task_profiles.json index 103ff202..e02ea3ef 100644 --- a/task_profiles.json +++ b/task_profiles.json @@ -461,34 +461,6 @@ } ] }, - { - "Name": "ResetUclampGrp", - "Actions": [ - { - "Name": "WriteFile", - "Params": - { - "FilePath": "/proc/vendor_sched/uclamp_fork_reset_set", - "Value": "", - "LogFailures": "false" - } - } - ] - }, - { - "Name": "NoResetUclampGrp", - "Actions": [ - { - "Name": "WriteFile", - "Params": - { - "FilePath": "/proc/vendor_sched/uclamp_fork_reset_clear", - "Value": "", - "LogFailures": "false" - } - } - ] - }, { "Name": "HighestCfsPrioScheduling", "Actions": [ From 912edf74cd0b1e7b47fe28a1652adc0060a94df7 Mon Sep 17 00:00:00 2001 From: "T.J. Mercier" Date: Fri, 27 Dec 2024 00:41:53 +0000 Subject: [PATCH 10/25] Revert "Disable memcg" This reverts commit e00a9b20998b1989022712c22ec301055d02791e. This is being temporarily reverted as part of a data-collection experiment. We expect to reapply this before the final 25Q2 TOT snap. Bug: 384577842 Flag: NONE Beta experiment: go/android-memcgv2-exp Change-Id: I6b40e7c0e7de45011659a6d55f078904e569e5f3 --- BoardConfig-common.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index b55906f8..405c1714 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -46,7 +46,6 @@ TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a53 BOARD_KERNEL_CMDLINE += dyndbg=\"func alloc_contig_dump_pages +p\" BOARD_KERNEL_CMDLINE += earlycon=exynos4210,0x10A00000 console=ttySAC0,115200 androidboot.console=ttySAC0 printk.devkmsg=on BOARD_KERNEL_CMDLINE += cma_sysfs.experimental=Y -BOARD_KERNEL_CMDLINE += cgroup_disable=memory BOARD_KERNEL_CMDLINE += rcupdate.rcu_expedited=1 rcu_nocbs=all rcutree.enable_rcu_lazy BOARD_KERNEL_CMDLINE += stack_depot_disable=off page_pinner=on BOARD_KERNEL_CMDLINE += swiotlb=1024 From ad503a021691736bb0fea9130b672c010677b367 Mon Sep 17 00:00:00 2001 From: Nelson Li Date: Wed, 8 Jan 2025 04:04:41 +0000 Subject: [PATCH 11/25] To ensure that gs201's init_dpm.sh is only built for gs201 devices. After confirmation, devices where `USES_DEVICE_GOOGLE_GS201` is true will ultimately include device/google/gs201/device.mk. Therefore, setting PRODUCT_SOONG_NAMESPACES in this file can prevent misuse by other devices. Flag: EXEMPT refactor Bug: 385999805 Test: lunch gs201 products; m -j init_dpm.sh Change-Id: Ic4283242786222bbf734cea7d91f6d230e12b6f6 --- device.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/device.mk b/device.mk index 6ef1b9dc..fc210617 100644 --- a/device.mk +++ b/device.mk @@ -74,6 +74,7 @@ PRODUCT_SOONG_NAMESPACES += \ device/google/gs201 \ device/google/gs201/powerstats \ vendor/google_devices/common/chre/host/hal \ + vendor/google_devices/gs201/proprietary/debugpolicy \ vendor/google/whitechapel/tools \ vendor/google/interfaces \ vendor/google_nos/host/android \ From 840c1c9e2f2c001c918aeb6d9b83504ef4c279ae Mon Sep 17 00:00:00 2001 From: Yi-Yo Chiang Date: Thu, 9 Jan 2025 18:42:20 +0800 Subject: [PATCH 12/25] init-display-sh: Allow writing to kmsg modprobe would log errors to /dev/kmsg, need to explicit allow this. Bug: 388717752 Test: DeviceBootTest#SELinuxUncheckedDenialBootTest Change-Id: I142a20b0af9008956ad2325caef70e85b1463f41 --- conf/init.gs201.rc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/init.gs201.rc b/conf/init.gs201.rc index 9223edd5..29a04127 100644 --- a/conf/init.gs201.rc +++ b/conf/init.gs201.rc @@ -846,6 +846,7 @@ service init_display /vendor/bin/init.display.sh group root system disabled oneshot + file /dev/kmsg w # bugreport is triggered by holding down volume down, volume up and power service bugreport /system/bin/dumpstate -d -p -z From e2813a44078d7d085faee662f1c8ab073780950a Mon Sep 17 00:00:00 2001 From: Spade Lee Date: Fri, 27 Dec 2024 06:55:00 +0000 Subject: [PATCH 13/25] pixelstats: gs201: remove firmware update path Bug: 386187651 Test: local test pass Flag: EXEMPT refactor Change-Id: I725b2c87cfff8b81915fa094678f7a56669cf095 Signed-off-by: Spade Lee --- pixelstats/service.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pixelstats/service.cpp b/pixelstats/service.cpp index 270a70af..c0a6362b 100644 --- a/pixelstats/service.cpp +++ b/pixelstats/service.cpp @@ -107,8 +107,7 @@ const struct SysfsCollector::SysfsPaths sysfs_paths = { const struct UeventListener::UeventPaths ueventPaths = { .AudioUevent = "/devices/virtual/amcs/amcs", - .TypeCPartnerUevent = "PRODUCT_TYPE=", - .FwUpdatePath = "" + .TypeCPartnerUevent = "PRODUCT_TYPE=" }; int main() { From 4dd8c64713f9f004c2678e2a65f815e994dfcb12 Mon Sep 17 00:00:00 2001 From: Hsiu-Chang Chen Date: Mon, 13 Jan 2025 21:33:52 -0800 Subject: [PATCH 14/25] Enable WIFI_FEATURE_HOSTAPD_11AX In the past, the WIFI_FEATURE_HOSTAPD_11AX flag was ineffective. Because hostapd takes the value of CONFIG_IEEE80211AX to enable 11ax mode on hotspot, the unset flag WIFI_FEATURE_HOSTAPD_11AX went unnoticed. However, after wpa_supplicant migrated from Android.mk to Android.bp, it correctly evaluates WIFI_FEATURE_HOSTAPD_11AX to determine 11ax hotspot support. We need to set WIFI_FEATURE_HOSTAPD_11AX as true to re-enable the 11ax mode on hotspot. Bug: 389824755 Test: Hotspot is enabled in 11ax mode Flag: EXEMPT bugfix Change-Id: I635575b77a5f149605eaeb22046fbabe71955952 --- wifi/qcom/BoardConfig-wifi.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wifi/qcom/BoardConfig-wifi.mk b/wifi/qcom/BoardConfig-wifi.mk index 18fc6d5d..13692770 100644 --- a/wifi/qcom/BoardConfig-wifi.mk +++ b/wifi/qcom/BoardConfig-wifi.mk @@ -37,7 +37,7 @@ WIFI_FEATURE_IMU_DETECTION := true WIFI_HIDL_UNIFIED_SUPPLICANT_SERVICE_RC_ENTRY := true # Avoid Wifi reset on MAC Address change # WIFI_AVOID_IFACE_RESET_MAC_CHANGE := true -# WIFI_FEATURE_HOSTAPD_11AX := true +WIFI_FEATURE_HOSTAPD_11AX := true WIFI_DRIVER_STATE_CTRL_PARAM := "/dev/wlan" WIFI_DRIVER_STATE_ON := "ON" WIFI_DRIVER_STATE_OFF := "OFF" From 987a1e0a993c1d077e6381fdde303ef129fab9d2 Mon Sep 17 00:00:00 2001 From: Piotr Klasa Date: Wed, 8 Jan 2025 17:48:26 +0100 Subject: [PATCH 15/25] move common init perf settings to gs_common MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test: Verified if all values ​​of transferred settings are as they should be after rebooting the device, and and checked that there are no new selinux errors for hal_power_default Bug: 335874870 Flag: EXEMPT not supported by this component yet Change-Id: I4b5ac2fb09533a87cf8dda9f2364d1fe8ab9acc9 --- conf/init.gs201.rc | 59 ---------------------------------------------- 1 file changed, 59 deletions(-) diff --git a/conf/init.gs201.rc b/conf/init.gs201.rc index 59bc55a3..c6a18ca7 100644 --- a/conf/init.gs201.rc +++ b/conf/init.gs201.rc @@ -15,8 +15,6 @@ on init # CPU0 cannot be offline chmod 0444 /sys/devices/system/cpu/cpu0/online - # Set teo as cpu idle governor - write /sys/devices/system/cpu/cpuidle/current_governor teo # Disable util-awareness write /proc/vendor_sched/teo_util_threshold "1024 1024 1024" @@ -108,15 +106,6 @@ on init write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu6_memlat@17000010/memlat_cpuidle_state_aware 2 write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu7_memlat@17000010/memlat_cpuidle_state_aware 2 - # RT uclamp setting - write /proc/sys/kernel/sched_util_clamp_min_rt_default 0 - - # change permissions and default values for camera-daemon cpu controller - chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.min - chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.max - chown root root /dev/cpuctl/camera-daemon/cpu.uclamp.latency_sensitive - chown system system /dev/cpuctl/camera-daemon/cgroup.procs - mkdir /dev/cpuset/camera-daemon-high-group write /dev/cpuset/camera-daemon-high-group/cpus 0-7 write /dev/cpuset/camera-daemon-high-group/mems 0 @@ -135,11 +124,6 @@ on init chown system system /dev/cpuset/camera-daemon-mid-high-group/tasks chmod 0664 /dev/cpuset/camera-daemon-mid-high-group/tasks - write /proc/vendor_sched/groups/cam/prefer_idle 1 - write /proc/vendor_sched/groups/cam/uclamp_min 1 - - chown system system /dev/cpuset/cgroup.procs - # nanohub sensor chmod 0664 /dev/nanohub chmod 0664 /dev/nanohub_comms @@ -235,10 +219,6 @@ on init # Power Stats HAL chown system system /dev/bbd_pwrstat - # Add a boost for NNAPI HAL - write /proc/vendor_sched/groups/nnapi/prefer_idle 0 - write /proc/vendor_sched/groups/nnapi/uclamp_min 512 - # Add memlat governor settings write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu0_memlat@17000010/polling_interval 10 write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu1_memlat@17000010/polling_interval 10 @@ -622,27 +602,6 @@ on property:sys.boot_completed=1 write /dev/cpuset/camera-daemon/cpus ${persist.device_config.vendor_system_native.camera-daemon_cpuset:-0-7} setprop vendor.powerhal.init 1 - # Setup scheduler parameters - write /proc/vendor_sched/min_granularity_ns 1000000 - write /proc/vendor_sched/latency_ns 8000000 - write /proc/vendor_sched/max_load_balance_interval 1 - write /proc/vendor_sched/enable_hrtick 1 - - # Setup final cpu.uclamp - write /proc/vendor_sched/groups/ta/uclamp_min 1 - write /proc/vendor_sched/groups/fg/uclamp_min 0 - write /proc/vendor_sched/groups/sys/prefer_idle 0 - - # Set ug group - write /proc/vendor_sched/groups/bg/ug 0 - write /proc/vendor_sched/groups/sys_bg/ug 0 - write /proc/vendor_sched/groups/ota/ug 0 - write /proc/vendor_sched/groups/dex2oat/ug 1 - write /proc/vendor_sched/groups/ta/ug 1 - - # Set bg group throttle - write /proc/vendor_sched/ug_bg_group_throttle ${persist.device_config.vendor_system_native.ug_bg_group_throttle:-308} - # Set uclamp.max for some groups, which could indicate cpu importance used in scheduling write /proc/vendor_sched/groups/bg/uclamp_max 512 write /proc/vendor_sched/groups/sys_bg/uclamp_max 512 @@ -661,12 +620,6 @@ on property:sys.boot_completed=1 write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/limit_frequency 2507000 write /proc/vendor_sched/pmu_poll_time 10 - # Disable PMU freq limit - write /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/pmu_limit_enable 1 - write /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/pmu_limit_enable 1 - write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/pmu_limit_enable 1 - write /proc/vendor_sched/pmu_poll_enable 0 - # Make devices on the critical path for suspend/resume asynchronous write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-21/21-002f/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-21/power/async "enabled" @@ -682,18 +635,6 @@ on property:sys.boot_completed=1 write /sys/devices/platform/18062080.pd-hsi0/power/async "enabled" write /sys/devices/platform/14460000.pinctrl/power/async "enabled" - # Setup cpu.shares to throttle background groups (bg ~ 5% sysbg ~ 5% dex2oat ~2.5%) - write /dev/cpuctl/background/cpu.shares 1024 - write /dev/cpuctl/system-background/cpu.shares 1024 - write /dev/cpuctl/dex2oat/cpu.shares 512 - write /dev/cpuctl/system/cpu.shares 20480 - # We only have system and background groups holding tasks and the groups below are empty - write /dev/cpuctl/camera-daemon/cpu.shares 20480 - write /dev/cpuctl/foreground/cpu.shares 20480 - write /dev/cpuctl/nnapi-hal/cpu.shares 20480 - write /dev/cpuctl/rt/cpu.shares 20480 - write /dev/cpuctl/top-app/cpu.shares 20480 - # gvotables for dumpstate chown system system /sys/kernel/debug/gvotables From ef8acb1d894bed8255b342a69041a7f4db5b64cd Mon Sep 17 00:00:00 2001 From: Piotr Klasa Date: Fri, 17 Jan 2025 09:05:39 -0800 Subject: [PATCH 16/25] Revert "move common init perf settings to gs_common" Revert submission 31215196-move_common_init_perf_settings_to_gscommon Reason for revert: Power Regression Reverted changes: /q/submissionid:31215196-move_common_init_perf_settings_to_gscommon Bug: 390502171 Change-Id: Iaa850d2793ec0fd3131f9c27af4d7448a4ea90eb --- conf/init.gs201.rc | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/conf/init.gs201.rc b/conf/init.gs201.rc index 3a2e5e94..c5729249 100644 --- a/conf/init.gs201.rc +++ b/conf/init.gs201.rc @@ -15,6 +15,8 @@ on init # CPU0 cannot be offline chmod 0444 /sys/devices/system/cpu/cpu0/online + # Set teo as cpu idle governor + write /sys/devices/system/cpu/cpuidle/current_governor teo # Disable util-awareness write /proc/vendor_sched/teo_util_threshold "1024 1024 1024" @@ -106,6 +108,15 @@ on init write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu6_memlat@17000010/memlat_cpuidle_state_aware 2 write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu7_memlat@17000010/memlat_cpuidle_state_aware 2 + # RT uclamp setting + write /proc/sys/kernel/sched_util_clamp_min_rt_default 0 + + # change permissions and default values for camera-daemon cpu controller + chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.min + chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.max + chown root root /dev/cpuctl/camera-daemon/cpu.uclamp.latency_sensitive + chown system system /dev/cpuctl/camera-daemon/cgroup.procs + mkdir /dev/cpuset/camera-daemon-high-group write /dev/cpuset/camera-daemon-high-group/cpus 0-7 write /dev/cpuset/camera-daemon-high-group/mems 0 @@ -124,6 +135,11 @@ on init chown system system /dev/cpuset/camera-daemon-mid-high-group/tasks chmod 0664 /dev/cpuset/camera-daemon-mid-high-group/tasks + write /proc/vendor_sched/groups/cam/prefer_idle 1 + write /proc/vendor_sched/groups/cam/uclamp_min 1 + + chown system system /dev/cpuset/cgroup.procs + # nanohub sensor chmod 0664 /dev/nanohub chmod 0664 /dev/nanohub_comms @@ -219,6 +235,10 @@ on init # Power Stats HAL chown system system /dev/bbd_pwrstat + # Add a boost for NNAPI HAL + write /proc/vendor_sched/groups/nnapi/prefer_idle 0 + write /proc/vendor_sched/groups/nnapi/uclamp_min 512 + # Add memlat governor settings write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu0_memlat@17000010/polling_interval 10 write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu1_memlat@17000010/polling_interval 10 @@ -602,6 +622,27 @@ on property:sys.boot_completed=1 write /dev/cpuset/camera-daemon/cpus ${persist.device_config.vendor_system_native.camera-daemon_cpuset:-0-7} setprop vendor.powerhal.init 1 + # Setup scheduler parameters + write /proc/vendor_sched/min_granularity_ns 1000000 + write /proc/vendor_sched/latency_ns 8000000 + write /proc/vendor_sched/max_load_balance_interval 1 + write /proc/vendor_sched/enable_hrtick 1 + + # Setup final cpu.uclamp + write /proc/vendor_sched/groups/ta/uclamp_min 1 + write /proc/vendor_sched/groups/fg/uclamp_min 0 + write /proc/vendor_sched/groups/sys/prefer_idle 0 + + # Set ug group + write /proc/vendor_sched/groups/bg/ug 0 + write /proc/vendor_sched/groups/sys_bg/ug 0 + write /proc/vendor_sched/groups/ota/ug 0 + write /proc/vendor_sched/groups/dex2oat/ug 1 + write /proc/vendor_sched/groups/ta/ug 1 + + # Set bg group throttle + write /proc/vendor_sched/ug_bg_group_throttle ${persist.device_config.vendor_system_native.ug_bg_group_throttle:-308} + # Set uclamp.max for some groups, which could indicate cpu importance used in scheduling write /proc/vendor_sched/groups/bg/uclamp_max 512 write /proc/vendor_sched/groups/sys_bg/uclamp_max 512 @@ -620,6 +661,12 @@ on property:sys.boot_completed=1 write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/limit_frequency 2507000 write /proc/vendor_sched/pmu_poll_time 10 + # Disable PMU freq limit + write /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/pmu_limit_enable 1 + write /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/pmu_limit_enable 1 + write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/pmu_limit_enable 1 + write /proc/vendor_sched/pmu_poll_enable 0 + # Make devices on the critical path for suspend/resume asynchronous write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-21/21-002f/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-21/power/async "enabled" @@ -635,6 +682,18 @@ on property:sys.boot_completed=1 write /sys/devices/platform/18062080.pd-hsi0/power/async "enabled" write /sys/devices/platform/14460000.pinctrl/power/async "enabled" + # Setup cpu.shares to throttle background groups (bg ~ 5% sysbg ~ 5% dex2oat ~2.5%) + write /dev/cpuctl/background/cpu.shares 1024 + write /dev/cpuctl/system-background/cpu.shares 1024 + write /dev/cpuctl/dex2oat/cpu.shares 512 + write /dev/cpuctl/system/cpu.shares 20480 + # We only have system and background groups holding tasks and the groups below are empty + write /dev/cpuctl/camera-daemon/cpu.shares 20480 + write /dev/cpuctl/foreground/cpu.shares 20480 + write /dev/cpuctl/nnapi-hal/cpu.shares 20480 + write /dev/cpuctl/rt/cpu.shares 20480 + write /dev/cpuctl/top-app/cpu.shares 20480 + # gvotables for dumpstate chown system system /sys/kernel/debug/gvotables From 9668f01a21ac8d0569da6d90015f3cbb03cd19bc Mon Sep 17 00:00:00 2001 From: Piotr Klasa Date: Wed, 22 Jan 2025 11:26:57 +0000 Subject: [PATCH 17/25] move common init perf settings to gs_common MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit compared to ag/31352563 I did not transfer the settings for "write /sys/devices/system/cpu/cpuidle/current_governor teo", which caused the problem Test: Verified if all values ​​of transferred settings are as they should be after rebooting the device, and and checked that there are no new selinux errors for hal_power_default, verified all metrics that caused power regression in the previous commit on abtd Bug: 335874870 Flag: EXEMPT not supported by this component yet Change-Id: I1a02046901f33f3a45f5dfda1568275503ae9c22 --- conf/init.gs201.rc | 57 ---------------------------------------------- 1 file changed, 57 deletions(-) diff --git a/conf/init.gs201.rc b/conf/init.gs201.rc index c5729249..f1eb4de8 100644 --- a/conf/init.gs201.rc +++ b/conf/init.gs201.rc @@ -108,15 +108,6 @@ on init write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu6_memlat@17000010/memlat_cpuidle_state_aware 2 write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu7_memlat@17000010/memlat_cpuidle_state_aware 2 - # RT uclamp setting - write /proc/sys/kernel/sched_util_clamp_min_rt_default 0 - - # change permissions and default values for camera-daemon cpu controller - chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.min - chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.max - chown root root /dev/cpuctl/camera-daemon/cpu.uclamp.latency_sensitive - chown system system /dev/cpuctl/camera-daemon/cgroup.procs - mkdir /dev/cpuset/camera-daemon-high-group write /dev/cpuset/camera-daemon-high-group/cpus 0-7 write /dev/cpuset/camera-daemon-high-group/mems 0 @@ -135,11 +126,6 @@ on init chown system system /dev/cpuset/camera-daemon-mid-high-group/tasks chmod 0664 /dev/cpuset/camera-daemon-mid-high-group/tasks - write /proc/vendor_sched/groups/cam/prefer_idle 1 - write /proc/vendor_sched/groups/cam/uclamp_min 1 - - chown system system /dev/cpuset/cgroup.procs - # nanohub sensor chmod 0664 /dev/nanohub chmod 0664 /dev/nanohub_comms @@ -235,10 +221,6 @@ on init # Power Stats HAL chown system system /dev/bbd_pwrstat - # Add a boost for NNAPI HAL - write /proc/vendor_sched/groups/nnapi/prefer_idle 0 - write /proc/vendor_sched/groups/nnapi/uclamp_min 512 - # Add memlat governor settings write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu0_memlat@17000010/polling_interval 10 write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu1_memlat@17000010/polling_interval 10 @@ -622,27 +604,6 @@ on property:sys.boot_completed=1 write /dev/cpuset/camera-daemon/cpus ${persist.device_config.vendor_system_native.camera-daemon_cpuset:-0-7} setprop vendor.powerhal.init 1 - # Setup scheduler parameters - write /proc/vendor_sched/min_granularity_ns 1000000 - write /proc/vendor_sched/latency_ns 8000000 - write /proc/vendor_sched/max_load_balance_interval 1 - write /proc/vendor_sched/enable_hrtick 1 - - # Setup final cpu.uclamp - write /proc/vendor_sched/groups/ta/uclamp_min 1 - write /proc/vendor_sched/groups/fg/uclamp_min 0 - write /proc/vendor_sched/groups/sys/prefer_idle 0 - - # Set ug group - write /proc/vendor_sched/groups/bg/ug 0 - write /proc/vendor_sched/groups/sys_bg/ug 0 - write /proc/vendor_sched/groups/ota/ug 0 - write /proc/vendor_sched/groups/dex2oat/ug 1 - write /proc/vendor_sched/groups/ta/ug 1 - - # Set bg group throttle - write /proc/vendor_sched/ug_bg_group_throttle ${persist.device_config.vendor_system_native.ug_bg_group_throttle:-308} - # Set uclamp.max for some groups, which could indicate cpu importance used in scheduling write /proc/vendor_sched/groups/bg/uclamp_max 512 write /proc/vendor_sched/groups/sys_bg/uclamp_max 512 @@ -661,12 +622,6 @@ on property:sys.boot_completed=1 write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/limit_frequency 2507000 write /proc/vendor_sched/pmu_poll_time 10 - # Disable PMU freq limit - write /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/pmu_limit_enable 1 - write /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/pmu_limit_enable 1 - write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/pmu_limit_enable 1 - write /proc/vendor_sched/pmu_poll_enable 0 - # Make devices on the critical path for suspend/resume asynchronous write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-21/21-002f/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-21/power/async "enabled" @@ -682,18 +637,6 @@ on property:sys.boot_completed=1 write /sys/devices/platform/18062080.pd-hsi0/power/async "enabled" write /sys/devices/platform/14460000.pinctrl/power/async "enabled" - # Setup cpu.shares to throttle background groups (bg ~ 5% sysbg ~ 5% dex2oat ~2.5%) - write /dev/cpuctl/background/cpu.shares 1024 - write /dev/cpuctl/system-background/cpu.shares 1024 - write /dev/cpuctl/dex2oat/cpu.shares 512 - write /dev/cpuctl/system/cpu.shares 20480 - # We only have system and background groups holding tasks and the groups below are empty - write /dev/cpuctl/camera-daemon/cpu.shares 20480 - write /dev/cpuctl/foreground/cpu.shares 20480 - write /dev/cpuctl/nnapi-hal/cpu.shares 20480 - write /dev/cpuctl/rt/cpu.shares 20480 - write /dev/cpuctl/top-app/cpu.shares 20480 - # gvotables for dumpstate chown system system /sys/kernel/debug/gvotables From 07898b75d8ea43a4a414efc67e241feddb7e84f3 Mon Sep 17 00:00:00 2001 From: Masha Chizhova Date: Tue, 28 Jan 2025 16:42:35 +0000 Subject: [PATCH 18/25] Use 2025-03-01 deqp levels for GLES and Vulkan Bug: 392805030 Flag: EXEMPT version updates Change-Id: I9b717e9785c7cf7d9fc05dd54d52a60109853bd9 --- device.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/device.mk b/device.mk index fc210617..8880cf4d 100644 --- a/device.mk +++ b/device.mk @@ -282,8 +282,8 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.vulkan.version-1_3.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \ frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \ frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \ - frameworks/native/data/etc/android.software.vulkan.deqp.level-2024-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ - frameworks/native/data/etc/android.software.opengles.deqp.level-2024-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml + frameworks/native/data/etc/android.software.vulkan.deqp.level-2025-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ + frameworks/native/data/etc/android.software.opengles.deqp.level-2025-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml ifeq ($(USE_SWIFTSHADER),true) PRODUCT_PACKAGES += \ From effb0f85b2dede2519b7478454048de0cc4a4227 Mon Sep 17 00:00:00 2001 From: "Priyanka Advani (xWF)" Date: Thu, 30 Jan 2025 10:53:05 -0800 Subject: [PATCH 19/25] Revert "Use 2025-03-01 deqp levels for GLES and Vulkan" Revert submission 31488081-deqp-2025-03-01 Reason for revert: Droidmonitor created revert due to b/393355394. Will be verifying through ABTD before submission. Reverted changes: /q/submissionid:31488081-deqp-2025-03-01 Change-Id: I4d09a125db5b5fdcdb1c22d27da510f8d8945870 --- device.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/device.mk b/device.mk index 8880cf4d..fc210617 100644 --- a/device.mk +++ b/device.mk @@ -282,8 +282,8 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.vulkan.version-1_3.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \ frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \ frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \ - frameworks/native/data/etc/android.software.vulkan.deqp.level-2025-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ - frameworks/native/data/etc/android.software.opengles.deqp.level-2025-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml + frameworks/native/data/etc/android.software.vulkan.deqp.level-2024-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ + frameworks/native/data/etc/android.software.opengles.deqp.level-2024-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml ifeq ($(USE_SWIFTSHADER),true) PRODUCT_PACKAGES += \ From de3388502dc9253d70f4301b6bc5c65cf14737b9 Mon Sep 17 00:00:00 2001 From: Masha Chizhova Date: Fri, 31 Jan 2025 11:39:43 +0000 Subject: [PATCH 20/25] Use 2025-03-01 deqp levels for Vulkan Bug: 392805030 Flag: EXEMPT version updates Change-Id: I2363141207673fb6f3a245f40065ab2938cc38c8 --- device.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.mk b/device.mk index fc210617..3ebbc6f4 100644 --- a/device.mk +++ b/device.mk @@ -282,7 +282,7 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.vulkan.version-1_3.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \ frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \ frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \ - frameworks/native/data/etc/android.software.vulkan.deqp.level-2024-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ + frameworks/native/data/etc/android.software.vulkan.deqp.level-2025-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ frameworks/native/data/etc/android.software.opengles.deqp.level-2024-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml ifeq ($(USE_SWIFTSHADER),true) From 27d29453605f9934cbddce2a8946324fa3edc8b0 Mon Sep 17 00:00:00 2001 From: Masha Chizhova Date: Mon, 3 Feb 2025 11:03:45 +0000 Subject: [PATCH 21/25] Use 2025-03-01 deqp level for GLES Bug: 392805030 Flag: EXEMPT version updates Change-Id: I08f0af75ac8b57222deff8ef88960082e6b6631e --- device.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.mk b/device.mk index 3ebbc6f4..8880cf4d 100644 --- a/device.mk +++ b/device.mk @@ -283,7 +283,7 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \ frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \ frameworks/native/data/etc/android.software.vulkan.deqp.level-2025-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ - frameworks/native/data/etc/android.software.opengles.deqp.level-2024-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml + frameworks/native/data/etc/android.software.opengles.deqp.level-2025-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml ifeq ($(USE_SWIFTSHADER),true) PRODUCT_PACKAGES += \ From 3073fb95af92528038c279f34566480c85232280 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Thu, 23 Jan 2025 05:22:58 +0000 Subject: [PATCH 22/25] usb: migrate UsbDataSessionMonitor to libpixelusb Use the libpixelusb version of UsbDataSessionMonitor. Bug: 388367091 Test: test on cheetah Flag: EXEMPT CP Change-Id: I93b74fc9bb63c260e900ee5af73e66fb1559142d --- usb/usb/Android.bp | 10 +- usb/usb/Usb.cpp | 8 +- usb/usb/Usb.h | 5 +- usb/usb/UsbDataSessionMonitor.cpp | 508 ------------------------------ usb/usb/UsbDataSessionMonitor.h | 117 ------- 5 files changed, 9 insertions(+), 639 deletions(-) delete mode 100644 usb/usb/UsbDataSessionMonitor.cpp delete mode 100644 usb/usb/UsbDataSessionMonitor.h diff --git a/usb/usb/Android.bp b/usb/usb/Android.bp index 6b24cb57..83a62917 100644 --- a/usb/usb/Android.bp +++ b/usb/usb/Android.bp @@ -34,7 +34,6 @@ cc_binary { srcs: [ "service.cpp", "Usb.cpp", - "UsbDataSessionMonitor.cpp", ], shared_libs: [ "libbase", @@ -60,18 +59,13 @@ cc_binary { ], static_libs: [ "libpixelusb-aidl", + "libpixelusb-datasession", "libpixelstats", "libthermalutils", - "android.hardware.usb.flags-aconfig-c-lib", + "android.hardware.usb.flags-aconfig-cc-lib", ], export_shared_lib_headers: [ "android.frameworks.stats-V2-ndk", "pixelatoms-cpp", ], } - -cc_aconfig_library { - name: "android.hardware.usb.flags-aconfig-c-lib", - vendor: true, - aconfig_declarations: "android.hardware.usb.flags-aconfig", -} diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index 530abb8c..37795247 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -565,9 +565,9 @@ Usb::Usb() mRoleSwitchLock(PTHREAD_MUTEX_INITIALIZER), mPartnerLock(PTHREAD_MUTEX_INITIALIZER), mPartnerUp(false), - mUsbDataSessionMonitor(kUdcUeventRegex, kUdcStatePath, kHost1UeventRegex, kHost1StatePath, - kHost2UeventRegex, kHost2StatePath, kDataRolePath, - std::bind(&updatePortStatus, this)), + mUsbDataSessionMonitor(new UsbDataSessionMonitor(kUdcUeventRegex, kUdcStatePath, + kHost1UeventRegex, kHost1StatePath, kHost2UeventRegex, + kHost2StatePath, kDataRolePath, std::bind(&updatePortStatus, this))), mOverheat(ZoneInfo(TemperatureType::USB_PORT, kThermalZoneForTrip, ThrottlingSeverity::CRITICAL), {ZoneInfo(TemperatureType::UNKNOWN, kThermalZoneForTempReadPrimary, @@ -977,7 +977,7 @@ void queryUsbDataSession(android::hardware::usb::Usb *usb, std::vector *currentPortStatus) { std::vector warnings; - usb->mUsbDataSessionMonitor.getComplianceWarnings( + usb->mUsbDataSessionMonitor->getComplianceWarnings( (*currentPortStatus)[0].currentDataRole, &warnings); (*currentPortStatus)[0].complianceWarnings.insert( (*currentPortStatus)[0].complianceWarnings.end(), diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h index d6ed72e9..dca913d2 100644 --- a/usb/usb/Usb.h +++ b/usb/usb/Usb.h @@ -19,9 +19,9 @@ #include #include #include +#include #include #include -#include #define UEVENT_MSG_LEN 2048 // The type-c stack waits for 4.5 - 5.5 secs before declaring a port non-pd. @@ -39,6 +39,7 @@ using ::aidl::android::hardware::usb::IUsbCallback; using ::aidl::android::hardware::usb::PortRole; using ::android::base::ReadFileToString; using ::android::base::WriteStringToFile; +using ::android::hardware::google::pixel::usb::UsbDataSessionMonitor; using ::android::hardware::google::pixel::usb::UsbOverheatEvent; using ::android::hardware::google::pixel::usb::ZoneInfo; using ::android::hardware::thermal::V2_0::TemperatureType; @@ -91,7 +92,7 @@ struct Usb : public BnUsb { bool mPartnerUp; // Report usb data session event and data incompliance warnings - UsbDataSessionMonitor mUsbDataSessionMonitor; + std::unique_ptr mUsbDataSessionMonitor; // Usb Overheat object for push suez event UsbOverheatEvent mOverheat; // Temperature when connected diff --git a/usb/usb/UsbDataSessionMonitor.cpp b/usb/usb/UsbDataSessionMonitor.cpp deleted file mode 100644 index bff52f06..00000000 --- a/usb/usb/UsbDataSessionMonitor.cpp +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "android.hardware.usb.aidl-service.UsbDataSessionMonitor" - -#include "UsbDataSessionMonitor.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace usb_flags = android::hardware::usb::flags; - -using aidl::android::frameworks::stats::IStats; -using android::base::ReadFileToString; -using android::hardware::google::pixel::getStatsService; -using android::hardware::google::pixel::reportUsbDataSessionEvent; -using android::hardware::google::pixel::PixelAtoms::VendorUsbDataSessionEvent; -using android::hardware::google::pixel::usb::addEpollFd; -using android::hardware::google::pixel::usb::BuildVendorUsbDataSessionEvent; - -namespace aidl { -namespace android { -namespace hardware { -namespace usb { - -#define UEVENT_MSG_LEN 2048 -#define USB_STATE_MAX_LEN 20 -#define DATA_ROLE_MAX_LEN 10 -#define WARNING_SURFACE_DELAY_SEC 5 -#define ENUM_FAIL_DEFAULT_COUNT_THRESHOLD 3 -#define DEVICE_FLAKY_CONNECTION_CONFIGURED_COUNT_THRESHOLD 5 - -constexpr char kUdcConfigfsPath[] = "/config/usb_gadget/g1/UDC"; -constexpr char kNotAttachedState[] = "not attached\n"; -constexpr char kAttachedState[] = "attached\n"; -constexpr char kPoweredState[] = "powered\n"; -constexpr char kDefaultState[] = "default\n"; -constexpr char kAddressedState[] = "addressed\n"; -constexpr char kConfiguredState[] = "configured\n"; -constexpr char kSuspendedState[] = "suspended\n"; -const std::set kValidStates = {kNotAttachedState, kAttachedState, kPoweredState, - kDefaultState, kAddressedState, kConfiguredState, - kSuspendedState}; - -static int addEpollFile(const int &epollFd, const std::string &filePath, unique_fd &fileFd) { - struct epoll_event ev; - - unique_fd fd(open(filePath.c_str(), O_RDONLY)); - - if (fd.get() == -1) { - ALOGI("Cannot open %s", filePath.c_str()); - return -1; - } - - ev.data.fd = fd.get(); - ev.events = EPOLLPRI; - - if (epoll_ctl(epollFd, EPOLL_CTL_ADD, fd.get(), &ev) != 0) { - ALOGE("epoll_ctl failed; errno=%d", errno); - return -1; - } - - fileFd = std::move(fd); - ALOGI("epoll registered %s", filePath.c_str()); - return 0; -} - -static void removeEpollFile(const int &epollFd, const std::string &filePath, unique_fd &fileFd) { - epoll_ctl(epollFd, EPOLL_CTL_DEL, fileFd.get(), NULL); - fileFd.release(); - - ALOGI("epoll unregistered %s", filePath.c_str()); -} - -UsbDataSessionMonitor::UsbDataSessionMonitor( - const std::string &deviceUeventRegex, const std::string &deviceStatePath, - const std::string &host1UeventRegex, const std::string &host1StatePath, - const std::string &host2UeventRegex, const std::string &host2StatePath, - const std::string &dataRolePath, std::function updatePortStatusCb) { - struct epoll_event ev; - std::string udc; - - unique_fd epollFd(epoll_create(8)); - if (epollFd.get() == -1) { - ALOGE("epoll_create failed; errno=%d", errno); - abort(); - } - - unique_fd ueventFd(uevent_open_socket(64 * 1024, true)); - if (ueventFd.get() == -1) { - ALOGE("uevent_open_socket failed"); - abort(); - } - fcntl(ueventFd, F_SETFL, O_NONBLOCK); - - if (addEpollFd(epollFd, ueventFd)) - abort(); - - unique_fd timerFd(timerfd_create(CLOCK_BOOTTIME, TFD_NONBLOCK)); - if (timerFd.get() == -1) { - ALOGE("create timerFd failed"); - abort(); - } - - if (addEpollFd(epollFd, timerFd)) - abort(); - - if (addEpollFile(epollFd.get(), dataRolePath, mDataRoleFd) != 0) { - ALOGE("monitor data role failed"); - abort(); - } - - /* - * The device state file could be absent depending on the current data role - * and driver architecture. It's ok for addEpollFile to fail here, the file - * will be monitored later when its presence is detected by uevent. - */ - mDeviceState.filePath = deviceStatePath; - mDeviceState.ueventRegex = deviceUeventRegex; - addEpollFile(epollFd.get(), mDeviceState.filePath, mDeviceState.fd); - - mHost1State.filePath = host1StatePath; - mHost1State.ueventRegex = host1UeventRegex; - addEpollFile(epollFd.get(), mHost1State.filePath, mHost1State.fd); - - mHost2State.filePath = host2StatePath; - mHost2State.ueventRegex = host2UeventRegex; - addEpollFile(epollFd.get(), mHost2State.filePath, mHost2State.fd); - - mEpollFd = std::move(epollFd); - mUeventFd = std::move(ueventFd); - mTimerFd = std::move(timerFd); - mUpdatePortStatusCb = updatePortStatusCb; - - if (ReadFileToString(kUdcConfigfsPath, &udc) && !udc.empty()) - mUdcBind = true; - else - mUdcBind = false; - - if (pthread_create(&mMonitor, NULL, this->monitorThread, this)) { - ALOGE("pthread creation failed %d", errno); - abort(); - } - - ALOGI("feature flag enable_report_usb_data_compliance_warning: %d", - usb_flags::enable_report_usb_data_compliance_warning()); -} - -UsbDataSessionMonitor::~UsbDataSessionMonitor() {} - -void UsbDataSessionMonitor::reportUsbDataSessionMetrics() { - std::vector events; - - if (mDataRole == PortDataRole::DEVICE) { - VendorUsbDataSessionEvent event; - BuildVendorUsbDataSessionEvent(false /* is_host */, boot_clock::now(), mDataSessionStart, - &mDeviceState.states, &mDeviceState.timestamps, &event); - events.push_back(event); - } else if (mDataRole == PortDataRole::HOST) { - bool empty = true; - for (auto e : {&mHost1State, &mHost2State}) { - /* - * Host port will at least get an not_attached event after enablement, - * skip upload if no additional state is added. - */ - if (e->states.size() > 1) { - VendorUsbDataSessionEvent event; - BuildVendorUsbDataSessionEvent(true /* is_host */, boot_clock::now(), - mDataSessionStart, &e->states, &e->timestamps, - &event); - events.push_back(event); - empty = false; - } - } - // All host ports have no state update, upload an event to reflect it - if (empty) { - VendorUsbDataSessionEvent event; - BuildVendorUsbDataSessionEvent(true /* is_host */, boot_clock::now(), mDataSessionStart, - &mHost1State.states, &mHost1State.timestamps, &event); - events.push_back(event); - } - } else { - return; - } - - const std::shared_ptr stats_client = getStatsService(); - if (!stats_client) { - ALOGE("Unable to get AIDL Stats service"); - return; - } - - for (auto &event : events) { - reportUsbDataSessionEvent(stats_client, event); - } -} - -void UsbDataSessionMonitor::getComplianceWarnings(const PortDataRole &role, - std::vector *warnings) { - if (!usb_flags::enable_report_usb_data_compliance_warning()) - return; - - if (role != mDataRole || role == PortDataRole::NONE) - return; - - for (auto w : mWarningSet) { - warnings->push_back(w); - } -} - -void UsbDataSessionMonitor::notifyComplianceWarning() { - if (!usb_flags::enable_report_usb_data_compliance_warning()) - return; - - if (mUpdatePortStatusCb) - mUpdatePortStatusCb(); -} - -void UsbDataSessionMonitor::evaluateComplianceWarning() { - std::set newWarningSet; - int elapsedTimeSec; - - elapsedTimeSec = - std::chrono::duration_cast(boot_clock::now() - mDataSessionStart) - .count(); - - if (elapsedTimeSec >= WARNING_SURFACE_DELAY_SEC) { - if (mDataRole == PortDataRole::DEVICE && mUdcBind) { - int configuredCount = std::count(mDeviceState.states.begin(), - mDeviceState.states.end(), kConfiguredState); - int defaultCount = - std::count(mDeviceState.states.begin(), mDeviceState.states.end(), kDefaultState); - - if (configuredCount == 0 && defaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD) - newWarningSet.insert(ComplianceWarning::ENUMERATION_FAIL); - - if (configuredCount > DEVICE_FLAKY_CONNECTION_CONFIGURED_COUNT_THRESHOLD) - newWarningSet.insert(ComplianceWarning::FLAKY_CONNECTION); - } else if (mDataRole == PortDataRole::HOST) { - int host1StateCount = mHost1State.states.size(); - int host1ConfiguredCount = - std::count(mHost1State.states.begin(), mHost1State.states.end(), kConfiguredState); - int host1DefaultCount = - std::count(mHost1State.states.begin(), mHost1State.states.end(), kDefaultState); - int host2StateCount = mHost2State.states.size(); - int host2ConfiguredCount = - std::count(mHost2State.states.begin(), mHost2State.states.end(), kConfiguredState); - int host2DefaultCount = - std::count(mHost2State.states.begin(), mHost2State.states.end(), kDefaultState); - - if (host1ConfiguredCount == 0 && host2ConfiguredCount == 0 && - (host1DefaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD || - host2DefaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD)) - newWarningSet.insert(ComplianceWarning::ENUMERATION_FAIL); - - if (host1StateCount == 1 && mHost1State.states.front() == kNotAttachedState && - host2StateCount == 1 && mHost2State.states.front() == kNotAttachedState) - newWarningSet.insert(ComplianceWarning::MISSING_DATA_LINES); - } - } - - if (newWarningSet != mWarningSet) { - std::string newWarningString; - - for (auto e : newWarningSet) { - newWarningString += toString(e) + " "; - } - ALOGI("Usb data compliance warning changed to: %s", newWarningString.c_str()); - - mWarningSet = newWarningSet; - notifyComplianceWarning(); - } -} - -void UsbDataSessionMonitor::clearDeviceStateEvents(struct usbDeviceState *deviceState) { - deviceState->states.clear(); - deviceState->timestamps.clear(); -} - -void UsbDataSessionMonitor::handleDeviceStateEvent(struct usbDeviceState *deviceState) { - int n; - char state[USB_STATE_MAX_LEN] = {0}; - - lseek(deviceState->fd.get(), 0, SEEK_SET); - n = read(deviceState->fd.get(), &state, USB_STATE_MAX_LEN); - - if (kValidStates.find(state) == kValidStates.end()) { - ALOGE("Invalid state %s", state); - return; - } - - ALOGI("Update USB device state: %s", state); - - deviceState->states.push_back(state); - deviceState->timestamps.push_back(boot_clock::now()); - evaluateComplianceWarning(); -} - -void UsbDataSessionMonitor::setupNewSession() { - mWarningSet.clear(); - mDataSessionStart = boot_clock::now(); - - if (mDataRole == PortDataRole::DEVICE) { - clearDeviceStateEvents(&mDeviceState); - } else if (mDataRole == PortDataRole::HOST) { - clearDeviceStateEvents(&mHost1State); - clearDeviceStateEvents(&mHost2State); - } - - if (mDataRole != PortDataRole::NONE) { - struct itimerspec delay = itimerspec(); - delay.it_value.tv_sec = WARNING_SURFACE_DELAY_SEC; - int ret = timerfd_settime(mTimerFd.get(), 0, &delay, NULL); - if (ret < 0) - ALOGE("timerfd_settime failed err:%d", errno); - } -} - -void UsbDataSessionMonitor::handleDataRoleEvent() { - int n; - PortDataRole newDataRole; - char role[DATA_ROLE_MAX_LEN] = {0}; - - lseek(mDataRoleFd.get(), 0, SEEK_SET); - n = read(mDataRoleFd.get(), &role, DATA_ROLE_MAX_LEN); - - ALOGI("Update USB data role %s", role); - - if (!std::strcmp(role, "host")) { - newDataRole = PortDataRole::HOST; - } else if (!std::strcmp(role, "device")) { - newDataRole = PortDataRole::DEVICE; - } else { - newDataRole = PortDataRole::NONE; - } - - if (newDataRole != mDataRole) { - // Upload metrics for the last data session that has ended - if (mDataRole == PortDataRole::HOST || (mDataRole == PortDataRole::DEVICE && mUdcBind)) { - reportUsbDataSessionMetrics(); - } - - mDataRole = newDataRole; - setupNewSession(); - } -} - -void UsbDataSessionMonitor::updateUdcBindStatus(const std::string &devname) { - std::string function; - bool newUdcBind; - - /* - * /sys/class/udc//function prints out name of currently running USB gadget driver - * Ref: https://www.kernel.org/doc/Documentation/ABI/stable/sysfs-class-udc - * Empty name string means the udc device is not bound and gadget is pulldown. - */ - if (!ReadFileToString("/sys" + devname + "/function", &function)) - return; - - if (function == "") - newUdcBind = false; - else - newUdcBind = true; - - if (newUdcBind == mUdcBind) - return; - - if (mDataRole == PortDataRole::DEVICE) { - if (mUdcBind && !newUdcBind) { - /* - * Gadget soft pulldown: report metrics as the end of a data session and - * re-evaluate compliance warnings to clear existing warnings if any. - */ - reportUsbDataSessionMetrics(); - evaluateComplianceWarning(); - - } else if (!mUdcBind && newUdcBind) { - // Gadget soft pullup: reset and start accounting for a new data session. - setupNewSession(); - } - } - - ALOGI("Udc bind status changes from %b to %b", mUdcBind, newUdcBind); - mUdcBind = newUdcBind; -} - -void UsbDataSessionMonitor::handleUevent() { - char msg[UEVENT_MSG_LEN + 2]; - char *cp; - int n; - - n = uevent_kernel_multicast_recv(mUeventFd.get(), msg, UEVENT_MSG_LEN); - if (n <= 0) - return; - if (n >= UEVENT_MSG_LEN) - return; - - msg[n] = '\0'; - msg[n + 1] = '\0'; - cp = msg; - - while (*cp) { - for (auto e : {&mHost1State, &mHost2State}) { - if (std::regex_search(cp, std::regex(e->ueventRegex))) { - if (!strncmp(cp, "bind@", strlen("bind@"))) { - addEpollFile(mEpollFd.get(), e->filePath, e->fd); - } else if (!strncmp(cp, "unbind@", strlen("unbind@"))) { - removeEpollFile(mEpollFd.get(), e->filePath, e->fd); - } - } - } - - // TODO: support bind@ unbind@ to detect dynamically allocated udc device - if (std::regex_search(cp, std::regex(mDeviceState.ueventRegex))) { - if (!strncmp(cp, "change@", strlen("change@"))) { - char *devname = cp + strlen("change@"); - /* - * Udc device emits a KOBJ_CHANGE event on configfs driver bind and unbind. - * TODO: upstream udc driver emits KOBJ_CHANGE event BEFORE unbind is actually - * executed. Add a short delay to get the correct state while working on a fix - * upstream. - */ - usleep(50000); - updateUdcBindStatus(devname); - } - } - /* advance to after the next \0 */ - while (*cp++) { - } - } -} - -void UsbDataSessionMonitor::handleTimerEvent() { - int byteRead; - uint64_t numExpiration; - - byteRead = read(mTimerFd.get(), &numExpiration, sizeof(numExpiration)); - - if (byteRead != sizeof(numExpiration)) { - ALOGE("incorrect read size"); - } - - if (numExpiration != 1) { - ALOGE("incorrect expiration count"); - } - - evaluateComplianceWarning(); -} - -void *UsbDataSessionMonitor::monitorThread(void *param) { - UsbDataSessionMonitor *monitor = (UsbDataSessionMonitor *)param; - struct epoll_event events[64]; - int nevents = 0; - - while (true) { - nevents = epoll_wait(monitor->mEpollFd.get(), events, 64, -1); - if (nevents == -1) { - if (errno == EINTR) - continue; - ALOGE("usb epoll_wait failed; errno=%d", errno); - break; - } - - for (int n = 0; n < nevents; ++n) { - if (events[n].data.fd == monitor->mUeventFd.get()) { - monitor->handleUevent(); - } else if (events[n].data.fd == monitor->mTimerFd.get()) { - monitor->handleTimerEvent(); - } else if (events[n].data.fd == monitor->mDataRoleFd.get()) { - monitor->handleDataRoleEvent(); - } else if (events[n].data.fd == monitor->mDeviceState.fd.get()) { - monitor->handleDeviceStateEvent(&monitor->mDeviceState); - } else if (events[n].data.fd == monitor->mHost1State.fd.get()) { - monitor->handleDeviceStateEvent(&monitor->mHost1State); - } else if (events[n].data.fd == monitor->mHost2State.fd.get()) { - monitor->handleDeviceStateEvent(&monitor->mHost2State); - } - } - } - return NULL; -} - -} // namespace usb -} // namespace hardware -} // namespace android -} // namespace aidl diff --git a/usb/usb/UsbDataSessionMonitor.h b/usb/usb/UsbDataSessionMonitor.h deleted file mode 100644 index aced8a48..00000000 --- a/usb/usb/UsbDataSessionMonitor.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include -#include -#include -#include - -#include -#include -#include - -namespace aidl { -namespace android { -namespace hardware { -namespace usb { - -using ::aidl::android::hardware::usb::ComplianceWarning; -using ::aidl::android::hardware::usb::PortDataRole; -using ::android::base::boot_clock; -using ::android::base::unique_fd; - -/* - * UsbDataSessionMonitor monitors the usb device state sysfs of 3 different usb devices - * including device mode (udc), host mode high-speed port and host mode super-speed port. It - * reports Suez metrics for each data session and also provides API to query the compliance - * warnings detected in the current usb data session. - */ -class UsbDataSessionMonitor { - public: - /* - * The host mode high-speed port and super-speed port can be assigned to either host1 or - * host2 without affecting functionality. - * - * UeventRegex: name regex of the device that's being monitored. The regex is matched against - * uevent to detect dynamic creation/deletion/change of the device. - * StatePath: usb device state sysfs path of the device, monitored by epoll. - * dataRolePath: path to the usb data role sysfs, monitored by epoll. - * updatePortStatusCb: the callback is invoked when the compliance warings changes. - */ - UsbDataSessionMonitor(const std::string &deviceUeventRegex, const std::string &deviceStatePath, - const std::string &host1UeventRegex, const std::string &host1StatePath, - const std::string &host2UeventRegex, const std::string &host2StatePath, - const std::string &dataRolePath, - std::function updatePortStatusCb); - ~UsbDataSessionMonitor(); - // Returns the compliance warnings detected in the current data session. - void getComplianceWarnings(const PortDataRole &role, std::vector *warnings); - - private: - struct usbDeviceState { - unique_fd fd; - std::string filePath; - std::string ueventRegex; - // Usb device states reported by state sysfs - std::vector states; - // Timestamps of when the usb device states were captured - std::vector timestamps; - }; - - static void *monitorThread(void *param); - void handleUevent(); - void handleTimerEvent(); - void handleDataRoleEvent(); - void handleDeviceStateEvent(struct usbDeviceState *deviceState); - void clearDeviceStateEvents(struct usbDeviceState *deviceState); - void setupNewSession(); - void reportUsbDataSessionMetrics(); - void evaluateComplianceWarning(); - void notifyComplianceWarning(); - void updateUdcBindStatus(const std::string &devname); - - pthread_t mMonitor; - unique_fd mEpollFd; - unique_fd mUeventFd; - unique_fd mTimerFd; - unique_fd mDataRoleFd; - struct usbDeviceState mDeviceState; - struct usbDeviceState mHost1State; - struct usbDeviceState mHost2State; - std::set mWarningSet; - // Callback function to notify the caller when there's a change in compliance warnings. - std::function mUpdatePortStatusCb; - /* - * Cache relevant info for a USB data session when one starts, including - * the data role and the time when the session starts. - */ - PortDataRole mDataRole; - boot_clock::time_point mDataSessionStart; - /* - * In gadget mode: this indicates whether the udc device is bound to the configfs driver, which - * is done by userspace writing the udc device name to /config/usb_gadget/g1/UDC. When unbound, - * the gadget is in soft pulldown state and is expected not to enumerate. During gadget - * function switch, the udc device usually go through unbind and bind. - */ - bool mUdcBind; -}; - -} // namespace usb -} // namespace hardware -} // namespace android -} // namespace aidl From c9aaa3a747af5558e22469fcf9527bfa93ce4caa Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Wed, 29 Jan 2025 00:40:23 +0000 Subject: [PATCH 23/25] usb: fix usb state path in host mode USB_DUMMY_HCD is disabled in kernel 6.1, modify the usb state path in host mode accordingly. Bug: 388367091 Test: test on cheetah Flag: EXEMPT trivial bug fix Change-Id: Iaf87b2698a52656790b839f4090d69fcc226053a --- usb/usb/Usb.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index 37795247..4997323d 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -101,11 +101,11 @@ constexpr char kUdcUeventRegex[] = constexpr char kUdcStatePath[] = "/sys/devices/platform/11210000.usb/11210000.dwc3/udc/11210000.dwc3/state"; constexpr char kHost1UeventRegex[] = - "/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.[0-9].auto/usb2/2-0:1.0"; -constexpr char kHost1StatePath[] = "/sys/bus/usb/devices/usb2/2-0:1.0/usb2-port1/state"; + "/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.[0-9].auto/usb1/1-0:1.0"; +constexpr char kHost1StatePath[] = "/sys/bus/usb/devices/usb1/1-0:1.0/usb1-port1/state"; constexpr char kHost2UeventRegex[] = - "/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.[0-9].auto/usb3/3-0:1.0"; -constexpr char kHost2StatePath[] = "/sys/bus/usb/devices/usb3/3-0:1.0/usb3-port1/state"; + "/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.[0-9].auto/usb2/2-0:1.0"; +constexpr char kHost2StatePath[] = "/sys/bus/usb/devices/usb2/2-0:1.0/usb2-port1/state"; constexpr char kDataRolePath[] = "/sys/devices/platform/11210000.usb/new_data_role"; constexpr int kSamplingIntervalSec = 5; From a65353e33b54c2764ce2838c5ac400ac778736ca Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Thu, 7 Nov 2024 02:27:00 +0000 Subject: [PATCH 24/25] usb: support device state monitoring with internal hub enabled When internal hub is enabled, monitor the downstream ports of the internal hub. Switch back to the root hub once the hub is disabled. Bug: 388367091 Bug: 377782468 Test: test on t6pro Flag: EXEMPT bug fix Change-Id: I6ac7f411d5d58d719e05402a7d7e5f2543fe2062 --- usb/usb/Usb.cpp | 52 ++++++++++++++++++++++++++++++++++++++----------- usb/usb/Usb.h | 1 + 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index 4997323d..d4d882e1 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -106,6 +106,12 @@ constexpr char kHost1StatePath[] = "/sys/bus/usb/devices/usb1/1-0:1.0/usb1-port1 constexpr char kHost2UeventRegex[] = "/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.[0-9].auto/usb2/2-0:1.0"; constexpr char kHost2StatePath[] = "/sys/bus/usb/devices/usb2/2-0:1.0/usb2-port1/state"; +constexpr char kHubHost1UeventRegex[] = + "/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.[0-9].auto/usb1/1-1/1-1:1.0"; +constexpr char kHubHost1StatePath[] = "/sys/bus/usb/devices/usb1/1-1/1-1:1.0/1-1-port1/state"; +constexpr char kHubHost2UeventRegex[] = + "/devices/platform/11210000.usb/11210000.dwc3/xhci-hcd-exynos.[0-9].auto/usb1/1-1/1-1:1.0"; +constexpr char kHubHost2StatePath[] = "/sys/bus/usb/devices/usb1/1-1/1-1:1.0/1-1-port2/state"; constexpr char kDataRolePath[] = "/sys/devices/platform/11210000.usb/new_data_role"; constexpr int kSamplingIntervalSec = 5; @@ -474,6 +480,12 @@ bool switchMode(const string &portName, const PortRole &in_role, struct Usb *usb return roleSwitch; } +void updatePortStatus(android::hardware::usb::Usb *usb) { + std::vector currentPortStatus; + + queryVersionHelper(usb, ¤tPortStatus); +} + static int getInternalHubUniqueId() { string internalHubDevnum; int devnum = 0, internalHubUniqueId = -1; @@ -483,10 +495,9 @@ static int getInternalHubUniqueId() { return internalHubUniqueId; } -static Status tuneInternalHub(const char *devname, void* client_data) { +static Status tuneInternalHub(const char *devname, android::hardware::usb::Usb *usb) { uint16_t vendorId, productId; struct usb_device *device; - ::aidl::android::hardware::usb::Usb *usb; int value, index; device = usb_device_open(devname); @@ -495,7 +506,6 @@ static Status tuneInternalHub(const char *devname, void* client_data) { return Status::ERROR; } - usb = (::aidl::android::hardware::usb::Usb *)client_data; value = usb->mUsbHubVendorCmdValue; index = usb->mUsbHubVendorCmdIndex; @@ -518,20 +528,46 @@ static Status tuneInternalHub(const char *devname, void* client_data) { } static int usbDeviceRemoved(const char *devname, void* client_data) { + string pogoEnableHub; + ::aidl::android::hardware::usb::Usb *usb; + + usb = (::aidl::android::hardware::usb::Usb *)client_data; + + if (usb->mIntHubEnabled == true && ReadFileToString(kPogoEnableHub, &pogoEnableHub) + && Trim(pogoEnableHub) == "0") { + ALOGI("Internal hub disabled"); + usb->mIntHubEnabled = false; + usb->mUsbDataSessionMonitor.reset(new UsbDataSessionMonitor(kUdcUeventRegex, kUdcStatePath, + kHost1UeventRegex, kHost1StatePath, kHost2UeventRegex, + kHost2StatePath, kDataRolePath, + std::bind(&updatePortStatus, usb))); + } + return 0; } static int usbDeviceAdded(const char *devname, void* client_data) { string pogoEnableHub; int uniqueId = 0; + ::aidl::android::hardware::usb::Usb *usb; + + usb = (::aidl::android::hardware::usb::Usb *)client_data; // Enable hub tuning when the pogo dock is connected. if (ReadFileToString(kPogoEnableHub, &pogoEnableHub) && Trim(pogoEnableHub) == "1") { // If enable_hub is set to 1, the internal hub is the first enumearted device on bus 1 and // port 1. uniqueId = usb_device_get_unique_id_from_name(devname); - if (uniqueId == getInternalHubUniqueId()) - tuneInternalHub(devname, client_data); + if (uniqueId == getInternalHubUniqueId()) { + ALOGI("Internal hub enabled"); + usb->mIntHubEnabled = true; + tuneInternalHub(devname, usb); + usb->mUsbDataSessionMonitor.reset(new UsbDataSessionMonitor(kUdcUeventRegex, + kUdcStatePath, kHubHost1UeventRegex, + kHubHost1StatePath, kHubHost2UeventRegex, + kHubHost2StatePath, kDataRolePath, + std::bind(&updatePortStatus, usb))); + } } return 0; @@ -554,12 +590,6 @@ void *usbHostWork(void *param) { return NULL; } -void updatePortStatus(android::hardware::usb::Usb *usb) { - std::vector currentPortStatus; - - queryVersionHelper(usb, ¤tPortStatus); -} - Usb::Usb() : mLock(PTHREAD_MUTEX_INITIALIZER), mRoleSwitchLock(PTHREAD_MUTEX_INITIALIZER), diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h index dca913d2..63e200a0 100644 --- a/usb/usb/Usb.h +++ b/usb/usb/Usb.h @@ -93,6 +93,7 @@ struct Usb : public BnUsb { // Report usb data session event and data incompliance warnings std::unique_ptr mUsbDataSessionMonitor; + bool mIntHubEnabled; // Usb Overheat object for push suez event UsbOverheatEvent mOverheat; // Temperature when connected From bf70a639cda62de331f6dd934b146547663cc1c3 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Wed, 11 Dec 2024 15:48:25 +0000 Subject: [PATCH 25/25] Enable usb state update via udc sysfs Bug: 339241080 Test: tested on Cheetah Flag: android.hardware.usb.flags.enable_udc_sysfs_usb_state_update Change-Id: I59f3409791ea1d3ded1e8a3bdd2fcafeaa7f9a43 --- overlay/frameworks/base/core/res/res/values/config.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 21bc5321..9a4d9aa8 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -323,4 +323,7 @@ 100% + + + true