Merge Android 14 QPR1

Merged-In: I7a1fec0331c5bddabd4f9edabcfda9b137f7a452
Bug: 315507370
Change-Id: I91520d419d9d0913b5d73b842edde3f375c202b2
diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk
index 7883c20..70e9d64 100644
--- a/BoardConfig-common.mk
+++ b/BoardConfig-common.mk
@@ -321,16 +321,6 @@
 # H/W align restriction of MM IPs
 BOARD_EXYNOS_S10B_FORMAT_ALIGN := 64
 
-# NeuralNetworks
-GPU_SOURCE_PRESENT := $(wildcard vendor/arm/mali/valhall)
-GPU_PREBUILD_PRESENT := $(wildcard vendor/google_devices/gs101/prebuilts/gpu/libs)
-ifneq (,$(strip $(GPU_SOURCE_PRESENT) $(GPU_PREBUILD_PRESENT)))
-ARMNN_COMPUTE_CL_ENABLE := 1
-else
-ARMNN_COMPUTE_CL_ENABLE := 0
-endif
-ARMNN_COMPUTE_NEON_ENABLE := 1
-
 # Boot.img
 BOARD_RAMDISK_USE_LZ4     := true
 #BOARD_KERNEL_BASE        := 0x80000000
diff --git a/conf/fstab.gs101.in b/conf/fstab.gs101.in
index 5ad2c51..0aa5fae 100644
--- a/conf/fstab.gs101.in
+++ b/conf/fstab.gs101.in
@@ -4,16 +4,16 @@
 # specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
 #
 #<src>                                                   <mnt_point>                 <type>  <mnt_flags and options>  <fs_mgr_flags>
-system                                                   /system                     ext4    ro,barrier=1             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128
-system_ext                                               /system_ext                 ext4    ro,barrier=1             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128
-product                                                  /product                    ext4    ro,barrier=1             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128
-vendor                                                   /vendor                     ext4    ro,barrier=1             wait,slotselect,avb=vbmeta_vendor,logical,first_stage_mount,readahead_size_kb=128
-vendor_dlkm                                              /vendor_dlkm                ext4    ro,barrier=1             wait,slotselect,avb=vbmeta,avb_keys=no_such_key,logical,first_stage_mount
+system                                                   /system                     ext4    noatime,ro             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128
+system_ext                                               /system_ext                 ext4    noatime,ro             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128
+product                                                  /product                    ext4    noatime,ro             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128
+vendor                                                   /vendor                     ext4    noatime,ro             wait,slotselect,avb=vbmeta_vendor,logical,first_stage_mount,readahead_size_kb=128
+vendor_dlkm                                              /vendor_dlkm                ext4    noatime,ro             wait,slotselect,avb=vbmeta,avb_keys=no_such_key,logical,first_stage_mount
 /dev/block/platform/14700000.ufs/by-name/boot            /boot                       emmc    defaults                 slotselect,avb=boot,first_stage_mount
 /dev/block/platform/14700000.ufs/by-name/efs             /mnt/vendor/efs             ext4    defaults,noatime,rw      wait,check,formattable
 /dev/block/platform/14700000.ufs/by-name/efs_backup      /mnt/vendor/efs_backup      ext4    defaults,noatime,rw      wait,check,formattable
 /dev/block/platform/14700000.ufs/by-name/modem_userdata  /mnt/vendor/modem_userdata  ext4    defaults,noatime,rw      wait,check,formattable
-/dev/block/platform/14700000.ufs/by-name/modem           /mnt/vendor/modem_img       ext4    ro,defaults,context=u:object_r:modem_img_file:s0,barrier=1    wait,slotselect
+/dev/block/platform/14700000.ufs/by-name/modem           /mnt/vendor/modem_img       ext4    noatime,ro,context=u:object_r:modem_img_file:s0    wait,slotselect
 /dev/block/platform/14700000.ufs/by-name/misc            /misc                       emmc    defaults                 wait
 /dev/block/platform/14700000.ufs/by-name/metadata        /metadata                   ext4    noatime,nosuid,nodev,data=journal,commit=1    wait,check,formattable,first_stage_mount,metadata_csum
 /dev/block/platform/14700000.ufs/by-name/pvmfw           /pvmfw                      emmc    defaults                 wait,slotselect,avb=pvmfw,first_stage_mount
diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc
index 16acb95..9b0e133 100644
--- a/conf/init.gs101.rc
+++ b/conf/init.gs101.rc
@@ -12,6 +12,8 @@
 
     # Set teo as cpu idle governor
     write /sys/devices/system/cpu/cpuidle/current_governor teo
+    # Disable util-awareness
+    write /proc/vendor_sched/teo_util_threshold "1024 1024 1024"
 
     # Boot time fs tuning
     write /sys/block/sda/queue/iostats 0
@@ -159,11 +161,11 @@
     mkdir /dev/socket/pdx/system/vr/sensors 0775 system system
 
     # Boot time 183626384
-    write /proc/vendor_sched/ta_uclamp_min 1024
+    write /proc/vendor_sched/ta_uclamp_min 161
     write /proc/vendor_sched/ta_prefer_idle 1
-    write /proc/vendor_sched/fg_uclamp_min 1024
+    write /proc/vendor_sched/fg_uclamp_min 161
     write /proc/vendor_sched/fg_prefer_idle 1
-    write /proc/vendor_sched/sys_uclamp_min 1024
+    write /proc/vendor_sched/sys_uclamp_min 161
     write /proc/vendor_sched/sys_prefer_idle 1
 
     # governor setting
@@ -717,7 +719,7 @@
 
     # Enable ZRAM on boot_complete
     swapon_all /vendor/etc/fstab.${ro.board.platform}
-    write /proc/sys/vm/swappiness 100
+    write /proc/sys/vm/swappiness 60
 
     # Force empty CMA
     write /sys/kernel/vendor_mm/cma/farawimg/force_empty 1
@@ -876,6 +878,7 @@
     chown bluetooth system /proc/bluetooth/sleep/btwake
     chown bluetooth system /proc/bluetooth/sleep/lpm
     chown bluetooth system /proc/bluetooth/sleep/btwrite
+    mkdir /data/vendor/bluetooth 0770 bluetooth system
 
 # ODPM
 on fs
@@ -995,6 +998,29 @@
     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
+    write /proc/vendor_sched/ta_uclamp_min 0
+    write /proc/vendor_sched/ta_prefer_idle 0
+    write /proc/vendor_sched/fg_uclamp_min 0
+    write /proc/vendor_sched/fg_prefer_idle 0
+    write /proc/vendor_sched/sys_uclamp_min 0
+    write /proc/vendor_sched/sys_prefer_idle 0
+
+    # Enable SICD
+    write /sys/devices/system/cpu/cpupm/cpupm/sicd 1
+
 on property:vendor.disable.bcl.control=1
     write /sys/devices/virtual/pmic/mitigation/instruction/enable_mitigation 0
 
diff --git a/conf/init.gs101.usb.rc b/conf/init.gs101.usb.rc
index 110d1b7..724019e 100644
--- a/conf/init.gs101.usb.rc
+++ b/conf/init.gs101.usb.rc
@@ -81,8 +81,28 @@
     mkdir /config/usb_gadget/g1/functions/uvc.0/control/header/h
     symlink /config/usb_gadget/g1/functions/uvc.0/control/header/h /config/usb_gadget/g1/functions/uvc.0/control/class/fs/h
     symlink /config/usb_gadget/g1/functions/uvc.0/control/header/h /config/usb_gadget/g1/functions/uvc.0/control/class/ss/h
-    # advertise 720p resolution for webcam encoded as mjpeg
     mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m
+    # advertise 360p resolution for webcam encoded as mjpeg
+    mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wHeight 360
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wWidth 640
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxVideoFrameBufferSize 460800
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwDefaultFrameInterval 333333
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwFrameInterval "166666
+333333
+416666
+666666"
+    # advertise 480p resolution for webcam encoded as mjpeg
+    mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wHeight 480
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wWidth 640
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxVideoFrameBufferSize 614400
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwDefaultFrameInterval 333333
+    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwFrameInterval "166666
+333333
+416666
+666666"
+    # advertise 720p resolution for webcam encoded as mjpeg
     mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p
     write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wHeight 720
     write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wWidth 1280
@@ -109,6 +129,48 @@
     symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/fs/h
     symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/hs/h
     symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/ss/h
