Make SUPPORT_MULTI_SIM recognizable in bp am: f34142e084

Original change: https://android-review.googlesource.com/c/device/google/gs101/+/3115519

Change-Id: Ie9a88d4f5265538e22b72382d042ecfe603f12ea
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk
index d94a619..2fdbc7f 100644
--- a/BoardConfig-common.mk
+++ b/BoardConfig-common.mk
@@ -163,6 +163,7 @@
 # Video Codec
 ########################
 # 1. Exynos C2
+BOARD_USE_CODEC2_HIDL_1_2 := true
 BOARD_USE_CSC_FILTER := false
 BOARD_USE_DEC_SW_CSC := true
 BOARD_USE_ENC_SW_CSC := true
@@ -347,6 +348,14 @@
 
 BOARD_VENDOR_KERNEL_MODULES_BLOCKLIST_FILE := $(KERNEL_MODULE_DIR)/vendor_dlkm.modules.blocklist
 
+# Since Pixel 6/6pro doesn't have a system_dlkm partition, the GKI modules are
+# on the vendor_dlkm partition. In order to allow them to load properly, we
+# need to retain the module signature which would normally get stripped during
+# packaging. Disable stripping the vendor_dlkm modules to retain the GKI
+# modules' signature. Note, the pixel kernel builds always strip the modules in
+# favor of saving space via the kleaf property: strip_modules = True.
+BOARD_DO_NOT_STRIP_VENDOR_MODULES := true
+
 # Prebuilt kernel modules that are *not* listed in vendor_boot.modules.load
 BOARD_PREBUILT_VENDOR_RAMDISK_KERNEL_MODULES = fips140/fips140.ko
 BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD_EXTRA = $(foreach k,$(BOARD_PREBUILT_VENDOR_RAMDISK_KERNEL_MODULES),$(if $(wildcard $(KERNEL_MODULE_DIR)/$(k)), $(k)))
diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc
index 13a01b2..d0aaabe 100644
--- a/conf/init.gs101.rc
+++ b/conf/init.gs101.rc
@@ -16,12 +16,8 @@
     write /proc/vendor_sched/teo_util_threshold "1024 1024 1024"
 
     # Boot time fs tuning
-    write /sys/block/sda/queue/iostats 0
     write /sys/block/sda/queue/scheduler bfq
     write /sys/block/sda/queue/iosched/slice_idle 0
-    write /sys/block/sda/queue/nr_requests 256
-    write /dev/sys/fs/by-name/userdata/data_io_flag 56
-    write /dev/sys/fs/by-name/userdata/node_io_flag 56
 
     chown system system /proc/vendor_sched/groups/bg/set_task_group
     chown system system /proc/vendor_sched/groups/cam/set_task_group
@@ -101,15 +97,6 @@
     chmod 0220 /proc/vendor_sched/pmu_poll_enable
     chmod 0220 /proc/vendor_sched/pmu_poll_time
 
-    wait /dev/block/platform/${ro.boot.boot_devices}
-    symlink /dev/block/platform/${ro.boot.boot_devices} /dev/block/bootdevice
-
-    # to access UFS/eMMC sysfs directly
-    symlink /sys/devices/platform/${ro.boot.boot_devices} /dev/sys/block/bootdevice
-
-    # Disable UFS powersaving
-    write /dev/sys/block/bootdevice/clkgate_enable 0
-
     start vendor.keymaster-3-0
 
     # ZRAM setup
@@ -161,11 +148,11 @@
     mkdir /dev/socket/pdx/system/vr/sensors 0775 system system
 
     # Boot time 183626384
-    write /proc/vendor_sched/groups/ta/uclamp_min 161
+    write /proc/vendor_sched/groups/ta/uclamp_min 201
     write /proc/vendor_sched/groups/ta/prefer_idle 1
-    write /proc/vendor_sched/groups/fg/uclamp_min 161
+    write /proc/vendor_sched/groups/fg/uclamp_min 201
     write /proc/vendor_sched/groups/fg/prefer_idle 1
-    write /proc/vendor_sched/groups/sys/uclamp_min 161
+    write /proc/vendor_sched/groups/sys/uclamp_min 201
     write /proc/vendor_sched/groups/sys/prefer_idle 1
 
     # governor setting
@@ -247,6 +234,7 @@
     chown system system /dev/logbuffer_pca9468
     chown system system /dev/logbuffer_cpm
     chown system system /dev/logbuffer_bd
+    chown system system /dev/logbuffer_cpif
 
     # Dump maxfg
     chown system system /sys/class/power_supply/maxfg/m5_model_state
@@ -298,6 +286,7 @@
 
     # BatteryHealthData
     chown system system /sys/class/power_supply/battery/first_usage_date
+    chown system system /sys/class/power_supply/battery/swelling_data
 
     # Battery Defender
     chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_cnt
@@ -323,6 +312,7 @@
     chown system system /sys/devices/platform/google,charger/bd_trigger_time
     chown system system /sys/devices/platform/google,charger/bd_trigger_voltage
     chown system system /sys/devices/platform/google,charger/bd_clear
+    chown system system /sys/devices/platform/google,charger/bd_state
     chown system system /sys/devices/platform/google,charger/charge_start_level
     chown system system /sys/devices/platform/google,charger/charge_stop_level
     chown system system /sys/devices/platform/google,cpm/dc_ctl
@@ -500,15 +490,6 @@
     # Wait for insmod_sh to finish all common modules
     wait_for_prop vendor.common.modules.ready 1
 
