From c160c4f6db7cd040461f6f552857395cb69ca4cb Mon Sep 17 00:00:00 2001 From: Daniel Chapin Date: Wed, 24 Jul 2024 20:17:20 +0000 Subject: [PATCH 01/58] Revert "strorageproxyd: restart on checkpoint completion" Revert submission 28318041-rw_storage Reason for revert: Droidfood blocking bug b/355163562 Reverted changes: /q/submissionid:28318041-rw_storage (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e96ffb356a0335734786d63e0a1b9f10dca9cb5b) Merged-In: Ia03a829d93d45047af844a9c7b4c4b5a14fa5f92 Change-Id: Ia03a829d93d45047af844a9c7b4c4b5a14fa5f92 --- conf/init.zumapro.board.rc | 3 --- 1 file changed, 3 deletions(-) diff --git a/conf/init.zumapro.board.rc b/conf/init.zumapro.board.rc index 1c887e8..035271b 100644 --- a/conf/init.zumapro.board.rc +++ b/conf/init.zumapro.board.rc @@ -645,9 +645,6 @@ on post-fs-data restart storageproxyd -on post-fs-data-checkpointed - restart storageproxyd - service storageproxyd /vendor/bin/storageproxyd \ -d /dev/trusty-ipc-dev0 \ -r /dev/sg1 \ From 3ca63066d46c508947146d34558c5aa3ad68cec0 Mon Sep 17 00:00:00 2001 From: Daniel Chapin Date: Wed, 24 Jul 2024 20:17:20 +0000 Subject: [PATCH 02/58] Revert "strorageproxyd: restart on checkpoint completion" Revert submission 28318041-rw_storage Reason for revert: Droidfood blocking bug b/355163562 Reverted changes: /q/submissionid:28318041-rw_storage (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e96ffb356a0335734786d63e0a1b9f10dca9cb5b) Merged-In: Ia03a829d93d45047af844a9c7b4c4b5a14fa5f92 Change-Id: Ia03a829d93d45047af844a9c7b4c4b5a14fa5f92 --- conf/init.zumapro.board.rc | 3 --- 1 file changed, 3 deletions(-) diff --git a/conf/init.zumapro.board.rc b/conf/init.zumapro.board.rc index 1c887e8..035271b 100644 --- a/conf/init.zumapro.board.rc +++ b/conf/init.zumapro.board.rc @@ -645,9 +645,6 @@ on post-fs-data restart storageproxyd -on post-fs-data-checkpointed - restart storageproxyd - service storageproxyd /vendor/bin/storageproxyd \ -d /dev/trusty-ipc-dev0 \ -r /dev/sg1 \ From 758649b0b38e0458a3103754c5e5676bcf93147f Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Mon, 26 Aug 2024 09:10:27 +0000 Subject: [PATCH 03/58] Set priority task name Set task name and boost value for ExoPlayer:Place thread. Bug: 357956265 Test: build pass Flag: NONE init rc file change does not support flags (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:2e83b04a10be95d45c6996a8ed000cc328d76f10) Merged-In: I09e79a16b7b6a0675de606b2f65dfbee154ec943 Change-Id: I09e79a16b7b6a0675de606b2f65dfbee154ec943 --- conf/init.zumapro.soc.rc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/init.zumapro.soc.rc b/conf/init.zumapro.soc.rc index 4876919..4ebe1a3 100644 --- a/conf/init.zumapro.soc.rc +++ b/conf/init.zumapro.soc.rc @@ -230,6 +230,10 @@ on property:sys.boot_completed=1 write /sys/devices/system/cpu/cpufreq/policy7/sched_pixel/pmu_limit_enable 1 write /proc/vendor_sched/pmu_poll_enable 0 + # Set priority task name and boost value + write /proc/vendor_sched/priority_task_name "ExoPlayer:Place" + write /proc/vendor_sched/priority_task_boost_value 742 + # MTE on property:persist.device_config.runtime_native_boot.mode_override=sync # Per-core mode overrides. From 4edd952b94e19754644259b0f7f86c806f25bc96 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Wed, 9 Oct 2024 13:01:31 +0000 Subject: [PATCH 04/58] Set auto prefer idle task name Set InputDispatche and InputReader prefer idle explicitly, which is a workaround and should be removed after they become ADPF. Bug: 366146314 Flag: NONE init rc file change does not support flags Test: tasks set as expected (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:76b662b189e0ab7a555d93a8390c792631cc0558) Merged-In: Ica1cc1bcf44205f6ccfb09529a52107b1c5091b3 Change-Id: Ica1cc1bcf44205f6ccfb09529a52107b1c5091b3 --- conf/init.zumapro.soc.rc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/init.zumapro.soc.rc b/conf/init.zumapro.soc.rc index 4ebe1a3..6bd32f8 100644 --- a/conf/init.zumapro.soc.rc +++ b/conf/init.zumapro.soc.rc @@ -234,6 +234,9 @@ on property:sys.boot_completed=1 write /proc/vendor_sched/priority_task_name "ExoPlayer:Place" write /proc/vendor_sched/priority_task_boost_value 742 + # To be removed after InputDispatche and InputReader become ADPF + write /proc/vendor_sched/prefer_idle_task_name "InputDispatcher,InputReader" + # MTE on property:persist.device_config.runtime_native_boot.mode_override=sync # Per-core mode overrides. From a419a7b54b885c46098dfae6baee667731247c4c Mon Sep 17 00:00:00 2001 From: Kai Hsieh Date: Sat, 21 Sep 2024 13:18:59 +0800 Subject: [PATCH 05/58] Add GIA (Google Input interface Abstraction layer) for zumapro devices. Bug: 367881686 Test: Manually, build and flash the ROM and use `service list` to make sure the service is up. Flag: build.RELEASE_PIXEL_GIA_ENABLED Change-Id: Icfeb3d1707ead79f38e355d4502c24f1b5493a26 Signed-off-by: Kai Hsieh --- device.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/device.mk b/device.mk index 5fba40f..d103e1e 100644 --- a/device.mk +++ b/device.mk @@ -1273,6 +1273,8 @@ PRODUCT_COPY_FILES += \ include device/google/gs-common/touch/twoshay/aidl_zuma.mk include device/google/gs-common/touch/twoshay/twoshay.mk +include device/google/gs-common/input/gia/gia.mk + PRODUCT_CHECK_VENDOR_SEAPP_VIOLATIONS := true PRODUCT_CHECK_DEV_TYPE_VIOLATIONS := true From 477228101f5bab4591a3814f79ec21b49c5028f1 Mon Sep 17 00:00:00 2001 From: Herbert Xue Date: Wed, 6 Nov 2024 10:52:10 +0800 Subject: [PATCH 06/58] Move video_codec soong config variables into board config Flag: EXEMPT bugfix Bug: 370663515 Test: m libExynosC2OSAL Change-Id: I197e34703cd6e8b8cfc0c17fafda120c567773f2 --- BoardConfig-common.mk | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 8a9a2e0..1cb8f26 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -209,6 +209,12 @@ BOARD_USE_BLOB_ALLOCATOR := false BOARD_SUPPORT_MFC_ENC_BT2020 := true BOARD_SUPPORT_FLEXIBLE_P010 := true BOARD_SUPPORT_MFC_VERSION := 1660 +$(call soong_config_set,video_codec,target_soc_name,$(TARGET_SOC_NAME)) +$(call soong_config_set_bool,video_codec,board_use_codec2_hidl_1_2,$(BOARD_USE_CODEC2_HIDL_1_2)) +$(call soong_config_set_bool,video_codec,board_support_mfc_enc_bt2020,$(BOARD_SUPPORT_MFC_ENC_BT2020)) +$(call soong_config_set_bool,video_codec,board_support_flexible_p010,$(BOARD_SUPPORT_FLEXIBLE_P010)) +$(call soong_config_set_bool,video_codec,board_use_codec2_aidl,$(if $(BOARD_USE_CODEC2_AIDL),true,false)) +$(call soong_config_set,video_codec,board_support_mfc_version,$(BOARD_SUPPORT_MFC_VERSION)) ######################## BOARD_SUPER_PARTITION_SIZE := 8531214336 From 512af9cd559468fc735e6830edcf5238cf843d64 Mon Sep 17 00:00:00 2001 From: Steven Tsai Date: Tue, 12 Nov 2024 15:21:29 +0800 Subject: [PATCH 07/58] zumapro: always create the symlink of trusty_persist Bug: 357015856 Flag: EXEMPT bugfix Change-Id: I8d523aed3ff5a18456db0c4714e536447ddfee3d Signed-off-by: Steven Tsai --- conf/init.persist.rc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/init.persist.rc b/conf/init.persist.rc index 800a611..271910a 100644 --- a/conf/init.persist.rc +++ b/conf/init.persist.rc @@ -36,6 +36,7 @@ on property:ro.fstype.data=* && property:ro.vendor.persist.status=mounted symlink /mnt/vendor/persist/ss /data/vendor/ss/persist chown root system /data/vendor/ss/persist chmod 0770 /data/vendor/ss/persist + symlink /dev/block/platform/13200000\.ufs/by-name/trusty_persist /data/vendor/ss/persist/0 chown system system /data/vendor/ss/0 chown system system /data/vendor/ss/persist/0 chown system system /data/vendor/ss/persist/nsp From 7b57770786157f111c8e46a18ca2dc24b50271c6 Mon Sep 17 00:00:00 2001 From: Shikha Panwar Date: Tue, 12 Nov 2024 11:47:59 +0000 Subject: [PATCH 08/58] Enable Secretkeeper HAL service on zumapro The HAL service is needed for Updatable pVMs Bug: 376015522 Test: get_build_var SECRETKEEPER_ENABLED Test: VtsSecretkeeperTargetTest Test: #UpgradedPackageIsAcceptedWithSecretkeeper Change-Id: Ic1993de0f82feba0979e0403472ed4da79676137 --- device.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/device.mk b/device.mk index 04981c5..c5f87c2 100644 --- a/device.mk +++ b/device.mk @@ -1146,6 +1146,10 @@ PRODUCT_PACKAGES += \ # pKVM $(call inherit-product, packages/modules/Virtualization/apex/product_packages.mk) PRODUCT_BUILD_PVMFW_IMAGE := true +ifeq ($(RELEASE_AVF_ENABLE_LLPVM_CHANGES),true) + # Set the environment variable to enable the Secretkeeper HAL service. + SECRETKEEPER_ENABLED := true +endif # Enable to build standalone vendor_kernel_boot image. PRODUCT_BUILD_VENDOR_KERNEL_BOOT_IMAGE := true From 3f193d644db71a33f8363d229c79bd0ebf30cc52 Mon Sep 17 00:00:00 2001 From: Spade Lee Date: Thu, 7 Nov 2024 17:32:57 +0000 Subject: [PATCH 09/58] dump_power: zumapro: correct dump path - move fg registers dump from debugfs to sysfs - add pca9468/ln8411/dual_batt path - remove unused debug path Bug: 377895720 Flag: EXEMPT bugfix Change-Id: I44ff1f6d14d9c440dccd832b6012c9dcaa0f7954 Signed-off-by: Spade Lee --- dumpstate/dump_power.cpp | 62 +++++++++------------------------------- dumpstate/dump_power.rc | 3 ++ 2 files changed, 17 insertions(+), 48 deletions(-) diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp index 1b84f5e..24e5cf2 100644 --- a/dumpstate/dump_power.cpp +++ b/dumpstate/dump_power.cpp @@ -177,7 +177,7 @@ void dumpPowerSupplyStats() { void dumpMaxFg() { const char *maxfgLoc = "/sys/class/power_supply/maxfg"; const char *max77779fgDir = "/sys/class/power_supply/max77779fg"; - + const char *maxfgDualLoc = "/sys/class/power_supply/maxfg_base"; const char *maxfg [][2] = { {"Power supply property maxfg", "/sys/class/power_supply/maxfg/uevent"}, {"maxfg registers", "/sys/class/power_supply/maxfg/registers_dump"}, @@ -194,16 +194,17 @@ void dumpMaxFg() { {"max77779fg_monitor logbuffer", "/dev/logbuffer_max77779fg_monitor"}, }; - const char *maxfgSecondary [][2] = { + const char *maxfgDual [][2] = { {"Power supply property maxfg_base", "/sys/class/power_supply/maxfg_base/uevent"}, {"Power supply property maxfg_secondary", "/sys/class/power_supply/maxfg_secondary/uevent"}, {"maxfg_base registers", "/sys/class/power_supply/maxfg_base/registers_dump"}, {"maxfg_secondary registers", "/sys/class/power_supply/maxfg_secondary/registers_dump"}, {"model_state", "/sys/class/power_supply/maxfg_base/model_state"}, - {"maxfg_base", "/dev/logbuffer_maxfg_base"}, - {"maxfg_secondary", "/dev/logbuffer_maxfg_secondary"}, + {"maxfg_base logbuffer", "/dev/logbuffer_maxfg_base"}, + {"maxfg_secondary logbuffer", "/dev/logbuffer_maxfg_secondary"}, {"maxfg_base_monitor logbuffer", "/dev/logbuffer_maxfg_base_monitor"}, {"maxfg_secondary_monitor logbuffer", "/dev/logbuffer_maxfg_secondary_monitor"}, + {"dual_batt logbuffer", "/dev/logbuffer_dual_batt"}, }; const char *maxfgHistoryName = "Maxim FG History"; @@ -220,14 +221,13 @@ void dumpMaxFg() { for (const auto &row : max77779fgFiles) { dumpFileContent(row[0], row[1]); } - } else { - for (const auto &row : maxfgSecondary) { + } else if (isValidDir(maxfgDualLoc)){ + for (const auto &row : maxfgDual) { dumpFileContent(row[0], row[1]); } - } - - if (isValidFile(maxfgHistoryDir)) { - dumpFileContent(maxfgHistoryName, maxfgHistoryDir); + if (isValidFile(maxfgHistoryDir)) { + dumpFileContent(maxfgHistoryName, maxfgHistoryDir); + } } } @@ -317,7 +317,9 @@ void dumpPdEngine() { {"TCPC logbuffer", "/dev/logbuffer_usbpd"}, {"pogo_transport logbuffer", "/dev/logbuffer_pogo_transport"}, {"PPS-google_cpm logbuffer", "/dev/logbuffer_cpm"}, - {"PPS-dc logbuffer", "/dev/logbuffer_dc_mains"} + {"PPS-pca9468 logbuffer", "/dev/logbuffer_pca9468"}, + {"PPS-ln8411 logbuffer", "/dev/logbuffer_ln8411"}, + {"PPS-dc_mains logbuffer", "/dev/logbuffer_dc_mains"} }; for (const auto &row : pdEngine) { @@ -433,11 +435,8 @@ void printValuesOfDirectory(const char *directory, std::string debugfs, const ch void dumpChg() { const std::string pmic_bus = "/sys/devices/platform/108d0000.hsi2c/i2c-6/6-0066"; - const std::string pmic_bus_dev = "/sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0066"; const char* chg_reg_dump_file = "/sys/class/power_supply/main-charger/device/registers_dump"; const std::string chg_name_file = "/sys/class/power_supply/main-charger/device/name"; - const std::string pmic_name_file_dev = pmic_bus_dev + "/name"; - const std::string pmic_reg_dump_dev_file = pmic_bus_dev + "/registers_dump"; const std::string pmic_name_file = pmic_bus + "/name"; const std::string pmic_reg_dump_file = pmic_bus + "/registers_dump"; const std::string reg_dump_str = " registers dump"; @@ -462,10 +461,6 @@ void dumpChg() { if (isValidDir(pmic_bus.c_str())) { ret = android::base::ReadFileToString(pmic_name_file, &pmic_name); pmic_reg_dump = pmic_reg_dump_file; - } else { - /* DEV device */ - ret = android::base::ReadFileToString(pmic_name_file_dev, &pmic_name); - pmic_reg_dump = pmic_reg_dump_dev_file; } if (ret && !pmic_name.empty()) { @@ -483,36 +478,16 @@ void dumpChg() { void dumpChgUserDebug() { const std::string debugfs = "/d/"; - const char *maxFgDir = "/d/maxfg"; - const char *maxFgStrMatch = "maxfg"; const char *maxBaseFgDir = "/d/maxfg_base"; const char *maxBaseFgStrMatch = "maxfg_base"; - const char *maxSecFgDir = "/d/maxfg_secondary"; - const char *maxSecFgStrMatch = "maxfg_secondary"; const char *max77779FgDir = "/d/max77779fg"; const char *maxFg77779StrMatch = "max77779fg"; const char *chgTblName = "Charging table dump"; const char *chgTblDir = "/d/google_battery/chg_raw_profile"; - const char *maxFgInfo [] { - "fg_model", - "algo_ver", - "model_ok", - "registers", - "nv_registers", - }; - const char *max77779FgInfo [] { "fg_model", - "algo_ver", "model_ok", - "registers", - "debug_registers", - }; - - const char *max1720xFgInfo [] { - "registers", - "nv_registers", }; if (isUserBuild()) @@ -520,11 +495,7 @@ void dumpChgUserDebug() { dumpFileContent(chgTblName, chgTblDir); - if (isValidDir(maxFgDir)) { - for (auto & directory : maxFgInfo) { - printValuesOfDirectory(directory, debugfs, maxFgStrMatch); - } - } else if (isValidDir(max77779FgDir)) { + if (isValidDir(max77779FgDir)) { for (auto & directory : max77779FgInfo) { printValuesOfDirectory(directory, debugfs, maxFg77779StrMatch); } @@ -532,11 +503,6 @@ void dumpChgUserDebug() { for (auto & directory : max77779FgInfo) { printValuesOfDirectory(directory, debugfs, maxBaseFgStrMatch); } - if (isValidDir(maxSecFgDir)) { - for (auto & directory : max1720xFgInfo) { - printValuesOfDirectory(directory, debugfs, maxSecFgStrMatch); - } - } } } diff --git a/dumpstate/dump_power.rc b/dumpstate/dump_power.rc index d70c021..5a01b3d 100644 --- a/dumpstate/dump_power.rc +++ b/dumpstate/dump_power.rc @@ -97,6 +97,7 @@ on early-boot chown system system /dev/logbuffer_maxfg_secondary chown system system /dev/logbuffer_maxfg_base_monitor chown system system /dev/logbuffer_maxfg_secondary_monitor + chown system system /dev/logbuffer_dual_batt chown system system /dev/logbuffer_maxq chown system system /dev/logbuffer_rtx chown system system /dev/logbuffer_ssoc @@ -105,6 +106,8 @@ on early-boot chown system system /dev/logbuffer_usbpd chown system system /dev/logbuffer_pogo_transport chown system system /dev/logbuffer_wireless + chown system system /dev/logbuffer_pca9468 + chown system system /dev/logbuffer_ln8411 chown system system /dev/logbuffer_dc_mains chown system system /dev/logbuffer_cpm chown system system /dev/logbuffer_wc68 From 7a3202c0ef718c44d6884bae763f03a1d7dc4582 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Thu, 7 Nov 2024 01:51:00 +0000 Subject: [PATCH 10/58] usb: clean up monitor thread in UsbDataSessionMonitor destructor Bug: 377782468 Test: manual test Flag: EXEMPT bug fix Change-Id: I20dca702ff44d32c5783f0528d61a9d4f7703ecb --- usb/usb/UsbDataSessionMonitor.cpp | 21 +++++++++++++++++++-- usb/usb/UsbDataSessionMonitor.h | 2 ++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/usb/usb/UsbDataSessionMonitor.cpp b/usb/usb/UsbDataSessionMonitor.cpp index bff52f0..db85e21 100644 --- a/usb/usb/UsbDataSessionMonitor.cpp +++ b/usb/usb/UsbDataSessionMonitor.cpp @@ -102,6 +102,7 @@ UsbDataSessionMonitor::UsbDataSessionMonitor( const std::string &dataRolePath, std::function updatePortStatusCb) { struct epoll_event ev; std::string udc; + int pipefds[2]; unique_fd epollFd(epoll_create(8)); if (epollFd.get() == -1) { @@ -133,6 +134,12 @@ UsbDataSessionMonitor::UsbDataSessionMonitor( abort(); } + pipe(pipefds); + mPipefd0.reset(pipefds[0]); + mPipefd1.reset(pipefds[1]); + if (addEpollFd(epollFd, mPipefd0)) + 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 @@ -169,7 +176,15 @@ UsbDataSessionMonitor::UsbDataSessionMonitor( usb_flags::enable_report_usb_data_compliance_warning()); } -UsbDataSessionMonitor::~UsbDataSessionMonitor() {} +UsbDataSessionMonitor::~UsbDataSessionMonitor() { + /* + * Write a character to the pipe to signal the monitor thread to exit. + * The character is not important, it can be any value. + */ + int c = 'q'; + write(mPipefd1, &c, 1); + pthread_join(mMonitor, NULL); +} void UsbDataSessionMonitor::reportUsbDataSessionMetrics() { std::vector events; @@ -484,7 +499,9 @@ void *UsbDataSessionMonitor::monitorThread(void *param) { } for (int n = 0; n < nevents; ++n) { - if (events[n].data.fd == monitor->mUeventFd.get()) { + if (events[n].data.fd == monitor->mPipefd0.get()) { + return NULL; + } else if (events[n].data.fd == monitor->mUeventFd.get()) { monitor->handleUevent(); } else if (events[n].data.fd == monitor->mTimerFd.get()) { monitor->handleTimerEvent(); diff --git a/usb/usb/UsbDataSessionMonitor.h b/usb/usb/UsbDataSessionMonitor.h index aced8a4..fd17a3c 100644 --- a/usb/usb/UsbDataSessionMonitor.h +++ b/usb/usb/UsbDataSessionMonitor.h @@ -86,6 +86,8 @@ class UsbDataSessionMonitor { void updateUdcBindStatus(const std::string &devname); pthread_t mMonitor; + unique_fd mPipefd0; + unique_fd mPipefd1; unique_fd mEpollFd; unique_fd mUeventFd; unique_fd mTimerFd; From 2d2a42e3eebd7049167caa50e35fd0f09e70dedb Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Thu, 7 Nov 2024 02:25:29 +0000 Subject: [PATCH 11/58] usb: dump port name for usb device state update This would help to differentiate ports in host mode. Bug: 377782468 Test: manual test Flag: EXEMPT bug fix Change-Id: I209bf7bc4a48146b0bef5fd6cd8b59252a3706ac --- usb/usb/UsbDataSessionMonitor.cpp | 7 +++++-- usb/usb/UsbDataSessionMonitor.h | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/usb/usb/UsbDataSessionMonitor.cpp b/usb/usb/UsbDataSessionMonitor.cpp index db85e21..197b368 100644 --- a/usb/usb/UsbDataSessionMonitor.cpp +++ b/usb/usb/UsbDataSessionMonitor.cpp @@ -145,14 +145,17 @@ UsbDataSessionMonitor::UsbDataSessionMonitor( * 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.name = "udc"; mDeviceState.filePath = deviceStatePath; mDeviceState.ueventRegex = deviceUeventRegex; addEpollFile(epollFd.get(), mDeviceState.filePath, mDeviceState.fd); + mHost1State.name = "host1"; mHost1State.filePath = host1StatePath; mHost1State.ueventRegex = host1UeventRegex; addEpollFile(epollFd.get(), mHost1State.filePath, mHost1State.fd); + mHost2State.name = "host2"; mHost2State.filePath = host2StatePath; mHost2State.ueventRegex = host2UeventRegex; addEpollFile(epollFd.get(), mHost2State.filePath, mHost2State.fd); @@ -322,11 +325,11 @@ void UsbDataSessionMonitor::handleDeviceStateEvent(struct usbDeviceState *device n = read(deviceState->fd.get(), &state, USB_STATE_MAX_LEN); if (kValidStates.find(state) == kValidStates.end()) { - ALOGE("Invalid state %s", state); + ALOGE("Invalid state %s: %s", deviceState->name.c_str(), state); return; } - ALOGI("Update USB device state: %s", state); + ALOGI("Update device state %s: %s", deviceState->name.c_str(), state); deviceState->states.push_back(state); deviceState->timestamps.push_back(boot_clock::now()); diff --git a/usb/usb/UsbDataSessionMonitor.h b/usb/usb/UsbDataSessionMonitor.h index fd17a3c..e1cfd10 100644 --- a/usb/usb/UsbDataSessionMonitor.h +++ b/usb/usb/UsbDataSessionMonitor.h @@ -64,6 +64,8 @@ class UsbDataSessionMonitor { private: struct usbDeviceState { + // The name of the usb device, e.g. udc, host1, host2. + std::string name; unique_fd fd; std::string filePath; std::string ueventRegex; From 478be308d19b546670bcb683c61d6c3b267ef5a1 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Thu, 7 Nov 2024 02:27:00 +0000 Subject: [PATCH 12/58] 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: 377782468 Test: manual test Flag: EXEMPT bug fix Change-Id: I6ac7f411d5d58d719e05402a7d7e5f2543fe2062 --- usb/usb/Usb.cpp | 48 +++++++++++++++++++++++++++++++++++++++--------- usb/usb/Usb.h | 3 ++- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index f222310..fb02ddb 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -117,6 +117,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; void queryVersionHelper(android::hardware::usb::Usb *usb, @@ -536,10 +542,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); @@ -548,7 +553,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; @@ -571,20 +575,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; @@ -612,9 +642,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, @@ -1200,7 +1230,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 8f0c3a0..eb37d38 100644 --- a/usb/usb/Usb.h +++ b/usb/usb/Usb.h @@ -126,7 +126,8 @@ struct Usb : public BnUsb { bool mPartnerUp; // Report usb data session event and data incompliance warnings - UsbDataSessionMonitor mUsbDataSessionMonitor; + std::unique_ptr mUsbDataSessionMonitor; + bool mIntHubEnabled; // Usb Overheat object for push suez event UsbOverheatEvent mOverheat; // Temperature when connected From fdbfd006881da855d41ab3c1b177b18a10337386 Mon Sep 17 00:00:00 2001 From: Hidayat Khan Date: Wed, 13 Nov 2024 04:15:18 +0000 Subject: [PATCH 13/58] Add config to disable satellite notifications in telephony for zumapro Bug: 378782898 Test: config change Flag: EXEMPT config change Change-Id: I1a42e7b048d94d1914aa6bdecf503025ad43b056 --- overlay/frameworks/base/core/res/res/values/config.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 6e2772c..4f901e7 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -536,4 +536,8 @@ com.google.android.apps.stargate.sessionmanager.SessionManagerReceiver_Receiver + + + false From 3b4a0bed517c7788bb5eb7b09e505590e9a81814 Mon Sep 17 00:00:00 2001 From: Kai Hsieh Date: Wed, 13 Nov 2024 16:06:54 +0800 Subject: [PATCH 14/58] Fixes issue where ripcurrentpro devices ROM build will fail with GIA Root casue: there is no GTI built on ripcurrentpro devices. Solution: Add GTI for ripcurrentpro devices. Test: go/forrest can successfully build for ripcurrentpro and on CM devices: https://android-build.corp.google.com/builds/abtd/run/L56200030007746343. Bug: 378811601 Flag: build.RELEASE_PIXEL_GIA_ENABLED Change-Id: If8a248b1f8f9a9cd82ea1a26aeb5244ec1de12bc Signed-off-by: Kai Hsieh --- device.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/device.mk b/device.mk index d103e1e..1b84745 100644 --- a/device.mk +++ b/device.mk @@ -584,6 +584,10 @@ PRODUCT_PACKAGES += \ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml +ifneq (,$(filter ripcurrentpro, $(TARGET_PRODUCT))) + include device/google/gs-common/touch/gti/gti.mk +endif + # Sensors PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.accelerometer.xml \ From a404117e7e4b8bc068fc90534e31787bac105a0b Mon Sep 17 00:00:00 2001 From: "ELIYAZ MOMIN (xWF)" Date: Wed, 13 Nov 2024 14:06:06 +0000 Subject: [PATCH 15/58] Revert "Add GIA (Google Input interface Abstraction layer) for z..." Revert submission 29512389-gia Reason for revert: Reverted changes: /q/submissionid:29512389-gia Change-Id: Ic00760e1dfa0c23f76b1539b717aa2db2a552971 --- device.mk | 2 -- 1 file changed, 2 deletions(-) diff --git a/device.mk b/device.mk index d103e1e..5fba40f 100644 --- a/device.mk +++ b/device.mk @@ -1273,8 +1273,6 @@ PRODUCT_COPY_FILES += \ include device/google/gs-common/touch/twoshay/aidl_zuma.mk include device/google/gs-common/touch/twoshay/twoshay.mk -include device/google/gs-common/input/gia/gia.mk - PRODUCT_CHECK_VENDOR_SEAPP_VIOLATIONS := true PRODUCT_CHECK_DEV_TYPE_VIOLATIONS := true From 1ef792a230b2549b74abada0dc616739f7c8a083 Mon Sep 17 00:00:00 2001 From: Juan Yescas Date: Wed, 6 Nov 2024 17:35:21 -0800 Subject: [PATCH 16/58] Move modem setup to init.persist.rc When the modem setup is done is init.efs.rc file, there is boot time regression in the 4kb configuration. Bug: 374435821 Flag: EXEMPT bugfix Test: Build and tested in abtd Change-Id: I909f9eb45f783fda45e7782419845d236c263aa0 --- conf/init.efs.16k.rc | 11 +---------- conf/init.efs.4k.rc | 9 --------- conf/init.persist.rc | 8 ++++++++ 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/conf/init.efs.16k.rc b/conf/init.efs.16k.rc index 121c6fd..e52ff78 100644 --- a/conf/init.efs.16k.rc +++ b/conf/init.efs.16k.rc @@ -1,5 +1,5 @@ # This RC file is used for: -# - 16kb Developer option +# - 16kb Developer option which can boot with 4kb/16kb page size. # - 16kb targets only service copy_efs_files_to_data /vendor/bin/copy_efs_files_to_data @@ -20,12 +20,3 @@ on post-fs-data && property:ro.boot.hardware.cpu.pagesize=16384 on late-fs && property:ro.boot.hardware.cpu.pagesize=4096 mount_all /vendor/etc/fstab.efs --early - -on property:ro.vendor.persist.status=mounted - # for modem related functions - restorecon_recursive /mnt/vendor/efs - chown radio system /mnt/vendor/efs - restorecon_recursive /mnt/vendor/efs_backup - chown radio system /mnt/vendor/efs_backup - restorecon_recursive /mnt/vendor/modem_userdata - chown radio system /mnt/vendor/modem_userdata diff --git a/conf/init.efs.4k.rc b/conf/init.efs.4k.rc index b930d01..5393e67 100644 --- a/conf/init.efs.4k.rc +++ b/conf/init.efs.4k.rc @@ -1,11 +1,2 @@ on late-fs mount_all /vendor/etc/fstab.efs --early - -on property:ro.vendor.persist.status=mounted - # for modem related functions - restorecon_recursive /mnt/vendor/efs - chown radio system /mnt/vendor/efs - restorecon_recursive /mnt/vendor/efs_backup - chown radio system /mnt/vendor/efs_backup - restorecon_recursive /mnt/vendor/modem_userdata - chown radio system /mnt/vendor/modem_userdata diff --git a/conf/init.persist.rc b/conf/init.persist.rc index 271910a..624eb79 100644 --- a/conf/init.persist.rc +++ b/conf/init.persist.rc @@ -3,6 +3,14 @@ on early-init && property:ro.boot.hardware.cpu.pagesize=4096 setprop ro.vendor.persist.status mounted on property:ro.vendor.persist.status=mounted + # for modem related functions + restorecon_recursive /mnt/vendor/efs + chown radio system /mnt/vendor/efs + restorecon_recursive /mnt/vendor/efs_backup + chown radio system /mnt/vendor/efs_backup + restorecon_recursive /mnt/vendor/modem_userdata + chown radio system /mnt/vendor/modem_userdata + # for battery defender mkdir /mnt/vendor/persist/battery 0700 system system From 2424e33a525d869ba1938332061cc08a854fe13a Mon Sep 17 00:00:00 2001 From: Herbert Xue Date: Fri, 8 Nov 2024 15:16:20 +0800 Subject: [PATCH 17/58] Set soong config variable "board_use_dec_sw_csc" for libExynosVideoCodec Flag: EXEMPT bugfix Bug: 375522783 Test: m libExynosVideoCodec Change-Id: I4f9221be9633a73ba29a37128163749436ea2f07 --- BoardConfig-common.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 535ae5e..961d97c 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -219,6 +219,7 @@ BOARD_SUPPORT_FLEXIBLE_P010 := true BOARD_SUPPORT_MFC_VERSION := 1660 $(call soong_config_set,video_codec,target_soc_name,$(TARGET_SOC_NAME)) $(call soong_config_set_bool,video_codec,board_use_codec2_hidl_1_2,$(BOARD_USE_CODEC2_HIDL_1_2)) +$(call soong_config_set_bool,video_codec,board_use_dec_sw_csc,$(BOARD_USE_DEC_SW_CSC)) $(call soong_config_set_bool,video_codec,board_support_mfc_enc_bt2020,$(BOARD_SUPPORT_MFC_ENC_BT2020)) $(call soong_config_set_bool,video_codec,board_support_flexible_p010,$(BOARD_SUPPORT_FLEXIBLE_P010)) $(call soong_config_set_bool,video_codec,board_use_codec2_aidl,$(if $(BOARD_USE_CODEC2_AIDL),true,false)) From ea2353c51aba164dd88191dcafcc31bcf6461aff Mon Sep 17 00:00:00 2001 From: Joen Chen Date: Thu, 14 Nov 2024 06:16:47 +0000 Subject: [PATCH 18/58] correct the naming of frame_interval_ns and expected_present_time_ns Bug: 378992900 Flag: EXEMPT bugfix Test: swipe home screen, and check the notifyExpectedPresent() Change-Id: I062e94c30cdf38da3138617afe0acf01bc1de78a --- conf/init.zumapro.board.rc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/init.zumapro.board.rc b/conf/init.zumapro.board.rc index c369eb7..e99251c 100644 --- a/conf/init.zumapro.board.rc +++ b/conf/init.zumapro.board.rc @@ -389,8 +389,8 @@ on fs chown system system /sys/devices/platform/exynos-drm/primary-panel/te2_option chown system system /sys/devices/platform/exynos-drm/primary-panel/power_state chown system system /sys/devices/platform/exynos-drm/primary-panel/frame_rate - chown system system /sys/devices/platform/exynos-drm/primary-panel/frame_interval - chown system system /sys/devices/platform/exynos-drm/primary-panel/expected_present_time + chown system system /sys/devices/platform/exynos-drm/primary-panel/frame_interval_ns + chown system system /sys/devices/platform/exynos-drm/primary-panel/expected_present_time_ns chown system system /sys/module/drm/parameters/vblankoffdelay chown system system /sys/module/drm/parameters/debug chown system system /sys/class/dqe0/atc/ambient_light From 8f762b99b1b0bd9c3796e2e3586c3bf1db949f82 Mon Sep 17 00:00:00 2001 From: Kai Hsieh Date: Wed, 13 Nov 2024 16:45:20 +0000 Subject: [PATCH 19/58] Revert^2 "Add GIA (Google Input interface Abstraction laye..." Revert submission 30378113-revert-29512389-gia-PMLMEKURMT Reason for revert: Revert to fix the issue that GIA cannot be started in caimen-next-userdbg Reverted changes: /q/submissionid:30378113-revert-29512389-gia-PMLMEKURMT Bug: 367881686 Change-Id: I74a61360d09f85a2404d884090fd2bedb1be4030 --- device.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/device.mk b/device.mk index 189563a..97e83f3 100644 --- a/device.mk +++ b/device.mk @@ -1303,6 +1303,8 @@ PRODUCT_COPY_FILES += \ include device/google/gs-common/touch/twoshay/aidl_zuma.mk include device/google/gs-common/touch/twoshay/twoshay.mk +include device/google/gs-common/input/gia/gia.mk + PRODUCT_CHECK_VENDOR_SEAPP_VIOLATIONS := true PRODUCT_CHECK_DEV_TYPE_VIOLATIONS := true From 5e054052e12743109d27e4c03d6f9d098e2eeac3 Mon Sep 17 00:00:00 2001 From: Kai Hsieh Date: Thu, 14 Nov 2024 17:40:32 +0800 Subject: [PATCH 20/58] Fixes issue where GIA keep crashing on next release builds. Since our feature is not ready, we utilize build flag we applied for this project to project this undone feature built accidentally on other targets. Test: Run test `UpdatableCrashingBootTest` on caiman `trunk_staging`, `trunk_food` and `next` targets with go/forrest (https://android-build.corp.google.com/builds/abtd/run/L28000030007788752, https://android-build.corp.google.com/builds/abtd/run/L64100030007774323). Test: Build and flash caiman with `trunk_staging` as target, GIA is up and running. Flag: build.RELEASE_PIXEL_GIA_ENABLED Bug: 378865024 Change-Id: Iffa7f11659ece8c0210023630568cdc45132840f Signed-off-by: Kai Hsieh --- device.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/device.mk b/device.mk index 97e83f3..85a6ff5 100644 --- a/device.mk +++ b/device.mk @@ -1303,7 +1303,9 @@ PRODUCT_COPY_FILES += \ include device/google/gs-common/touch/twoshay/aidl_zuma.mk include device/google/gs-common/touch/twoshay/twoshay.mk +ifeq ($(RELEASE_PIXEL_GIA_ENABLED),true) include device/google/gs-common/input/gia/gia.mk +endif PRODUCT_CHECK_VENDOR_SEAPP_VIOLATIONS := true From ec810e8f9666b8391dbbd2245e79e24074ec242a Mon Sep 17 00:00:00 2001 From: Herbert Xue Date: Tue, 19 Nov 2024 15:27:15 +0800 Subject: [PATCH 21/58] Set soong config variables for libExynosC2H263Dec and libExynosC2H263Enc Flag: EXEMPT bugfix Bug: 375111251 Test: m libExynosC2H263Dec libExynosC2H263Enc Change-Id: I487a7ad331475e09aaf14556548ab17c3004f7b9 --- BoardConfig-common.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 961d97c..998bd5c 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -219,7 +219,11 @@ BOARD_SUPPORT_FLEXIBLE_P010 := true BOARD_SUPPORT_MFC_VERSION := 1660 $(call soong_config_set,video_codec,target_soc_name,$(TARGET_SOC_NAME)) $(call soong_config_set_bool,video_codec,board_use_codec2_hidl_1_2,$(BOARD_USE_CODEC2_HIDL_1_2)) +$(call soong_config_set_bool,video_codec,board_use_csc_filter,$(BOARD_USE_CSC_FILTER)) $(call soong_config_set_bool,video_codec,board_use_dec_sw_csc,$(BOARD_USE_DEC_SW_CSC)) +$(call soong_config_set_bool,video_codec,board_use_enc_sw_csc,$(BOARD_USE_ENC_SW_CSC)) +$(call soong_config_set_bool,video_codec,board_support_mfc_enc_rgb,$(BOARD_SUPPORT_MFC_ENC_RGB)) +$(call soong_config_set_bool,video_codec,board_use_blob_allocator,$(BOARD_USE_BLOB_ALLOCATOR)) $(call soong_config_set_bool,video_codec,board_support_mfc_enc_bt2020,$(BOARD_SUPPORT_MFC_ENC_BT2020)) $(call soong_config_set_bool,video_codec,board_support_flexible_p010,$(BOARD_SUPPORT_FLEXIBLE_P010)) $(call soong_config_set_bool,video_codec,board_use_codec2_aidl,$(if $(BOARD_USE_CODEC2_AIDL),true,false)) From e1c5eb3a13593c7a4b780cd53e622f2e2cd26cb9 Mon Sep 17 00:00:00 2001 From: kellyhung Date: Tue, 19 Nov 2024 08:24:20 +0000 Subject: [PATCH 22/58] Add soong config use_google_qns in zumapro Bug: 360757079 Test: Presubmits Flag: EXEMPT bugfix Change-Id: Ia8cc0a058d6facffac8422d266a9d1decffb90ef --- device.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/device.mk b/device.mk index 85a6ff5..1a1614b 100644 --- a/device.mk +++ b/device.mk @@ -294,6 +294,9 @@ include device/google/gs-common/modem/shared_modem_platform/shared_modem_platfor # Use for GRIL USES_LASSEN_MODEM := true +ifneq ($(BOARD_WITHOUT_RADIO),true) +$(call soong_config_set_bool,grilservice,use_google_qns,true) +endif ifeq ($(USES_GOOGLE_DIALER_CARRIER_SETTINGS),true) USE_GOOGLE_DIALER := true From 5b478fd96dedff37aaf6b6683dafc20d7c595f12 Mon Sep 17 00:00:00 2001 From: Chia-Chi Teng Date: Wed, 20 Nov 2024 17:46:46 +0000 Subject: [PATCH 23/58] Increase HCI command timeout for BT AOC passghrough This is to include the time required for AOC SSR and restart when AOC reset and re-establish transport to finish queued commands. This will also match the Pixel Watch HCI timeout value. Flag: EXEMPT bugfix Bug: 375044749 Test: build, verify on device, presubmit Change-Id: I18fffdee2a38d784165c048d8adf9edbd0019cfc --- device.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/device.mk b/device.mk index 85a6ff5..2d33358 100644 --- a/device.mk +++ b/device.mk @@ -201,6 +201,10 @@ PRODUCT_PRODUCT_PROPERTIES += \ bluetooth.profile.ccp.server.enabled=true \ bluetooth.profile.vcp.controller.enabled=true +# Override default HCI command timeout value for BT stack +PRODUCT_PRODUCT_PROPERTIES += \ + bluetooth.hci.timeout_milliseconds=5000 + # Carrier configuration default location PRODUCT_PROPERTY_OVERRIDES += \ persist.vendor.radio.config.carrier_config_dir=/vendor/firmware/carrierconfig From 7d1e64dc96ddf74f7a980cc26bf4a1efda8c4354 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Thu, 14 Nov 2024 21:12:23 +0000 Subject: [PATCH 24/58] opt in bt channel sounding for p24 Flag: build.RELEASE_RANGING_STACK Bug: 331206299 Bug: 371095923 Test: build Change-Id: Iacb2e99a14bc4cef515953eca6aac60ec33acc35 --- device.mk | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/device.mk b/device.mk index 85a6ff5..cafbf1d 100644 --- a/device.mk +++ b/device.mk @@ -807,6 +807,12 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \ frameworks/native/data/etc/android.hardware.wifi.rtt.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.rtt.xml +# Bluetooth channel sounding +ifneq (,$(RELEASE_RANGING_STACK)) +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.bluetooth_le.channel_sounding.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.channel_sounding.xml +endif + PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml \ frameworks/native/data/etc/android.hardware.usb.accessory.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.accessory.xml From 90782c62620b1525447edb79d9411b91f0e041ca Mon Sep 17 00:00:00 2001 From: Nathan Kulczak Date: Fri, 22 Nov 2024 06:30:23 +0000 Subject: [PATCH 25/58] Vibrator: Add permissions for owt_lib_compat Add permissions to access owt_lib_compat sysfs attribute Bug: 346570576 Flag: vendor.vibrator.hal.flags.enable_pwle_v2 Test: Flash to device and access sysfs Change-Id: I2c59c3328f65343e4cefdb675de2ad630916f9b2 Signed-off-by: Nathan Kulczak --- conf/init.zumapro.board.rc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/init.zumapro.board.rc b/conf/init.zumapro.board.rc index e99251c..a4f9a3e 100644 --- a/conf/init.zumapro.board.rc +++ b/conf/init.zumapro.board.rc @@ -744,6 +744,7 @@ on property:vendor.all.modules.ready=1 chown system system /sys/bus/i2c/devices/9-0043/default/braking_time_ms chown system system /sys/bus/i2c/devices/9-0043/default/f0_offset chown system system /sys/bus/i2c/devices/9-0043/default/owt_free_space + chown system system /sys/bus/i2c/devices/9-0043/default/owt_lib_compat chown system system /sys/bus/i2c/devices/9-0043/default/f0_comp_enable chown system system /sys/bus/i2c/devices/9-0043/default/redc_comp_enable chown system system /sys/bus/i2c/devices/9-0043/default/delay_before_stop_playback_us From 40d34122ef3125bb1f4c7cae99be2638cf130760 Mon Sep 17 00:00:00 2001 From: Kelvin Zhang Date: Fri, 22 Nov 2024 10:06:23 -0800 Subject: [PATCH 26/58] Allow metadata to be formatted as ext4 This does not convert /metadata to ext4, the default is still f2fs. EXT4 would only be used if we are on 16KB mode Flag: EXEMPT bugfix Bug: 379759696 Change-Id: I854f563ecd49fc3d7d73ede581cf3d3081c5e555 --- conf/f2fs/fstab.rw.zumapro.f2fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/f2fs/fstab.rw.zumapro.f2fs b/conf/f2fs/fstab.rw.zumapro.f2fs index 21b3c78..73026da 100644 --- a/conf/f2fs/fstab.rw.zumapro.f2fs +++ b/conf/f2fs/fstab.rw.zumapro.f2fs @@ -4,5 +4,5 @@ /dev/block/platform/13200000.ufs/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier,compress_extension=apk,compress_extension=so,compress_extension=vdex,compress_extension=odex,@inlinecrypt@,atgc,checkpoint_merge,compress_cache latemount,wait,check,quota,formattable,sysfs_path=/dev/sys/block/bootdevice,checkpoint=fs,reservedsize=128M,fscompress,readahead_size_kb=128,@fileencryption@,@metadata_encryption@,keydirectory=/metadata/vold/metadata_encryption,device=zoned:/dev/block/by-name/zoned_device /dev/block/platform/13200000.ufs/by-name/userdata /data ext4 noatime,nosuid,nodev,@inlinecrypt@ latemount,wait,check,quota,formattable,reservedsize=128M,readahead_size_kb=128,@fileencryption@,@metadata_encryption@,keydirectory=/metadata/vold/metadata_encryption /dev/block/platform/13200000.ufs/by-name/metadata /metadata f2fs noatime,nosuid,nodev,sync wait,check,formattable,first_stage_mount -/dev/block/platform/13200000.ufs/by-name/metadata /metadata ext4 noatime,nosuid,nodev,data=journal,commit=1 wait,check,first_stage_mount,metadata_csum +/dev/block/platform/13200000.ufs/by-name/metadata /metadata ext4 noatime,nosuid,nodev,data=journal,commit=1 wait,check,formattable,first_stage_mount,metadata_csum From 675c35badc7f6f85ed417a3a31fb9bf3c49423f7 Mon Sep 17 00:00:00 2001 From: Noelle Scobie Date: Thu, 21 Nov 2024 12:58:55 -0500 Subject: [PATCH 27/58] Opt zumapro into RE-Graphite aconfig-based preview rollout This will only enable RE-Graphite for stages where the rollout aconfig flag introduced in I30a59986d1da2dc8355c2b3cf2da436c6cc64120 is also enabled (and if the force_compile_renderengine_graphite read-only flag is also enabled.) Rollout proposal discussed w/ Pixel Graphics leads out of band. Bug: 380460068 Test: manual validation that RE-Graphite is only enabled w/ aconfig flag Flag: com.android.graphics.surfaceflinger.flags.graphite_renderengine_preview_rollout Change-Id: I29bade2e024771b2800ab23236ddab4b12d9425b --- device.mk | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/device.mk b/device.mk index 85a6ff5..6d70ba6 100644 --- a/device.mk +++ b/device.mk @@ -374,6 +374,14 @@ PRODUCT_VENDOR_PROPERTIES += \ ro.hardware.vulkan=mali endif +# SurfaceFlinger / RenderEngine +ifeq ($(TARGET_USES_VULKAN),true) +# b/293371537 Opt in to RE-Graphite's aconfig-based preview rollout +PRODUCT_VENDOR_PROPERTIES += debug.renderengine.graphite_preview_optin=true +else +$(warning TARGET_USES_VULKAN == false, cannot opt in to RE-Graphite rollout in SurfaceFlinger) +PRODUCT_VENDOR_PROPERTIES += debug.renderengine.graphite_preview_optin=false +endif # b/295257834 Add HDR shaders to SurfaceFlinger's pre-warming cache PRODUCT_VENDOR_PROPERTIES += ro.surface_flinger.prime_shader_cache.ultrahdr=1 From 4ee7fadcef7201c00b4fe0cfdf445746facd793d Mon Sep 17 00:00:00 2001 From: Will Song Date: Sat, 24 Aug 2024 23:55:33 +0000 Subject: [PATCH 28/58] Revert^2 "devices: Move cpufreq perf settings to gs-common" Re-land after making SELinux corrections. 35162f9a7c13de51688f5e3bc61c61311608037d Bug: 335874870 Flag: NONE code refactor Test: Boot and check parameters Signed-off-by: Will Song Change-Id: I8a7c50d9d4a8e77714a7a87d7d974decdac1e877 --- conf/init.zumapro.soc.rc | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/conf/init.zumapro.soc.rc b/conf/init.zumapro.soc.rc index bb8929a..f70d60e 100644 --- a/conf/init.zumapro.soc.rc +++ b/conf/init.zumapro.soc.rc @@ -9,7 +9,6 @@ on init chown system system /sys/devices/system/cpu/cpufreq/policy7/sched_pixel/limit_frequency chown system system /sys/devices/system/cpu/cpufreq/policy7/sched_pixel/pmu_limit_enable - chown system system /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu0_memlat@17000010/memlat_cpuidle_state_aware chown system system /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu1_memlat@17000010/memlat_cpuidle_state_aware chown system system /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu2_memlat@17000010/memlat_cpuidle_state_aware @@ -60,17 +59,6 @@ on init write /proc/vendor_sched/groups/sys_bg/disable_util_est 1 write /proc/vendor_sched/groups/ta/disable_util_est 0 - # governor setting - write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor sched_pixel - write /sys/devices/system/cpu/cpu0/cpufreq/sched_pixel/up_rate_limit_us 500 - write /sys/devices/system/cpu/cpu0/cpufreq/sched_pixel/down_rate_limit_us 500 - write /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor sched_pixel - write /sys/devices/system/cpu/cpu4/cpufreq/sched_pixel/up_rate_limit_us 500 - write /sys/devices/system/cpu/cpu4/cpufreq/sched_pixel/down_rate_limit_us 500 - write /sys/devices/system/cpu/cpu7/cpufreq/scaling_governor sched_pixel - write /sys/devices/system/cpu/cpu7/cpufreq/sched_pixel/up_rate_limit_us 500 - write /sys/devices/system/cpu/cpu7/cpufreq/sched_pixel/down_rate_limit_us 500 - # memlat cpuidle awareness setting # FIXME(b/301212469) these nodes missing on zuma pro # TODO(b/308973423) these values need to be tuned From 343c37a63ffcb41bd6c91014120dc6451581a05b Mon Sep 17 00:00:00 2001 From: Bill Yang Date: Thu, 21 Nov 2024 01:08:41 +0000 Subject: [PATCH 29/58] Add hardware/google/graphics/zumapro/libhwc2.1 to PRODUCT_SOONG_NAMESPACES For zumapro it shares the same libacryl_plugins in zuma but for libexynosdisplay it still has different version between zuma and zumapro. Add zumapro's own libexynosdisplay for zumapro. Bug: 357500180 Test: lunch aosp_caiman-trunk_staging-userdebug; \ m libexynosdisplay Flag: EXEMPT refactor Change-Id: Iaf07baa8bb93ee6cd3da01e4b50231b7f5023fe9 --- device.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/device.mk b/device.mk index 85a6ff5..70b205b 100644 --- a/device.mk +++ b/device.mk @@ -75,6 +75,7 @@ PRODUCT_SOONG_NAMESPACES += \ hardware/google/gchips/gralloc4 \ hardware/google/graphics/common \ hardware/google/graphics/zuma \ + hardware/google/graphics/zumapro/libhwc2.1 \ hardware/google/interfaces \ hardware/google/pixel \ device/google/zumapro \ From 2aec743b4bf26764134c023dcc397cd421675465 Mon Sep 17 00:00:00 2001 From: jonerlin Date: Mon, 25 Nov 2024 17:26:10 +0000 Subject: [PATCH 30/58] init.zumapro.board.rc: bluetooth own uart debug node Bug: 376774204 Test: Manual Flag: EXEMPT project configuration patch Change-Id: Iedd5c0e9fd7c917c152c156adffb62f9043f11c5 --- conf/init.zumapro.board.rc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/init.zumapro.board.rc b/conf/init.zumapro.board.rc index c369eb7..471198d 100644 --- a/conf/init.zumapro.board.rc +++ b/conf/init.zumapro.board.rc @@ -639,6 +639,7 @@ on post-fs-data chown bluetooth system /proc/bluetooth/sleep/btwake chown bluetooth system /proc/bluetooth/sleep/lpm chown bluetooth system /proc/bluetooth/sleep/btwrite + chown bluetooth system /sys/devices/platform/155d0000.serial/uart_dbg mkdir /data/vendor/bluetooth 0770 bluetooth system # ODPM From 673b99f99a1c0f1fb57fed6b56b1f84235776d41 Mon Sep 17 00:00:00 2001 From: youngtaecha Date: Sun, 24 Nov 2024 02:16:28 +0000 Subject: [PATCH 31/58] Extend satellite support to Puerto Rico as a US territory Bug: 379849040 Flag: EXEMPT 'config change' Test: Manually verified if the satS2.data is working well in PR, HI, AK, US mainland with old format (b/377610782#comment4) Change-Id: If3b54455a4716cb232671ba7c3a6ceafd48566ad --- .../base/core/res/res/values/config.xml | 3 ++- telephony/sats2.dat | Bin 69213 -> 77998 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 4f901e7..6d7a47f 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -495,7 +495,8 @@ - US + US + PR + in the satellite availability state at the current location. --> false + + + true From 0d33b2a9b82d8cb4e0855f38dab1031872a8fac0 Mon Sep 17 00:00:00 2001 From: Nathan Kulczak Date: Fri, 22 Nov 2024 00:21:02 +0000 Subject: [PATCH 35/58] Vibrator: Update compatability matrix Update IVibrator compatability matrix entry to support AIDL V3 Flag: EXEMPT HAL interface change Bug: 346570576 Test: ABTD build Change-Id: I18f81d54141da23938e7bda5c7e83616d30da696 Signed-off-by: Nathan Kulczak --- device_framework_matrix_product_202404.xml | 2 +- device_framework_matrix_product_8.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/device_framework_matrix_product_202404.xml b/device_framework_matrix_product_202404.xml index ce5db47..6d16f9e 100644 --- a/device_framework_matrix_product_202404.xml +++ b/device_framework_matrix_product_202404.xml @@ -21,7 +21,7 @@ android.hardware.vibrator - 2 + 2-3 IVibrator dual diff --git a/device_framework_matrix_product_8.xml b/device_framework_matrix_product_8.xml index 1103919..1294b8c 100644 --- a/device_framework_matrix_product_8.xml +++ b/device_framework_matrix_product_8.xml @@ -21,7 +21,7 @@ android.hardware.vibrator - 2 + 2-3 IVibrator dual From 4307055f6f64719009c7d7a495431957a61239ff Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Tue, 3 Dec 2024 17:30:47 +0800 Subject: [PATCH 36/58] Clean up unnecessary data_connection_5g_plus overlay This string is not device specific, and already set at, frameworks/base/packages/SettingsLib/res/values-mcc311-mnc480/strings.xml frameworks/base/packages/SettingsLib/res/values-mcc310-mnc004/strings.xml Bug: 377907543 Flag: EXEMPT clean up Test: m Change-Id: Ib7681d0acde908f3cb7b0628c54a2d42a002e21c --- .../res/values-mcc310-mnc004/strings.xml | 22 ------------------- .../res/values-mcc311-mnc480/strings.xml | 22 ------------------- 2 files changed, 44 deletions(-) delete mode 100644 overlay/frameworks/base/packages/SettingsLib/res/values-mcc310-mnc004/strings.xml delete mode 100644 overlay/frameworks/base/packages/SettingsLib/res/values-mcc311-mnc480/strings.xml diff --git a/overlay/frameworks/base/packages/SettingsLib/res/values-mcc310-mnc004/strings.xml b/overlay/frameworks/base/packages/SettingsLib/res/values-mcc310-mnc004/strings.xml deleted file mode 100644 index f8ed0c0..0000000 --- a/overlay/frameworks/base/packages/SettingsLib/res/values-mcc310-mnc004/strings.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - 5G UW - diff --git a/overlay/frameworks/base/packages/SettingsLib/res/values-mcc311-mnc480/strings.xml b/overlay/frameworks/base/packages/SettingsLib/res/values-mcc311-mnc480/strings.xml deleted file mode 100644 index f8ed0c0..0000000 --- a/overlay/frameworks/base/packages/SettingsLib/res/values-mcc311-mnc480/strings.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - 5G UW - From bc9e47d93b915a79305bacdce43084a773f63031 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Mon, 2 Dec 2024 14:40:36 -0800 Subject: [PATCH 37/58] Fix kasan logic The command line "kasan=off" should be unconditionally set when we're compiling for a normal (non-_fullmte) build. The current logic sets "kasan=off" for a normal ENG build only, which is insufficent. Test: _fullmte userdebug/eng: "sanitizer-status mte" shows MTE enabled. Test: _fullmte userdebug/eng: "kasan=off" IS NOT present in /proc/cmdline Test: !_fullmte userdebug: "sanitizer-status mte" shows MTE disabled. Test: !_fullmte eng: "sanitizer-status mte" shows MTE enabled Test: !_fullmte userdebug/eng: "kasan=off" IS present in /proc/cmdline Change-Id: Idd61747156daa135e919ce71fd63bfab1f4d9239 Bug: 381940217 Flag: EXEMPT bugfix --- BoardConfig-common.mk | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 998bd5c..dfecf05 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -41,9 +41,15 @@ BOARD_KERNEL_CMDLINE += swiotlb=noforce BOARD_KERNEL_CMDLINE += disable_dma32=on BOARD_KERNEL_CMDLINE += sysctl.kernel.sched_pelt_multiplier=4 +# Normal (non-_fullmte) builds should disable kasan ifeq (,$(filter %_fullmte,$(TARGET_PRODUCT))) -ifneq (,$(filter eng,$(TARGET_BUILD_VARIANT))) BOARD_KERNEL_CMDLINE += kasan=off +endif + +# Enable a limited subset of MTE for "normal" (non-_fullmte) eng builds. +# Don't touch any settings for _fullmte builds. They are set somewhere else. +ifeq (,$(filter %_fullmte,$(TARGET_PRODUCT))) +ifeq ($(TARGET_BUILD_VARIANT),eng) BOARD_KERNEL_CMDLINE += bootloader.pixel.MTE_FORCE_ON ifeq ($(filter memtag_heap,$(SANITIZE_TARGET)),) SANITIZE_TARGET := $(strip $(SANITIZE_TARGET) memtag_heap) From 2d0e825be2776b8d9ab7d55cfed56dea3df23045 Mon Sep 17 00:00:00 2001 From: Hung-Yeh Lee Date: Wed, 4 Dec 2024 15:01:06 +0800 Subject: [PATCH 38/58] 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: I418dd4cf834e8a581ae94730c6fc995c99f0db8e --- device.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.mk b/device.mk index e5aa1a9..522c0ad 100644 --- a/device.mk +++ b/device.mk @@ -31,7 +31,7 @@ include device/google/gs-common/pixel_metrics/pixel_metrics.mk include device/google/gs-common/soc/freq.mk include device/google/gs-common/gps/dump/log.mk include device/google/gs-common/bcmbt/dump/dumplog.mk -include device/google/gs-common/display/dump.mk +include device/google/gs-common/display/dump_exynos_display.mk include device/google/gs-common/display_logbuffer/dump.mk include device/google/gs-common/gxp/gxp.mk include device/google/gs-common/camera/dump.mk From 5c61b703003d73deb3435334faddbdb86754c953 Mon Sep 17 00:00:00 2001 From: Adrian Mejia Date: Wed, 4 Dec 2024 19:35:05 +0000 Subject: [PATCH 39/58] Add `config_satellite_allow_tn_scanning_during_satellite_session` flag. Bug: 382143173 Change-Id: Iedd8a22bd43024d07058448b8b8cda793264c750 Test: config change Flag: EXEMPT config change --- 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 93af15c..a0ab8c6 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -545,4 +545,7 @@ true + + + false From 312ec7ca37cb6fcc41615e26c3ac97706a12a2ef Mon Sep 17 00:00:00 2001 From: Nelson Li Date: Wed, 27 Nov 2024 06:31:35 +0000 Subject: [PATCH 40/58] Change TARGET_RECOVERY_UI_LIB to use fully qualified names in zumapro Since the TARGET_RECOVERY_UI_LIB for each device is not exactly the same, and most of the modules in it contain `soong_namespace{}` to avoid conflicts between different devices, after converting `librecovery_ui_ext` from Android.mk to Android.bp, it needs to be changed to a `fully qualified name` in order to correctly use the corresponding module. Flag: EXEMPT refactor Bug: 339143524 Test: m -j librecovery_ui_ext Merged-In: I4b585c0b73366ba5e1f8c6461ed3ed62547af7b7 Change-Id: I4b585c0b73366ba5e1f8c6461ed3ed62547af7b7 --- BoardConfig-common.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 921b28b..9338eb7 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -72,7 +72,7 @@ TARGET_RECOVERY_FSTAB_GENRULE := gen_fstab.zumapro-sw-encrypt TARGET_RECOVERY_PIXEL_FORMAT := ABGR_8888 TARGET_RECOVERY_UI_MARGIN_HEIGHT := 165 TARGET_RECOVERY_UI_LIB := \ - librecovery_ui_pixel \ + //hardware/google/pixel/recovery:librecovery_ui_pixel \ libfstab AB_OTA_UPDATER := true From a547826e2e86aee7901eb2c4c680e97873b0e390 Mon Sep 17 00:00:00 2001 From: Tim Lin Date: Thu, 5 Dec 2024 07:14:39 +0000 Subject: [PATCH 41/58] Add `config_satellite_carrier_roaming_esos_provisioned_class` for the intent to trigger satellite provisioning Bug: 381285467 Test: make Flag: EXEMPT resource only update Change-Id: Ib253b2eca0a70f45eca1d9749cf9462fd4cc1d26 --- 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 93af15c..c559bae 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -492,6 +492,9 @@ com.google.android.apps.stargate + + com.google.android.apps.stargate.registration.RegistrationReceiver_Receiver + From 36fdcd9831e515a67064afa44194873a4b7db410 Mon Sep 17 00:00:00 2001 From: Daniel Zheng Date: Thu, 5 Dec 2024 14:44:34 -0800 Subject: [PATCH 42/58] update health HAL dependency Bug: 381926253 Test: th Change-Id: I9028c55dab29f7b4f73ee0011d9cb2ac4f4e7f91 --- health/android.hardware.health-service.zumapro.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/health/android.hardware.health-service.zumapro.xml b/health/android.hardware.health-service.zumapro.xml index 2acaaba..8ddfbda 100644 --- a/health/android.hardware.health-service.zumapro.xml +++ b/health/android.hardware.health-service.zumapro.xml @@ -1,7 +1,7 @@ android.hardware.health - 3 + 4 IHealth/default From 6e9b0dbc6747b3daf3e01805058626214ffefef2 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Thu, 5 Dec 2024 06:54:27 +0000 Subject: [PATCH 43/58] Add SCHED_QOS_POWER_EFFICIENCY profiles Currently support AutoUclampMax. Bug: 355612114 Flag: NONE vendor task_profiles.json Test: build pass Change-Id: I99c3862c471b212e2a8d0e5a7a5758daac461fbe --- task_profiles.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/task_profiles.json b/task_profiles.json index 8cec122..a731cb2 100644 --- a/task_profiles.json +++ b/task_profiles.json @@ -519,6 +519,14 @@ { "Name": "SCHED_QOS_SENSITIVE_STANDARD_CLEAR", "Profiles": [ "AdpfClear", "PreferIdleClear", "PreferFitClear" ] + }, + { + "Name": "SCHED_QOS_POWER_EFFICIENCY_SET", + "Profiles": [ "AutoUclampMaxSet" ] + }, + { + "Name": "SCHED_QOS_POWER_EFFICIENCY_CLEAR", + "Profiles": [ "AutoUclampMaxClear" ] } ] } From 1c268207da67e3d097ed1fcaa3fe16fcee208833 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Thu, 5 Dec 2024 07:15:33 +0000 Subject: [PATCH 44/58] Use SCHED_QOS_SENSITIVE_EXTREME_SET for InputPolicy Let InputPolicy have all the feature of ADPF task. Bug: 355612114 Flag: NONE vendor task_profiles.json does not support flag Test: build pass Change-Id: I5c2964c0328d2d3a95c84d4c2908ace198202e06 --- task_profiles.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/task_profiles.json b/task_profiles.json index a731cb2..6b9b1ee 100644 --- a/task_profiles.json +++ b/task_profiles.json @@ -500,10 +500,6 @@ "Name": "OtaProfiles", "Profiles": [ "OtaPerformance", "ServiceCapacityLow", "LowIoPriority", "TimerSlackHigh" ] }, - { - "Name": "InputPolicy", - "Profiles": [ "MaxPerformance", "ResetUclampGrp", "PreferIdleSet" ] - }, { "Name": "SCHED_QOS_SENSITIVE_EXTREME_SET", "Profiles": [ "AdpfSet", "PreferIdleSet", "PreferFitSet", "BoostPrioSet", "PreemptWakeupSet" ] @@ -527,6 +523,10 @@ { "Name": "SCHED_QOS_POWER_EFFICIENCY_CLEAR", "Profiles": [ "AutoUclampMaxClear" ] + }, + { + "Name": "InputPolicy", + "Profiles": [ "MaxPerformance", "SCHED_QOS_SENSITIVE_EXTREME_SET" ] } ] } From 20ca1e9f983935f1e315a32605b9f099397c15ba Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Thu, 5 Dec 2024 08:44:43 +0000 Subject: [PATCH 45/58] Set permission for rampup_multiplier Bug: 355612114 Flag: NONE init rc file does not support flag Test: build pass Change-Id: I410866488af508cb02d7fa509f4458fbdf676078 --- conf/init.zumapro.soc.rc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/conf/init.zumapro.soc.rc b/conf/init.zumapro.soc.rc index f70d60e..f4cd377 100644 --- a/conf/init.zumapro.soc.rc +++ b/conf/init.zumapro.soc.rc @@ -146,6 +146,8 @@ on init 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 @@ -161,6 +163,8 @@ on init 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 @@ -170,6 +174,7 @@ on init 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 @@ -177,6 +182,7 @@ on init 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 @@ -184,18 +190,23 @@ on init 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 on zygote-start # For PixelLogger configuration file. From 6db5e8e725aebc309110e795dd1ee29e6679a67f Mon Sep 17 00:00:00 2001 From: Eileen Lai Date: Fri, 6 Dec 2024 12:58:58 +0000 Subject: [PATCH 46/58] modem_svc: use modem_svc_sit version sepolicy For solving sepolicy conflicts for different AP version, modem_svc_sit will support devices from gs101 to zuma_pro. Bug: 372400955 Change-Id: I926fe12be95f10a2c4db13c06dab8b1586f9dcc8 Flag: NONE local testing only --- device.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.mk b/device.mk index e5aa1a9..6324e7e 100644 --- a/device.mk +++ b/device.mk @@ -295,7 +295,7 @@ BOARD_SEPOLICY_DIRS += hardware/google/pixel-sepolicy/logger_app endif # ifneq ($(BOARD_WITHOUT_RADIO),true) # Shared Modem Platform -include device/google/gs-common/modem/shared_modem_platform/shared_modem_platform.mk +include device/google/gs-common/modem/modem_svc_sit/shared_modem_platform.mk # Use for GRIL USES_LASSEN_MODEM := true From 3dd14b523a3e74fbc33b4be48aba79b4de1a72d4 Mon Sep 17 00:00:00 2001 From: youngtaecha Date: Fri, 22 Nov 2024 22:11:02 +0000 Subject: [PATCH 47/58] Add enhanced geofencing data and satelltie access config json for Zuma Pro Bug: 362312117 Flag: EXEMPT 'config change' Test: Manually verified if the enhanced geofence file is working well with the satellite_access_config.json file. Change-Id: I9a27b9bc67dcd5d48e4487b1af973847b3a0912c --- device.mk | 3 +- .../base/core/res/res/values/config.xml | 3 + telephony/satellite_access_config.json | 159 ++++++++++++++++++ telephony/sats2.dat | Bin 77998 -> 123194 bytes 4 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 telephony/satellite_access_config.json diff --git a/device.mk b/device.mk index 570c01e..41611a2 100644 --- a/device.mk +++ b/device.mk @@ -1315,7 +1315,8 @@ endif # Telephony satellite geofence data file PRODUCT_COPY_FILES += \ - device/google/zumapro/telephony/sats2.dat:$(TARGET_COPY_OUT_VENDOR)/etc/telephony/sats2.dat + device/google/zumapro/telephony/sats2.dat:$(TARGET_COPY_OUT_VENDOR)/etc/telephony/sats2.dat \ + device/google/zumapro/telephony/satellite_access_config.json:$(TARGET_COPY_OUT_VENDOR)/etc/telephony/satellite_access_config.json # Touch service include device/google/gs-common/touch/twoshay/aidl_zuma.mk diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 93af15c..ce2d991 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -542,6 +542,9 @@ in the satellite availability state at the current location. --> false + + /vendor/etc/telephony/satellite_access_config.json + true diff --git a/telephony/satellite_access_config.json b/telephony/satellite_access_config.json new file mode 100644 index 0000000..d67b6bb --- /dev/null +++ b/telephony/satellite_access_config.json @@ -0,0 +1,159 @@ +{ + "access_control_configs": [ + { + "config_id": 0, + "satellite_infos": [ + { + "satellite_id": "c9d78ffa-ffa5-4d41-a81b-34693b33b496", + "satellite_position": { + "longitude": -101.3, + "altitude": 35786.0 + }, + "bands": [ + 255 + ], + "earfcn_ranges": [ + { + "start_earfcn": 229011, + "end_earfcn": 229011 + }, + { + "start_earfcn": 229013, + "end_earfcn": 229013 + }, + { + "start_earfcn": 229015, + "end_earfcn": 229015 + }, + { + "start_earfcn": 229017, + "end_earfcn": 229017 + } + ] + } + ], + "tag_ids": [ + 11, + 1001 + ] + }, + { + "config_id": 1, + "satellite_infos": [ + { + "satellite_id": "62de127d-ead1-481f-8524-b58e2664103a", + "satellite_position": { + "longitude": -98.0, + "altitude": 35775.1 + }, + "bands": [ + 255 + ], + "earfcn_ranges": [ + { + "start_earfcn": 228837, + "end_earfcn": 228837 + } + ] + } + ], + "tag_ids": [ + 11, + 1001 + ] + }, + { + "config_id": 2, + "satellite_infos": [ + { + "satellite_id": "62de127d-ead1-481f-8524-b58e2664103a", + "satellite_position": { + "longitude": -98.0, + "altitude": 35775.1 + }, + "bands": [ + 255 + ], + "earfcn_ranges": [ + { + "start_earfcn": 228909, + "end_earfcn": 228909 + }, + { + "start_earfcn": 228919, + "end_earfcn": 228919 + } + ] + } + ], + "tag_ids": [ + 11 + ] + }, + { + "config_id": 3, + "satellite_infos": [ + { + "satellite_id": "c9d78ffa-ffa5-4d41-a81b-34693b33b496", + "satellite_position": { + "longitude": -101.3, + "altitude": 35786.0 + }, + "bands": [ + 255 + ], + "earfcn_ranges": [ + { + "start_earfcn": 229011, + "end_earfcn": 229011 + }, + { + "start_earfcn": 229013, + "end_earfcn": 229013 + }, + { + "start_earfcn": 229015, + "end_earfcn": 229015 + }, + { + "start_earfcn": 229017, + "end_earfcn": 229017 + } + ] + } + ], + "tag_ids": [ + 12 + ] + }, + { + "config_id": 4, + "satellite_infos": [ + { + "satellite_id": "62de127d-ead1-481f-8524-b58e2664103a", + "satellite_position": { + "longitude": -98.0, + "altitude": 35775.1 + }, + "bands": [ + 255 + ], + "earfcn_ranges": [ + { + "start_earfcn": 228919, + "end_earfcn": 228919 + }, + { + "start_earfcn": 228909, + "end_earfcn": 228909 + } + ] + } + ], + "tag_ids": [ + 11, + 1001 + ] + } + ] +} \ No newline at end of file diff --git a/telephony/sats2.dat b/telephony/sats2.dat index f308cc1ef130a366235ff2ca5809697edb29cc5c..dcceffe93bba6a5dff0db962bbcd79b61931a2d2 100644 GIT binary patch literal 123194 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 delta 22605 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 From 036b6007f848863ae9139b3d534b6f76b8586131 Mon Sep 17 00:00:00 2001 From: Daniel Lowe Date: Thu, 5 Dec 2024 19:24:37 +0000 Subject: [PATCH 48/58] [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: I0d5a3133081afb68ce14fae3a40468c58284f495 --- default-permissions.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/default-permissions.xml b/default-permissions.xml index 8c79c49..687cff4 100644 --- a/default-permissions.xml +++ b/default-permissions.xml @@ -173,5 +173,9 @@ + + + From 4f3d7568c9dde234f7c1eff23029ae3645efa689 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Mon, 9 Dec 2024 13:23:23 +0000 Subject: [PATCH 49/58] Enable usb state update via udc sysfs Bug: 339241080 Test: tested on Tokay Flag: android.hardware.usb.flags.enable_udc_sysfs_usb_state_update Change-Id: I4ab097745c49f782c143140060607b4e784d5799 --- 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 2666950..771e41c 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -554,4 +554,7 @@ false + + + true From 9cc8c2ae4e54f829c0c30bb0c6adb6272939d80b Mon Sep 17 00:00:00 2001 From: youngtaecha Date: Sat, 7 Dec 2024 09:14:58 +0000 Subject: [PATCH 50/58] Add enhanced geofencing data and satelltie access config json for Zuma Pro US(mainland, hawaii, alaska), PuertoRico, Canada, Europe Bug: 362312117 Flag: EXEMPT 'config change' Test: Manually verified if the enhanced geofence file is working well with the satellite_access_config.json file.(b/382816070) Change-Id: I65dec5b1e9602979f102ab34764a8067e54bde05 --- telephony/satellite_access_config.json | 44 ++++++++++++++++++++++--- telephony/sats2.dat | Bin 123194 -> 162414 bytes 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/telephony/satellite_access_config.json b/telephony/satellite_access_config.json index d67b6bb..fd5257e 100644 --- a/telephony/satellite_access_config.json +++ b/telephony/satellite_access_config.json @@ -2,6 +2,42 @@ "access_control_configs": [ { "config_id": 0, + "satellite_infos": [ + { + "satellite_id": "967f8e86-fc27-4673-9343-a820280a14dd", + "satellite_position": { + "longitude": 10.25, + "altitude": 35793.1 + }, + "bands": [ + 256 + ], + "earfcn_ranges": [ + { + "start_earfcn": 229360, + "end_earfcn": 229360 + }, + { + "start_earfcn": 229362, + "end_earfcn": 229362 + }, + { + "start_earfcn": 229364, + "end_earfcn": 229364 + }, + { + "start_earfcn": 229366, + "end_earfcn": 229366 + } + ] + } + ], + "tag_ids": [ + 101 + ] + }, + { + "config_id": 1, "satellite_infos": [ { "satellite_id": "c9d78ffa-ffa5-4d41-a81b-34693b33b496", @@ -38,7 +74,7 @@ ] }, { - "config_id": 1, + "config_id": 2, "satellite_infos": [ { "satellite_id": "62de127d-ead1-481f-8524-b58e2664103a", @@ -63,7 +99,7 @@ ] }, { - "config_id": 2, + "config_id": 3, "satellite_infos": [ { "satellite_id": "62de127d-ead1-481f-8524-b58e2664103a", @@ -91,7 +127,7 @@ ] }, { - "config_id": 3, + "config_id": 4, "satellite_infos": [ { "satellite_id": "c9d78ffa-ffa5-4d41-a81b-34693b33b496", @@ -127,7 +163,7 @@ ] }, { - "config_id": 4, + "config_id": 5, "satellite_infos": [ { "satellite_id": "62de127d-ead1-481f-8524-b58e2664103a", diff --git a/telephony/sats2.dat b/telephony/sats2.dat index dcceffe93bba6a5dff0db962bbcd79b61931a2d2..b06872f9cbc84d9fda4b10f1a1b9c6eefc250434 100644 GIT binary patch delta 61503 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 delta 24596 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 Date: Mon, 9 Dec 2024 13:03:14 +0100 Subject: [PATCH 51/58] 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: I56f8ac747a97e866e2a663ab70c141871330ec8f --- conf/init.zumapro.board.rc | 66 --------------------------------- conf/init.zumapro.soc.rc | 76 -------------------------------------- 2 files changed, 142 deletions(-) diff --git a/conf/init.zumapro.board.rc b/conf/init.zumapro.board.rc index 64bc097..7378d9b 100644 --- a/conf/init.zumapro.board.rc +++ b/conf/init.zumapro.board.rc @@ -21,72 +21,6 @@ on init # Boot time fs tuning write /sys/block/sda/queue/scheduler mq-deadline - 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/fg_wi/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/groups/fg_wi/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 - - 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/fg_wi/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/groups/fg_wi/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 # ZRAM setup diff --git a/conf/init.zumapro.soc.rc b/conf/init.zumapro.soc.rc index f4cd377..f77d0f3 100644 --- a/conf/init.zumapro.soc.rc +++ b/conf/init.zumapro.soc.rc @@ -131,82 +131,6 @@ on init write /sys/devices/system/cpu/cpu6/mte_tcf_preferred asymm write /sys/devices/system/cpu/cpu7/mte_tcf_preferred asymm - # 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 on zygote-start # For PixelLogger configuration file. From 8e75b66b849ecf548ea15ae16ec457315abcff74 Mon Sep 17 00:00:00 2001 From: Andrew Cheng Date: Fri, 6 Dec 2024 18:43:21 -0800 Subject: [PATCH 52/58] Fix properties to enable override AAOS_on_phone targets need to override these properties, without that builds will fail. Bug: 377689604 Test: local build Change-Id: I5eef2b081da846813106ea282c38685046848be7 --- device.mk | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/device.mk b/device.mk index d8b121a..14e2586 100644 --- a/device.mk +++ b/device.mk @@ -177,30 +177,30 @@ PRODUCT_PROPERTY_OVERRIDES += \ # MAJOR_CLASS: 0x42 -> 66 (Phone) # MINOR_CLASS: 0x0C -> 12 (Smart Phone) PRODUCT_PRODUCT_PROPERTIES += \ - bluetooth.device.class_of_device=90,66,12 + bluetooth.device.class_of_device?=90,66,12 # Set supported Bluetooth profiles to enabled PRODUCT_PRODUCT_PROPERTIES += \ - bluetooth.profile.asha.central.enabled=true \ - bluetooth.profile.a2dp.source.enabled=true \ - bluetooth.profile.avrcp.target.enabled=true \ - bluetooth.profile.bap.unicast.client.enabled=true \ - bluetooth.profile.bas.client.enabled=true \ - bluetooth.profile.csip.set_coordinator.enabled=true \ - bluetooth.profile.gatt.enabled=true \ - bluetooth.profile.hap.client.enabled=true \ - bluetooth.profile.hfp.ag.enabled=true \ - bluetooth.profile.hid.device.enabled=true \ - bluetooth.profile.hid.host.enabled=true \ - bluetooth.profile.map.server.enabled=true \ - bluetooth.profile.mcp.server.enabled=true \ - bluetooth.profile.opp.enabled=true \ - bluetooth.profile.pan.nap.enabled=true \ - bluetooth.profile.pan.panu.enabled=true \ - bluetooth.profile.pbap.server.enabled=true \ - bluetooth.profile.sap.server.enabled=true \ - bluetooth.profile.ccp.server.enabled=true \ - bluetooth.profile.vcp.controller.enabled=true + bluetooth.profile.asha.central.enabled?=true \ + bluetooth.profile.a2dp.source.enabled?=true \ + bluetooth.profile.avrcp.target.enabled?=true \ + bluetooth.profile.bap.unicast.client.enabled?=true \ + bluetooth.profile.bas.client.enabled?=true \ + bluetooth.profile.csip.set_coordinator.enabled?=true \ + bluetooth.profile.gatt.enabled?=true \ + bluetooth.profile.hap.client.enabled?=true \ + bluetooth.profile.hfp.ag.enabled?=true \ + bluetooth.profile.hid.device.enabled?=true \ + bluetooth.profile.hid.host.enabled?=true \ + bluetooth.profile.map.server.enabled?=true \ + bluetooth.profile.mcp.server.enabled?=true \ + bluetooth.profile.opp.enabled?=true \ + bluetooth.profile.pan.nap.enabled?=true \ + bluetooth.profile.pan.panu.enabled?=true \ + bluetooth.profile.pbap.server.enabled?=true \ + bluetooth.profile.sap.server.enabled?=true \ + bluetooth.profile.ccp.server.enabled?=true \ + bluetooth.profile.vcp.controller.enabled?=true # Override default HCI command timeout value for BT stack PRODUCT_PRODUCT_PROPERTIES += \ From 0ff08635b5c875a5c5dadd9fc28d69dfe2191404 Mon Sep 17 00:00:00 2001 From: Thomas Nguyen Date: Wed, 11 Dec 2024 13:46:32 -0800 Subject: [PATCH 53/58] Configure satellite NIDD APN name for Zuma pro devices Bug: 366014519 Flag: EXEMPT 'config change' Test: SatelliteSOSMessageRecommenderTest SatelliteControllerTest Manual system test with Skylo, Vzw, Starlink Change-Id: I9395086ae0c1449ab056b2f2df13a2c367bafb3d --- overlay/frameworks/base/core/res/res/values/config.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 771e41c..34cb02b 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -555,6 +555,11 @@ false + + pixel.ntn + true From b5924fde73faed1266cfabd528d17bcd7ba8b840 Mon Sep 17 00:00:00 2001 From: Chungkai Mei Date: Mon, 25 Nov 2024 06:03:17 +0000 Subject: [PATCH 54/58] 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 6b9b1ee..103ff20 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 4b4de9132d770ace30db60f3cba6a0688fb7dc28 Mon Sep 17 00:00:00 2001 From: Hidayat Khan Date: Wed, 4 Dec 2024 01:04:50 +0000 Subject: [PATCH 55/58] Added VZW tagIds based on go/pixel-ntn-region-tags Bug: 381798055 Test: atest SatelliteControllerTest FLAG: com.android.internal.telephony.flags.carrier_roaming_nb_iot_ntn Change-Id: I03f5ec7fb8db04519ae1e3da0e03edaaf754dc70 --- overlay/frameworks/base/core/res/res/values/config.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 34cb02b..069eccb 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -562,4 +562,10 @@ true + + + + 1001 + + From 082a2916a960487477740d443ce202147a29fb14 Mon Sep 17 00:00:00 2001 From: Thomas Nguyen Date: Fri, 13 Dec 2024 14:02:07 -0800 Subject: [PATCH 56/58] Add country codes of Canda and EU countries to the satellite allowed list Bug: 384090903 Flag: EXEMPT 'config change' Test manual system test Change-Id: I04874b0cae5eec15abb6fd8d71507461e2a45de6 --- .../base/core/res/res/values/config.xml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 069eccb..269d1bc 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -500,6 +500,36 @@ US PR + CA + AT + BE + BG + HR + CY + CZ + DK + EE + FI + FR + DE + GR + HU + IE + IT + LV + LT + LU + NL + NO + PL + PT + RO + SK + SI + ES + SE + CH + GB