+    # remove write permissions for 'others'
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/header/h/bcdUVC
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/header/h/dwClockFrequency
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bSourceID
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/function_name
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_interval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_maxburst
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_maxpacket
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/bmCapabilities
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwDefaultFrameInterval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwFrameInterval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxBitRate
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMinBitRate
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/bmCapabilities
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwDefaultFrameInterval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwFrameInterval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxBitRate
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxVideoFrameBufferSize
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMinBitRate
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wHeight
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wWidth
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/bmCapabilities
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwDefaultFrameInterval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwFrameInterval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxBitRate
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxVideoFrameBufferSize
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMinBitRate
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wHeight
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wWidth
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bmCapabilities
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwDefaultFrameInterval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwFrameInterval
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxBitRate
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMinBitRate
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wHeight
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wWidth
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bDefaultFrameIndex
+    chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmaControls
 
     # chown file/folder permission
     chown system system /config/usb_gadget/
@@ -249,6 +311,26 @@
     chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMinBitRate
     chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight
     chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/bFrameIndex
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/bmCapabilities
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwDefaultFrameInterval
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwFrameInterval
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxBitRate
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxVideoFrameBufferSize
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMinBitRate
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wHeight
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wWidth
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/bFrameIndex
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/bmCapabilities
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwDefaultFrameInterval
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwFrameInterval
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxBitRate
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxVideoFrameBufferSize
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMinBitRate
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wHeight
+    chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wWidth
     chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p
     chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bFrameIndex
     chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bmCapabilities
@@ -322,6 +404,7 @@
     write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "midi"
     symlink /config/usb_gadget/g1/functions/midi.gs5 /config/usb_gadget/g1/configs/b.1/f1
     write /config/usb_gadget/g1/UDC ${sys.usb.controller}
+    write /sys/class/typec/port0/device/update_sdp_enum_timeout 0x1
     setprop sys.usb.state ${sys.usb.config}
 
 on property:vendor.usb.contaminantdisable=true
diff --git a/conf/ueventd.gs101.rc b/conf/ueventd.gs101.rc
index 5ed8fca..5e0b58e 100644
--- a/conf/ueventd.gs101.rc
+++ b/conf/ueventd.gs101.rc
@@ -76,7 +76,7 @@
 
 # jpeg
 /dev/m2m1shot_jpeg	      0660   media      media
-/dev/video12              0660   system     system
+/dev/video12              0666   system     system
 
 # audio
 /dev/seiren                     0660   system     audio
diff --git a/default-permissions.xml b/default-permissions.xml
index 3c2063a..ff0094a 100644
--- a/default-permissions.xml
+++ b/default-permissions.xml
@@ -54,6 +54,9 @@
     <exception package="com.google.android.apps.camera.services">
         <!-- Camera -->
         <permission name="android.permission.CAMERA" 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"/>
     </exception>
 
     <exception package="com.google.android.apps.cbrsnetworkmonitor">
diff --git a/device-common.mk b/device-common.mk
index d952298..ef90ca1 100644
--- a/device-common.mk
+++ b/device-common.mk
@@ -30,9 +30,6 @@
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/android.software.verified_boot.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.verified_boot.xml
 
-# Factory OTA
--include vendor/unbundled_google/packages/FactoryOtaPrebuilt/factoryota.mk
-
 # Set system properties identifying the chipset
 PRODUCT_VENDOR_PROPERTIES += ro.soc.manufacturer=Google
 PRODUCT_VENDOR_PROPERTIES += ro.soc.model=Tensor
@@ -51,3 +48,7 @@
 # Set thermal warm reset
 PRODUCT_PRODUCT_PROPERTIES += \
     ro.thermal_warmreset = true
+
+# Trigger fsck on upgrade (305658663)
+PRODUCT_PRODUCT_PROPERTIES += \
+    ro.preventative_fsck = 1
\ No newline at end of file
diff --git a/device.mk b/device.mk
index 8d7d83c..6db1d36 100644
--- a/device.mk
+++ b/device.mk
@@ -31,6 +31,9 @@
 include device/google/gs-common/camera/dump.mk
 include device/google/gs-common/gps/dump/log.mk
 include device/google/gs-common/widevine/widevine.mk