-    # Permission for Health Storage HAL
-    chown system system /dev/sys/block/bootdevice/manual_gc
-
-    # Permission for Pixelstats
-    chown system system /dev/sys/block/bootdevice/slowio_read_cnt
-    chown system system /dev/sys/block/bootdevice/slowio_write_cnt
-    chown system system /dev/sys/block/bootdevice/slowio_unmap_cnt
-    chown system system /dev/sys/block/bootdevice/slowio_sync_cnt
-
 on boot
 
     # Allow to access debugfs for system:system
@@ -601,6 +582,7 @@
     chown system system /sys/class/backlight/panel0-backlight/dimming_on
     chown system system /sys/class/backlight/panel0-backlight/hbm_mode
     chown system system /sys/class/backlight/panel0-backlight/local_hbm_mode
+    chown system system /sys/class/backlight/panel0-backlight/allow_wakeup_by_state_change
     chown system system /sys/devices/platform/exynos-drm/primary-panel/gamma
     chown system system /sys/devices/platform/exynos-drm/primary-panel/min_vrefresh
     chown system system /sys/devices/platform/exynos-drm/primary-panel/idle_delay_ms
@@ -696,20 +678,6 @@
     write /sys/devices/system/cpu/cpu7/online 0
 
 on property:sys.boot_completed=1
-
-    # Runtime fs tuning
-    write /sys/block/sda/queue/nr_requests 64
-    write /sys/block/sda/queue/iostats 1
-    write /dev/sys/fs/by-name/userdata/data_io_flag 8
-    write /dev/sys/fs/by-name/userdata/node_io_flag 8
-
-    # Permission for Pixelstats
-    chown system system /dev/sys/fs/by-name/userdata/compr_written_block
-    chown system system /dev/sys/fs/by-name/userdata/compr_saved_block
-    chown system system /dev/sys/fs/by-name/userdata/compr_new_inode
-    chown system system /dev/sys/fs/by-name/userdata/gc_segment_mode
-    chown system system /dev/sys/fs/by-name/userdata/gc_reclaimed_segments
-
     # Enable ZRAM on boot_complete
     swapon_all /vendor/etc/fstab.${ro.board.platform}
     write /proc/sys/vm/swappiness 60
@@ -721,9 +689,6 @@
     write /proc/sys/vm/dirty_expire_centisecs 3000
     write /proc/sys/vm/dirty_background_ratio 10
 
-    # Enable UFS powersaving
-    write /dev/sys/block/bootdevice/clkgate_enable 1
-
     # Reset DDR frequency
     write /sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/exynos_data/cancel_boot_freq 1
     write /sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/exynos_data/cancel_boot_freq 1
@@ -884,7 +849,7 @@
     # BCL
     write /sys/devices/virtual/pmic/mitigation/clock_ratio/tpu_light_clk_ratio 0x80041c3
     write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu2_light_clk_ratio 0xfff041c3
-    write /sys/devices/virtual/pmic/mitigation/clock_ratio/gpu_heavy_clk_ratio 0xfff04381
+    write /sys/devices/virtual/pmic/mitigation/clock_ratio/gpu_heavy_clk_ratio 0xfff04385
     write /sys/devices/virtual/pmic/mitigation/clock_ratio/tpu_heavy_clk_ratio 0xfff041c1
     write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu2_heavy_clk_ratio 0xfff041c0
     write /dev/thermal/tz-by-name/smpl_gm/policy user_space
@@ -974,16 +939,6 @@
     mkdir /dev/thermal/cdev-by-name 0750 system system
     start vendor.thermal.symlinks
 
-    # Runtime fs tuning
-    write /sys/block/sda/queue/nr_requests 64
-    write /sys/block/sda/queue/iostats 1
-    write /sys/block/sda/queue/iosched/slice_idle 0
-    write /dev/sys/fs/by-name/userdata/data_io_flag 8
-    write /dev/sys/fs/by-name/userdata/node_io_flag 8
-
-    # Enable UFS powersaving
-    write /dev/sys/block/bootdevice/clkgate_enable 1
-
     # Cancel boot devfreq and uclamp
     write /sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/exynos_data/cancel_boot_freq 1
     write /sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/exynos_data/cancel_boot_freq 1
@@ -1003,10 +958,7 @@
 on property:vendor.disable.bcl.control=0
     write /sys/devices/virtual/pmic/mitigation/instruction/enable_mitigation 1
 
-# UFS
 on property:ro.boot.mode=charger && property:init.svc.vendor.charger=running
-    # Enable UFS powersaving in Off Mode Charger
-    write /dev/sys/block/bootdevice/clkgate_enable 1
     # Disable dock-defend in Off Mode Charger
     write /sys/devices/platform/google,charger/dd_state -1
 
diff --git a/conf/ueventd.gs101.rc b/conf/ueventd.gs101.rc
index 3a8e39d..4321e73 100644
--- a/conf/ueventd.gs101.rc
+++ b/conf/ueventd.gs101.rc
@@ -55,7 +55,6 @@
 /dev/video55              0666   system     graphics
 /dev/g2d                  0660   system     graphics
 /dev/fimg2d               0666   system     graphics
-/dev/i2c-2                0660   system     system
 /dev/HPD                  0660   system     system
 
 # wfd
