From 27a5772d064a1b3677b00ea635af6289565a3113 Mon Sep 17 00:00:00 2001 From: Les Lee Date: Thu, 5 Sep 2024 03:49:32 +0000 Subject: [PATCH 01/83] wifi: Upgrade vendor hal version Bug: 362355566 Flag: EXEMPT HAL interface change Test: Build Change-Id: If7f29ba38c167f549569fa687a82bfeb1a803e7e --- 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 d935d9a..57bf606 100644 --- a/device_framework_matrix_product.xml +++ b/device_framework_matrix_product.xml @@ -153,7 +153,7 @@ vendor.google.wifi_ext - 2-3 + 2-4 IWifiExt default From 2e83b04a10be95d45c6996a8ed000cc328d76f10 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Mon, 26 Aug 2024 09:10:27 +0000 Subject: [PATCH 02/83] 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 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 ef3dbab..c424f4c 100644 --- a/conf/init.zumapro.soc.rc +++ b/conf/init.zumapro.soc.rc @@ -215,6 +215,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 5fcf70543494c4b0d498d3bb568eb1e1d560e1e1 Mon Sep 17 00:00:00 2001 From: Wen Chang Liu Date: Sat, 14 Sep 2024 06:10:51 +0000 Subject: [PATCH 03/83] Support FEATURE_DynamicColorAspect for MPC15 [5.1/H-1-21] MUST support FEATURE_DynamicColorAspect for all hardware video decoders (AVC, HEVC, VP9, AV1, or later). Bug: 343864145 Flag: EXEMPT resource only update Test: run cts -m CtsMediaPerformanceClassTestCases -- --module-arg \ CtsMediaPerformanceClassTestCases:instrumentation-arg:media-performance-class:=35 Test: run cts -m CtsMediaV2TestCases -t android.mediav2.cts.DecoderDynamicColorAspectTest Test: run cts -m CtsMediaV2TestCases -t android.mediav2.cts.AdaptivePlaybackTest Change-Id: I97c2e683f2290a91e40be77f595b1043c548db6d --- media_codecs_aosp_c2.xml | 6 ++++++ media_codecs_bo_c2.xml | 2 ++ 2 files changed, 8 insertions(+) diff --git a/media_codecs_aosp_c2.xml b/media_codecs_aosp_c2.xml index ab61ca9..a69ba56 100644 --- a/media_codecs_aosp_c2.xml +++ b/media_codecs_aosp_c2.xml @@ -33,6 +33,7 @@ + @@ -48,6 +49,7 @@ + @@ -63,6 +65,7 @@ + @@ -78,6 +81,7 @@ + @@ -134,6 +138,7 @@ + @@ -149,6 +154,7 @@ + diff --git a/media_codecs_bo_c2.xml b/media_codecs_bo_c2.xml index 06e0447..ccaea74 100644 --- a/media_codecs_bo_c2.xml +++ b/media_codecs_bo_c2.xml @@ -31,6 +31,7 @@ + @@ -47,6 +48,7 @@ + From 7c7154dd1c4778275a59b8182ea8523e7a7df464 Mon Sep 17 00:00:00 2001 From: Wen Chang Liu Date: Sat, 14 Sep 2024 06:29:02 +0000 Subject: [PATCH 04/83] Support FEATURE_HlgEditing for MPC15 [5.1/H-1-20] MUST support the Feature_HdrEditing feature for all hardware AV1 and HEVC encoders present on the device at 4K resolution or the largest Camera-supported resolution, whichever is less. Bug: 343146210 Bug: 343864145 Flag: EXEMPT resource only update Test: run cts -m CtsMediaPerformanceClassTestCases -- --module-arg \ CtsMediaPerformanceClassTestCases:instrumentation-arg:media-performance-class:=35 Change-Id: I362b9b8cc349f58869aa51322d35930e29a8d2b8 --- media_codecs_aosp_c2.xml | 1 + media_codecs_bo_c2.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/media_codecs_aosp_c2.xml b/media_codecs_aosp_c2.xml index a69ba56..5a39a44 100644 --- a/media_codecs_aosp_c2.xml +++ b/media_codecs_aosp_c2.xml @@ -194,6 +194,7 @@ + diff --git a/media_codecs_bo_c2.xml b/media_codecs_bo_c2.xml index ccaea74..68c5650 100644 --- a/media_codecs_bo_c2.xml +++ b/media_codecs_bo_c2.xml @@ -68,6 +68,7 @@ + From 1a610d10a2e58ebcccb8ed0719e2432d591d58d8 Mon Sep 17 00:00:00 2001 From: Wesley Lee Date: Fri, 20 Sep 2024 16:36:00 -0700 Subject: [PATCH 05/83] set the minimal resolution as 80x80 Bug: 367425615 Flag: EXEMPT bugfix Change-Id: I24191f3ead995535a0ee87b47030dbfe2e448740 Signed-off-by: Wesley Lee --- media_codecs_bo_c2.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/media_codecs_bo_c2.xml b/media_codecs_bo_c2.xml index 06e0447..14b60ff 100644 --- a/media_codecs_bo_c2.xml +++ b/media_codecs_bo_c2.xml @@ -51,11 +51,11 @@ - + - - + + From ea7bd38c52ce3b894f716313418a06259d4bb428 Mon Sep 17 00:00:00 2001 From: Kyle Tso Date: Tue, 24 Sep 2024 16:19:00 +0800 Subject: [PATCH 06/83] usb: Remove project-specific file modification Bug: 365912852 Test: verified the file owner and permission Flag: EXEMPT bugfix Change-Id: I41d4a03c1f38ce332887889eda960acc9625aa2d Signed-off-by: Kyle Tso --- usb/usb/android.hardware.usb-service-i2c11.rc | 2 -- usb/usb/android.hardware.usb-service-i2c6.rc | 2 -- 2 files changed, 4 deletions(-) diff --git a/usb/usb/android.hardware.usb-service-i2c11.rc b/usb/usb/android.hardware.usb-service-i2c11.rc index dd4b86b..84a810e 100644 --- a/usb/usb/android.hardware.usb-service-i2c11.rc +++ b/usb/usb/android.hardware.usb-service-i2c11.rc @@ -26,7 +26,6 @@ on post-fs chown root system /sys/devices/platform/11110000.usb/dwc3_exynos_otg_b_sess chown root system /sys/devices/platform/11110000.usb/dwc3_exynos_otg_id chown root system /sys/devices/platform/11110000.usb/usb_data_enabled - chown root system /sys/devices/platform/google,pogo/enable_usb chmod 664 /sys/class/typec/port0/power_role chmod 664 /sys/class/typec/port0/data_role chmod 664 /sys/class/typec/port0/port_type @@ -48,4 +47,3 @@ on post-fs chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/pin_assignment chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/link_status chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/usbc_cable_disconnect - chmod 664 /sys/devices/platform/google,pogo/enable_usb diff --git a/usb/usb/android.hardware.usb-service-i2c6.rc b/usb/usb/android.hardware.usb-service-i2c6.rc index fac08b3..d160a22 100644 --- a/usb/usb/android.hardware.usb-service-i2c6.rc +++ b/usb/usb/android.hardware.usb-service-i2c6.rc @@ -26,7 +26,6 @@ on post-fs chown root system /sys/devices/platform/11110000.usb/dwc3_exynos_otg_b_sess chown root system /sys/devices/platform/11110000.usb/dwc3_exynos_otg_id chown root system /sys/devices/platform/11110000.usb/usb_data_enabled - chown root system /sys/devices/platform/google,pogo/enable_usb chmod 664 /sys/class/typec/port0/power_role chmod 664 /sys/class/typec/port0/data_role chmod 664 /sys/class/typec/port0/port_type @@ -48,4 +47,3 @@ on post-fs chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/pin_assignment chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/link_status chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/usbc_cable_disconnect - chmod 664 /sys/devices/platform/google,pogo/enable_usb From cb436afabd9afa735c89abc4596bff689c647893 Mon Sep 17 00:00:00 2001 From: Zhengyuan Cui Date: Fri, 20 Sep 2024 00:07:35 +0000 Subject: [PATCH 07/83] Change any use case of folder name api to tachyon_api to avoid api review Bug: 364390678 Change-Id: Ibf53edb7a1bb9c16967b45b8a2a38575dac8cbda Flag: EXEMPT refactor --- device.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.mk b/device.mk index 3ca20af..5fba40f 100644 --- a/device.mk +++ b/device.mk @@ -1180,7 +1180,7 @@ PRODUCT_SOONG_NAMESPACES += \ vendor/google_devices/zumapro/proprietary/gchips/tpu/nnapi_stable_aidl \ vendor/google_devices/zumapro/proprietary/gchips/tpu/aidl \ vendor/google_devices/zumapro/proprietary/gchips/tpu/hal \ - vendor/google_devices/zumapro/proprietary/gchips/tpu/tachyon/api \ + vendor/google_devices/zumapro/proprietary/gchips/tpu/tachyon/tachyon_apis \ vendor/google_devices/zumapro/proprietary/gchips/tpu/tachyon/service # TPU firmware PRODUCT_PACKAGES += edgetpu-rio.fw From 9af16ad5e425fda6b4b571797a02a5ab270232a9 Mon Sep 17 00:00:00 2001 From: Baltazar Ortiz Date: Tue, 10 Sep 2024 23:14:40 +0000 Subject: [PATCH 08/83] dumpstate: Use generic dc_mains for all parallel chargers Bug: 360866957 Test: adb bugreport Flag: EXEMPT bugfix Change-Id: If9268d4ac8ec857c3dd9a7f2cae6b6485cfb2e95 Signed-off-by: Baltazar Ortiz --- dumpstate/dump_power.cpp | 9 +-------- dumpstate/dump_power.rc | 3 +-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp index 2e955cf..1b84f5e 100644 --- a/dumpstate/dump_power.cpp +++ b/dumpstate/dump_power.cpp @@ -317,19 +317,12 @@ 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"} }; - const char* ppsDcMsg = "PPS-dc logbuffer"; - const char* pca9468dir = "/dev/logbuffer_pca9468"; - const char* ln8411dir = "/dev/logbuffer_ln8411"; for (const auto &row : pdEngine) { dumpFileContent(row[0], row[1]); } - if (isValidFile(pca9468dir)) { - dumpFileContent(ppsDcMsg, pca9468dir); - } else { - dumpFileContent(ppsDcMsg, ln8411dir); - } } void dumpBatteryHealth() { diff --git a/dumpstate/dump_power.rc b/dumpstate/dump_power.rc index 3ccc2f3..d70c021 100644 --- a/dumpstate/dump_power.rc +++ b/dumpstate/dump_power.rc @@ -105,8 +105,7 @@ 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 chown system system /dev/logbuffer_max77779_fwupdate From 562f2de924dff1d9799eed365b7aa58f63d3ab40 Mon Sep 17 00:00:00 2001 From: Jimmy Shiu Date: Wed, 25 Sep 2024 15:21:36 +0000 Subject: [PATCH 09/83] [task_profiles]Add MaxPerformance and PreferIdle to InputPolicy profile. Flag: com.android.input.flags.enable_input_policy_profile Bug: 369574417 Change-Id: I80414f3931b93bb8b427d0d8e1b6b0c4debffea3 --- task_profiles.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/task_profiles.json b/task_profiles.json index 236014b..d43c455 100644 --- a/task_profiles.json +++ b/task_profiles.json @@ -15,6 +15,21 @@ } ] }, + { + "Name": "PreferIdle", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/prefer_idle_set", + "ProcFilePath": "/proc/vendor_sched/prefer_idle_set", + "Value": "", + "LogFailures": "false" + } + } + ] + }, { "Name": "CameraServicePerformance", "Actions": [ @@ -306,7 +321,7 @@ }, { "Name": "InputPolicy", - "Profiles": [ "ResetUclampGrp" ] + "Profiles": [ "MaxPerformance", "ResetUclampGrp", "PreferIdle" ] } ] } From 1285fd9c56ae01f3f9a0f877d6953bceca1e5239 Mon Sep 17 00:00:00 2001 From: Kostya Yarmash Date: Tue, 1 Oct 2024 12:29:36 +0000 Subject: [PATCH 10/83] init.zumapro.rc: change permission of SJTAG writable files On userdebug & eng builds, change permission of SJTAG writable sysfs files that need to be written to 'system'. This became necessary after HSUM separated main user from the SYSTEM user Bug: 367918586 Flag: EXEMPT bugfix Test: Ensure that there is "Privileged Debugging" item in BetterBug settings. Change-Id: Id433aea05d23841bb5b45b7b9464daa72602269b Signed-off-by: Kostya Yarmash --- conf/init.debug.rc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/conf/init.debug.rc b/conf/init.debug.rc index 019a514..9b536b4 100644 --- a/conf/init.debug.rc +++ b/conf/init.debug.rc @@ -15,6 +15,15 @@ on init chown system system /sys/devices/platform/sjtag_gsa/interface/end chown system system /sys/devices/platform/sjtag_gsa/interface/pubkey + # HSUM separated main user from the SYSTEM user, granting write permissions + # for write only SJTAG sysfs files + chmod 220 /sys/devices/platform/sjtag_ap/interface/auth + chmod 220 /sys/devices/platform/sjtag_ap/interface/begin + chmod 220 /sys/devices/platform/sjtag_ap/interface/end + chmod 220 /sys/devices/platform/sjtag_gsa/interface/auth + chmod 220 /sys/devices/platform/sjtag_gsa/interface/begin + chmod 220 /sys/devices/platform/sjtag_gsa/interface/end + on property:vendor.debug.ramdump.force_crash=true write /sys/kernel/pixel_debug/trigger "null" From 9111a59f3264770d4f5a9dea148d84d8cfb922f8 Mon Sep 17 00:00:00 2001 From: Pawan Wagh Date: Wed, 2 Oct 2024 20:14:31 +0000 Subject: [PATCH 11/83] Copy fstab from zuma to zumapro for 16kB developer options Update fstab used so that both ext4 and f2fs are supported. Copying previously release config to zumapro to support pixel 9. Test: atest Enable16KbTest Flag: build.RELEASE_GOOGLE_CAIMAN_16K_DEVELOPER_OPTION Bug: 347108593 Change-Id: I8da600ac8e91e61abc20a324762f19dddf846851 --- conf/ext4/fstab.rw.zumapro.ext4 | 7 +++++-- conf/f2fs/fstab.rw.zumapro.f2fs | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/conf/ext4/fstab.rw.zumapro.ext4 b/conf/ext4/fstab.rw.zumapro.ext4 index b548c13..de8f7b8 100644 --- a/conf/ext4/fstab.rw.zumapro.ext4 +++ b/conf/ext4/fstab.rw.zumapro.ext4 @@ -1,5 +1,8 @@ # Android fstab file for /data and /metadata partitions. # # -/dev/block/platform/13200000.ufs/by-name/metadata /metadata ext4 noatime,nosuid,nodev,sync wait,check,formattable,first_stage_mount -/dev/block/platform/13200000.ufs/by-name/userdata /data ext4 noatime,nosuid,nodev latemount,wait,check,quota,formattable,sysfs_path=/dev/sys/block/bootdevice,reservedsize=128M,readahead_size_kb=128 +/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/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,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/metadata /metadata ext4 noatime,nosuid,nodev,data=journal,commit=1 wait,check,formattable,first_stage_mount,metadata_csum +/dev/block/platform/13200000.ufs/by-name/metadata /metadata f2fs noatime,nosuid,nodev,sync wait,check,first_stage_mount + diff --git a/conf/f2fs/fstab.rw.zumapro.f2fs b/conf/f2fs/fstab.rw.zumapro.f2fs index 77ec4d5..21b3c78 100644 --- a/conf/f2fs/fstab.rw.zumapro.f2fs +++ b/conf/f2fs/fstab.rw.zumapro.f2fs @@ -1,5 +1,8 @@ # Android fstab file for /data and /metadata partitions. # # -/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/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 + From 49a4d989ad9e07f51d456d54a47e5adf1d2bad37 Mon Sep 17 00:00:00 2001 From: Juan Yescas Date: Sat, 17 Aug 2024 11:27:21 -0700 Subject: [PATCH 12/83] Move setup of the persist partition to init.persist.rc The setup of the persist partition is moved to init.persist.rc. This will make easier to configure 16kb targets in follow up changes. Bug: 347015136 Test: $ source build/envsetup.sh $ lunch [zumapro]-trunk_staging-userdebug $ m $ ./vendor/google/tools/flashall -w Flag: EXEMPT bugfix Change-Id: Ifd17fc1f25ea8cf73470630e14a38116e0b7b96a --- conf/init.efs.rc | 4 +--- conf/init.persist.rc | 43 ++++++++++++++++++++++++++++++++++++++ conf/init.zumapro.board.rc | 40 +---------------------------------- device.mk | 3 ++- 4 files changed, 47 insertions(+), 43 deletions(-) create mode 100644 conf/init.persist.rc diff --git a/conf/init.efs.rc b/conf/init.efs.rc index a3664d9..340976c 100644 --- a/conf/init.efs.rc +++ b/conf/init.efs.rc @@ -1,8 +1,6 @@ -on early-init - mount_all /vendor/etc/fstab.persist --early - on late-fs mount_all /vendor/etc/fstab.efs --early + # for modem related functions restorecon_recursive /mnt/vendor/efs chown radio system /mnt/vendor/efs restorecon_recursive /mnt/vendor/efs_backup diff --git a/conf/init.persist.rc b/conf/init.persist.rc new file mode 100644 index 0000000..ee68337 --- /dev/null +++ b/conf/init.persist.rc @@ -0,0 +1,43 @@ +on early-init + mount_all /vendor/etc/fstab.persist --early + setprop ro.vendor.persist.status mounted + +on property:ro.vendor.persist.status=mounted + # for battery defender + mkdir /mnt/vendor/persist/battery 0700 system system + + # Camera factory calibration files + chmod 0771 /mnt/vendor/persist/camera + chmod 0771 /mnt/vendor/persist/camera/OTP_calibration + chmod 0771 /mnt/vendor/persist/camera/pdaf_calibration_data + mkdir /mnt/vendor/persist/camera/rear 0771 system camera + chmod 0771 /mnt/vendor/persist/camera/rear + + restorecon_recursive /mnt/vendor/persist + restorecon_recursive /mnt/vendor/persist/aoc + restorecon_recursive /mnt/vendor/persist/audio + restorecon_recursive /mnt/vendor/persist/sensors + restorecon_recursive /mnt/vendor/persist/battery + restorecon_recursive /mnt/vendor/persist/camera + restorecon_recursive /mnt/vendor/persist/modem + # Set up display-related directories and permissions + # Add restorecon_recursive command to make sure the restorecon label is persist_display_file. + restorecon_recursive /mnt/vendor/persist/display + mkdir /mnt/vendor/persist/data/sfs 0700 system system + mkdir /mnt/vendor/persist/data/tz 0700 system system + mkdir /mnt/vendor/persist/touch 0770 system system + +on property:ro.fstype.data=* && property:ro.vendor.persist.status=mounted + # Proxy for Secure Storage + mkdir /data/vendor/rebootescrow 0770 hsm hsm + mkdir /data/vendor/ss 0770 root system + mkdir /mnt/vendor/persist/ss 0770 root system + restorecon_recursive /mnt/vendor/persist/ss + symlink /mnt/vendor/persist/ss /data/vendor/ss/persist + chown root system /data/vendor/ss/persist + chmod 0770 /data/vendor/ss/persist + chown system system /data/vendor/ss/0 + chown system system /data/vendor/ss/persist/0 + chown system system /data/vendor/ss/persist/nsp + + restart storageproxyd diff --git a/conf/init.zumapro.board.rc b/conf/init.zumapro.board.rc index 92b21e3..c369eb7 100644 --- a/conf/init.zumapro.board.rc +++ b/conf/init.zumapro.board.rc @@ -1,5 +1,6 @@ import /vendor/etc/init/hw/init.zumapro.usb.rc import /vendor/etc/init/hw/init.efs.rc +import /vendor/etc/init/hw/init.persist.rc import android.hardware.drm@1.2-service.widevine.rc import init.exynos.sensorhub.rc import /vendor/etc/init/hw/init.${ro.boot.hardware.platform}.soc.rc @@ -268,13 +269,6 @@ on post-fs-data chown system system /dev/ispolin_ranging chmod 0660 /dev/ispolin_ranging - # Factory calibration files - chmod 0771 /mnt/vendor/persist/camera - chmod 0771 /mnt/vendor/persist/camera/OTP_calibration - chmod 0771 /mnt/vendor/persist/camera/pdaf_calibration_data - mkdir /mnt/vendor/persist/camera/rear 0771 system camera - chmod 0771 /mnt/vendor/persist/camera/rear - # Audio dump and debug mkdir /data/vendor/audio 0770 audio audio @@ -369,27 +363,10 @@ on property:persist.vendor.radio.no_modem_board=1 on fs mount_all --early - # for battery defender - mkdir /mnt/vendor/persist/battery 0700 system system - # Mount modem partition mount_all /vendor/etc/fstab.modem --early restorecon_recursive /mnt/vendor/modem_img - restorecon_recursive /mnt/vendor/persist - restorecon_recursive /mnt/vendor/persist/aoc - restorecon_recursive /mnt/vendor/persist/audio - restorecon_recursive /mnt/vendor/persist/sensors - restorecon_recursive /mnt/vendor/persist/battery - restorecon_recursive /mnt/vendor/persist/camera - restorecon_recursive /mnt/vendor/persist/modem - # Set up display-related directories and permissions - # Add restorecon_recursive command to make sure the restorecon label is persist_display_file. - restorecon_recursive /mnt/vendor/persist/display - mkdir /mnt/vendor/persist/data/sfs 0700 system system - mkdir /mnt/vendor/persist/data/tz 0700 system system - mkdir /mnt/vendor/persist/touch 0770 system system - # Permissions for ION chmod 0660 /sys/class/ion_cma/ion_video_ext/isolated chown system system /sys/class/ion_cma/ion_video_ext/isolated @@ -635,21 +612,6 @@ service bugreport /system/bin/dumpstate -d -p -z oneshot keycodes 114 115 116 -# Proxy for Secure Storage -on post-fs-data - mkdir /data/vendor/rebootescrow 0770 hsm hsm - mkdir /data/vendor/ss 0770 root system - mkdir /mnt/vendor/persist/ss 0770 root system - restorecon_recursive /mnt/vendor/persist/ss - symlink /mnt/vendor/persist/ss /data/vendor/ss/persist - chown root system /data/vendor/ss/persist - chmod 0770 /data/vendor/ss/persist - chown system system /data/vendor/ss/0 - chown system system /data/vendor/ss/persist/0 - chown system system /data/vendor/ss/persist/nsp - - restart storageproxyd - service storageproxyd /vendor/bin/storageproxyd \ -d /dev/trusty-ipc-dev0 \ -r /dev/sg1 \ diff --git a/device.mk b/device.mk index 5fba40f..34e2975 100644 --- a/device.mk +++ b/device.mk @@ -451,7 +451,8 @@ PRODUCT_COPY_FILES += \ device/google/zumapro/conf/init.zumapro.soc.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.zumapro.soc.rc \ device/google/zumapro/conf/init.zuma.soc.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.zuma.soc.rc \ device/google/zumapro/conf/init.zumapro.board.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.zumapro.board.rc \ - device/google/zumapro/conf/init.efs.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.efs.rc + device/google/zumapro/conf/init.efs.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.efs.rc \ + device/google/zumapro/conf/init.persist.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.persist.rc ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) PRODUCT_COPY_FILES += \ From e6525d245fbe8c90be4d299eb3e9be0f00030591 Mon Sep 17 00:00:00 2001 From: Madhav Iyengar Date: Fri, 30 Aug 2024 16:20:42 +0000 Subject: [PATCH 13/83] [chre-hal-xport] Give permissions for new xport Bug: 369883034 Flag: android.chre.flags.refactor_hal_xport_agnostic Change-Id: Id22ab1352d38a4e8b37bb8414917efb8f6ed75c0 --- conf/ueventd.zumapro.rc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/conf/ueventd.zumapro.rc b/conf/ueventd.zumapro.rc index 809b596..609f2b7 100644 --- a/conf/ueventd.zumapro.rc +++ b/conf/ueventd.zumapro.rc @@ -153,6 +153,11 @@ /dev/acd-com.google.chre 0660 system system /dev/acd-com.google.chre.non_wake_up 0660 system system +# CHRE (EFW transport) +/dev/acd-chre_ctl 0660 system system +/dev/acd-chre_data_tx 0220 system system +/dev/acd-chre_data_rx 0440 system system + # BT /dev/acd-com.google.bt 0660 system system /dev/acd-com.google.bt.non_wake_up 0660 system system From 60dc6764094175a241bdccd7af7d783a2cbdd334 Mon Sep 17 00:00:00 2001 From: Juan Yescas Date: Sat, 17 Aug 2024 12:22:14 -0700 Subject: [PATCH 14/83] Copy files on efs/efs_backup/modem_userdata/persist partitions to /data in 16kb mode There are 4 partitions that are flashed at the factory and use F2FS fs with 4kb block size: - /dev/block/by-name/efs - /dev/block/by-name/efs_backup - /dev/block/by-name/modem_userdata - /dev/block/by-name/persist These partitions can NOT be mounted by 16kb kernels because F2FS expects BLOCK_SIZE == PAGE_SIZE. In order to access the files in these partitions by 16kb kernels, the dump.f2fs tool is used. This change will perform these steps at boot time ONLY for 16kb mode. For every partition (efs/efs_backup/modem_userdata/persist): 1. Use dump.f2fs to copy the content of the partition to /data/vendor/copied/.img. 2. If the copy was succesfull, rename /data/vendor/copied/.img to /data/vendor/copied/ 3. fsync the content of the directory /data/vendor/copied/. After the content of the partitions is in /data/vendor/copied, bind-mount the partitions to the directory /mnt/vendor. See conf/fstab.efs.from_data. Note: This change ONLY applies to 16kb kernels. This change does not modify the original partitions. Bug: 347015136 Bug: 362368691 Test: $ source build/envsetup.sh $ lunch [zumapro]-trunk_staging-userdebug $ m $ ./vendor/google/tools/flashall -w Flag: EXEMPT bugfix Change-Id: Idf46a2a3a4f0b2e91ee4a0322a0c469e055684c8 --- Android.bp | 10 +++++++ conf/fstab.efs.from_data | 10 +++++++ conf/init.efs.16k.rc | 24 +++++++++++++++++ conf/{init.efs.rc => init.efs.4k.rc} | 0 copy_efs_files_to_data.sh | 39 ++++++++++++++++++++++++++++ device.mk | 13 +++++++++- 6 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 conf/fstab.efs.from_data create mode 100644 conf/init.efs.16k.rc rename conf/{init.efs.rc => init.efs.4k.rc} (100%) create mode 100644 copy_efs_files_to_data.sh diff --git a/Android.bp b/Android.bp index 7156389..b79b895 100644 --- a/Android.bp +++ b/Android.bp @@ -41,3 +41,13 @@ sh_binary { vendor: true, sub_dir: "hw", } + +// Filesystem: Copy the content of the efs/efs_backup/modem_userdata/persist +// partitions to /data partition so that they can be accessed by 16kb kernels. +// By default, these partitions are F2FS formatted with 4kb block size, +// which can't be mounted by 16kb kernels. +sh_binary { + name: "copy_efs_files_to_data", + src: "copy_efs_files_to_data.sh", + vendor: true, +} diff --git a/conf/fstab.efs.from_data b/conf/fstab.efs.from_data new file mode 100644 index 0000000..57aac9c --- /dev/null +++ b/conf/fstab.efs.from_data @@ -0,0 +1,10 @@ +# Android fstab file. +# +# Create the specific fstab file for efs/modem_userdata/persist partitions for flexibility +/data/vendor/copied/efs /mnt/vendor/efs none bind latemount + +/data/vendor/copied/efs_backup /mnt/vendor/efs_backup none bind latemount + +/data/vendor/copied/modem_userdata /mnt/vendor/modem_userdata none bind latemount + +/data/vendor/copied/persist /mnt/vendor/persist none bind latemount diff --git a/conf/init.efs.16k.rc b/conf/init.efs.16k.rc new file mode 100644 index 0000000..c2a2eab --- /dev/null +++ b/conf/init.efs.16k.rc @@ -0,0 +1,24 @@ +service copy_efs_files_to_data /vendor/bin/copy_efs_files_to_data + user root + group root radio system audio media graphics camera + stdio_to_kmsg + oneshot + disabled + +on post-fs-data + mkdir /data/vendor/copied 0775 radio system + restorecon_recursive /data/vendor/copied + exec_start copy_efs_files_to_data + mount_all /vendor/etc/fstab.efs.from_data + restorecon_recursive /mnt/vendor/persist + restorecon_recursive /data/vendor/ss + setprop ro.vendor.persist.status mounted + +on late-fs + # 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.rc b/conf/init.efs.4k.rc similarity index 100% rename from conf/init.efs.rc rename to conf/init.efs.4k.rc diff --git a/copy_efs_files_to_data.sh b/copy_efs_files_to_data.sh new file mode 100644 index 0000000..b6b7a9d --- /dev/null +++ b/copy_efs_files_to_data.sh @@ -0,0 +1,39 @@ +#!/vendor/bin/sh + +CHECKPOINT_DIR=/data/vendor/copied + +export BIN_DIR=/vendor/bin + +$BIN_DIR/mkdir -p $CHECKPOINT_DIR + +function copy_files_to_data() +{ + block_device=$1 + partition_name=$(basename $1) + mount_point=$2 + tmpdir=$CHECKPOINT_DIR/$partition_name.img + build_checkpoint=$CHECKPOINT_DIR/$partition_name + if [ ! -e $build_checkpoint ]; then + $BIN_DIR/rm -rf $tmpdir + $BIN_DIR/mkdir -p $tmpdir + $BIN_DIR/dump.f2fs -rfPo $tmpdir $block_device + if [ $? -ne 0 ]; then + echo "Failed to $BIN_DIR/dump.f2fs -rfPo $tmpdir $block_device" + return + fi + $BIN_DIR/mv $tmpdir $build_checkpoint + if [ $? -ne 0 ]; then + echo "mv $tmpdir $build_checkpoint" + return + fi + $BIN_DIR/fsync `dirname $build_checkpoint` + fi + echo "Successfully copied $mount_point to $build_checkpoint" +} + +copy_files_to_data "/dev/block/by-name/efs" "/mnt/vendor/efs" +copy_files_to_data "/dev/block/by-name/efs_backup" "/mnt/vendor/efs_backup" +copy_files_to_data "/dev/block/by-name/modem_userdata" "/mnt/vendor/modem_userdata" +copy_files_to_data "/dev/block/by-name/persist" "/mnt/vendor/persist" + +$BIN_DIR/fsync /data/vendor/copied diff --git a/device.mk b/device.mk index 34e2975..9091393 100644 --- a/device.mk +++ b/device.mk @@ -451,9 +451,20 @@ PRODUCT_COPY_FILES += \ device/google/zumapro/conf/init.zumapro.soc.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.zumapro.soc.rc \ device/google/zumapro/conf/init.zuma.soc.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.zuma.soc.rc \ device/google/zumapro/conf/init.zumapro.board.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.zumapro.board.rc \ - device/google/zumapro/conf/init.efs.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.efs.rc \ device/google/zumapro/conf/init.persist.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.persist.rc +ifeq (true,$(filter $(TARGET_BOOTS_16K) $(PRODUCT_16K_DEVELOPER_OPTION),true)) +PRODUCT_COPY_FILES += \ + device/google/zumapro/conf/init.efs.16k.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.efs.rc \ + device/google/zumapro/conf/fstab.efs.from_data:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.efs.from_data + +PRODUCT_PACKAGES += copy_efs_files_to_data +PRODUCT_PACKAGES += fsck.f2fs.vendor +else +PRODUCT_COPY_FILES += \ + device/google/zumapro/conf/init.efs.4k.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.efs.rc +endif + ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) PRODUCT_COPY_FILES += \ device/google/zumapro/conf/init.debug.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.debug.rc From 89ab3ca392e22ad2f532be413be1fedbf87c1d21 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Tue, 8 Oct 2024 20:15:11 +0000 Subject: [PATCH 15/83] Remove device/google/zumapro/Android.mk which is not needed any more since there are no other Android.mk files in subdirectories. Bug: 372291867 Change-Id: I87dce34ae1d1f6587f1b3ad927e710c7dd61b7ca Test: CIs --- Android.mk | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 Android.mk diff --git a/Android.mk b/Android.mk deleted file mode 100644 index fc070c6..0000000 --- a/Android.mk +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright (C) 2011 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. -# - -# WARNING: Everything listed here will be built on ALL platforms, -# including x86, the universal, and the SDK. Modules must be uniquely -# named (liblights.panda), and must build everywhere, or limit themselves -# to only building on ARM if they include assembly. Individual makefiles -# are responsible for having their own logic, for fine-grained control. - -LOCAL_PATH := $(call my-dir) - -# if some modules are built directly from this directory (not subdirectories), -# their rules should be written here. - -ifeq ($(USES_DEVICE_GOOGLE_ZUMAPRO),true) - include $(call first-makefiles-under,$(LOCAL_PATH)) -endif From e5f8be36ac091bdda939b4b96d56986478ef5a75 Mon Sep 17 00:00:00 2001 From: Kuen-Han Tsai Date: Wed, 9 Oct 2024 14:00:05 +0800 Subject: [PATCH 16/83] Usb: Add status check to prevent NPE This patch prevents a Null Pointer Exception in queryMoistureDetectionStatus() when getPortStatusHelper() fails to open the /sys/class/typec file. The failure results in an empty currentPortStatus vector, causing the NPE when accessing its first element. Bug: 361097811 Flag: EXEMPT bugfix Test: NPE does not occur when getPortStatusHelper() fails Change-Id: I4657ab8dbc9bb7e5d2dc46c1a20b66477604ec36 Signed-off-by: Kuen-Han Tsai --- usb/usb/Usb.cpp | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index 4202407..f222310 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -1215,25 +1215,29 @@ void queryVersionHelper(android::hardware::usb::Usb *usb, pthread_mutex_lock(&usb->mLock); status = getPortStatusHelper(usb, currentPortStatus); - queryMoistureDetectionStatus(usb, currentPortStatus); - queryPowerTransferStatus(usb, currentPortStatus); - queryNonCompliantChargerStatus(currentPortStatus); - pthread_mutex_lock(&usb->mDisplayPortLock); - if (!usb->mDisplayPortFirstSetupDone && - usb->getDisplayPortUsbPathHelper(&displayPortUsbPath) == Status::SUCCESS) { + if (status == Status::SUCCESS && currentPortStatus->size() > 0) { + queryMoistureDetectionStatus(usb, currentPortStatus); + queryPowerTransferStatus(usb, currentPortStatus); + queryNonCompliantChargerStatus(currentPortStatus); + pthread_mutex_lock(&usb->mDisplayPortLock); + if (!usb->mDisplayPortFirstSetupDone && + usb->getDisplayPortUsbPathHelper(&displayPortUsbPath) == Status::SUCCESS) { - ALOGI("usbdp: boot with display connected or usb hal restarted"); - usb->setupDisplayPortPoll(); - } - pthread_mutex_unlock(&usb->mDisplayPortLock); - queryDisplayPortStatus(usb, currentPortStatus); - if (usb->mCallback != NULL) { - ScopedAStatus ret = usb->mCallback->notifyPortStatusChange(*currentPortStatus, - status); - if (!ret.isOk()) - ALOGE("queryPortStatus error %s", ret.getDescription().c_str()); + ALOGI("usbdp: boot with display connected or usb hal restarted"); + usb->setupDisplayPortPoll(); + } + pthread_mutex_unlock(&usb->mDisplayPortLock); + queryDisplayPortStatus(usb, currentPortStatus); + if (usb->mCallback != NULL) { + ScopedAStatus ret = usb->mCallback->notifyPortStatusChange(*currentPortStatus, + status); + if (!ret.isOk()) + ALOGE("queryPortStatus error %s", ret.getDescription().c_str()); + } else { + ALOGI("Notifying userspace skipped. Callback is NULL"); + } } else { - ALOGI("Notifying userspace skipped. Callback is NULL"); + ALOGI("%s skipped. currentPortStatus is empty", __func__); } pthread_mutex_unlock(&usb->mLock); } From 76b662b189e0ab7a555d93a8390c792631cc0558 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Wed, 9 Oct 2024 13:01:31 +0000 Subject: [PATCH 17/83] 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 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 3f62c6b40d5141ce1636e3d6278a0637a634b481 Mon Sep 17 00:00:00 2001 From: Andrew Cheng Date: Thu, 10 Oct 2024 11:25:28 -0700 Subject: [PATCH 18/83] Fix LE Audio sysprops typos in makefiles Makefile contain the following sysprops bluetooth.profile.bap.unicast.server.enabled bluetooth.profile.tbs.server.enabled bluetooth.profile.vc.server.enabled However, CS indicates the above sysprops aren't defined anywhere nor read anywhere? Given how the following LE Audio sysprops are missing from the makefile, and the similarities in naming, we suspect there was a typo? bluetooth.profile.bap.unicast.client.enabled bluetooth.profile.ccp.server.enabled bluetooth.profile.vcp.controller.enabled Bug: 372711861 Test: builds Flag: EXEMPT bugfix Change-Id: I2e9812060733ba6d380a104d79e58867a3e01aa2 --- device.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/device.mk b/device.mk index 9091393..303661d 100644 --- a/device.mk +++ b/device.mk @@ -183,7 +183,7 @@ 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.server.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 \ @@ -198,8 +198,8 @@ PRODUCT_PRODUCT_PROPERTIES += \ bluetooth.profile.pan.panu.enabled=true \ bluetooth.profile.pbap.server.enabled=true \ bluetooth.profile.sap.server.enabled=true \ - bluetooth.profile.tbs.server.enabled=true \ - bluetooth.profile.vc.server.enabled=true + bluetooth.profile.ccp.server.enabled=true \ + bluetooth.profile.vcp.controller.enabled=true # Carrier configuration default location PRODUCT_PROPERTY_OVERRIDES += \ From fdb10a41a45ef89b2a2ad033246d3d7fdb6d5281 Mon Sep 17 00:00:00 2001 From: Robert Luo Date: Fri, 11 Oct 2024 12:39:01 +0800 Subject: [PATCH 19/83] [Pixel RR] Apply reviewed default permissions Pregrantting below permission(s): CALL_PHONE Flag: EXEMPT add pregranted permission in b/371912006 Bug: 336203918 Test: presubmit Change-Id: I0b9aa93526610c3257b8733eec9c9a75bfaa0cbd --- default-permissions.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default-permissions.xml b/default-permissions.xml index 2f6f13f..8c79c49 100644 --- a/default-permissions.xml +++ b/default-permissions.xml @@ -69,7 +69,7 @@ - + From cee21e461ff1f68139ea29c70b7347316b41ccd5 Mon Sep 17 00:00:00 2001 From: Cyan Hsieh Date: Tue, 25 Jun 2024 07:59:24 +0000 Subject: [PATCH 20/83] Add manifest for VINTF target FCM level 202404 device_framework_matrix_product_202404.xml, manifest_202404.xml: target-level = 202404 compatibility_matrix_202404.xml: remove "android.hidl.allocator@1.0" per b/205764958 manifest_media_aosp_202404.xml: remove codec2 hidl fragments Flag: EXEMPT NDK Bug: 312876454 Change-Id: Ic6b867cb55a184803ae41f1b58a4ecc0269c4b87 --- compatibility_matrix_202404.xml | 76 +++++++ device.mk | 28 ++- device_framework_matrix_product_202404.xml | 198 ++++++++++++++++++ ...l => device_framework_matrix_product_8.xml | 0 manifest_202404.xml | 6 + manifest_media_aosp_202404.xml | 8 + 6 files changed, 308 insertions(+), 8 deletions(-) create mode 100644 compatibility_matrix_202404.xml create mode 100644 device_framework_matrix_product_202404.xml rename device_framework_matrix_product.xml => device_framework_matrix_product_8.xml (100%) create mode 100644 manifest_202404.xml create mode 100644 manifest_media_aosp_202404.xml diff --git a/compatibility_matrix_202404.xml b/compatibility_matrix_202404.xml new file mode 100644 index 0000000..6e4ca99 --- /dev/null +++ b/compatibility_matrix_202404.xml @@ -0,0 +1,76 @@ + + + + android.frameworks.displayservice + 1.0 + + IDisplayService + default + + + + android.frameworks.schedulerservice + 1.0 + + ISchedulingPolicyService + default + + + + android.frameworks.sensorservice + 1.0 + + ISensorManager + default + + + + android.hardware.graphics.composer + 2.1 + + IComposer + vr + + + + android.hidl.manager + 1.0 + + IServiceManager + default + + + + android.hidl.memory + 1.0 + + IMapper + ashmem + + + + android.hidl.token + 1.0 + + ITokenManager + default + + + + android.system.wifi.keystore + 1.0 + + IKeystore + default + + + + 0.0.0 + + diff --git a/device.mk b/device.mk index 9091393..ca1027b 100644 --- a/device.mk +++ b/device.mk @@ -410,13 +410,33 @@ PRODUCT_VENDOR_PROPERTIES += \ PRODUCT_SHIPPING_API_LEVEL := $(SHIPPING_API_LEVEL) # Device Manifest, Device Compatibility Matrix for Treble +# +# Install product specific framework compatibility matrix +# (TODO: b/169535506) This includes the FCM for system_ext and product partition. +# It must be split into the FCM of each partition. +ifeq ($(PRODUCT_SHIPPING_API_LEVEL),35) +DEVICE_MANIFEST_FILE := \ + device/google/zumapro/manifest_202404.xml +DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE += device/google/zumapro/device_framework_matrix_product_202404.xml +DEVICE_MATRIX_FILE := \ + device/google/zumapro/compatibility_matrix_202404.xml +else DEVICE_MANIFEST_FILE := \ device/google/zumapro/manifest.xml +DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE += device/google/zumapro/device_framework_matrix_product_8.xml +DEVICE_MATRIX_FILE := \ + device/google/zumapro/compatibility_matrix.xml +endif BOARD_USE_CODEC2_AIDL := V1 ifneq (,$(filter aosp_%,$(TARGET_PRODUCT))) +ifeq ($(PRODUCT_SHIPPING_API_LEVEL),35) +DEVICE_MANIFEST_FILE += \ + device/google/zumapro/manifest_media_aosp_202404.xml +else DEVICE_MANIFEST_FILE += \ device/google/zumapro/manifest_media_aosp.xml +endif PRODUCT_COPY_FILES += \ device/google/zumapro/media_codecs_aosp_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_c2.xml @@ -429,9 +449,6 @@ PRODUCT_COPY_FILES += \ device/google/zumapro/media_codecs_aosp_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_aosp_c2.xml endif -DEVICE_MATRIX_FILE := \ - device/google/zumapro/compatibility_matrix.xml - DEVICE_PACKAGE_OVERLAYS += device/google/zumapro/overlay # RKP VINTF @@ -1245,11 +1262,6 @@ include hardware/google/pixel/wifi_ext/device.mk # Battery Stats Viewer PRODUCT_PACKAGES_DEBUG += BatteryStatsViewer -# Install product specific framework compatibility matrix -# (TODO: b/169535506) This includes the FCM for system_ext and product partition. -# It must be split into the FCM of each partition. -DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE += device/google/zumapro/device_framework_matrix_product.xml - # Keymint configuration PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.software.device_id_attestation.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.device_id_attestation.xml \ diff --git a/device_framework_matrix_product_202404.xml b/device_framework_matrix_product_202404.xml new file mode 100644 index 0000000..ce5db47 --- /dev/null +++ b/device_framework_matrix_product_202404.xml @@ -0,0 +1,198 @@ + + + android.hardware.boot + IBootControl/default + + + android.hardware.graphics.composer3 + 2 + + IComposer + default + + + + android.hardware.radio + 1.2 + + ISap + slot2 + + + + android.hardware.vibrator + 2 + + IVibrator + dual + + + + android.hardware.wifi.hostapd + 1 + + IHostapd + default + + + + android.vendor.samsung_slsi.telephony.hardware.radio + 1.1 + + IOemSamsungslsi + slot1 + slot2 + + + + com.fingerprints33.extension + 1.0 + + IFingerprintAuthenticator + default + + + IFingerprintCalibration + default + + + IFingerprintEngineering + default + + + IFingerprintNavigation + default + + + IFingerprintRecalibration + default + + + IFingerprintSenseTouch + default + + + IFingerprintSensorTest + default + + + + com.google.face.debug + 3-4 + + IDebugHost + default + + + IDebugManager + default + + + + com.google.edgetpu + 2 + + IEdgeTpuVendorService + default + + + + com.google.edgetpu.dba + 1 + + IDevice + default + + + + com.google.edgetpu.tachyon + 1 + + IComputeService + default + + + + com.google.hardware.pixel.display + 13 + + IDisplay + default + + + + hardware.qorvo.uwb + + IUwbVendor + default + + + + vendor.goodix.hardware.biometrics.fingerprint + 2.1 + + IGoodixFingerprintDaemon + default + + + + vendor.google.google_battery + 2-3 + + IGoogleBattery + default + + + + vendor.google.wifi_ext + 2-4 + + IWifiExt + default + + + + vendor.samsung_slsi.telephony.hardware.oemservice + 1.0 + + IOemService + dm0 + dm1 + sced0 + + + + com.google.pixel.modem.logmasklibrary + 1 + + ILiboemserviceProxy + default + + + + vendor.samsung_slsi.telephony.hardware.radioExternal + 1.1 + + IOemSlsiRadioExternal + rilExternal + + + + vendor.samsung_slsi.telephony.hardware.radioExternal + 1 + + IOemSlsiRadioExternal + default + + + + vendor.samsung_slsi.telephony.hardware.oemservice + 1 + + IOemService + dm0 + dm1 + sced0 + + + diff --git a/device_framework_matrix_product.xml b/device_framework_matrix_product_8.xml similarity index 100% rename from device_framework_matrix_product.xml rename to device_framework_matrix_product_8.xml diff --git a/manifest_202404.xml b/manifest_202404.xml new file mode 100644 index 0000000..f1ed5b9 --- /dev/null +++ b/manifest_202404.xml @@ -0,0 +1,6 @@ + + + android.hardware.boot + IBootControl/default + + diff --git a/manifest_media_aosp_202404.xml b/manifest_media_aosp_202404.xml new file mode 100644 index 0000000..57f073f --- /dev/null +++ b/manifest_media_aosp_202404.xml @@ -0,0 +1,8 @@ + + + + android.hardware.media.c2 + 1 + IComponentStore/default + + From 2a8f6806b25d4e7d25797182f77dd38724befcdd Mon Sep 17 00:00:00 2001 From: Juan Yescas Date: Mon, 14 Oct 2024 14:54:41 -0700 Subject: [PATCH 21/83] Mount efs and persist partitions at right stage for 4kb and 16kb Bug: 373455889 Bug: 347108593 Test: Built and flash zumapro device Flag: EXEMPT bugfix Change-Id: Ibe8d50d77c47de6fd75df6a22931d4dd0c05399a --- conf/init.efs.16k.rc | 11 +++++++++-- conf/init.efs.4k.rc | 2 ++ conf/init.persist.rc | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/conf/init.efs.16k.rc b/conf/init.efs.16k.rc index c2a2eab..121c6fd 100644 --- a/conf/init.efs.16k.rc +++ b/conf/init.efs.16k.rc @@ -1,3 +1,7 @@ +# This RC file is used for: +# - 16kb Developer option +# - 16kb targets only + service copy_efs_files_to_data /vendor/bin/copy_efs_files_to_data user root group root radio system audio media graphics camera @@ -5,7 +9,7 @@ service copy_efs_files_to_data /vendor/bin/copy_efs_files_to_data oneshot disabled -on post-fs-data +on post-fs-data && property:ro.boot.hardware.cpu.pagesize=16384 mkdir /data/vendor/copied 0775 radio system restorecon_recursive /data/vendor/copied exec_start copy_efs_files_to_data @@ -14,7 +18,10 @@ on post-fs-data restorecon_recursive /data/vendor/ss setprop ro.vendor.persist.status mounted -on late-fs +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 diff --git a/conf/init.efs.4k.rc b/conf/init.efs.4k.rc index 340976c..b930d01 100644 --- a/conf/init.efs.4k.rc +++ b/conf/init.efs.4k.rc @@ -1,5 +1,7 @@ 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 diff --git a/conf/init.persist.rc b/conf/init.persist.rc index ee68337..800a611 100644 --- a/conf/init.persist.rc +++ b/conf/init.persist.rc @@ -1,4 +1,4 @@ -on early-init +on early-init && property:ro.boot.hardware.cpu.pagesize=4096 mount_all /vendor/etc/fstab.persist --early setprop ro.vendor.persist.status mounted From b710f75a6fc80bab0ce75ba97c896c15d2ce18a0 Mon Sep 17 00:00:00 2001 From: Megha Patil Date: Mon, 7 Oct 2024 06:05:47 +0000 Subject: [PATCH 22/83] VSS to be removed from Zumapro VSS support removed from zumapro and made device specific BUG: 369721391 Flag: EXEMPT refactor(SUPPORT_VENDOR_SATELLITE_SERVICE) Test: Manual Test(Satellite Basic Test) Change-Id: I52cb3e36dedecf7fb8dd14135dfe8da400210144 --- device.mk | 2 -- 1 file changed, 2 deletions(-) diff --git a/device.mk b/device.mk index 303661d..9638ef2 100644 --- a/device.mk +++ b/device.mk @@ -1275,8 +1275,6 @@ include device/google/gs-common/pixel_ril/ril.mk endif endif -SUPPORT_VENDOR_SATELLITE_SERVICE := true - # Telephony satellite geofence data file PRODUCT_COPY_FILES += \ device/google/zumapro/telephony/sats2.dat:$(TARGET_COPY_OUT_VENDOR)/etc/telephony/sats2.dat From 2b041db208945836a0b22be242c90767bf823455 Mon Sep 17 00:00:00 2001 From: Jeff Chang Date: Mon, 21 Oct 2024 09:55:21 +0000 Subject: [PATCH 23/83] Update display dim configuration Revert the configuration from I79939290b6a355cf for benchmark regression. Flag: EXEMPT bug fix Bug: 357187828 Test: presubmit Change-Id: I9ebd934f8cf862372e089f2d2325f1f3f200b8b5 --- overlay/frameworks/base/core/res/res/values/config.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 6a884c6..3947f7e 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -530,11 +530,4 @@ com.google.android.apps.stargate.ACTION_ESOS_DEMO - - - 20000 - - - 33% From 010569846cd26ffd07589deddc54ce06858a7837 Mon Sep 17 00:00:00 2001 From: Richard Chang Date: Wed, 23 Oct 2024 04:25:48 +0000 Subject: [PATCH 24/83] zumapro: MCP: Set the vendor customized max cached processes to 1024. Bug: 374891496 Change-Id: I4e72883a024d3c70d71605073bd1e44a52af0303 Test: adb shell dumpsys activity | grep CUR_MAX_CACHED_PROCESSES Flag: EXEMPT config XML 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 6a884c6..6a24a7e 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -283,6 +283,9 @@ true + + 1024 + false From 8033193809ccd1750638ba612b0b5bcae8269126 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Thu, 24 Oct 2024 21:43:05 +0000 Subject: [PATCH 25/83] usb: report compliance warning to framework Bug: 375322802 Test: dumpsys usb Flag: EXEMPT bug fix Change-Id: I2818491ec896e60eb7b9e70d86c0eddc2479f780 --- usb/usb/Usb.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index f222310..ea8b830 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -1219,6 +1219,7 @@ void queryVersionHelper(android::hardware::usb::Usb *usb, queryMoistureDetectionStatus(usb, currentPortStatus); queryPowerTransferStatus(usb, currentPortStatus); queryNonCompliantChargerStatus(currentPortStatus); + queryUsbDataSession(usb, currentPortStatus); pthread_mutex_lock(&usb->mDisplayPortLock); if (!usb->mDisplayPortFirstSetupDone && usb->getDisplayPortUsbPathHelper(&displayPortUsbPath) == Status::SUCCESS) { From 41b27fe6f911fb7c155b94161807779c680a8a44 Mon Sep 17 00:00:00 2001 From: Bill Yang Date: Tue, 22 Oct 2024 11:05:12 +0000 Subject: [PATCH 26/83] Set BOARD_LIBACRYL_G2D_HDR_PLUGIN for soong Set the full module path of libacryl_hdr_plugin and the include dir for lobacryl conversion to soong. It will take effect after aosp/3286932 and aosp/3287183 merged. Bug: 370414334 Test: lunch aosp_caiman-trunk_staging-userdebug ; m libacryl_hdr_plugin libacryl Change-Id: I21a9cee4a36e1951979481c50bce871a6853504c --- BoardConfig-common.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 099c238..921b28b 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -280,6 +280,8 @@ BOARD_USES_EXYNOS_AFBC_FEATURE := true BOARD_LIBACRYL_DEFAULT_COMPOSITOR := fimg2d_zuma BOARD_LIBACRYL_G2D_HDR_PLUGIN := libacryl_hdr_plugin +$(call soong_config_set,acryl,libacryl_g2d_hdr_plugin,//hardware/google/graphics/zuma/libacryl_plugins:libacryl_hdr_plugin) +$(call soong_config_set,acryl,libacryl_c_include,hardware/google/graphics/$(TARGET_BOARD_PLATFORM)/libcap) # HWCServices BOARD_USES_HWC_SERVICES := true From c0dae61ea2900fea706ac46d6ec231ffeed10630 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Mon, 21 Oct 2024 14:24:49 +0000 Subject: [PATCH 27/83] Add sched qos profiles Add profiles for sched qos setting. The original uclamp_fork_reset will be removed later. Bug: 355612114 Flag: NONE vendor task_profiles.json does not support flag Test: build pass Change-Id: I287547c902f79d3e16c0aab913d7f1004f8df184 --- task_profiles.json | 229 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 213 insertions(+), 16 deletions(-) diff --git a/task_profiles.json b/task_profiles.json index d43c455..8cec122 100644 --- a/task_profiles.json +++ b/task_profiles.json @@ -15,21 +15,6 @@ } ] }, - { - "Name": "PreferIdle", - "Actions": [ - { - "Name": "WriteFile", - "Params": - { - "FilePath": "/proc/vendor_sched/prefer_idle_set", - "ProcFilePath": "/proc/vendor_sched/prefer_idle_set", - "Value": "", - "LogFailures": "false" - } - } - ] - }, { "Name": "CameraServicePerformance", "Actions": [ @@ -280,6 +265,202 @@ } ] }, + { + "Name": "AdpfSet", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/adpf_set", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "AdpfClear", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/adpf_clear", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "BoostPrioSet", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/boost_prio_set", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "BoostPrioClear", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/boost_prio_clear", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "PreemptWakeupSet", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/preempt_wakeup_set", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "PreemptWakeupClear", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/preempt_wakeup_clear", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "PreferFitSet", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/prefer_fit_set", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "PreferFitClear", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/prefer_fit_clear", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "PreferIdleSet", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/prefer_idle_set", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "PreferIdleClear", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/prefer_idle_clear", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "AutoUclampMaxSet", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/auto_uclamp_max_set", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "AutoUclampMaxClear", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/auto_uclamp_max_clear", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "PreferHighCapSet", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/prefer_high_cap_set", + "Value": "", + "LogFailures": "false" + } + } + ] + }, + { + "Name": "PreferHighCapClear", + "Actions": [ + { + "Name": "WriteFile", + "Params": + { + "FilePath": "/proc/vendor_sched/sched_qos/prefer_high_cap_clear", + "Value": "", + "LogFailures": "false" + } + } + ] + }, { "Name": "ResetUclampGrp", "Actions": [ @@ -321,7 +502,23 @@ }, { "Name": "InputPolicy", - "Profiles": [ "MaxPerformance", "ResetUclampGrp", "PreferIdle" ] + "Profiles": [ "MaxPerformance", "ResetUclampGrp", "PreferIdleSet" ] + }, + { + "Name": "SCHED_QOS_SENSITIVE_EXTREME_SET", + "Profiles": [ "AdpfSet", "PreferIdleSet", "PreferFitSet", "BoostPrioSet", "PreemptWakeupSet" ] + }, + { + "Name": "SCHED_QOS_SENSITIVE_EXTREME_CLEAR", + "Profiles": [ "AdpfClear", "PreferIdleClear", "PreferFitClear", "BoostPrioClear", "PreemptWakeupClear" ] + }, + { + "Name": "SCHED_QOS_SENSITIVE_STANDARD_SET", + "Profiles": [ "AdpfSet", "PreferIdleSet", "PreferFitSet" ] + }, + { + "Name": "SCHED_QOS_SENSITIVE_STANDARD_CLEAR", + "Profiles": [ "AdpfClear", "PreferIdleClear", "PreferFitClear" ] } ] } From 30c7fadda56f89c4868ece778e16aabc098c9fe1 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Fri, 25 Oct 2024 07:35:27 +0000 Subject: [PATCH 28/83] Enable sched qos for vendor groups Enable settings by different groups. Bug: 355612114 Flag: NONE init rc file does not support flag Test: build pass Change-Id: Ic4eccc64797cb6511f5f3c50f9e5a0b8f0791edc --- conf/init.zumapro.soc.rc | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/conf/init.zumapro.soc.rc b/conf/init.zumapro.soc.rc index 6bd32f8..e3d12d4 100644 --- a/conf/init.zumapro.soc.rc +++ b/conf/init.zumapro.soc.rc @@ -143,6 +143,41 @@ on init write /sys/devices/system/cpu/cpu6/mte_tcf_preferred asymm write /sys/devices/system/cpu/cpu7/mte_tcf_preferred asymm + # 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/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_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/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_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/rt/qos_adpf_enable 1 + write /proc/vendor_sched/groups/sf/qos_adpf_enable 1 + on zygote-start # For PixelLogger configuration file. chmod 0771 /data/vendor/wifi From 19ab0dfe42e0067f15996698477c7ec9eca2c60b Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Fri, 25 Oct 2024 07:56:54 +0000 Subject: [PATCH 29/83] Set permission for sched qos nodes. Bug: 355612114 Flag: NONE init rc file does not support flag Test: build pass Change-Id: I2512cad0e4a6f377af0526816caa4f219c658e98 --- conf/init.zumapro.soc.rc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/conf/init.zumapro.soc.rc b/conf/init.zumapro.soc.rc index e3d12d4..bb8929a 100644 --- a/conf/init.zumapro.soc.rc +++ b/conf/init.zumapro.soc.rc @@ -143,6 +143,37 @@ 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 + + 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 + # 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 From 2bf5d31904b3df3e26f11d193d22bfc88df2c739 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Fri, 25 Oct 2024 16:10:03 -0700 Subject: [PATCH 30/83] Enable MTE in -eng builds on zumapro devices. MTE is a low overhead tool which enables detection of memory safety bugs in interactive workloads. See https://source.android.com/docs/security/test/memory-safety/arm-mte for background and information. This change enables MTE by default on -eng builds. See go/mte-eng for more information. Co-authored-by: Evgenii Stepanov Test: Device boots and no MTE crashes Bug: 316398899 Flag: EXEMPT only affects eng builds, not shipping code Change-Id: I8be52af4f0349907651ae661972c85ea46e2aa72 --- BoardConfig-common.mk | 8 ++++++++ conf/init.eng.memtag.rc | 14 ++++++++++++++ device-common.mk | 13 +++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 conf/init.eng.memtag.rc diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index f3ae9d5..e01a56f 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -40,9 +40,17 @@ BOARD_KERNEL_CMDLINE += rcupdate.rcu_expedited=1 rcu_nocbs=all rcutree.enable_rc BOARD_KERNEL_CMDLINE += swiotlb=noforce BOARD_KERNEL_CMDLINE += disable_dma32=on BOARD_KERNEL_CMDLINE += sysctl.kernel.sched_pelt_multiplier=4 + ifeq (,$(filter %_fullmte,$(TARGET_PRODUCT))) +ifneq (,$(filter eng,$(TARGET_BUILD_VARIANT))) BOARD_KERNEL_CMDLINE += kasan=off +BOARD_KERNEL_CMDLINE += bootloader.pixel.MTE_FORCE_ON +ifeq ($(filter memtag_heap,$(SANITIZE_TARGET)),) +SANITIZE_TARGET := $(strip $(SANITIZE_TARGET) memtag_heap) endif +endif +endif + BOARD_BOOTCONFIG += androidboot.boot_devices=13200000.ufs # Enable KUnit for userdebug and eng builds diff --git a/conf/init.eng.memtag.rc b/conf/init.eng.memtag.rc new file mode 100644 index 0000000..e0e13f0 --- /dev/null +++ b/conf/init.eng.memtag.rc @@ -0,0 +1,14 @@ +# MTE in -eng build: all cores in Sync mode +on init + # Per-core mode overrides. + # Little Cores: sync + write /sys/devices/system/cpu/cpu0/mte_tcf_preferred sync + write /sys/devices/system/cpu/cpu1/mte_tcf_preferred sync + write /sys/devices/system/cpu/cpu2/mte_tcf_preferred sync + write /sys/devices/system/cpu/cpu3/mte_tcf_preferred sync + # Mid Cores: sync + write /sys/devices/system/cpu/cpu4/mte_tcf_preferred sync + write /sys/devices/system/cpu/cpu5/mte_tcf_preferred sync + write /sys/devices/system/cpu/cpu6/mte_tcf_preferred sync + # Big Core: sync + write /sys/devices/system/cpu/cpu7/mte_tcf_preferred sync diff --git a/device-common.mk b/device-common.mk index 1e4691a..54e363d 100644 --- a/device-common.mk +++ b/device-common.mk @@ -51,12 +51,21 @@ PRODUCT_VENDOR_PROPERTIES += \ vendor.zram.size?=50p # Indicate that the bootloader supports the MTE developer option switch -# (MISC_MEMTAG_MODE_MEMTAG_ONCE), with the exception of _fullmte products that -# force enable MTE. +# (MISC_MEMTAG_MODE_MEMTAG_ONCE), with the exception of _fullmte products and +# eng products that force enable MTE ifeq (,$(filter %_fullmte,$(TARGET_PRODUCT))) +ifeq (,$(filter eng,$(TARGET_BUILD_VARIANT))) PRODUCT_PRODUCT_PROPERTIES += ro.arm64.memtag.bootctl_supported=1 PRODUCT_PRODUCT_PROPERTIES += persist.arm64.memtag.app.com.android.se=off PRODUCT_PRODUCT_PROPERTIES += persist.arm64.memtag.app.com.google.android.bluetooth=off PRODUCT_PRODUCT_PROPERTIES += persist.arm64.memtag.app.com.android.nfc=off PRODUCT_PRODUCT_PROPERTIES += persist.arm64.memtag.system_server=off endif +endif + +ifeq (,$(filter %_fullmte,$(TARGET_PRODUCT))) +ifneq (,$(filter eng,$(TARGET_BUILD_VARIANT))) +PRODUCT_COPY_FILES += \ + device/google/zumapro/conf/init.eng.memtag.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.eng.memtag.rc +endif +endif From 473b1746b2f3e86bfcce62f2e38bea6c1a79b8d9 Mon Sep 17 00:00:00 2001 From: Sungcheol Ahn Date: Mon, 28 Oct 2024 21:20:55 +0000 Subject: [PATCH 31/83] [Satellite] Changed start of satellite non-emergency mode in hidden menu to send intent instead of directly invoking satellite manager Bug: 376117071 Test: Manual Flag: com.android.internal.telephony.flags.carrier_roaming_nb_iot_ntn Change-Id: I89e728a92163da56dc12dde1d6ff6509cb0adedc --- 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 ef2e97b..6e2772c 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -533,4 +533,7 @@ com.google.android.apps.stargate.ACTION_ESOS_DEMO + + + com.google.android.apps.stargate.sessionmanager.SessionManagerReceiver_Receiver From fd73068e3e2536d0f3ecb96d0742021546727011 Mon Sep 17 00:00:00 2001 From: chenkris Date: Wed, 16 Oct 2024 07:25:44 +0000 Subject: [PATCH 32/83] Add IGoodixFingerprintDaemon aidl interface Flag: EXEMPT NDK Bug: 370671685 Test: authenticate fingerprint. Change-Id: I6aa1c7df2e1704899af8adef0c388820e4716333 --- device_framework_matrix_product_202404.xml | 8 ++++++++ device_framework_matrix_product_8.xml | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/device_framework_matrix_product_202404.xml b/device_framework_matrix_product_202404.xml index ce5db47..5b36f03 100644 --- a/device_framework_matrix_product_202404.xml +++ b/device_framework_matrix_product_202404.xml @@ -135,6 +135,14 @@ default + + vendor.goodix.hardware.biometrics.fingerprint + 1 + + IGoodixFingerprintDaemon + default + + vendor.google.google_battery 2-3 diff --git a/device_framework_matrix_product_8.xml b/device_framework_matrix_product_8.xml index 1103919..4325803 100644 --- a/device_framework_matrix_product_8.xml +++ b/device_framework_matrix_product_8.xml @@ -135,6 +135,14 @@ default + + vendor.goodix.hardware.biometrics.fingerprint + 1 + + IGoodixFingerprintDaemon + default + + vendor.google.google_battery 2-3 From b625b7f751a4b39e9f2a95572328868b578efe8d Mon Sep 17 00:00:00 2001 From: "Priyanka Advani (xWF)" Date: Wed, 30 Oct 2024 16:32:55 +0000 Subject: [PATCH 33/83] Revert "Add IGoodixFingerprintDaemon aidl interface" Revert submission 30066446-goodix-ext-service-aidl Reason for revert: Droidmonitor created revert due to b/376465180. Will be verifying through ABTD before submission. Reverted changes: /q/submissionid:30066446-goodix-ext-service-aidl Change-Id: Ie2f794f6d072740705419ee3997e498bc268a520 --- device_framework_matrix_product_202404.xml | 8 -------- device_framework_matrix_product_8.xml | 8 -------- 2 files changed, 16 deletions(-) diff --git a/device_framework_matrix_product_202404.xml b/device_framework_matrix_product_202404.xml index 5b36f03..ce5db47 100644 --- a/device_framework_matrix_product_202404.xml +++ b/device_framework_matrix_product_202404.xml @@ -135,14 +135,6 @@ default - - vendor.goodix.hardware.biometrics.fingerprint - 1 - - IGoodixFingerprintDaemon - default - - vendor.google.google_battery 2-3 diff --git a/device_framework_matrix_product_8.xml b/device_framework_matrix_product_8.xml index 4325803..1103919 100644 --- a/device_framework_matrix_product_8.xml +++ b/device_framework_matrix_product_8.xml @@ -135,14 +135,6 @@ default - - vendor.goodix.hardware.biometrics.fingerprint - 1 - - IGoodixFingerprintDaemon - default - - vendor.google.google_battery 2-3 From ab4b51ee5efa99899739b9df12fac59015b2e864 Mon Sep 17 00:00:00 2001 From: Juan Yescas Date: Wed, 30 Oct 2024 18:44:08 +0000 Subject: [PATCH 34/83] 16kb: zumapro: Verify that zumapro prebuilts are 16kb elf aligned Set the product flag PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE to verify that zumapro prebuilts are 16kb compatible. See: https://source.android.com/docs/core/architecture/16kb-page-size/16kb#verify-16kb-alignment Bug: 342466032 Bug: 363170018 Change-Id: Ib60842dc090c16822bc727a6d7442951b7b45aa2 Test: Build target Flag: EXEMPT bugfix --- device.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/device.mk b/device.mk index 5280332..67d5de0 100644 --- a/device.mk +++ b/device.mk @@ -1311,3 +1311,4 @@ PRODUCT_PRODUCT_PROPERTIES += \ dumpstate.strict_run=false PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true +PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true From a419a7b54b885c46098dfae6baee667731247c4c Mon Sep 17 00:00:00 2001 From: Kai Hsieh Date: Sat, 21 Sep 2024 13:18:59 +0800 Subject: [PATCH 35/83] 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 c61d1d0f9efd4b52dbe388478d4ce2e08abb92e5 Mon Sep 17 00:00:00 2001 From: Richard Chang Date: Fri, 1 Nov 2024 05:06:19 +0000 Subject: [PATCH 36/83] Add p24 perf setup script Bug: 374151514 Change-Id: I3afcdd7197fd010e9e2a2aa04b0038812a9f5c17 Test: Build Flag: EXEMPT only update script for testing --- BoardConfig-common.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 9a3f6f1..1a5653e 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -239,6 +239,9 @@ BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4 TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm +# Testing related defines +BOARD_PERFSETUP_SCRIPT := platform_testing/scripts/perf-setup/p24-setup.sh + # # AUDIO & VOICE # From e0e5b173351691fdf09b8440dc692660cc6b674a Mon Sep 17 00:00:00 2001 From: Wen Chang Liu Date: Mon, 4 Nov 2024 14:18:07 +0000 Subject: [PATCH 37/83] Add dynamic color aspects support for vp8 decoder All decoders for compression technologies that were introduced after 2002 must support dynamic color aspects feature on CHIPSETs that set ro.board.first_api_level to V or higher. Bug: 376412691 Flag: EXEMPT resource only update Test: run cts -m CtsMediaV2TestCases -t android.mediav2.cts.CodecInfoTest Change-Id: I0edc9eb80ac0478499e5d50c982f9893131c184d --- media_codecs_aosp_c2.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/media_codecs_aosp_c2.xml b/media_codecs_aosp_c2.xml index 5a39a44..550b4c8 100644 --- a/media_codecs_aosp_c2.xml +++ b/media_codecs_aosp_c2.xml @@ -123,6 +123,7 @@ + From 477228101f5bab4591a3814f79ec21b49c5028f1 Mon Sep 17 00:00:00 2001 From: Herbert Xue Date: Wed, 6 Nov 2024 10:52:10 +0800 Subject: [PATCH 38/83] 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 39/83] 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 40/83] 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 41/83] 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 42/83] 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 43/83] 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 44/83] 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 45/83] 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 46/83] 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 47/83] 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 48/83] 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 49/83] 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 50/83] 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 51/83] 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 52/83] 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 53/83] 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 54/83] 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 55/83] 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 56/83] 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 40d34122ef3125bb1f4c7cae99be2638cf130760 Mon Sep 17 00:00:00 2001 From: Kelvin Zhang Date: Fri, 22 Nov 2024 10:06:23 -0800 Subject: [PATCH 57/83] 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 58/83] 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 59/83] 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 60/83] 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 61/83] 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 62/83] 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 66/83] 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 67/83] 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 68/83] 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 5c61b703003d73deb3435334faddbdb86754c953 Mon Sep 17 00:00:00 2001 From: Adrian Mejia Date: Wed, 4 Dec 2024 19:35:05 +0000 Subject: [PATCH 69/83] 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 70/83] 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 71/83] 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 72/83] 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 73/83] 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 74/83] 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 75/83] 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 76/83] 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 77/83] 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 00419aeae487eaebf789cbdf9dd9338b02a6365f Mon Sep 17 00:00:00 2001 From: youngtaecha Date: Sat, 7 Dec 2024 09:14:58 +0000 Subject: [PATCH 78/83] 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) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:9cc8c2ae4e54f829c0c30bb0c6adb6272939d80b) Merged-In: I65dec5b1e9602979f102ab34764a8067e54bde05 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 zcmeFZcT`kMus2F|?>&iu0VD{BAW9Sj6Ot4}f(U{n1rM0TjCuqV3}Zks3u5+|MUiks z#DI!o7BK>nk*Ju+f+#}089C=(z3=|<*8A4?y}RCWuhmm~?_YOyb#--jb(nqa4!7Ym zKSo#cfRjwm)k{j$B|*^he84~Ugc|w%`&$G5`!x_3W1}WM;NN3-q>z!^e2@e!N%+Sa z51aLXbdUrD?yum{pnpJDDX8!(c;ZYCNJ^w^KT5(+Mt*v&aOOXtj7;1? z8+q;jcpfN?%=s^ocS=k2@b~X;4gA)?Zw>s`z;6xw*1&HK{G$P>4?^jv??VQ9O$>Eq(^7X$;{?t_}`TyGQk6fNgy;sS_kC5a- zbtHE``D6umez=1Lccd{S&fXoVBsG%olgC#aC50qln-u&k2|s~l5mHFPU0ceXNbY_D z-yHaX$#6gdLdUP*$Adi}o5(0j&{E0MPl7d%`5{>In4U-wCe1rk5`JRea~&BuD8*Dy3}eCE+KqTUtcPMZYnFB}v^RxBrO(Y4`!kuxq7! zpZ*H+LgHd=HN+shqbCwa>e>>iYx@%i#ec+RN~Ik3{R*na^`xZ!Qc&erQ2k>M$Vd$a zel-~AyR`?Dc-Na9MgIRj(r{^9X&d=T1l@n4a-$_6iTo8bita(VrczKk?fB1n0rR+Z zphm$wJ#MX|nzniRKa7S+qRR09OVoF9gB{g~`Tuz$5zW^8U5{wwgjBR5N%*P!L$~yR z&@Kg!{R$2j$BnkppkSf;L;n9H61D*rsy!)X{*b1WKK#ViVrdTuGE#8-ui%J(K-wh% z!TndzCS=auDR3$@?T2z(DEy|c~hLoUZRH>C&}QVF%semdLlE@ z#sJdB@RQOGNc$Y=HCUPrPZEAo(t%;pCPF0SFMCaLIJBoSj{Z|ACw^24h0`y4-k)vi zp-G~+aicZ0FMgACykr5uI7a%{Bz zC%f%Z@WQX)mj^v;zrBew8>30OI^x_VqgPYTNq7!DAm_0Zob)Rw62>(-YEYtbGfvJ)LRHmcPpJOi ziDaz$@iuO!G?LowACZ2O-Pn*9Q&Q)4kmT+s&)4{SoY{Pd zZU?!=xl5_J%MbOLyY$$JgdU!+p+koJTR%&rJf!J=;xRn(hlfur5B5--t37m7VGkYM z-b0;Kdg$0;J=D#ohkE?kL%m|-N)||Dn7pm$IViD*PRouPyioFf)-;NNt?mA_<4^ zgt$N{T~YXh)Bg$5Bi)L^9_gUBwD5kC@RRXJH2#q0|7+4?I}wdNeN1G?521b&@>>PJ zRX~5M;I|4SPVn!(;I|5XTfy&!Ae|8Z?hF1$t03;c{=Q-v=^04rEJzyWN&-j%RWJ?) z<9XD056}2CH9kkC&xh$7$@IQ_b;4|mvOvJfG0PHQSt4)QMObzd z#LXb?R$8k_*7i0@UMD2@(GWA#A6@u_jR{qFt`ZX~FzGcWmt%^!4F4|0^Cg&Cj2DV9tq?C3VEQY(l#iG5@JcRTeTf+_ z@Y-{{{tRzC#mpyoGY4-y#;k0-{Rre(eWkJZRy&0g~!Zx=p(MREw_a5Zvt<#R@p z{T~K{j(EYVv+yeUOo0y+OkoO^=oF-4;raNYKwi;8qoVz!=um3$cv`%a6o)Gp?;ypg zUL}N6!iN%bro^I8Ng$L=;gp0x$)EgEKT;Y1@+VaJh^ik@?LGE>hw62x@fO9JZvy*_p?y~L>a&CNNu_<#X`gGTmBG=v zO|%{vYPGU`eWM9uOI`VYAL3iTk{%&mlaAE%qw0{;3xP^K*Q9lz6ZlK|HG`fby z894Cj5tE5%>gQ*g6f|fs88kv}kOwvM7Mjfvn(Y>vou;nS!F4XU&gZ&{mx1ecaNVUn z&X*Y%AZZW~az_|a!GyenkdJE4m$im>-^u%acl0Y%*Gr zPFGwfD{d`~7%WzfaF&kM}@O1F38MQp+k#1rwVA7=RCH6Oh0 zjW@h7a{}J<#9JPiH6Cxf;~h7=I}Y!;;{CDszy%*V<0B``cErbHFvkI(jK-(-_{5r1Q33a(7XRY@pb zorr7Bp*R88p2c-%aD6;(IE_)KaN|kbbONJ~CvJ9QH!soI91ENO;%`2KTjCdNRU}(` zKiXPLw)wEz0$@i!*kLHQW5kvnFJMO=-Dw}S^C`144-O^LL+9zC8*u2R;7|weFonYk zaJUzHxQZNpCwKS@IozrI*Z4u!f6arxLg`--DU-cxxsua!B%Db z+zZ>3uw4^JwTzBNTA%7eSTv2u`3SCgnIZwV1 zN4`JEo2$sX5P5fjNB|;5L(#~G3S6QfP*dp7D%?_3cu5or-za8+;uBDOrl?rMQ}R?$ znnjhw^PsmG)7uhy+c@^#4!w68^u9@Z-vxCgj=DOiR}uBM!!)#rMitR`E7JHvG&)i9 z8}|7+Ny`hg0zqpEM{5qznvZ?wq4r$VnS=d;QFk`>pM?Wvp48(KJ%Os89_U?H(R&Gc zMW9!*RDV3t57F1(j|ThDaIYAR_MmYb4&03pm zH={)~j@X2j8__BXtv8^}dbC}KBiG_6G1{#``_(vl6*{cMF_GvPfle#Xc{#d-)+eDs}%esgi+9Gn!4{K(r%c7EQ*c@kP7lNxf8fl?I4b~W`(yAV{MAqU4>t`Ld*G7sxYQm0bi-xiFw_;p z#$vb&E_cQiP8i{ckz;VB1Fjm4tHt)X#ty}!aP3H3XN&7?oYuc0>xV=e9!LD_b}i3T-S3m$8KrP#6P+acr?YDRzfq5BcICD4s2~W$6K{ ze>+O)xv?JmPUb)|pCs#$T4V{ci)EgQ#M>)_UA zxV3daRwof>bt~Oggxh`T?cv-maOn_NlLQiY~h+@@N7TRdR5^t9|g@lU#w>ha&cK`0{!GTN++!4#QI#xfTfnS27x z0386|EXYunSP`-c$QpUFgOFn^Ig9iRGV#csM$ReZp4`kEsK@gHoBw7QGdchKfG+GgR%TR7?_+GV2s4IF(P9j@V+40ODTPFK+R zGP+#CvFYe~5yz#W+XZw_#qsCS<8Sm#!3oLem4x1j=yMKz6Hx4T7AKy;N%81^8Us$@ zX0O#f34r zXcva;#Kk*s$#z`24gcJV%eG+XW((hkmAM38KhYftPp||b^o0JWo<)bJ>$wPFf@@7TYtQo)gHf(+-+_I5u zIRRS|U`wLxmdky&6v38K!InDQ`WCmn!R@uUqXu_Y`=%dZ(l3$pt8DtM`b#O~QaW=f11{wXF4a=;rS~K^N{|~1xd&`>%V};q)KWdCU2E1&~()d6gP@otXa(Uwy@b4lMjKyvP)ahS4H1DO%4dN@a>J zWAP=~;@hP7p>c65TjEJdeAsdyUioZj;xkPm%_dXQG?Z=1n%8Wi)jXayizB7YZvRhB zQF<)9rzwu*)3J(VteW=N5oE0G>9IA8E05zUQgYQ5xSE3NaN@cUTo*I0t8m;(bc;my zi0tuW$oQ5QaT44r^t@877=h!gZK%6Z`N*Bzze^N&%vjI8ho9r6(J; zfJB9GqL$;v@FSZv1)KDPHf@GYTU9rmqMKepv^zw5Dn`%X#rTn!0NAZeci$(wt6=xL zS#jebZYmSEz&LIn?%9ib_u#&`b^F!g#rrd1e-7FITuCxS9k@piG|>ZJS`W67gI~!Z zmK@?ShkCy_R8J1I2u~kmP9Il2eTAI9!8v`G#1lLNcvfcK*+nX6H^AAQa5kTJwpy5= zq@CczPw>QZ9+)^DliV@c?Rp9qQiN6%V0?cpJZr2hK^yzWXPDNk`cZv;}c%{sCu2!>(=zT9lh>B zultbfLy&z^ESvqeM)p&Z{S6+o+{cRKvC5|$!sKuvN14g7COP*Zr;6mfHGQHv@5y%I zlYIK57@jr5v+kkKhj5--!SlJo=gaX$IKB+Cd6_;bR}OMjAXkUvn)Jz?0J+}0+z6Wc zf#jJ$o*9#8LGx@>^1O8N{uJb`hP?G4&WoCm_ZsrPL75+vpW(jt>i2pXeZ2`@Z?=8? z3|@D0DtJ&K7*MeaD%L1g`~?+9xfN%z@(fnRWA$mQImNF@AvI}&noOv90yWPRYihZ* zhHR}FtsS+nHkqwW6V~1)wT~2Q%Q&^4X`MUNO6d)T@`zaGz)x*o+7I-!edYvV66Bc68q7;zUNcMsvh{`>HNw#pa102?WEf{AEFBdo}XVrE2@f+ZDLiqJ}ah}9U@ zDuS^R6RQnkYIOjt4pFOP8dlfPIs`q9+^M+?c(GS1N^ zm1A6TOjhBT7CDwBf9xe3D}rMs!N((2jvr&i#}nXq;>Ht0`6pJv39<0R4mfcFP9*!C zB%G6cIN1+Q4l+17srSic{FCd2Cu7OUJ)=(+!O2p=$vQY$-|I{hIn(KU)?>?J7&NlHAVZ{VdLW7E$LN-reo zrGoT2lKv4deK5ML_V{uQd$|p+_|lAiBtu`6F=9u?Lz0mr$|xt-M%i9lO|GpY*EWvK zkyXj*&*p4|oNFW}ORStzVE06eePRMn22FUf8J=uqp6pV3a+330h5KAr_}q*>9|h0t z6`p&M=M(XTAHMXxncJ7zQ64(rD_JR}Y|iVo$(p_XxTJOhpitdlx*>L+sYXPu^M zIIRqEsz>Kf5iSe$U5%y9V=tm>8jibwZmH;g{@eKEqaJP?k8qxcn0Vy#JgSsE zzQF#F3DQ-CKN>Nx0fXvs$|s!q5vP5?>F;sIJDgdEv)*2xeTvLZgW2i9!J3@l{t!F_ zf``ckzhmdf;2c~qcY)^IXfk&@XKozKeZRowIiqKPnC0XK_eH*0b> z4-;&*gU#=m?UP~qY_feWvwgR4`!TicH(`e=>`-TR=&0-%C7BqG#9g)+V>2b@2#Luc zF^>kvbdk7uOx${iixR}`8WWcXajzk+Sz!-__;C>L4e`E;@rz{RcabxG+%wY^&TQnL z*)=#}6C`XQ35Q9-G5v&Ra88MTP8ZJU$(T8cr65a#Wa+49*(7DvK~@W7eHPpXyd#5m5bt*5 zy)L}}9UpY!!*BTLD`t1#<1d)gj!)X~>1TY_iqBi{MKiu^!rVs8Yry<^eD!Hx!A@GR zn^TZ4D5y{?_(BT4V`1lnqVZ6)M71cI6m4gUvYDb6#zo>zPT2`4OMtRO*|IBgWe;V` zUemHRC|4on>P)$gYWWCKZkzvF5i1mwD*BU(!HN}Qpu!I-s-fbIsN#!eWiP1gODczx zN-NT43~ghFw5^)lRtRn7w5=W5zLItp+RfPZ5r^CJNP9c9cW~N~ba0@9Pdk*v(4mZ9 zd*L^w_uslmClPjv@Vh*A$@S?nRqyhEuKT1bn{*YiT@^OnnrycPbX$?`x6u8L?QVpg zRV(RHxPSWyX@Ai(tVma_G*8PsCo;J_*ucUTfC~gJYeOM{G9J7G`1l8L5d-l65=n`e zkPVbvqvR&i%tuT#Fgq9~kI&Q!SQ`QBLfCPNY#_tk1l%o@yKfNpDb-E}?ej#3!_yHt z>r5g#e+YEu5S{thZ=OlN{m}0S(=QGBr3dO-$o8KA{k;YKgP{LxGUy-~bXqXzJPbYq zgA-Ws;PWs>N6t3=M~&E98ep!_aGF=gVEA}u1fLlpG8*B?8!?%Vm~zds56{xX$?{Ku4&w7obbu3sP&ajz8Y$l^^0FD&<-yWqY7-c|4nG72B2WM0m*Up&QnSq`CM!Sb# z_k?4YN4-T#-nv5XC5-n9@Ls9xy&Jsu$$Fon-j|4X2JyZ}ydP8V=ZfBMi1#<@jf{^_ z-p8K$I17EIFg_tdpVh=?9r4*D^f?MXRmA75$ma|3>6G(T(DtX#5Y&yTP^hM;P~QMzq8<%vU;M4#zYsG zIG#>?028z6#G?KayXH;`fk{i0C+&nu3BpM?IFnxLOlqb6>;V6PX8wP0{KL5ZCE)*t z@81Z4#vl%KhQP6$Ku>PqBoY|N37iRmArQDk5V%S?FrEaSqk$Jl;H3e9WlUfv2}H%9 zUQAGLCa5nHG=Lv8NI7T>4f24X$s}l+deBOK&<-Z(1PMxjpd>-i6%uqq7?cY^`GTNo zVNeHu3Z+x5=@dIU#e+`qfvJ9EsyKj5n+Vea=(JgaXPNiT+6VBtbPazX#tg@@!qj$E3F7}CtxG#jV1btG-G zZrUZd%FwH3?9~xtuWmKDdId5rK*mi$MmA(rl8lDnYZLLhAKviAOdq`IjkmlmW^smO zSwWT~FUt#WPry5#c-I5(jmP`$_`nSxj>AW;m^~IByI_tpK5@dQj`(a0K6kkLf~)aD zmoI)X9A1bOU&O+TqnsDX_%g{i*A{Z^Xs&y&+?j0dJd(SYB)m__Q7E|#C0Ch}J5X}3Z^;`dX@HU@g;HZu>PSmHNogc46_e5^ zTAIL?{>?4DtW#P@O3OH<;ub>aGCef#TvY$@Mf4U(0luthulTUA;e!Z|h7U~Ze*58KuC-U{>r2Ye~Z{XH{ zA@$$chSAXAK^uH%!#-#@z&0FLZMXsrH`s=|(C9}R{h7v@Y~ws=+y{*Zn8p(d;>L^6 zrj4X&3pAzbHkI+4>RvTxLh}px=4xRJ*QjL}X>n6+naQ@ygO&xPC4|$m zoV2Wb-s;9_oer%F1g+u2TT}3Jvg7Agej8xB47MYF>Bf#O{QCXwx4W|6o@3{;5#KrV zyR6`QU-<6J`#y{Jee53I_tU)ZclqB-1>ft)_m9S1YNSh(-(_OgwFtUGd0p$FD@xE6 zOS<;ib~Tf(cI<9L{4D)*=U+ed`-k`6o(>vfXV!twPGi|Qec5QjZWprmdF%@dt`Xsm z1Fp9Lch!7u-QT>Uz`F*#C%}8I#H;4Zt_RsoJlS2W?7jiAnT$}G3e`ba2EqyrVW*;; z9FfzZa)#&R@~B)3$hGn1Wl%(UB5e!N6e3!xF4{pvX&}1XOOzuLi^_?DfjyEss^kYz^X~lT8mnnt5}bx*3HDaL(YavY-B|?TExbl+KdI8 zajG_N!RDR7rWI_uiJvdy7eM@G6Tf-HZx7G!G;g9WS5ox&pNfB4axWS7#FE1v>+dq_ zJA@mAq77PP!#(bXGT2aI93`t9H5j6-hes`Aqaq+`4~Z&+sA^$!KN77k8$EA$z4)N0{{GjJh+P4gw`&5+(rFH!cA z8GFfMz@3E7Q_Md?^7EPe zVp8yt6g090-@OYbV^P5PqO(wRi4Ue#p&GAY^L=2z*31@N7*tylv(h~DN{a}l#ehjpUISmL3I{X-yzjiQ2h?7KMJb9 zkm~Q88cJ*Ap+*5}deItdQgeq_Qw25epyoqXZ3@(;^Q67jgCVtF;jM_g?M2^yfI35A z-3U@=yQJ=tY~3?jm&Y_HiTMp$&`?SmD%2W5)TjuJeVN8VnvLU0(*$VpAx-mW(^hEO zJ)r3dG-Z-z%5PSM=H6^`-})9E(lQ8I%vD=lpv9eS@u980{MKozt;?ZxHECVTwr=Xx zdW5#-kGi#q+ob|siO}_d zcB?|SI_=hl?g4^sGw2>iyS-jue~QESxL$}cPFQFpX+P3W6aMQ)O54`IZsa_fh59ma zAaj%>lduj<2@DZ}4}~m%J3J_+P|Jfx4z%|neK}%c2*g;8I0(piAd~gUIzpm6$ZH@~ zlJ9X?Q&U2R@TnW2o{DrPOAi5!Cp3YfMI2h8M!yi+iOjb_tSMoK2w4YUorke&fn878 zO+0p&0()G8y~ksV#&EQNV*wm1${DB62?Ne%mJ?&lxxsM6*@RODoC*!D#5I=L%G)N# zJFdmM&F~%!<8={!KV|-?f&2wV{39&?Z%ck1@IM6$rhs7a0Ks28LGparz94HvWUXao zU5KokitJpW?5f$a)l{~P2$h6FU7>Is2>o@1D^V_zBe#LbZQ{u7>@9be$R#SsWrEye zF_C*=B-cgdCxE;Ul}{w1$sn37Ct3!g&FZ3)9ML6E&}S7!69s2^g-Jx=53WKeRagrO z>p2QrK;Z(Ta9N;m8x(Rx3gtv`A1EGR6i@S%{6J|wRay*6TR|xXly(~^-C$J)gNlv1 zN)S~EBWezy=FC&`B4RavP@Alvwm_t|8r0SiwM`b)DPS&c5$j)xP_o?-APfl2+e5()Ts#+f4d?R@4>>wADcS z1J!P%I{QH90IPFC)US#5`_9p&peqmkouU6&w!e6SasSoOe-D`VV$IdTyc*2k3I{9E z!D?i%hT7nvWUvz%>`DiFsSjS%Yghsuj;w`{W6=vNPJ%_eoW(`3xCtX1V1$$Mh#+cd z43-nY(w}2FRl{ZG`r)n#J! z2&^6ptO__*<<#m8SSwR&bzJcblZ^wsXLCQE%HF)HYXW zTcKpzN=EI2Q3vU$(*nDAVwb?!i->(MVm}}3H-Y_T);^}6eHzdHE^D6+_MgDMkz?PU zKRQQwbPYTDJ%~p)!{`ol__A|MG>q9U7?Ud;Qz;x%PsTJeW4@3vog7EId5-76F%2Bk zl^h>}<5TKHz=;t!iENz46Q^)+TETNF0Hf;<@S(S0n1WfdA802aaEX9?K&4apMaGsrT6((GloA8uO=s>S8=-qDSV`AtNM0_G7 z6Bl`(@95i!e&2B7SDe&={$DVl9VfTpAD=O>6@yyDIHehT%{Lob?fB zf571PIOiSCt;2b5asC@zP>Ty|a8Y$hNT%c{*r>%sxLEP^;uhgjB3!BnOMAmo4TYrx zm6sO4(jvO-JXv-hmNl}=zBq-Bgit3E8VsRxnb4&qbVaYw9VB!QFZ47Gy$s^et4wGX zhTVd&=W=1?5LQdW-b1(og!iK1_B4DfgpX4TpTQ6R0Lyh@xgjh!<}Duz%SWj$pJci` znk?TYT7HBqe+3bTXv8tKh$|%G1{*nu8##hR+NwuRfyi)(T*0g|K9s+_C=SR;fr^4v9QWQ_({qeaASMC{Q^JVPj64B{Ap z_z2nV2RrXEJ3H7IB8=$`F&YnIYUq!JT23ryK9ez~>TlLngT2;1Mms4#7 z)x$}(*pjJ!#jUQTHJ<$1W~l9e+HV?f)W{o6?wkJbW)QqF7uCs-I-x?H7O8s#b&r|4 z5~aF&$#w?3Q>O3kG4Ha;yGr`5PW?T=dm;b58hx)t8dadNA89m@Z*&kgdO_n9Xk4Py zxDy(0K;unr;{$%-q{$2hf)8Jv!J@J+Is_w5sWYv6us7j#m#lMkK!pmU%~rz7p04xI}Go#BGc zbgScH5s$JuuD-gP-^y^v&U7Mk6t6|qg+O0vmwYl8}qV5sU zJ$iKaHc|Is>1T5jekzBwOg-gbl*N=$CyX928-Yos%oQ!B0NGc4*cKkg7C3e+XDo2s zlsU7(QUI13)KXj1(l*|*hFZ1}%df;rq+m6GYqb=t)~H(TN9%oN)(?hRcM%&Rw9%Yz z6K!B~32gEin_^;H1-8xVBjxBwOU_6;={kAh4~ZmaG^A=i_a7p$lx6wAngct8vKAb6 zq(ssmpZWU7(IL{(^hnPc2b{^2GgXbV1~_Z|IIn@zq`;+=&rrTO<&PM~Uj+P6%8vk@ zyR1$&=(JFs_UHW`4Cq%6{XSFO!Jum^w%1)vbk~9IW^;WRMxQfG-wE^=v--=4ex#=U zzFh{UMh26J!5^%_J;orL7*wF)YcwiH<1!priY6s!T8x8=(5w*63vlo&9FmVi^PWkU zzb=ts8Fbhq^I=_N_GSSiqL!CtTWJcc3<9mT zDO-I2o5^4^OJK8wv57IZxvpsQl-N`fn+CM4$C00K)JL@YfcEck^gDE@!!d8s@eMlF zqH_(pRO8qxbgjg373lUF-OF)&8G4kWX9-RyMz13DE<~RK^nHbX`8Y8TC*`8Q_$3Cs zz{$_?k7pS86oa1NlpLJ;7^h|9^hY@3AUdl-Bd=iI@$w{cz;&cB5VZsNjB zTyz6NuH)isxFiFYUd2DJ;IhjYdI`hQG5jJfPs0@#Fd`Kr&*RF!aa9VgPR2EovzCdt z_8hKD!1ZUvxZw;&#pA})xakx|pTx~4aLaMrdJMN6#qCFM$6vVfFzz~pF$XdB0Pfz8 zKkaYh{@r*W77xbYpdGiX6G3&0Ntxc;yLPc_zG44p;Ays~uVys*f{jm}?qvP3OV2I=J@9 z^tu+kKAd~~J#)PgZU@8ddF1w9a{C~;9ZznbgC}ARJmIlV6pWwPoPW|ro+|O5>cP_} z=IIuAdYnE@fTxMZPYa(vJ4>D=7e9|C&$kVDenrRQDNvytQ3{&>P|GT{+Sc&s*|nm?fpyt2USF6)&IURB`r(a(Df z>%CM=yu;PKj}z}C^hreDbLf|V6VKwLGn4%R{Dt!VTEssK{O<_-%fP>ane6lqwR-q?5)6l2H4M$wOhi7DrH;nNWjF~DoW)Y0pLtV1Kl)tIbw7^Vhi-e(eGiV0Lyz6)8H*EQ&}$cZ??j&+ z=)2v_HxqoHEBICm{I(Fkzd-DFY_MMi>-PyKe#A*1(EmLKyu-NA`pPgkZ!t`sJ(+k$jn20m|aF#F5_Q7Cpoa2RaC*V9! zobQ1P#^XYF&cZ<6!Z~E&0^^1I$-=|@g~{EEQpln-!6NY^^H7uvlY=mAHq0P4ECa&w zX}G6cco2lohPYG`cSAm|fg9IuvuB84&q&y_6!t_a?Abx~T*keZxO+2U?{m4m<*>Jw zx6e~Fou*!+gDXqIVAT{x;Mr1iey@ zUNzOL1HCpe(d(dk-$AciRbPeZtE=dnQ~hCm^u4t8mvZ$Zi2f>N{n!WtS=K-a3{?0A z+A0PXU|`8Humgk9P6pA$V5`XBFvs8|H8=wX35>yc*5Dc#++YmuQG*;}@VuWv2gd-x zP=gw3D;f@^h9kgm92iajLvN1ZWDpw$g5gv}!)4TPrN}S_40j6+PYMiE8N4BX#taUm2L~R3fhS<#Y2LuUeN7l@ zA_Nn8c@tx5GKgzp5o(eoGRY(+dDNtYnp7y6v{I7}FzF;FVw5%2p{DvurdD7&l9)OO zO{Wpl5LMG1)HI(l{RF0s)JzCw@{Cz8#!Q`<>4DieFq;Tw0bmvgW>Yz4!5p(i#4MDU z#fZ#~i_B7~*$s|a0hkq2vr1L7FJRWCZLUSkbr^F!FgMXKcL8&Ej=2w*M-uZAF_^z0 z4hx9GR&aEHx#&tXdj`8653Y-9(SmMOv zIVpluAD+`76Q@ANX$CmW<~uD0rwHP-2AtMWr;Xqgt>=^iPN~!>oj6_5aw-C+Qh`$) zIDO_ivmkaB5NAc=tg7QYLf+YBuybUH^M^?;4nh|%;xbXzWhUzq!gUE(aEX?4*-u>l zVq8vwO9IE`8ga=XF3%NRYFL-|LYH>oSPEk~x?_h3#*T!s6LiMLh{hgQ82bRmW|Of+ zLtJH9R~^RHfVdhvyZ$M36@%+W;(CI(iqD8#FZXeM&A2vzYZH!ZG;!<0x(z38R>W=8 zD7V$bZ5_C6S8_Y1=ysQN%Lca+>Q-Ul-k0NUOx?{Ux^JTH+qmv~i2G4+zenBksCzSU z?@$^qD;Tc^;e-Uv zgj=%GS!BaHuO+fxtBKco@QUVo#VB|sQm?-`URS~Ey2$G(@hT=>Z;01>;?=}@wKsde z2k&|%AIkbzgU@L2ag&$KJ$=2w*H_>>ljpk^CURgR&uHQh-ozC!F_Jqm7bfNlCRT(` znxr&oex=xdJn{Dy`p*#hui*P{p#Hlx{8J=dzF&YA3D`&iwvd2BB;dGqK$ajN2Lhf# zz;g&_hJg05lkH&gXqfD%J9#clo^L-n3I9mMz;l5?+#x|WIK{fplu0lpkUM2IPMw9* zX5#c2IAc1_oQAWew$Bb?X8#GZLp5iMkI~u53BiGEa2N?*!4KZ><8OjzNpO-V__}iN z3!L*D=RU)EPjUVeT#$ncALF8I40(i$AL5b+xb!~$c@LM}#n3w#cKcv>5DlLW;S0Ip zp}2e*uK07%ig;L&NLQR^R-|LZMUO}dk;=SCeQu-~L|Q_mwU~*tV0~1H>*dU zg2;0u@)AT|g~)3MSNg-s$?>aXU=_jDfNNxM4WhUk*LLB$@3_7bH+;jWueh-TH+{kA zcHG>CTR!8~R@~Nt+naGm6YgxpT@4shkFlR{_eYHTfP3EK-gmgK4)?#s18-1#uoe&1 z;Nfcgs|t@);?W8`_8O0uBk_tYUbVptYrJNK*DdkJ2+Xv=o5S(eFw7c?w};@J z!Fbmk@0sEKLHNKFADZB!ftYQKkBuT8C&@m(f;pG*$t8T6j?XUQ^E7;M0bizK?s?4n z8}n1}Rr2S8lWakPY{6wLyd=h=^y|e-dKYgY#XD&6Zej6pT6}tD36Cw2CnbssCAz{A z^I;`(PL;}vN+rwJ{Ya@kQ#z1aI+T=Jkx~c8(r8k;-MI9MeCY$Z(sH)+GcE0a(r-)| zsFrDvGA&Z3)4R-yl#MhkTWDCek10DWC_4jX=V;jlEKju)m$%^S=6Mx?yoyBz6^EeW zFJ47FsYqZdQrs%OK}8p-WJx6-DrE(gYNS$=t?UPt{Ym8@Zl#4vr8~FMSF`d@rgAw{ zu45`U*;PIyl}~AvlCY{DsT!bIHIi11VXDTmRi0W^i`1%ilBzRMl_0FTMys+Es$MRt z7LRtQj#jTe#jCzRsxQ0N@M(=AsZrIbv7K7;mtxJ|N;Ns8=2@?rYF@1wr*;I?+A7sf zp|xS8HiFdNqqQZ%+B#DENl@FN{6?O>=?!l*`ET@f-nh^=Zt`z}$eT#%`g@&|s4kFK zw@|Ssg!T&8}VoOIW4k9qwQ zPJJFU*h0f7Zi5SHaAz9)pkW`c;h3o5JZ-o|Bs+yo{!G&hVbgkO+Qe(x)2k_^chf`C zl*2YF37d6!%>!xk3Z}W3G}rQ*8=-YFv`$lOT?Va^>0&RS@O+mR$Po>QU+D1a#Xwv4W z&^C#*P1a}&(`buvk)9=~g0?rLt$}H4)ooXUb}iNRVYJ8j{J6yIqg?SyZE|7 z`%}{XLfBr;ZExuPg$rNg$QLvEWfXj|7kqKk`VtObB1p%2=!oKUY$qLiNyh=EITRZ<0b;j^JkC4tg(0NbL`I2>sjl)*1cBi{GR#Dei6hkf%s62U#%sNkGzrK4+&E-VF@OLDkX$N!d6Jw&L<>8LaHDk z3lnlw5(lD5JYxwjY2OP04hZR>fDZAL&QS)Ve^Ik3izxdq9r;5?e^X979s5Pc zf6|Gz{FA3^XOAQJw+j8B6l)fQ}MeunyFz*h_dk%Ro#T~TkIzF!%^1h&gf0@^&ov$j+*DJ}dU37l3 z+W7_I^DFWE8qxW1;rTu6{CV#D6+C~_`urEs`F52HGVVejESLucL85|PSg=Q}&=d;I zMTHJfC>IrO=j4UaP`D2Y_uCcT)GMsU!Y^3(4GO<&UQ%M0)Lbrk;3ZG>OVe|U)SyU1 zRAe}$XjW#ij4SRYDDI^&CdMBBeU3YhamShduL<;GGb>OCS?KAJ4IkHu|#G129}bmb3S{Y}@}>H06a@sn=0(XAhJ z`#arfrMus#q=oK%rTbs#!DrEfpX?zgdZ=^!;Vs>VRotV_qDPxWkCNe0n&44p*GI1l z9w(?g&ceq>=R7eKJh69v62P8>qJk{`)R(>ND}Ff~Uyf3FDW8gE2caxer7R!I3M6H> zq3kXzdkkgeQ1(_(R*Pkgg0dD?&Wp=cjLN&Qawk#wU|IRN{5Mj~4ve&y@|*qmCWCu( z1m9GP-Zb-Xehc1eu(vk&b_RPp58ejJ-mb*A>!!Ue6TPhstQZ3oF_>Q1bhGmuxCv1%)*c4XBq%GF-1R>0S)DAgK3tufYGV6BZ>Z9l9X ztYEWa?Lw?wDyvo87~$gDR6%Vv)aC@&X+xbJt23Hdw;Jl!O6s;s>tdvJX{;`Tt2+X9 z$N0K4d|iRK?uK&RGu66Uje1q6*TnkwSpPv#|4AV`{>&PbSwm;mU7+D` zl&6x)6jGf`YLiHPB6XfX8vdl|M_S`a+n02FNY|V6#*zM5>N185Mw6iz8F`ZNC|Bcc zJ&iA+@e`TxdoZq+m>dJS$q9i;p|VLOn$&?w<9t&;G8<3kzGUG;mfmDF?x*!ABkN$Y z2_oD1WH(R8Zllm{C)({Xvpd7=E^v0m0=t_kb}zuLoU{7?cJ*l2iuRgde;4d4c>7wk zZvgvGGW&K-2Q_ri0SCQ34rfIUCFt-#-Ju4YAajdZxK2tp>wLObDO}K zsMlYai%iMI09{PL#opd!D!POUT^jybYpX+V4eHaGT-C`nM z2wOIy8ynFdMhw&(;g2Jx2u1|Jh=mp-5*y2{jHfjNmS|%B_K{6^^HtHgbD)jIaS$lRzPbc2fRpRL` z_8f6f&UHkzs>tUqzMmvCYo^* zopE9xm^dFNZjwxlgNggyCO)T0r8M~&O?gUFpU||&j?m5 z?yMGm)?YyYj{zc@Eu20(5N0pcnZ1jjoyO13ygnz`YEBHyNo8}+;hYON=P5tu70&t0 z=Cr|_UxViM!?{Co?h>54QfF=w&P}}@7=VFGA#k}Ya6bed76g`J;7cyB1_SG1o|$Og zSeWO-$>)W^yiJ06J7C@khk0+Uj+@>${q3KyG6xNw$i;UZYL6BkCBEIh+Hu-MOR*$=bj z25k9dSbhzb*C{Rkp&P39JhUD|TXBU6t}s_y;esn%Ggo|v6+hW3F31N>=M-uD$}R@4@N^YO8BtjfHqkH(WDNYmGmwnI``)v{kT14(kSR>)b8Z zEfcPbW$Opx|Hf7Ixeey9VGC?H1{+QYH{|PYcq`aYiyIn(WH3vL?4J43lTmLu>>PlN+Yf_d4xj8{R$&0 zF`~NrZmrk5Tln2SVUHW`>ECxxgzBCY*mD>o=d;KiEHcU_vVf1`Sd=D2*+W!UVN@?^ z)L>cExUNx~L{WQ`qf#L1Fhu1+)cJ(yX@cl^5FKnAoq*9vlIY_YecCrh<`)xS6tjoL zM2lilAm$(!BhSK^V}h775L4JW<}t*SV$3Uwed!Tr#^RhYt`Cbl!s2oyzr^An$>QHYd_9){8VOnp6Sg`f z6!HnBnD83*jZxhP!GTvsC3w zDV}+SXKL_FJ)YHsvzE$d`=y+HBRpG6=RQzg4dqwU`6{~bo-S5W!8w3uGizJ9eFu2%3@YvAffm8*Z?nk!x#ExD-& zH_Zh%XX4G-N;ku~o7nvTG8cJDtGG`-OhP@X9L{Xh<7&A z-Eb<|ME5q*{V;kUr-YEZ5G;59n$CSa%D$cxe!ateePH+X54Hfba9oR+zKJ})O{CTd z^xdC+_<8?0jz3Oy{&CCkM;rY3W!+}RwONbWoS|)uv~4Q1&7hyt-G64m&tubnDd8^- z?w2n7a@6`Y9DaFmzsliP1^#-^eti(NYeBmX-)`jC?kkkH&tUCyuzj9udpfjdLi-V} z{iIj>ANbu#>$f5MZ7TiU4Szes@80m+mHRyaeh(A>9<%Frx#)N8$Ui;VpWfV`Ven@p z{_$adCK&!%Y4In8|C2#~(}@l#!gbK;-ySO+510RXr*~qaPR6X0eP4wS7<5`L>J%yK zl)+F2sKTQ*DjdA=Gh%zM4i1_J$3_d7KXHDtqgDg8vPq+Yu zp&*Rc6P{sWPY{n$7tfN3V@2Y_C_Vy`454OU&>SGpbl2Am;Pi4)uTZA<3yp{w%cYve zrV`_sXgp8JcpaInCDS!q%}{2hA~e$mvo2s}$eEdeSvStiX@uE&G~0+~+t4h6H;duS zbvbimEprz%?}z4tG|c^i%&&m?b!J|oYW@bzYry;$T0mzD&7Kw`!D6%mo)BA1C(CJM zHI=NVkj-SWos@9%fkG<&%Xw6XPQuw+?7RY;S7|#(fpaoArwX03!1)+BpP*jH$>kXJ z&Y?a>$@K`iWmDfQ>X%9V57U4Q8kkOl4$vccNFB| z04?ZG3;WTczO>klmblW=KD4YiEq9^NUbMoQRyxtDp0v6Lt?5o{9cf)RTHlp6IFQ_) z!t7|HEp4))aBJFZMO!Rss|9T{r|o96!<2TK&@N+&FrwXtw8wzPt285%!TDL&XD{v5`i7sOwI_}dVF zS2ey&5??Eh|Az6uA^xv0LEx0&M*CbB?K`Hm@49H;1D8Z0BuXGr#wV&nqJ~al4=&LK z66bS?3k8Ymh4RF0n7C6lF-eek4icY95-U0PJbf|Ocp)>rU3zU9-euk+uqZ^;$ z3>hw?GQu$<0y6e+88MjgM3(VhcK9wFmcLX#{0R?#<+1>?1gcrukfjG%1}w`&C94-? z^?|IVkhM~nC5Nm{vaBe~itC^jJ9P|5xSIa@F%isd9=&VJXN3ds2lIiz|_m5!?{Ilgh|@mq2@eix446C8hv$DfOi zSI~*Kbn*?IDyQ5sI{li?yrQ!&>D&v-drtYKbp9D#cuE(aP{Cs=d_&?#R)b3P&1X)EM_&KShGr0vk_|c zV9jf+spe|r^;kQR)dq-aW5u-xG;1$$wb!6wCp7F6G^FV^6e>5|hlbC}4J2q3bZ+b- zYP5nzduZ&&8l6~UA7~t;)Hn_sCn!{6N{!1UjSbLr6k1fFMP1ZVsnPNST7LU}o6f$? zT*6X<(<*bg1}p)dSl20yyW;fJH+k6E%Gq4*;f+ctA;JK$gYMp@e_*0FMY z3T@@k_Ey+di){^m{#iD5ZP!}Rz6aW4vHc>pmtgw?_4euxyw~~PdVWX$|L>lk4V{j1 zolYWj2j~mXzXvQ6!A^i!xdt2qILY7)z&U^$2zMAf;ySc%pEQsu@*WV4HPIEYKj1)3 z^xKIwz#jrWTO<&GK=GksC+LTQ!7{-Z5{?!Kr-+0L41~J`!c$C`N1}5iK1-4_Bt1>C z+@DH0q7|l>3Ux^)gCsKCPezGk zypK#0$TXhJ;>bLfEMmwqnyjM8I+ASmlI*NnSh(MlA8;< zxe43`%iP9ZyMn4X7<2c++lR z3qNQJ4m!XM%CZ~uRxqdz1~t&&dKywkLu+Z+2Xe2W;ng&viag%SX=G)^s4Fj?M;G2ciP-vgX)7W(E0eb0bz5sbe9 zzzRuVgDCJ9&g-N;PeXm470h$goHrcidGhmoVBTw( zS0f4v!k}oYpi3Ci4MK)thzAStgOG__$TY){^$@aYc*s3L$Wu9l{DK7t3piTHXc5w4 zpe3DX3DMHOwCoQp|4pIowBi@7{7I|YX!Q?T^PSeV(z@#g_rcF&0 z{)sk!oV#TSZVA=gk|)|yylLxo(bmVf^*L=TjoH3bZ~Jc8o*TTwfZJgPJDhPxZ%)4B z1MH}0yApBNVceB1*mV*jEFr=MBL+(%ydYwXO2l;Ch}96WZf-;sMl^NZZ9sdv&|ZCt z)ax7RkC9UZkpU37L^<*~M84GTa4=|Bj*{|Gy;<}=K?eaggGFa6Md!2Fd7{{8S!|kR z>@AGFk8wQ4i7`&DE{ikn64wvo22%V0O6Wf!Ar%sCV8R_tctraiQsM*Jf1i@>g(k}} zIh-Y5gygIKDf*HWD@?I-NeN&nOJxU(#Ru=e!S8VJCmupL#91D)H$3D8hgQI$RotNh zJXEZC==p~9X!DcZroKvy#rNq=A(*vy#8;9%J`h*}Vbm-e~rS zlRQ$xM_SJweZv1k@=VVg=|uy*tfyCX^tzVhWgn=#hTc@u+bXJfPwy%xSN6lo!J^8A zmX-UUazDLKq^f;Xoj^75^dXLFW8>=_pw5Za^})IVtSi#0drtMG+V!8X{tGpHmNoo= zMmKC60G~#(Ph(6zEn}Y|RX!b(d^!$IzFgBp`1Y5zGQQQ3wYr$K%BObls9gT7YxnwJ zU0c>2WUjqrO9iskpsX%aHs_RWP&o{gHwlz?fO0M>=j~US&QwBdRN_fBu1IYHsryrB zKhhXan!XRT%$SxvXmuT|wN$26gIe{dts&AjQPb}KRi}qcXC3Is6+fk@^9psUMFxY= zVCYtZ5}|=Y(O?gTT?K|NXy`i3FaiwsC>y4L;bEv843)#JE0^(=aq!`U@IyX+D3E@* z1$CBCXU)}(WOZX~>(+YI-NL#OmAW@r&xz~R2G$2-{UWY@1vP|H<8u1A?EEJO_~gWW z>Vu!cBgIxx`w2LkscWl-X}z_Io1y{SANr3Q1r~ zJ$YIJv{sX%fRg4YzV_Z7+^B!Cqg*=Hxf*gUrUOhbj-6%f0jvB~R5=Pk{uLF%DSa`hbQe3UefkY@H(tzbQ^ZK$R=x^yE?H0dV&eri3oUK-fz5uhO(eU0WS>9| z@zgbry2X-X40VsD9#PaYlAQLQavqA#YnZcK=DZ)A)2LS}xuj6kGs|J-Tj9(PlV+`9v*b7{ zoSSuuo0U%ic{KYR%{fbR&rsm$u7U3*@_8tmr$O^OQ;<3rr2RDLqeie8gEcX@3j`Yp zf-O4-_w@+gW*&STg3m$lbqrRl6P|IwuOPS_f-3~UA5?>XsD#J_A)O(_l`ZH53m7hN z!vzDl1*60ZromznzgSgmv8iCO4J>ws#bK~`lVtI3SiGN>B+^p(z6ncP_@zH#nVWdo z2v{~sBh(&3yYZne9-$jCbgSD6Jy>C)v7+Cx6^;E?I*C^1!pcHeS){h|F|K?;tDe*9 zQd;wj);^_mPiXyP+VF_v57&ixVc0^;uze7gBn~?PVW)m=Jck>fNH)HgZES`;BF8<0 zVb4&>o^f*AOV^Ik7*Zw~G~341@l-a0;V3q~el6ma7_f@iewYaa5KNBn;cJ64h_-Ga$&5<6xXw;#X z|0&L4kfRJaHzDUXms7##)Im<8O3oiV=7z@x!0Cf{Iz#nz5$0=(^G%iV9Wj3>%lE*1 zZy#9^5{u3T-7Cbl&5AtLW?g>im zp|l&8_Jz{^!%DZ=$V<;~&&R@ZZ^844Sa}5BkH_~D*!wwH$8mLHtTV>Cu8J#=tLp=G zW1-H6ubYTho`xtD@uo zYb1(?PKnqlLjv=7Sj0dfL<*Y-=bb)i9bPt<0L#rq8t(*CCL$z zW|J(7lrl*<3zTz6B$&!Wzmq;Z%uGe|3)v=5QaLDD@ydTFGeN?lUOAeju4 z$Y?(qCz8oNGEE?}cruS8i&(OZA**Pzjv|{#Ioa+dyFFyTn;asj>n`fHlN@(Y_wCeU z8}-~uPFu)%GxZ85mrc}rBlQU*S2?+DpuX#=-#Y5QmIkb$fvaiIDjK|!hOD5Wp)_nc zxi6#POKHRs@>onG7tyGN^k^qD3QVu?H;~K}(0zGIv@&j6#RfiXpUeFs&Lys|V7W0kpP1t?NhY`_cxv8_8WM ztPgGMO`BXOyccbDrY%miwI^-sLEF324oBMAjdpdV2nX72PkZcWuPsH|P?R-ATTzT9 z#ad9DImMe%f+_7Yp+sZaZ$wFklx#pLT_{zb()8$nE*;dNL)w(CMH!lOSc5Vadv8090K2fEOSE)ZS(O9g+Z z@Hbs*r=nj}{F5%X(Ul)`^*dc_rR(45Mho5iO1Hky?ay?lneH}G$tSw^k?uFrg9dt7 zPmk*8vEots28qj1L=N}C2m(T zvVrd1I4rtk3)oKu04VPP6EoWA-Y(H^HB1n>ICYfW>4PnR9@2y?3 zRG93F2W{b?I~*J#I5@`c;M&m#OQZ*1D8?Ul2q_%~r4NDh(U=|v>ET@Z1(tq=GA<82 zEU-P?lRLat<8U$@P8A-`q|C#Vl|k9*bmR~nJxDnR=vW#ZPbK+@6grtqr;;dl|L@ZY za5{yZJ|{eV+xm11cg6(HSi>1x=@}P1c&qyv`9)G2a_=*)?alk7*WLG|OSK8o8 zyUJC$ROzZNT)is0T1MAi)Ad($<0ajE(esu*-ZDzQ^_0K$3T_{j+%DvAU&GtK;Wp8o zzjXHx{4!Le@s@O?5a<>HkRv4%B`^6 zZdmzJNqG!ko``P?@NKbN^=$=v+rZv7&Fo;#Orm!asd56n_opg9svb`@zVyL|YQ3p$ z9MzAdhB4GQnm&5bCr@e`Ma?7Wvj=?{L0^Yci#vTAMy*5X`w;punA!%>&w=!70JZn0 z-~H%MU;67tpttR*BSH-L9Z9+^%m%B zi1f`x`onwbuca<)$Y3=Yt|FtAWW0h*LdkSFnJqhGZiVJ{1I-tJ`Es%O2QaT^R)AIl zC##{%Dp+E*f~-S#*#Owcz(!fk#vE;OBsTeIQ=n<{l5Ag)-0nHqmy*LX>iU$rJt4=( z)cq0lct|}Tkkfr~zDK=E$mK5ezC(R(lj|*VyGea-P`~Tc{~8UrN&~OZpvyG4n1&S5 z&`UI|klYJs_(d9VfjrLB$b1@=N1o@%>nx2vLt{?U*jyTSio8#f&k6E9PUGdr$S;Td zkJ5xAG%=edWzpnJnsS(?X3(^Bntq689Hf~CXjU2pq|)pZnv+a(lPGXM%}b>D`zR=Z zg5xP9juyny!Wdc4U#3TFR$YDHk1drOn(eZe6B0D-0kIq&-x^C#vD{%ClMB(>T zI>4azEyviE-Qej>h~iSOsAzF&#&*FLM7fmI=y)rNv^`Q$XJe}^Dkl5!Ap8Qtc1@9?Kx8#lv`tTx4x+;#Qe0G} zAfCX9XN$yfD3_>9B<4biTvZZAgn1YNju8)b9`agJt?-LEl@fKTV(?Y^$H3r+-?ce^sJ?AM~H{`maF04E5i- zbkRE2r9`t!71yO%(B%hqX%`x3qJb_N%mRaXU=YL^go_MfxsG*48gGz=21o4-o|D|L zl#HH{@l!H+LZ*+&>=Bti>}~;QA?RVz2Q2!7#XzzgKvw<9x*yr}C0jSLb0zyee+*wx|6eGcjo}kIaKBx&YVv%=kxn}P4?<_R@CbX_PRkX*Qxil zX?@ICA6Mw}n)Q*tQ|r?LeTccrlwA$bwGv&cRb79RTRZjrMg4wK|27)%g9d)5L9I0S z8x3ipp&1t1r=-LRwou>n_sz3$)=p$@3{Jk2ap8O=l_m3~fG5TXJdZDcW|D1lv#0j^mVI zv>dw0X@4>$B~kKzN=c;DeUz3!2jb~q936_K^cc#Bro&N`8A(}tDSHnc*-b|yC}$TP z+eycF(24DIavPo6O1WF;^kzB}PG>jKxs8+;M)`6&zkx2Sr;F>TU@aA{p-Zc&XcZN& zq{}PlN+?}jPS=)^{Q6S5v4n0erdx~X_CmU|fbNDk+)WbS&7zV_x_6lFXV8OmdU%K) z9i+zx=t&wqO{HfkRGLiBljz0%qL@f5Gw}SpMtF8+k{B6}|l&U$G4o{@iWI<~Hv<5-zQfOT+XkCY`a%kOxtvgt2 zG_=O{Yi;He_A6e(O4#q;dT9RRY*1%P*#F;u_c;d;6`K|!pRlM(O@U0Q~7b*GQ z2mea&Z{qx0_z9glPtYGZVX5+jY<|K?enK8ML7_1&ViT{y#E&qsNieb9a+0ZZQdgOL zlAF?`)!Zbx%A~#gq*QLwY00EZFzG5xy54iL049t0$;$SV-3%vB5l#*CV=yIRN)2=SJN%v258DQ6*j)k6+R7TB@{-C)5`(SmWf zz%P738Nc8={C^tu{vUq5w5E~PHqg3yT3<&S6eH#b3ag=w)wHRK!r#;8O4{;{wpP%# zx3v8Y?I@?6Wwh%xMZBWjFG;@V1?_!Kk);&%jG~{G#hjZOs|m4&5Zeo4d-JgaSgfaV z>{N_xV6n{*X998d;y4$DF2pEqvLtRH#4VM??Z>zSlDHg;xbJ+t4aU1+`~Vg|n#E7h zjt_(Qa6Uc`;}bFdFvOqY;`7Au4>A6UApR93Y{3Ni4opaMPAC^8e6-xx8TM(3_Zi>a z_X+p4h!RyHQC*a1DNXDN|0KU);vznAWtYTcabgxG9u+5^)k?f4OMC^1m6-TJCGoq; zej)Ccs_i$x{U)9FyO{2uEZiRg`xjd6kEf)#%gKI}GM-X>pQYKZN=xU`jzQW9xq8|a zNV^AV4@7A%1Zfq6510xLIKzQKaKKY^;58hm7NtudT}O~^q?9Ay>-S4H?Ohkt)o{q{D}UGu1Fti_7f7Wp>9* z7v;?1m^n%}bDl(=xePNm2{I#;GgC10B4pm-G9R+crwM}y%T?L;21kYJ3opZr+eMg+zGUi+4q2G^rTy(==Mmu;~}TJBdBCJ-E*h=!|1_K zdN_n04W`F~=*d8OI)I+_r_z4(yf3|QqnEDqst>*HO=T`r-izKi(_1I1=t=K-P-S;| z??_eMsJbiFIM4@ss41Ohoc%jS$R%<&Q@w4b>AYz!nx2!I zUKg4^l$pK((|4Td2R$>!nMs(Lih-E}m^t!hz3j{ac(eJ;EELUFqnVsH+k$306pS}_ zvuDig6`H-}%xciAjyL6XXgKf-njym9| z=kK^o>Zp*HZvw|HLdU(m9OVzNy9BzcS$B8y>b`?|Y^R>v$Z0D%Z=qhB$t9e6Z=yaM z$u*4J^%&QxC4cz2)4ZI#OucvIZ363^b8{PNt=qec9it^RAuzI0% z^*XK9sqjytBEPzb??_ZEk*&BlB^Mpw;u5&H4lZs`zZiuV z_nj|TY+Rs_S{IxsC=9kKOohTcD7=7$cUj>>)4~>3B!D83ph(rWs2>&$<%&G8Xa-j_ z_jIu?78|f)3oPyd#ZJn_n_2M=EZz^rX>>W2uB6b_WV)6_*Z0$n#1A(&;?1qHn=#^> zscl9?jDAcSx_=Z))6eQOS9yVwB#gTlCM^B zpOyTAdr0?z9(1Ay3USU~`$rD=sE6dyRd{q=^5`)>dfxYOXOKTO#K+w=9uLRIo`T0d zP-zO4=90=utaAFc%37#wg37P5N}~6FrBzB;)mu_EnpOEgwYOpQcD{PAZS^HqqXjj( zti}{-%q2D5pvE0)JXno4{9l()hJPri?*9n@@;`=u$p13{iUYhy(GsM)cra2D5ajy$m!`yXL$#?AD!oO&Wo7yD(bb8 zTvkx;Q0lXsT$hpCQtG>e`YopZi)g??8n}Q4h0x$&8WKc9=hLuxalZUX$o7v=Se)0+7djCz>qh5-Np672v}Nx(c=z&e_}cIfOYIQwSbIm$5SGtT)9bN&kEN+ol(ajt?f zIS2wrs|L=J1xCvP(?#PJtHNS+@nRcXJb_<4Lu>I$T)d8!tfi%EXxZxS%Z}r+T;*j~ zaM^8}Wi7no7Fe!oxZIH~cf#c^N0z@=4plV??TMj-AaodpdSIxhdct=jFqS*YxAj!m zc*>v1X-UH3+tDl5LH`t+9pMrYoGrEw&|#w`I{k*}t?i zgLb7;#37RJK1h2G(B3rfyel-#)?u8i&IbXsRbITt>QF*G!djpw9+au?So3%4@_&99FWNl)N==#6%l`Mb`d+f z0nUbLo=w2BNs_Z!c=o8{*)rkTDmW|uCOU_3jw?QQ)9KuAah^aWPaE{5<5$@vq3xi z6?W-prwFt<$?VRG?25qdrkP!%irpV(FXHUg&|X7eZ@}zL#P)U)`|Be6=V1R*#lFtL zLCah2ute3N6dhhE@|w`09@ce|tdmODX~Q}LT-OcPxw3Tw9oH?DtXmK3w)5-us>!u9 zbXwPdSP$t6}Izkwxpu;jU*;jL6&V8Jt^!NfkE)+bz29IwG9zQfyxCwT|UGx_`@f1AqfhQ9c4uZ3}((zb&K(n+6 zO23Joqt8i zA4Lr#snLTzj-XG&smYz1htcPu^koQr9ZW5Q=-WVQ9q|0SHh$Nae7C~ycD~_?+*n<2EBV4I~%n@i8OVB59?XiFBg9n)>Qg>5A& zZEx_WhVbW0!OsfypDoxPrrf@lZ%@GX{f_M=!uF@|Tf%;;*!&)>^xIpJGeLiR=&!=8 z)83ty0fi#1;%Ea<*Z{hsMo$^Nv{uyH(EqBtPX9Q#bX4NMo&wgL9I%t4W~ULhotAN( zHV*A{3p^sPQ{y)_{30xJ``g~_* z?#8}Ds3|V&YA6CKh$$w>?usA+DqNB^HWl(pSuYS!-po9ZbGwOvsHZLu6`dXgUy?UPh+ZjZE)>#B2kYZRDA4u{5hf zW(UFCN@VURGWP)Xw$(~=^Y(y193zqA97o4DZ5_*aj=RX( z3yi3sM(hP=1Cg^KziVT_ubo?k?9F$_v0Jg$I8v+*bwdQ=cKDvE5>H*8b^ z`@}B@{IZZ= zo|WHQ$nP`o+t2emlt|vz@%J+FzYhL482>xS|932z^vET^2?e;h1WK}~LH0aHs zYEjT3Cg>~Upi_dN3lMZo5Yz^<55Vk0!rAw!ISA&^qB&+ZbKI@xOrho+GM&>zo{Tta zG3S=`T#9TX2lHkPnwJgpR?VJw0nNJ$^L~qqUO+`>q3B%W=+h{=iH^Qx9o>$i9}4E1 zK#YirF?Ea?L&XFNVg{OgNv#~iw<30yd4&wa9n(kO1gxSZq81A-Y7Yo zNuGLH0VxE;i4ZjdG$<&SGKCdb^y;uKm?5M0o=tZj>BKaS2{Oy#Fg`RT**-^R%cZdVlwkQ4Sbj}Z zAlU!~8<~Qw)&+7XIKV5Yp$mRR1?{-74Zr*wUfGHz_wcH_xae2>${qabZM^yy{Ms%2 z`p@`pH}RUE@Ea}o%^P^_kN;e^4c2WJuG@>>+JlQL#U-|=WPqT=-K%5~lq5lkm?_DC zl3Y}>j4pWvN>+!Jd=Dk}sZyQrVYX2S8%Hx6#|_vR2k&=M?_*{YgEk4NO~%xwXO3;UN^NQtd>|P8 z!FcKef4tcbZ<&a*SXs zUbzs;NAb$X4K0tQ%X3lraNn__l@1(@OFPsRayxu9ieiVs4~H-G9OhI z;5{qw-sSk?W%!eP{AnJp%Ei?=cwaXD>?JJE!uvDv=Nb5mbo|dWd>|G7YbieXB0iLY zzm$ma;beRy3D+$7xYlNS?E$DgXkL2)YEO!4FYs!cq4sCHqkN~MUT`#pI+}@&7UHi8 zjvSjrADfE*Jq3ULJU%`d*9G8jCgK11<8S@&cN6i63AlbdKIx0U_ra&U@#%56!7IO^ z5*j{%hH9$eizyAi^BNh{D8x+y2|mLgdgeKF#>?!?3+T)Y=FHdBnR=Hq4}@oV4rhl_ zXT8wbv*_#2|jO(FBsvAhWL^QUl!sk0(_N^ukmWG)mdJd@XfB6yLzCP-XExO|%yyJxKxXrxtHo9j(-Q#)Q3q}5LSsN)NpjtflJs+ZaQN6i#_;19kE%C{sA4BY`k_beD@jE0T29u{IWEE=3XL{9%O zb&}gVT?Qw~F9VzndCsFL=W(9SxyU7ja(P?i@}ap)6}XN7S7)BQa#_wIquMGUkjr@)n`PC!8h8O*(GydVO{sl(ICh|Ut0u;sbj|ya>!pM%>hEcClQC~pRVe&1+K~c?usJo^!pQUGxG@3cV zbmk1v%(*Z#4rZ=^S+mjXNzCl&K%zH$5jA%wGj}h{m-+%-z1sl?HAqPJ<{3n($zEioSw zUxviBD6!al(R^yrLi0u0%pxhZ@WpeUX=8pK&hoNq2J2Jt6IEH@Va z8^m?4;&vo{gi@^Nloo1fIlXijT6zGM9;Dfu^qtgF?3e1dICUE(N&VC=waz;AsxY<9 zD$UR^%@)!ILD~{wS_Y)8;iZ*Wq>;PzKS8=Xq>rM~15DB*QTi;m^kOPqN~LdyjQNm} z2pNk_GO{6Kjc3LIql`|JxslE+r!sdzmJRu~3zan-vRvq_k^C(0HCbOmRt=q1hqAu4 z$hyj8Nm?N5KHc?_>Z0sLO!kYTv)^a3zkuvIl>MD+_9L4d8_OKG7jm+Va#jWAd}Wk# z4stH=a&B4YQbxJvyj;7Xxf88&BXM2?&JV}S!tnA?ydne_%t$TxoGLho3XVWQt$(4l zuy8mkbT%pUMuihi3PYiA?tsEP=fW)#{PJeJ@&hc{w1<7EC=0F1vtpmp-1DGlH&gVf zQPE*k^lvCSZc}u{wCElbFA)^K3B`YZwzwJ<*P>FIF12GypS3OZrAz(YOH=Jji&5!u zD6O|IZAH@8LAr*Pt_SIcVbX(0dW0wa8l-IkDTb3<>68B$aI%K1JADhMhoIBL%}#rx z(-U@_zKTw_@*5b`AcO`BXs}t`@IJp`8yPr74Tn)f?TCg}L8Ay7EunD$G(O8~9AVfv zhH4Ci#tf!0-=c9H)41QU@dr`kkEroy`zF3|lN~fUST~JDO$De)0!_!E=`?CO15M|k z=_1o4`ProD5u961pL+w&?H8T<7M-^ioF5G5hobYdsPot1{0;i|)?9!#}|JG3vA7`GQf`%34oZE39AkD>ND>-KAc_B%{_n^lJ)(_zKy z7zZ6bypHS8af8=!8$B9g_Gk<|nv5O=T0dHV9%WiQIz_%DfTn8N`Yh(HfHp|Ct|PpsQwXen@rEL{x1p6On9Hea%6TmzqHsNaZ^%q-D+H%)x*rR%raBA2!=c zv>+-hH&laHgA$0;{?hl5@Qi*|VxHT~-UV}EX=0i}4g1e=5V=E$+fV;c*wgjTen|a~ zJrpi01ELIp@?1AvssOMiXftx1_f5gYrGjy=M>b>DGB;27?p6gaY|3tL{$}4#_>q|eOvl*Gr2tE@T0fz^cEUj8~bst z8ODB)YgBPAYA$CqVY;!R4W$2QE+uhzo%~ElaBft+Di6}>?autmLc9Cx_>%4Z*zk3+ zX@!u>DkV(Q5_K4r*uGOe6q+Gai`AFYBZQ+CXq&5_PpBd!HS8S{6}swV%@mr1D5{sv zR>jm0&057qlnmDjd0&$BTdvL7Gh(`&DvCe4vsEfmDbT3rT(GA$*eDItNwuq-Hd4`f z^n_^#TNAI1>FKW~ts)<&&7vmYQm&7d>`B=iNZNd1)#W-Vt<}UW(=_Hs`}|nGnrUbojA8$F?aH+`sk7++nXG^+6WTH;4eKSeX0jS z(euZa2N%3=m^KCRUsDiQEHv?4d2I>(JSf#Vdb4>}|IJRe0INH-0CA%V3H(I?7 zwA=LlHEM;vQJS{(BTr)HUA3a+7SlbVTk*S@2twbbjM{QG*b3{_s+5Jyl`5(Ar8<#_ z=oYRf?_Vf%#HghZr`Q47-B^pF8)`@T!ZlU+u9LDaWcxN=)yYr_HNA z*YR9INt}1+)p=ch^?C1l9;2%Kzp8_e;a7i~&C~H;Uvbd}s`6LXtiH?maVQnibmOLB zj-%cxs~{rE`Z$#bnwD#5&{CkZL?2!soaN)j(H1>Xq+!`k z(Z|pmToGCo1(8!guDSmO?1(*49_|XGkc8U|6_3hHrK`GWfBALk6mn>`!g8Z@75zEq zq`3dm^GZVo+eX|^zJMnyDOMJ!xfp<3Dh znwz9gfI_`OwSq4lidoW~I zgyza&Em;gBw2ABBRg%iCzXh|%>4ah^BdqcZe}^zO^>_y!uw*VWI6_h~cD^GodKb=; zu~T)qMZ_m>QHf{o^AO1EWx9~<+jSweJ9QyfKhlMuy}FPgs4imbjKJ|d?tpM>eupVCSn z!~egs)LAqCH2;-#p^ubnx~;Bo>Ol4(hIrB!g#xcl)%CQcjjH8q3sET7X3(Z!amqtK oU7tPEUtI@CTWDy4D$>A6V|!I@e1UBql>GCHU`tY2{Uu2GFBItq!vFvP delta 24596 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 Date: Fri, 13 Dec 2024 14:02:07 -0800 Subject: [PATCH 79/83] Add country codes of Canda and EU countries to the satellite allowed list Bug: 384090903 Flag: EXEMPT 'config change' Test manual system test (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:082a2916a960487477740d443ce202147a29fb14) Merged-In: I04874b0cae5eec15abb6fd8d71507461e2a45de6 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 2666950..86d2906 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 false + + + pixel.ntn + + + + 1001 + From 97ce99c87c33a0ad538810ce39e41d41a42d081e Mon Sep 17 00:00:00 2001 From: Daniel Lowe Date: Thu, 5 Dec 2024 19:24:37 +0000 Subject: [PATCH 81/83] [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 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:036b6007f848863ae9139b3d534b6f76b8586131) Merged-In: I0d5a3133081afb68ce14fae3a40468c58284f495 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 2d3c2c61845b26dfba78d32d819244c4f607c5b2 Mon Sep 17 00:00:00 2001 From: Jack Wu Date: Thu, 19 Dec 2024 19:58:31 +0800 Subject: [PATCH 82/83] 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 Signed-off-by: Jack Wu (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:bd99c7ad2fa8182bd0b8747ee88aa1f7f552b88f) Merged-In: I4e1feff739abeb22bbffe03bf8d903962eade26f Change-Id: I4e1feff739abeb22bbffe03bf8d903962eade26f --- dumpstate/dump_power.cpp | 54 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp index 24e5cf2..7316b27 100644 --- a/dumpstate/dump_power.cpp +++ b/dumpstate/dump_power.cpp @@ -356,7 +356,7 @@ void dumpBatteryHealth() { } void dumpBatteryDefend() { - const char* defendConfig [][4] { + const char* defendConfig [][3] { {"TRICKLE-DEFEND Config", "/sys/devices/platform/google,battery/power_supply/battery/", "bd_"}, {"DWELL-DEFEND Config", "/sys/devices/platform/google,charger/", "charge_s"}, @@ -401,6 +401,57 @@ void dumpBatteryDefend() { } } +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; @@ -1072,6 +1123,7 @@ int main() { dumpPdEngine(); dumpBatteryHealth(); dumpBatteryDefend(); + dumpBatteryCaretaker(); dumpChg(); dumpChgUserDebug(); dumpScratchpad(); From debbc81ff06e27ea75deae8412026496e57f53f0 Mon Sep 17 00:00:00 2001 From: Aishwarya Mallampati Date: Mon, 13 Jan 2025 18:53:00 +0000 Subject: [PATCH 83/83] Reject e911 call during non-emergency satellite session. Bug: 388926638 Test: 388938575 Flag: EXEMPT bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:874fd7ae28b9c251d71c9bc46bf356bedad8ed72) Merged-In: I96d6fa20881d69f7f624d892cb273a4536137c0e Change-Id: I96d6fa20881d69f7f624d892cb273a4536137c0e --- overlay/packages/services/Telephony/res/values/config.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/overlay/packages/services/Telephony/res/values/config.xml b/overlay/packages/services/Telephony/res/values/config.xml index 2a0cf01..030b476 100644 --- a/overlay/packages/services/Telephony/res/values/config.xml +++ b/overlay/packages/services/Telephony/res/values/config.xml @@ -31,4 +31,7 @@ com.shannon.rcsservice + + + false