+include device/google/gs-common/sota_app/factoryota.mk
+include device/google/gs-common/misc_writer/misc_writer.mk
+include device/google/gs-common/gyotaku_app/gyotaku.mk
 
 TARGET_BOARD_PLATFORM := gs101
 DEVICE_IS_64BIT_ONLY ?= $(if $(filter %_64,$(TARGET_PRODUCT)),true,false)
@@ -197,8 +200,6 @@
 
 $(call soong_config_set,pixel_mali,soc,$(TARGET_BOARD_PLATFORM))
 
-include device/google/gs101/neuralnetwork/neuralnetwork.mk
-
 PRODUCT_PACKAGES += \
 	libGLES_mali \
 	vulkan.mali \
@@ -522,28 +523,10 @@
 PRODUCT_PACKAGES += \
 	liboemcrypto
 
-$(call soong_config_set,google3a_config,soc,gs101)
-$(call soong_config_set,google3a_config,gcam_awb,true)
-$(call soong_config_set,google3a_config,ghawb_truetone,true)
-
-# Determine if Lyric is in the tree, and only have GCH build against it
-# if it is. Cases when Lyric isn't going to be in the tree:
-#    - Non-pixel gs101 devices that exclude vendor/google/services/LyricCameraHAL/src (none as of now)
-#    - master-without-vendor and other types of AOSP builds (those won't built GCH either, but need this to actually start building)
-#
-# Builds that will have it are
-#    - Regular gs101 builds
-#    - PDK gs101 builds because they still have vendor/google/services/LyricCameraHAL/src
-
-ifneq ($(wildcard vendor/google/services/LyricCameraHAL/src),)
+# Lyric Camera HAL settings
+include device/google/gs-common/camera/lyric.mk
 $(call soong_config_set,lyric,soc,gs101)
-$(call soong_config_set,lyric,use_lyric_camera_hal,true)
-# lyric::tuning_product is set in device-specific makefiles,
-# such as device/google/raviole/device-oriole.mk
-
-# Camera HAL library selection
-$(call soong_config_set,gch,hwl_library,lyric)
-endif
+$(call soong_config_set,google3a_config,soc,gs101)
 
 # WiFi
 PRODUCT_PACKAGES += \
@@ -621,7 +604,6 @@
 	frameworks/native/data/etc/android.hardware.camera.concurrent.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.concurrent.xml \
 	frameworks/native/data/etc/android.hardware.camera.full.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.full.xml\
 	frameworks/native/data/etc/android.hardware.camera.raw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.raw.xml\
-	vendor/google/services/LyricCameraHAL/src/vendor.android.hardware.camera.preview-dis.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/vendor.android.hardware.camera.preview-dis.xml\
 
 #PRODUCT_COPY_FILES += \
 	frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml \
@@ -951,8 +933,7 @@
 #$(call inherit-product-if-exists, vendor/google_devices/common/exynos-vendor.mk)
 #$(call inherit-product-if-exists, hardware/broadcom/wlan/bcmdhd/firmware/bcm4375/device-bcm.mk)
 include device/google/gs-common/sensors/sensors.mk
-$(call inherit-product-if-exists, vendor/google/services/LyricCameraHAL/src/build/device-vendor.mk)
-$(call inherit-product-if-exists, vendor/google/camera/devices/whi/device-vendor.mk)
+$(call soong_config_set,usf,target_soc,gs101)
 
 PRODUCT_COPY_FILES += \
 	device/google/gs101/default-permissions.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/default-permissions/default-permissions.xml \
@@ -1151,5 +1132,9 @@
 # Call deleteAllKeys if vold detects a factory reset
 PRODUCT_VENDOR_PROPERTIES += ro.crypto.metadata_init_delete_all_keys.enabled=true
 
+# Increase lmkd aggressiveness
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.lmk.swap_free_low_percentage=100
+
 # Hardware Info Collection
 include hardware/google/pixel/HardwareInfo/HardwareInfo.mk
diff --git a/device_framework_matrix_product.xml b/device_framework_matrix_product.xml
index 4184c3e..732338c 100644
--- a/device_framework_matrix_product.xml
+++ b/device_framework_matrix_product.xml
@@ -42,7 +42,7 @@
     </hal>
     <hal format="aidl" optional="true">
       <name>com.google.face.debug</name>