@@ -221,31 +220,24 @@
 /sys/devices/platform/11110000.usb/11110000.dwc3/xhci-hcd-exynos.4.auto/usb2/2-1/*/*/leds/* multi_intensity 0664 system system
 
 # Dump Battery EEPROM history for pixelstats
-/sys/devices/platform/10970000.hsi2c/i2c-7/7-0050 eeprom 0644 system system
+/sys/devices/platform/10970000.hsi2c/i2c-8/8-0050 eeprom 0644 system system
 /dev/battery_history                                     0644 system system
 
 # ODPM
 /sys/bus/iio/devices/iio:device*  enabled_rails 0660 system system
 
 # USB
-/sys/class/typec/port0 power_role                                                       664 root system
-/sys/class/typec/port0 data_role                                                        664 root system
-/sys/class/typec/port0 port_type                                                        664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc contaminant_detection       664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc usb_limit_accessory_current 664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc usb_limit_accessory_enable  664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc usb_limit_sink_current      664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc usb_limit_sink_enable       664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc usb_limit_source_enable     664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc update_sdp_enum_timeout     664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025 contaminant_detection                 664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025 usb_limit_accessory_current           664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025 usb_limit_accessory_enable            664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025 usb_limit_sink_current                664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025 usb_limit_sink_enable                 664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025 usb_limit_source_enable               664 root system
-/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025 update_sdp_enum_timeout               664 root system
-/sys/devices/platform/11110000.usb dwc3_exynos_otg_b_sess                               664 root system
-/sys/devices/platform/11110000.usb dwc3_exynos_otg_id                                   664 root system
-/sys/devices/platform/11110000.usb usb_data_enabled                                     664 root system
-/sys/devices/platform/google,pogo move_data_to_usb                                      664 root system
+/sys/class/typec/port0 power_role                                                        664 root system
+/sys/class/typec/port0 data_role                                                         664 root system
+/sys/class/typec/port0 port_type                                                         664 root system
+/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025 contaminant_detection                664 root system
+/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025 usb_limit_accessory_current          664 root system
+/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025 usb_limit_accessory_enable           664 root system
+/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025 usb_limit_sink_current               664 root system
+/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025 usb_limit_sink_enable                664 root system
+/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025 usb_limit_source_enable              664 root system
+/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025 update_sdp_enum_timeout              664 root system
+/sys/devices/platform/11110000.usb dwc3_exynos_otg_b_sess                                664 root system
+/sys/devices/platform/11110000.usb dwc3_exynos_otg_id                                    664 root system
+/sys/devices/platform/11110000.usb usb_data_enabled                                      664 root system
+/sys/devices/platform/google,pogo move_data_to_usb                                       664 root system
diff --git a/default-permissions.xml b/default-permissions.xml
index ff0094a..fb5ed94 100644
--- a/default-permissions.xml
+++ b/default-permissions.xml
@@ -54,6 +54,8 @@
     <exception package="com.google.android.apps.camera.services">
         <!-- Camera -->
         <permission name="android.permission.CAMERA" fixed="false"/>
+        <!-- Camera Connectivity -->
+        <permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"/>
         <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
         <permission name="android.permission.BLUETOOTH_CONNECT" fixed="false"/>
         <permission name="android.permission.BLUETOOTH_SCAN" fixed="false"/>
diff --git a/device.mk b/device.mk
index c50291b..de10f47 100644
--- a/device.mk
+++ b/device.mk
@@ -36,6 +36,10 @@
 include device/google/gs-common/misc_writer/misc_writer.mk
 include device/google/gs-common/gyotaku_app/gyotaku.mk
 include device/google/gs-common/bootctrl/bootctrl_aidl.mk
+include device/google/gs-common/betterbug/betterbug.mk
+ifneq ($(filter oriole raven bluejay, $(TARGET_PRODUCT)),)
+  include device/google/gs-common/bcmbt/dump/dumplog.mk
+endif
 
 TARGET_BOARD_PLATFORM := gs101
 DEVICE_IS_64BIT_ONLY ?= $(if $(filter %_64,$(TARGET_PRODUCT)),true,false)
@@ -66,7 +70,7 @@
 	hardware/google/pixel \
 	device/google/gs101 \
 	device/google/gs101/powerstats \
-	system/chre/host/hal_generic \
+	vendor/google_devices/common/chre/host/hal \
 	vendor/google/whitechapel/tools \
 	vendor/google/camera \
 	vendor/google/interfaces \
@@ -254,8 +258,7 @@
 
 PRODUCT_VENDOR_PROPERTIES += \
 	ro.opengles.version=196610 \
-	graphics.gpu.profiler.support=true \
-	debug.renderengine.backend=skiaglthreaded
+	graphics.gpu.profiler.support=true
 
 # b/295257834 Add HDR shaders to SurfaceFlinger's pre-warming cache
 PRODUCT_VENDOR_PROPERTIES += ro.surface_flinger.prime_shader_cache.ultrahdr=1
@@ -338,24 +341,20 @@
 PRODUCT_PACKAGES += \
 	messaging
 
-# Contexthub HAL
-PRODUCT_PACKAGES += \
-    android.hardware.contexthub-service.generic
-
-# CHRE tools
+# CHRE
+## tools
 ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
 PRODUCT_PACKAGES += \
 	chre_power_test_client \
-	chre_test_client
+	chre_test_client \
+	chre_aidl_hal_client
 endif
 
+## HAL
+include device/google/gs-common/chre/hal.mk
 PRODUCT_COPY_FILES += \
 	frameworks/native/data/etc/android.hardware.context_hub.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.context_hub.xml
-
-# Enable the CHRE Daemon
-CHRE_USF_DAEMON_ENABLED := true
 PRODUCT_PACKAGES += \
-	chre \
 	preloaded_nanoapps.json
 
 # Filesystem management tools
@@ -512,7 +511,7 @@
 # for now include gralloc here. should come from hardware/google_devices/exynos5
 PRODUCT_PACKAGES += \
 	android.hardware.graphics.mapper@4.0-impl \
-	android.hardware.graphics.allocator-V2-service
+	android.hardware.graphics.allocator-V1-service
 
 PRODUCT_PACKAGES += \
 	android.hardware.memtrack-service.pixel \
@@ -677,10 +676,8 @@
 PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.protected_contents=true
 PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.display_update_imminent_timeout_ms=50
 
-# force to blend in P3 mode
 PRODUCT_PROPERTY_OVERRIDES += \
-	persist.sys.sf.native_mode=2 \
-	persist.sys.sf.color_mode=9
+	persist.sys.sf.native_mode=2
 PRODUCT_COPY_FILES += \
 	device/google/gs101/display/display_colordata_cal0.pb:$(TARGET_COPY_OUT_VENDOR)/etc/display_colordata_cal0.pb
 
@@ -728,30 +725,14 @@
 $(call soong_config_set,bigo,soc,gs101)
 
 # 1. Codec 2.0
-# exynos service
-PRODUCT_SOONG_NAMESPACES += vendor/samsung_slsi/codec2
+# for settings used by different C2 hal
+include device/google/gs-common/mediacodec/common/mediacodec_common.mk
+# for Exynos C2 Hal
+include device/google/gs-common/mediacodec/samsung/mediacodec_samsung.mk
 
 PRODUCT_COPY_FILES += \
 	device/google/gs101/media_codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \
 
-PRODUCT_PACKAGES += \
-	samsung.hardware.media.c2@1.0-service \
-	codec2.vendor.base.policy \
-	codec2.vendor.ext.policy \
-	libExynosC2ComponentStore \
-	libExynosC2H264Dec \
-	libExynosC2H264Enc \
-	libExynosC2HevcDec \
-	libExynosC2HevcEnc \
-	libExynosC2Mpeg4Dec \
-	libExynosC2Mpeg4Enc \
-	libExynosC2H263Dec \
-	libExynosC2H263Enc \
-	libExynosC2Vp8Dec \
-	libExynosC2Vp8Enc \
-	libExynosC2Vp9Dec \
-	libExynosC2Vp9Enc
-
 PRODUCT_PROPERTY_OVERRIDES += \
     debug.stagefright.c2-poolmask=458752 \
     debug.c2.use_dmabufheaps=1 \
@@ -1038,6 +1019,14 @@
 include device/google/gs-common/edgetpu/edgetpu.mk
 # Config variables for TPU chip on device.
 $(call soong_config_set,edgetpu_config,chip,abrolhos)
+# Include the edgetpu targets defined the namespaces below into the final image.
+PRODUCT_SOONG_NAMESPACES += \
+	vendor/google_devices/gs101/proprietary/gchips/tpu/metrics \
+	vendor/google_devices/gs101/proprietary/gchips/tpu/tflite_delegate \
+	vendor/google_devices/gs101/proprietary/gchips/tpu/darwinn_logging_service \
+	vendor/google_devices/gs101/proprietary/gchips/tpu/nnapi_stable_aidl \
+	vendor/google_devices/gs101/proprietary/gchips/tpu/aidl \
+	vendor/google_devices/gs101/proprietary/gchips/tpu/hal
 # TPU firmware
 PRODUCT_PACKAGES += edgetpu-abrolhos.fw
 
@@ -1127,3 +1116,6 @@
 
 # Hardware Info Collection
 include hardware/google/pixel/HardwareInfo/HardwareInfo.mk
+
+# Touch service
+include device/google/gs-common/touch/twoshay/aidl_gs101.mk
diff --git a/device_framework_matrix_product.xml b/device_framework_matrix_product.xml
index 0533fb6..e365bbb 100644
--- a/device_framework_matrix_product.xml
+++ b/device_framework_matrix_product.xml
@@ -85,14 +85,6 @@
         </interface>
     </hal>
     <hal format="aidl" optional="true">
-        <name>com.google.input</name>
-        <version>2</version>
-        <interface>
-            <name>ITouchContextService</name>
-            <instance>default</instance>
-        </interface>
-    </hal>
-    <hal format="aidl" optional="true">
         <name>hardware.qorvo.uwb</name>
         <version>2</version>
         <interface>
@@ -142,13 +134,6 @@
             <instance>sced0</instance>
         </interface>
     </hal>
-    <hal format="aidl" optional="true">
-        <name>com.google.pixel.modem.logmasklibrary</name>
-        <interface>
-            <name>ILiboemserviceProxy</name>
-            <instance>default</instance>
-        </interface>
-    </hal>
     <hal format="hidl" optional="true">
         <name>vendor.samsung_slsi.telephony.hardware.radioExternal</name>
         <version>1.1</version>
diff --git a/dumpstate/dump_gs101.sh b/dumpstate/dump_gs101.sh
index 43eaeaa..e5a7225 100644
--- a/dumpstate/dump_gs101.sh
+++ b/dumpstate/dump_gs101.sh
@@ -35,11 +35,7 @@
 echo "\n------ Power supply property pca9486-mains ------"
 cat "/sys/class/power_supply/pca9468-mains/uevent"
 echo "\n------ Power supply property tcpm ------"
-if [ -e "/sys/class/power_supply/tcpm-source-psy-i2c-max77759tcpc/uevent" ]; then
-  cat "/sys/class/power_supply/tcpm-source-psy-i2c-max77759tcpc/uevent"
-elif [ -e "/sys/class/power_supply/tcpm-source-psy-8-0025/uevent" ]; then
-  cat "/sys/class/power_supply/tcpm-source-psy-8-0025/uevent"
-fi
+cat /sys/class/power_supply/tcpm-source-psy-*/uevent
 echo "\n------ Power supply property usb ------"
 cat "/sys/class/power_supply/usb/uevent"
 echo "\n------ Power supply property wireless ------"