-      <version>2</version>
+      <version>4</version>
         <interface>
             <name>IDebugHost</name>
             <instance>default</instance>
@@ -70,7 +70,7 @@
     </hal>
     <hal format="aidl" optional="true">
       <name>com.google.hardware.pixel.display</name>
-        <version>8</version>
+        <version>9</version>
         <interface>
             <name>IDisplay</name>
             <instance>default</instance>
diff --git a/fingerprint/compatibility_matrix_factory.xml b/fingerprint/compatibility_matrix_factory.xml
new file mode 100644
index 0000000..bde4653
--- /dev/null
+++ b/fingerprint/compatibility_matrix_factory.xml
@@ -0,0 +1,10 @@
+<compatibility-matrix version="1.0" type="framework">
+    <hal format="hidl" optional="true">
+        <name>android.hardware.biometrics.fingerprint</name>
+        <version>2.1-3</version>
+        <interface>
+            <name>IBiometricsFingerprint</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+</compatibility-matrix>
diff --git a/fingerprint/udfps_factory.mk b/fingerprint/udfps_factory.mk
index 40993fb..de831e4 100644
--- a/fingerprint/udfps_factory.mk
+++ b/fingerprint/udfps_factory.mk
@@ -19,5 +19,7 @@
     GF_delmar_factory \
     udfps_test
 
+DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE += device/google/gs101/fingerprint/compatibility_matrix_factory.xml
+
 PRODUCT_PROPERTY_OVERRIDES += \
     gf.debug.dump_data=1
diff --git a/manifest.xml b/manifest.xml
index 038a3d4..303ed2c 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -35,16 +35,6 @@
         <transport>hwbinder</transport>
         <fqname>@1.2::IBootControl/default</fqname>
     </hal>
-    <hal format="hidl">
-        <name>android.hardware.neuralnetworks</name>
-        <transport>hwbinder</transport>
-        <version>1.3</version>
-        <interface>
-            <name>IDevice</name>
-            <instance>google-armnn</instance>
-        </interface>
-        <fqname>@1.3::IDevice/google-armnn</fqname>
-    </hal>
     <hal format="aidl">
         <name>com.google.input</name>
         <version>2</version>
diff --git a/manifest_64.xml b/manifest_64.xml
index 122d1bb..115357d 100644
--- a/manifest_64.xml
+++ b/manifest_64.xml
@@ -23,16 +23,6 @@
         <fqname>@1.2::IBootControl/default</fqname>
     </hal>
     <hal format="hidl">
-        <name>android.hardware.neuralnetworks</name>
-        <transport>hwbinder</transport>
-        <version>1.3</version>
-        <interface>
-            <name>IDevice</name>
-            <instance>google-armnn</instance>
-        </interface>
-        <fqname>@1.3::IDevice/google-armnn</fqname>
-    </hal>
-    <hal format="hidl">
        <name>android.hardware.neuralnetworks</name>
        <transport>hwbinder</transport>
        <fqname>@1.3::IDevice/google-edgetpu</fqname>
diff --git a/neuralnetwork/neuralnetwork.mk b/neuralnetwork/neuralnetwork.mk
deleted file mode 100644
index 1533d2a..0000000
--- a/neuralnetwork/neuralnetwork.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-PRODUCT_PACKAGES += android.hardware.neuralnetworks@1.3-service-armnn
-BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/neuralnetworks/
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index 6b1cfcc..32adb01 100644
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -277,4 +277,7 @@
         <item>"com.shannon.imsservice"</item>
         <item>"com.android.phone"</item>
     </string-array>
+
+    <!-- Enable variable refresh rate when typing. -->
+    <bool name="config_variableRefreshRateTypingSupported">false</bool>
 </resources>
diff --git a/pixelstats/pixelstats-vendor.gs101.rc b/pixelstats/pixelstats-vendor.gs101.rc
index d324b6a..70d875e 100644
--- a/pixelstats/pixelstats-vendor.gs101.rc
+++ b/pixelstats/pixelstats-vendor.gs101.rc
@@ -1,6 +1,7 @@
 on property:sys.boot_completed=1
 	start vendor.pixelstats_vendor