@@ -93,10 +89,7 @@
 fi
 
 echo "\n------ TCPC ------"
-max77759tcpc_path="/sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc"
-if [ -e "/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025" ]; then
-  max77759tcpc_path="/sys/devices/platform/10d50000.hsi2c/i2c-8/8-0025"
-fi
+max77759tcpc_path="/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025"
 echo "registers:"
 cat $max77759tcpc_path/registers
 echo "frs:"
@@ -123,6 +116,8 @@
 
 echo "\n------ Battery Health ------"
 cat "/sys/class/power_supply/battery/health_index_stats"
+echo "\n------ Battery Health SoC Residency ------"
+cat "/sys/class/power_supply/battery/swelling_data"
 echo "\n------ BMS ------"
 cat "/dev/logbuffer_ssoc"
 echo "\n------ TTF ------"
@@ -159,14 +154,15 @@
   echo "$f: `cat $f`"
 done
 
+echo "\n------ DC_registers dump ------"
+cat "/sys/class/power_supply/pca9468-mains/device/registers_dump"
+echo "\n------ max77759_chg registers dump ------"
+cat "/sys/class/power_supply/main-charger/device/registers_dump"
+echo "\n------ max77729_pmic registers dump ------"
+cat /sys/devices/platform/10d50000.hsi2c/i2c-*/*-0066/registers_dump
+
 if [ $build_type = "userdebug" ]
 then
-  echo "\n------ DC_registers dump ------"
-  cat "/sys/class/power_supply/pca9468-mains/device/registers_dump"
-  echo "\n------ max77759_chg registers dump ------"
-  cat "/d/max77759_chg/registers"
-  echo "\n------ max77729_pmic registers dump ------"
-  cat "/d/max77729_pmic/registers"
   echo "\n------ Charging table dump ------"
   cat "/d/google_battery/chg_raw_profile"
 
@@ -204,9 +200,9 @@
 fi
 
 echo "\n------ Battery EEPROM ------"
-if [ -e "/sys/devices/platform/10970000.hsi2c/i2c-7/7-0050/eeprom" ]
+if [ -e "/sys/devices/platform/10970000.hsi2c/i2c-8/8-0050/eeprom" ]
 then
-  xxd /sys/devices/platform/10970000.hsi2c/i2c-7/7-0050/eeprom
+  xxd /sys/devices/platform/10970000.hsi2c/i2c-8/8-0050/eeprom
 fi
 
 echo "\n------ Charger Stats ------"
diff --git a/location/gps.cer b/location/gps.cer
index 934e0c5..eab842b 100644
--- a/location/gps.cer
+++ b/location/gps.cer
@@ -159,3 +159,17 @@
 Zyr0AhgiuTWrjtUEOGx2qJVwAsHkpqtlN+DaGT08dT64LvIf0bfGvmtm++/WEDWJ
 HInwg85pGm+sEkYbYFRBD0woPBsL3g==
 -----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp
+Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2
+MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ
+bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG
+ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS
+7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp
+0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS
+B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49
+BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ
+LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4
+DXZDjC5Ty3zfDBeWUA==
+-----END CERTIFICATE-----
diff --git a/manifest.xml b/manifest.xml
index fdc85f3..02a3b59 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -34,13 +34,5 @@
         <name>android.hardware.boot</name>
         <fqname>IBootControl/default</fqname>
     </hal>
-    <hal format="aidl">
-        <name>com.google.input</name>
-        <version>2</version>
-        <interface>
-            <name>ITouchContextService</name>
-            <instance>default</instance>
-        </interface>
-    </hal>
     <kernel target-level="6"/>
 </manifest>
diff --git a/manifest_64.xml b/manifest_64.xml
index 5f6d83a..d8d7b11 100644
--- a/manifest_64.xml
+++ b/manifest_64.xml
@@ -26,13 +26,5 @@
        <transport>hwbinder</transport>
        <fqname>@1.3::IDevice/google-edgetpu</fqname>
     </hal>
-    <hal format="aidl">
-        <name>com.google.input</name>
-        <version>2</version>
-        <interface>
-            <name>ITouchContextService</name>
-            <instance>default</instance>
-        </interface>
-    </hal>
     <kernel target-level="6"/>
 </manifest>
diff --git a/manifest_media.xml b/manifest_media.xml
index 3ed9e24..38e56ba 100644
--- a/manifest_media.xml
+++ b/manifest_media.xml
@@ -5,8 +5,16 @@
         <version>1.0</version>
         <interface>
             <name>IComponentStore</name>
-            <instance>default</instance>
             <instance>default1</instance>
         </interface>
     </hal>
+    <hal format="hidl">
+        <name>android.hardware.media.c2</name>
+        <transport>hwbinder</transport>
+        <version>1.2</version>
+        <interface>
+            <name>IComponentStore</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
 </manifest>
diff --git a/manifest_media_aosp.xml b/manifest_media_aosp.xml
index 3bc347c..9a1a3db 100644
--- a/manifest_media_aosp.xml
+++ b/manifest_media_aosp.xml
@@ -2,7 +2,7 @@
     <hal format="hidl">
         <name>android.hardware.media.c2</name>
         <transport>hwbinder</transport>
-        <version>1.0</version>
+        <version>1.2</version>
         <interface>
             <name>IComponentStore</name>
             <instance>default</instance>
diff --git a/media_codecs_performance_c2.xml b/media_codecs_performance_c2.xml
index fc03c53..49f131f 100644
--- a/media_codecs_performance_c2.xml
+++ b/media_codecs_performance_c2.xml
@@ -175,10 +175,10 @@
             <Limit name="measured-frame-rate-1280x720" range="38-40" />
         </MediaCodec>
         <MediaCodec name="c2.android.av1-dav1d.decoder" type="video/av01" update="true">
-            <Limit name="measured-frame-rate-352x288" range="353-362" />
-            <Limit name="measured-frame-rate-640x360" range="178-210" />
-            <Limit name="measured-frame-rate-720x480" range="101-129" />
-            <Limit name="measured-frame-rate-1280x720" range="38-40" />
+            <Limit name="measured-frame-rate-352x288" range="735-974" />
+            <Limit name="measured-frame-rate-640x360" range="426-627" />
+            <Limit name="measured-frame-rate-720x480" range="406-434" />
+            <Limit name="measured-frame-rate-1280x720" range="148-159" />
          </MediaCodec>
     </Decoders>
 
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index bd9ebd6..a32fd94 100644
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -297,6 +297,7 @@
         <item>com.zhiliaoapp.musically:0.07</item>
         <item>com.bilibili.app.in:0.07</item>
         <item>com.twitter.android:0.07</item>
+        <item>com.google.android.youtube:0.07</item>
     </string-array>
 
     <!-- Pre-scale volume at volume step 1 for Absolute Volume -->
diff --git a/pixelstats/pixelstats-vendor.gs101.rc b/pixelstats/pixelstats-vendor.gs101.rc
index 70d875e..4c8ca20 100644
--- a/pixelstats/pixelstats-vendor.gs101.rc
+++ b/pixelstats/pixelstats-vendor.gs101.rc
@@ -1,4 +1,5 @@
 on property:sys.boot_completed=1
+	chown system system /sys/class/power_supply/maxfg/fg_learning_events
 	start vendor.pixelstats_vendor
 on post-fs-data
     chown system system /sys/kernel/metrics/irq/stats_reset
diff --git a/pixelstats/service.cpp b/pixelstats/service.cpp
index a939740..d4b803a 100644
--- a/pixelstats/service.cpp
+++ b/pixelstats/service.cpp
@@ -69,12 +69,23 @@
                 "/sys/kernel/metrics/thermal/tr_by_group/spmic/stats_reset"
             }
         },
-        .GMSRPath = "/sys/class/power_supply/maxfg/gmsr"
+        .GMSRPath = {
+            "/sys/class/power_supply/maxfg/gmsr",
+            "/sys/class/power_supply/maxfg_base/gmsr",
+        },
 };
 
 const struct UeventListener::UeventPaths ueventPaths = {
         .AudioUevent = "/devices/virtual/amcs/amcs",
-        .TypeCPartnerUevent = "PRODUCT_TYPE="};
+        .TypeCPartnerUevent = "PRODUCT_TYPE=",
+        .FGLearningPath = {
+            "/sys/class/power_supply/maxfg/fg_learning_events"
+        },
+        .FwUpdatePath = "",
+        .FGModelLoadingPath = {
+            "/sys/class/power_supply/maxfg/m5_model_state"
+        }
+};
 
 int main() {
     LOG(INFO) << "starting PixelStats";
diff --git a/powerstats/Gs101CommonDataProviders.cpp b/powerstats/Gs101CommonDataProviders.cpp
index 035810b..615bb16 100644
--- a/powerstats/Gs101CommonDataProviders.cpp
+++ b/powerstats/Gs101CommonDataProviders.cpp
@@ -18,6 +18,7 @@
 #include <Gs101CommonDataProviders.h>
 #include "AocStateResidencyDataProvider.h"
 #include "DevfreqStateResidencyDataProvider.h"
+#include <DisplayMrrStateResidencyDataProvider.h>
 #include "DvfsStateResidencyDataProvider.h"
 #include "UfsStateResidencyDataProvider.h"
 #include <dataproviders/GenericStateResidencyDataProvider.h>
@@ -34,6 +35,7 @@
 
 using aidl::android::hardware::power::stats::AocStateResidencyDataProvider;
 using aidl::android::hardware::power::stats::DevfreqStateResidencyDataProvider;
+using aidl::android::hardware::power::stats::DisplayMrrStateResidencyDataProvider;
 using aidl::android::hardware::power::stats::DvfsStateResidencyDataProvider;
 using aidl::android::hardware::power::stats::UfsStateResidencyDataProvider;
 using aidl::android::hardware::power::stats::EnergyConsumerType;
@@ -669,6 +671,11 @@
     p->addStateResidencyDataProvider(std::move(pixelSdp));
 }
 
+void addDisplayMrr(std::shared_ptr<PowerStats> p) {
+    p->addStateResidencyDataProvider(std::make_unique<DisplayMrrStateResidencyDataProvider>(
+            "Display", "/sys/class/drm/card0/device/primary-panel/"));
+}
+
 void addGs101CommonDataProviders(std::shared_ptr<PowerStats> p) {
     setEnergyMeter(p);
 
diff --git a/powerstats/include/Gs101CommonDataProviders.h b/powerstats/include/Gs101CommonDataProviders.h
index 98e6953..469d514 100644
--- a/powerstats/include/Gs101CommonDataProviders.h
+++ b/powerstats/include/Gs101CommonDataProviders.h
@@ -22,4 +22,5 @@
 
 void addGs101CommonDataProviders(std::shared_ptr<PowerStats> p);
 
+void addDisplayMrr(std::shared_ptr<PowerStats> p);
 void addNFC(std::shared_ptr<PowerStats> p, const std::string& path);
diff --git a/rro_overlays/WifiOverlay/res/values/config.xml b/rro_overlays/WifiOverlay/res/values/config.xml
index 7a58d7d..454d7f8 100644
--- a/rro_overlays/WifiOverlay/res/values/config.xml
+++ b/rro_overlays/WifiOverlay/res/values/config.xml
@@ -159,4 +159,12 @@
          regulatory approval (for example, FCC pre-approval is required according to "594280 D01
          Software Configuration Control v02r01").-->
     <bool translatable="false" name ="config_wifiUpdateCountryCodeFromScanResultGeneric">true</bool>
+
+    <!-- Boolean indicating performing a partial initial scan is enabled -->
+    <bool translatable="false" name="config_wifiEnablePartialInitialScan">true</bool>
+
+    <!-- Configure the max number of new channels to add into the initial partial scan list per network.
+         If equals to 0, it means there's no limit on the max number of channels to include per network.-->
+    <integer translatable="false" name="config_wifiInitialPartialScanMaxNewChannelsPerNetwork">3</integer>
+
 </resources>
diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp
index a898b05..b8c5c8e 100644
--- a/usb/usb/Usb.cpp
+++ b/usb/usb/Usb.cpp
@@ -564,6 +564,11 @@
         ALOGE("pthread_condattr_destroy failed: %s", strerror(errno));
         abort();
     }
+
+    ALOGI("feature flag enable_usb_data_compliance_warning: %d",
+          usb_flags::enable_usb_data_compliance_warning());
+    ALOGI("feature flag enable_input_power_limited_warning: %d",
+          usb_flags::enable_input_power_limited_warning());
 }
 
 ScopedAStatus Usb::switchRole(const string& in_portName, const PortRole& in_role,
diff --git a/usb/usb/UsbDataSessionMonitor.cpp b/usb/usb/UsbDataSessionMonitor.cpp
index 77defb3..bff52f0 100644
--- a/usb/usb/UsbDataSessionMonitor.cpp
+++ b/usb/usb/UsbDataSessionMonitor.cpp
@@ -26,6 +26,7 @@
 #include <pixelstats/StatsHelper.h>
 #include <pixelusb/CommonUtils.h>
 #include <sys/epoll.h>
+#include <sys/timerfd.h>
 #include <utils/Log.h>
 
 #include <regex>
@@ -48,6 +49,9 @@
 #define UEVENT_MSG_LEN 2048
 #define USB_STATE_MAX_LEN 20
 #define DATA_ROLE_MAX_LEN 10
+#define WARNING_SURFACE_DELAY_SEC 5
+#define ENUM_FAIL_DEFAULT_COUNT_THRESHOLD 3
+#define DEVICE_FLAKY_CONNECTION_CONFIGURED_COUNT_THRESHOLD 5
 
 constexpr char kUdcConfigfsPath[] = "/config/usb_gadget/g1/UDC";
 constexpr char kNotAttachedState[] = "not attached\n";
@@ -115,6 +119,15 @@
     if (addEpollFd(epollFd, ueventFd))
         abort();
 
+    unique_fd timerFd(timerfd_create(CLOCK_BOOTTIME, TFD_NONBLOCK));
+    if (timerFd.get() == -1) {
+        ALOGE("create timerFd failed");
+        abort();
+    }
+
+    if (addEpollFd(epollFd, timerFd))
+        abort();
+
     if (addEpollFile(epollFd.get(), dataRolePath, mDataRoleFd) != 0) {
         ALOGE("monitor data role failed");
         abort();
@@ -139,6 +152,7 @@
 
     mEpollFd = std::move(epollFd);
     mUeventFd = std::move(ueventFd);
+    mTimerFd = std::move(timerFd);
     mUpdatePortStatusCb = updatePortStatusCb;
 
     if (ReadFileToString(kUdcConfigfsPath, &udc) && !udc.empty())
@@ -150,6 +164,9 @@
         ALOGE("pthread creation failed %d", errno);
         abort();
     }
+
+    ALOGI("feature flag enable_report_usb_data_compliance_warning: %d",
+          usb_flags::enable_report_usb_data_compliance_warning());
 }
 
 UsbDataSessionMonitor::~UsbDataSessionMonitor() {}
@@ -223,13 +240,55 @@
 
 void UsbDataSessionMonitor::evaluateComplianceWarning() {
     std::set<ComplianceWarning> newWarningSet;
+    int elapsedTimeSec;
 
-    // TODO: add heuristics and update newWarningSet
-    if (mDataRole == PortDataRole::DEVICE && mUdcBind) {
-    } else if (mDataRole == PortDataRole::HOST) {
+    elapsedTimeSec =
+        std::chrono::duration_cast<std::chrono::seconds>(boot_clock::now() - mDataSessionStart)
+            .count();
+
+    if (elapsedTimeSec >= WARNING_SURFACE_DELAY_SEC) {
+        if (mDataRole == PortDataRole::DEVICE && mUdcBind) {
+            int configuredCount = std::count(mDeviceState.states.begin(),
+                                             mDeviceState.states.end(), kConfiguredState);
+            int defaultCount =
+                std::count(mDeviceState.states.begin(), mDeviceState.states.end(), kDefaultState);
+
+            if (configuredCount == 0 && defaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD)
+                newWarningSet.insert(ComplianceWarning::ENUMERATION_FAIL);
+
+            if (configuredCount > DEVICE_FLAKY_CONNECTION_CONFIGURED_COUNT_THRESHOLD)
+                newWarningSet.insert(ComplianceWarning::FLAKY_CONNECTION);
+        } else if (mDataRole == PortDataRole::HOST) {
+            int host1StateCount = mHost1State.states.size();
+            int host1ConfiguredCount =
+                std::count(mHost1State.states.begin(), mHost1State.states.end(), kConfiguredState);
+            int host1DefaultCount =
+                std::count(mHost1State.states.begin(), mHost1State.states.end(), kDefaultState);
+            int host2StateCount = mHost2State.states.size();
+            int host2ConfiguredCount =
+                std::count(mHost2State.states.begin(), mHost2State.states.end(), kConfiguredState);
+            int host2DefaultCount =
+                std::count(mHost2State.states.begin(), mHost2State.states.end(), kDefaultState);
+
+            if (host1ConfiguredCount == 0 && host2ConfiguredCount == 0 &&
+                (host1DefaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD ||
+                 host2DefaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD))
+                newWarningSet.insert(ComplianceWarning::ENUMERATION_FAIL);
+
+            if (host1StateCount == 1 && mHost1State.states.front() == kNotAttachedState &&
+                host2StateCount == 1 && mHost2State.states.front() == kNotAttachedState)
+                newWarningSet.insert(ComplianceWarning::MISSING_DATA_LINES);
+        }
     }
 
     if (newWarningSet != mWarningSet) {
+        std::string newWarningString;
+
+        for (auto e : newWarningSet) {
+            newWarningString += toString(e) + " ";
+        }
+        ALOGI("Usb data compliance warning changed to: %s", newWarningString.c_str());
+
         mWarningSet = newWarningSet;
         notifyComplianceWarning();
     }
@@ -259,6 +318,26 @@
     evaluateComplianceWarning();
 }
 
+void UsbDataSessionMonitor::setupNewSession() {
+    mWarningSet.clear();
+    mDataSessionStart = boot_clock::now();
+
+    if (mDataRole == PortDataRole::DEVICE) {
+        clearDeviceStateEvents(&mDeviceState);
+    } else if (mDataRole == PortDataRole::HOST) {
+        clearDeviceStateEvents(&mHost1State);
+        clearDeviceStateEvents(&mHost2State);
+    }
+
+    if (mDataRole != PortDataRole::NONE) {
+        struct itimerspec delay = itimerspec();
+        delay.it_value.tv_sec = WARNING_SURFACE_DELAY_SEC;
+        int ret = timerfd_settime(mTimerFd.get(), 0, &delay, NULL);
+        if (ret < 0)
+            ALOGE("timerfd_settime failed err:%d", errno);
+    }
+}
+
 void UsbDataSessionMonitor::handleDataRoleEvent() {
     int n;
     PortDataRole newDataRole;
@@ -283,17 +362,8 @@
             reportUsbDataSessionMetrics();
         }
 
-        // Set up for the new data session
-        mWarningSet.clear();
         mDataRole = newDataRole;
-        mDataSessionStart = boot_clock::now();
-
-        if (newDataRole == PortDataRole::DEVICE) {
-            clearDeviceStateEvents(&mDeviceState);
-        } else if (newDataRole == PortDataRole::HOST) {
-            clearDeviceStateEvents(&mHost1State);
-            clearDeviceStateEvents(&mHost2State);
-        }
+        setupNewSession();
     }
 }
 
@@ -328,8 +398,7 @@
 
         } else if (!mUdcBind && newUdcBind) {
             // Gadget soft pullup: reset and start accounting for a new data session.
-            clearDeviceStateEvents(&mDeviceState);
-            mDataSessionStart = boot_clock::now();
+            setupNewSession();
         }
     }
 
@@ -383,6 +452,23 @@
     }
 }
 
+void UsbDataSessionMonitor::handleTimerEvent() {
+    int byteRead;
+    uint64_t numExpiration;
+
+    byteRead = read(mTimerFd.get(), &numExpiration, sizeof(numExpiration));
+
+    if (byteRead != sizeof(numExpiration)) {
+        ALOGE("incorrect read size");
+    }
+
+    if (numExpiration != 1) {
+        ALOGE("incorrect expiration count");
+    }
+
+    evaluateComplianceWarning();
+}
+
 void *UsbDataSessionMonitor::monitorThread(void *param) {
     UsbDataSessionMonitor *monitor = (UsbDataSessionMonitor *)param;
     struct epoll_event events[64];
@@ -400,6 +486,8 @@
         for (int n = 0; n < nevents; ++n) {
             if (events[n].data.fd == monitor->mUeventFd.get()) {
                 monitor->handleUevent();
+            } else if (events[n].data.fd == monitor->mTimerFd.get()) {
+                monitor->handleTimerEvent();
             } else if (events[n].data.fd == monitor->mDataRoleFd.get()) {
                 monitor->handleDataRoleEvent();
             } else if (events[n].data.fd == monitor->mDeviceState.fd.get()) {
diff --git a/usb/usb/UsbDataSessionMonitor.h b/usb/usb/UsbDataSessionMonitor.h
index 596f378..aced8a4 100644
--- a/usb/usb/UsbDataSessionMonitor.h
+++ b/usb/usb/UsbDataSessionMonitor.h
@@ -75,9 +75,11 @@
 
     static void *monitorThread(void *param);
     void handleUevent();
+    void handleTimerEvent();
     void handleDataRoleEvent();
     void handleDeviceStateEvent(struct usbDeviceState *deviceState);
     void clearDeviceStateEvents(struct usbDeviceState *deviceState);
+    void setupNewSession();
     void reportUsbDataSessionMetrics();
     void evaluateComplianceWarning();
     void notifyComplianceWarning();
@@ -86,6 +88,7 @@
     pthread_t mMonitor;
     unique_fd mEpollFd;
     unique_fd mUeventFd;
+    unique_fd mTimerFd;
     unique_fd mDataRoleFd;
     struct usbDeviceState mDeviceState;
     struct usbDeviceState mHost1State;