-
+on post-fs-data
+    chown system system /sys/kernel/metrics/irq/stats_reset
 service vendor.pixelstats_vendor /vendor/bin/pixelstats-vendor
     class hal
     user system
diff --git a/pixelstats/service.cpp b/pixelstats/service.cpp
index 7280562..35d0abf 100644
--- a/pixelstats/service.cpp
+++ b/pixelstats/service.cpp
@@ -47,6 +47,8 @@
         .SpeakerHeartBeatPath = "/sys/devices/platform/audiometrics/speaker_heartbeat",
         .ResumeLatencyMetricsPath = "/sys/kernel/metrics/resume_latency/resume_latency_metrics",
         .LongIRQMetricsPath = "/sys/kernel/metrics/irq/long_irq_metrics",
+        .StormIRQMetricsPath = "/sys/kernel/metrics/irq/storm_irq_metrics",
+        .IRQStatsResetPath = "/sys/kernel/metrics/irq/stats_reset",
         .UFSErrStatsPath = {
             UFS_ERR_PATH(pa_err_count),
             UFS_ERR_PATH(dl_err_count),
diff --git a/usb/gadget/UsbGadget.cpp b/usb/gadget/UsbGadget.cpp
index 7ee7046..9b68e2c 100644
--- a/usb/gadget/UsbGadget.cpp
+++ b/usb/gadget/UsbGadget.cpp
@@ -41,10 +41,34 @@
 constexpr char kI2CPath[] = "/sys/devices/platform/10d50000.hsi2c/i2c-";
 constexpr char kAccessoryLimitCurrent[] = "i2c-max77759tcpc/usb_limit_accessory_current";
 constexpr char kAccessoryLimitCurrentEnable[] = "i2c-max77759tcpc/usb_limit_accessory_enable";
+constexpr char kUpdateSdpEnumTimeout[] = "i2c-max77759tcpc/update_sdp_enum_timeout";
 
 using ::android::base::GetBoolProperty;
 using ::android::hardware::google::pixel::usb::kUvcEnabled;
 
+Status getI2cBusHelper(string *name) {
+    DIR *dp;
+
+    dp = opendir(kHsi2cPath);
+    if (dp != NULL) {
+        struct dirent *ep;
+
+        while ((ep = readdir(dp))) {
+            if (ep->d_type == DT_DIR) {
+                if (string::npos != string(ep->d_name).find("i2c-")) {
+                    std::strtok(ep->d_name, "-");
+                    *name = std::strtok(NULL, "-");
+                }
+            }
+        }
+        closedir(dp);
+        return Status::SUCCESS;
+    }
+
+    ALOGE("Failed to open %s", kHsi2cPath);
+    return Status::ERROR;
+}
+
 UsbGadget::UsbGadget() : mGadgetIrqPath("") {
     if (access(OS_DESC_PATH, R_OK) != 0) {
         ALOGE("configfs setup not done yet");
@@ -97,6 +121,7 @@
 void currentFunctionsAppliedCallback(bool functionsApplied, void *payload) {
     UsbGadget *gadget = (UsbGadget *)payload;
     gadget->mCurrentUsbFunctionsApplied = functionsApplied;
+    gadget->updateSdpEnumTimeout();
 }
 
 ScopedAStatus UsbGadget::getCurrentUsbFunctions(const shared_ptr<IUsbGadgetCallback> &callback,
@@ -363,6 +388,22 @@
     return ScopedAStatus::ok();
 }
 
+void UsbGadget::updateSdpEnumTimeout() {
+    string i2c_node, update_sdp_enum_timeout_path;
+
+    Status status = getI2cBusHelper(&i2c_node);
+    if (status != Status::SUCCESS) {
+        ALOGE("%s: Unable to locate i2c bus node", __func__);
+    }
+
+    update_sdp_enum_timeout_path = kI2CPath + i2c_node + "/" + kUpdateSdpEnumTimeout;
+    if (!WriteStringToFile("1", update_sdp_enum_timeout_path)) {
+        ALOGE("%s: Unable to write to %s.", __func__, update_sdp_enum_timeout_path.c_str());
+    } else {
+        ALOGI("%s: Updated SDP enumeration timeout value.", __func__);
+    }
+}
+
 Status UsbGadget::setupFunctions(long functions,
         const shared_ptr<IUsbGadgetCallback> &callback, uint64_t timeout,
         int64_t in_transactionId) {
@@ -417,6 +458,7 @@
         mCurrentUsbFunctionsApplied = true;
         if (callback)
             callback->setCurrentUsbFunctionsCb(functions, Status::SUCCESS, in_transactionId);
+        updateSdpEnumTimeout();
         return Status::SUCCESS;
     }
 
@@ -441,28 +483,6 @@
     return Status::SUCCESS;
 }
 
-Status getI2cBusHelper(string *name) {
-    DIR *dp;
-
-    dp = opendir(kHsi2cPath);
-    if (dp != NULL) {
-        struct dirent *ep;
-
-        while ((ep = readdir(dp))) {
-            if (ep->d_type == DT_DIR) {
-                if (string::npos != string(ep->d_name).find("i2c-")) {
-                    std::strtok(ep->d_name, "-");
-                    *name = std::strtok(NULL, "-");
-                }
-            }
-        }
-        closedir(dp);
-        return Status::SUCCESS;
-    }
-
-    ALOGE("Failed to open %s", kHsi2cPath);
-    return Status::ERROR;
-}
 
 ScopedAStatus UsbGadget::setCurrentUsbFunctions(long functions,
                                                const shared_ptr<IUsbGadgetCallback> &callback,
diff --git a/usb/gadget/UsbGadget.h b/usb/gadget/UsbGadget.h
index 5975930..a6b63bd 100644
--- a/usb/gadget/UsbGadget.h
+++ b/usb/gadget/UsbGadget.h
@@ -115,6 +115,10 @@
 
     ScopedAStatus setVidPid(const char *vid,const char *pid);
 
+    // Indicates to the kernel that the gadget service is ready and the kernel can
+    // set SDP timeout to a lower value.
+    void updateSdpEnumTimeout();
+
   private:
     Status tearDownGadget();
     Status getUsbGadgetIrqPath();
diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp
index 6993275..7a14888 100644
--- a/usb/usb/Usb.cpp
+++ b/usb/usb/Usb.cpp
@@ -133,7 +133,7 @@
         }
 
         if (!WriteStringToFile("0", USB_DATA_PATH)) {
-            ALOGE("Not able to turn on usb connection notification");
+            ALOGE("Not able to turn off usb connection notification");
             result = false;
         }
     }
diff --git a/usb/usb/android.hardware.usb-service.rc b/usb/usb/android.hardware.usb-service.rc
index 43a8084..d236bd5 100644
--- a/usb/usb/android.hardware.usb-service.rc
+++ b/usb/usb/android.hardware.usb-service.rc
@@ -68,6 +68,16 @@
     chown root system /sys/devices/platform/10d50000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_source_enable
     chown root system /sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_source_enable
     chown root system /sys/devices/platform/10d50000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_source_enable
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-0/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-1/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-2/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-3/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-4/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-5/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-6/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-7/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc/update_sdp_enum_timeout
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-9/i2c-max77759tcpc/update_sdp_enum_timeout
     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
@@ -138,4 +148,14 @@
     chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_source_enable
     chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_source_enable
     chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_source_enable
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-0/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-1/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-2/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-3/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-4/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-5/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-6/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-7/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-8/i2c-max77759tcpc/update_sdp_enum_timeout
+    chmod 664 /sys/devices/platform/10d50000.hsi2c/i2c-9/i2c-max77759tcpc/update_sdp_enum_timeout
     chmod 664 /sys/devices/platform/google,pogo/move_data_to_usb
diff --git a/wifi/BoardConfig-wifi.mk b/wifi/BoardConfig-wifi.mk
index a9dc7db..d484ad0 100644
--- a/wifi/BoardConfig-wifi.mk
+++ b/wifi/BoardConfig-wifi.mk
@@ -31,3 +31,6 @@
 WIFI_FEATURE_HOSTAPD_11AX := true
 BOARD_HOSTAPD_CONFIG_80211W_MFP_OPTIONAL := true
 WIFI_HIDL_UNIFIED_SUPPLICANT_SERVICE_RC_ENTRY := true
+
+# Add WIFI_FEATURE_IMU_DETECTION to soong_config
+$(call soong_config_set,wifi,feature_imu_detection,$(WIFI_FEATURE_IMU_DETECTION))