From 60bd04557fd1ae70ef3b547144625ddff4a07301 Mon Sep 17 00:00:00 2001 From: YiKai Peng Date: Thu, 20 Jun 2024 02:32:12 +0000 Subject: [PATCH 01/25] gs101: wlc: add authstart permission Bug: 348272247 Test: Build/Flash Flag: EXEMPT bugfix Change-Id: I8bbdce42984aa8da6abd000c06d6a5df37447914 Signed-off-by: YiKai Peng --- conf/init.gs101.rc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index 7185b2e1..c8913dc3 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -277,6 +277,7 @@ on init chown system system /sys/class/power_supply/wireless/device/version chown system system /sys/class/power_supply/wireless/device/features chown system system /sys/class/power_supply/wireless/device/authtype + chown system system /sys/class/power_supply/wireless/device/authtstart # Adaptive charge chown system system /sys/class/power_supply/battery/charge_deadline From 7b58898aee6694762f57077bac5626f7baa32a46 Mon Sep 17 00:00:00 2001 From: liangjlee Date: Thu, 27 Jun 2024 02:04:57 +0800 Subject: [PATCH 02/25] gs101: Include power/power.mk Bug: 331612600 Flag: EXEMPT (bug 337358613) Change-Id: Ibf7dda6c4c13d6513e2f08239c95c6b2778a98ec Signed-off-by: liangjlee --- device.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/device.mk b/device.mk index 8df5b3fe..20b0e3a8 100644 --- a/device.mk +++ b/device.mk @@ -25,6 +25,7 @@ include device/google/gs-common/thermal/dump/thermal.mk include device/google/gs-common/thermal/thermal_hal/device.mk include device/google/gs-common/pixel_metrics/pixel_metrics.mk include device/google/gs-common/performance/perf.mk +include device/google/gs-common/power/power.mk include device/google/gs-common/display/dump.mk include device/google/gs101/dumpstate/item.mk include device/google/gs-common/radio/dump.mk From 45531bd711aedf273880ab30fb45b03f144c1312 Mon Sep 17 00:00:00 2001 From: liangjlee Date: Thu, 27 Jun 2024 02:04:57 +0800 Subject: [PATCH 03/25] gs101: Include power/power.mk Bug: 331612600 Flag: EXEMPT (bug 337358613) Change-Id: Ibf7dda6c4c13d6513e2f08239c95c6b2778a98ec Signed-off-by: liangjlee --- device.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/device.mk b/device.mk index 184ef6db..534cd262 100644 --- a/device.mk +++ b/device.mk @@ -25,6 +25,7 @@ include device/google/gs-common/thermal/dump/thermal.mk include device/google/gs-common/thermal/thermal_hal/device.mk include device/google/gs-common/pixel_metrics/pixel_metrics.mk include device/google/gs-common/performance/perf.mk +include device/google/gs-common/power/power.mk include device/google/gs-common/display/dump.mk include device/google/gs101/dumpstate/item.mk include device/google/gs-common/radio/dump.mk From 966663c7fab93f1654036f5d26fe133215fde401 Mon Sep 17 00:00:00 2001 From: Mike McTernan Date: Thu, 4 Jul 2024 15:46:34 +0100 Subject: [PATCH 04/25] APC/TUI: remove support for APC Flag: EXEMPT build file change Bug: 351151445 Test: m && test on a device Change-Id: I845133b2057dbc43487155a44b22a8c2dc9489bc --- device.mk | 3 --- 1 file changed, 3 deletions(-) diff --git a/device.mk b/device.mk index 20b0e3a8..929f8f52 100644 --- a/device.mk +++ b/device.mk @@ -76,7 +76,6 @@ PRODUCT_SOONG_NAMESPACES += \ vendor/google/whitechapel/tools \ vendor/google/camera \ vendor/google/interfaces \ - vendor/google_devices/common/proprietary/confirmatioui_hal \ vendor/google_nos/host/android \ vendor/google_nos/test/system-test-harness @@ -804,8 +803,6 @@ PRODUCT_PACKAGES_DEBUG += \ trusty-ut-ctrl \ tipc-test -include device/google/gs101/confirmationui/confirmationui.mk - include device/google/gs101/trusty_metricsd/trusty_metricsd.mk PRODUCT_PACKAGES += \ From 2e1fd9132184fde19391f6313905fc5aab7ed6f7 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Wed, 26 Jun 2024 22:55:52 +0000 Subject: [PATCH 05/25] Use absolute path for udc device Avoid search in /sys/class/udc directory Bug: 339241080 Test: tested on gs101 Flag: EXEMPT bugfix Change-Id: Iad74cae0d6ad6887d79d705dc8478f1b44532503 --- usb/gadget/UsbGadget.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usb/gadget/UsbGadget.h b/usb/gadget/UsbGadget.h index e483a912..ae9b7861 100644 --- a/usb/gadget/UsbGadget.h +++ b/usb/gadget/UsbGadget.h @@ -74,7 +74,7 @@ constexpr char kProcInterruptsPath[] = "/proc/interrupts"; constexpr char kProcIrqPath[] = "/proc/irq/"; constexpr char kSmpAffinityList[] = "/smp_affinity_list"; #ifndef UDC_PATH -#define UDC_PATH "/sys/class/udc/11110000.dwc3/" +#define UDC_PATH "/sys/devices/platform/11110000.usb/11110000.dwc3/udc/11110000.dwc3/" #endif static MonitorFfs monitorFfs(kGadgetName); From 7745a679a126f58f01149abb0d540e1daa8ea94f Mon Sep 17 00:00:00 2001 From: Jeremy Kemp Date: Wed, 22 May 2024 09:58:32 +0100 Subject: [PATCH 06/25] Add Mali OpenCL ICD to PRODUCT_PACKAGES Bug: 324057328 Test: clpeak Change-Id: I7b7de856d1bb090ace31d1938e69069e24e79d7f --- device.mk | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/device.mk b/device.mk index 929f8f52..3abc7e5f 100644 --- a/device.mk +++ b/device.mk @@ -217,9 +217,18 @@ include device/google/gs-common/gpu/gpu.mk PRODUCT_PACKAGES += \ libGLES_mali \ vulkan.mali \ - libOpenCL \ libgpudataproducer +# Install the OpenCL ICD Loader +PRODUCT_SOONG_NAMESPACES += external/OpenCL-ICD-Loader +PRODUCT_PACKAGES += \ + libOpenCL \ + mali_icd__customer_pixel_opencl-icd_ARM.icd +ifeq ($(DEVICE_IS_64BIT_ONLY),false) +PRODUCT_PACKAGES += \ + mali_icd__customer_pixel_opencl-icd_ARM32.icd +endif + PRODUCT_VENDOR_PROPERTIES += \ ro.hardware.vulkan=mali From 2340e91ebd606ce53cff0d2e37f9ce7136e35298 Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Fri, 7 Jun 2024 14:22:38 +0000 Subject: [PATCH 07/25] init.gs101.rc: Apply sched tuning to improve sched latencies Bug: 340860065 Flag: NONE not supported for init.rc scripts Signed-off-by: Qais Yousef Change-Id: I87b17dce903762b2c498d3631bf9b7e02cc2ebfe --- conf/init.gs101.rc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index c8913dc3..017b97d5 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -703,6 +703,12 @@ on property:sys.boot_completed=1 write /dev/cpuset/camera-daemon/cpus ${persist.device_config.vendor_system_native.camera-daemon_cpuset:-0-7} setprop vendor.powerhal.init 1 + # Setup scheduler parameters + write /proc/vendor_sched/min_granularity_ns 1000000 + write /proc/vendor_sched/latency_ns 8000000 + write /proc/vendor_sched/max_load_balance_interval 1 + write /proc/vendor_sched/enable_hrtick 1 + # Setup final cpu.uclamp write /proc/vendor_sched/groups/ta/uclamp_min 1 write /proc/vendor_sched/groups/fg/uclamp_min 0 From 8244f563e609b824e9a13abb6d49ae678776c2b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Kosi=C5=84ski?= Date: Wed, 10 Jul 2024 22:09:59 +0000 Subject: [PATCH 08/25] Delete PDX sockets for legacy VR services. Remove irrelevant copy and paste content. None of the gs101 devices ever included these services and these sockets are not doing anything. Bug: 234559097 Test: presubmit Flag: EXEMPT dead code removal Change-Id: I6fdab1e2232f83c0286d5f33773aaa17f9da3f7a --- conf/init.gs101.rc | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index 017b97d5..00860b00 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -137,16 +137,6 @@ on init write /sys/class/net/rmnet6/queues/rx-0/rps_cpus fe write /sys/class/net/rmnet7/queues/rx-0/rps_cpus fe - # Create UDS structure for base VR services. - mkdir /dev/socket/pdx 0775 system system - mkdir /dev/socket/pdx/system 0775 system system - mkdir /dev/socket/pdx/system/buffer_hub 0775 system system - mkdir /dev/socket/pdx/system/performance 0775 system system - mkdir /dev/socket/pdx/system/vr 0775 system system - mkdir /dev/socket/pdx/system/vr/display 0775 system system - mkdir /dev/socket/pdx/system/vr/pose 0775 system system - mkdir /dev/socket/pdx/system/vr/sensors 0775 system system - # Boot time 183626384 write /proc/vendor_sched/groups/ta/uclamp_min 201 write /proc/vendor_sched/groups/ta/prefer_idle 1 From 89bd4486e5f0c8fc214ebc9635d6527d53085037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Wagner?= Date: Wed, 10 Jul 2024 13:24:15 +0000 Subject: [PATCH 09/25] Increase the max core index for protected TLS allocations to 4 Pixel removed unnecessary allocation padding, and we now pass dEQP with a maximum physical core index setting of 4, which allows the driver to utilize 4 GPU cores (1111b) in the extreme tests. Bug: 221255664 Test: O6 atest CtsDeqpTestCases -- --module-arg 'CtsDeqpTestCases:include-filter:dEQP-VK.protected_memory.*' Flag: EXEMPT bugfix Change-Id: I9de8d05f9de50c034ef20690a53705fe208fb47f --- device.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.mk b/device.mk index 3abc7e5f..f591461c 100644 --- a/device.mk +++ b/device.mk @@ -239,7 +239,7 @@ PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \ PRODUCT_VENDOR_PROPERTIES += \ vendor.mali.platform.config=/vendor/etc/mali/platform.config \ vendor.mali.debug.config=/vendor/etc/mali/debug.config \ - vendor.mali.base_protected_max_core_count=3 \ + vendor.mali.base_protected_max_core_count=4 \ vendor.mali.base_protected_tls_max=67108864 \ vendor.mali.platform_agt_frequency_khz=24576 From 51cd585c3b0e61ea64a323a66bde2c7a1490762e Mon Sep 17 00:00:00 2001 From: Jerry Huang Date: Wed, 12 Jun 2024 17:04:10 +0800 Subject: [PATCH 10/25] gs101: video: change to use c2 "default" AIDL service Bug: 322920559 Change-Id: Ie9c22d21097bee190f05fa407f38ecd8ea918620 --- device.mk | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/device.mk b/device.mk index f591461c..2c6f2a34 100644 --- a/device.mk +++ b/device.mk @@ -285,6 +285,7 @@ PRODUCT_VENDOR_PROPERTIES += ro.surface_flinger.prime_shader_cache.ultrahdr=1 DEVICE_MANIFEST_FILE := \ device/google/gs101/manifest$(LOCAL_64ONLY).xml +BOARD_USE_CODEC2_AIDL := V1 ifneq (,$(filter aosp_%,$(TARGET_PRODUCT))) DEVICE_MANIFEST_FILE += \ device/google/gs101/manifest_media_aosp.xml @@ -745,12 +746,19 @@ PRODUCT_COPY_FILES += \ device/google/gs101/media_codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \ PRODUCT_PROPERTY_OVERRIDES += \ - debug.stagefright.c2-poolmask=458752 \ debug.c2.use_dmabufheaps=1 \ media.c2.dmabuf.padding=512 \ debug.stagefright.ccodec_delayed_params=1 \ ro.vendor.gpu.dataspace=1 +ifneq ($(BOARD_USE_CODEC2_AIDL), ) +PRODUCT_PROPERTY_OVERRIDES += \ + debug.stagefright.c2-poolmask=1507328 +else +PRODUCT_PROPERTY_OVERRIDES += \ + debug.stagefright.c2-poolmask=458752 +endif + # Create input surface on the framework side PRODUCT_PROPERTY_OVERRIDES += \ debug.stagefright.c2inputsurface=-1 \ From 0de92772264190b0b40f2f2d6b855c78c4f2e302 Mon Sep 17 00:00:00 2001 From: Robert Luo Date: Mon, 22 Jul 2024 06:26:30 +0800 Subject: [PATCH 11/25] [Pixel RR] Apply reviewed default permissions Pregrantting below permissions: READ_CONTACTS WRITE_CONTACTS READ_CALL_LOG Flag: EXEMPT add pregranted permission in b/337725984, b/337802920 Bug: 337725984, 337802920 Test: presubmit Change-Id: I78d3ff915ce12a8f4a32c7f5b824a249e0971fe9 --- default-permissions.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/default-permissions.xml b/default-permissions.xml index 3ba60117..4a3e1c60 100644 --- a/default-permissions.xml +++ b/default-permissions.xml @@ -171,4 +171,11 @@ + + + + + + + From e35cb696ca271c64019c3b1535fb63eb9edf4335 Mon Sep 17 00:00:00 2001 From: Herbert Xue Date: Tue, 16 Jul 2024 14:33:43 +0800 Subject: [PATCH 12/25] Add soong config variable for PowerAnomalySitril Set the variable is true when USE_LASSEN_OEMHOOK is true and BOARD_WITHOUT_RADIO is not true. Flag: EXEMPT bugfix Bug: 325857852 Test: m ConnectivityMonitor Change-Id: I84e50ffeeec8aea8131cca07827324a2980ed9de --- device.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/device.mk b/device.mk index 2c6f2a34..0e42a04b 100644 --- a/device.mk +++ b/device.mk @@ -185,6 +185,7 @@ USE_LASSEN_OEMHOOK := true # $(USE_LASSEN_OEMHOOK) is true and $(BOARD_WITHOUT_RADIO) is not true. ifneq ($(BOARD_WITHOUT_RADIO),true) PRODUCT_SOONG_NAMESPACES += vendor/google/tools/power-anomaly-sitril + $(call soong_config_set,sitril,use_lassen_oemhook_with_radio,true) endif # Use for GRIL From 79cb51273a9c163effe521911b0cb37810dfc5c3 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 18 Jul 2024 09:17:40 +0000 Subject: [PATCH 13/25] Upgrade IDisplay to V13 Bug: 315496839 Flag: EXEMPT bugfix Test: build pass Change-Id: Ied129519d62103ea3f4a4a6bba132d263840ab58 --- 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 95c2113a..45367125 100644 --- a/device_framework_matrix_product.xml +++ b/device_framework_matrix_product.xml @@ -78,7 +78,7 @@ com.google.hardware.pixel.display - 12 + 13 IDisplay default From acf7138e366b9270f021f9a9a014d1f34473e213 Mon Sep 17 00:00:00 2001 From: Jacky Liu Date: Mon, 5 Aug 2024 11:59:57 +0800 Subject: [PATCH 14/25] Use modules.load for vendor ramdisk modules vendor_boot.img is no longer built on 6.1 kernel codebase hence vendor_boot.modules.load no longer exists. We can use modules.load instead which is same as vendor_boot.modules.load but always exist. Flag: EXEMPT build file update Bug: 343042291 Test: build oriole-zvs1-userdebug build oriole-trunk_pixel_kernel_61-userdebug Change-Id: I7e5028ca4cc710367ddc5b161e006b8e7c25de80 --- BoardConfig-common.mk | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index a5e752d7..08b3a73e 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -366,7 +366,12 @@ BOARD_PREBUILT_VENDOR_RAMDISK_KERNEL_MODULES = fips140.ko BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD_EXTRA = $(foreach k,$(BOARD_PREBUILT_VENDOR_RAMDISK_KERNEL_MODULES),$(if $(wildcard $(KERNEL_MODULE_DIR)/$(k)), $(k))) # Kernel modules that are listed in vendor_boot.modules.load -BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD_FILE := $(strip $(shell cat $(KERNEL_MODULE_DIR)/vendor_boot.modules.load)) +# Starting from 6.1, use modules.load instead. It lists modules for vendor ramdisk regardless of the partition name. +ifneq ($(wildcard $(KERNEL_MODULE_DIR)/modules.load),) + BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD_FILE := $(strip $(shell cat $(KERNEL_MODULE_DIR)/modules.load)) +else + BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD_FILE := $(strip $(shell cat $(KERNEL_MODULE_DIR)/vendor_boot.modules.load)) +endif ifndef BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD_FILE $(error vendor_boot.modules.load not found or empty) endif From ad788716447ffd34f3788b617bacbb7ae48b1285 Mon Sep 17 00:00:00 2001 From: samou Date: Tue, 6 Aug 2024 02:41:58 +0000 Subject: [PATCH 15/25] Remove BCL from thermal Flag: EXEMPT tuning changes Bug: 349935208 Change-Id: Id34dc3bb1895c28cf3c3a146ef9fc7a742a73044 Signed-off-by: samou --- conf/init.gs101.rc | 40 ---------------------------------------- powerhint_a1.json | 12 ------------ 2 files changed, 52 deletions(-) diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index 00860b00..94b981ce 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -851,50 +851,10 @@ on property:vendor.thermal.link_ready=1 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 - write /dev/thermal/tz-by-name/vdroop1/policy user_space - write /dev/thermal/tz-by-name/vdroop2/policy user_space - write /dev/thermal/tz-by-name/ocp_cpu1/policy user_space - write /dev/thermal/tz-by-name/ocp_cpu2/policy user_space - write /dev/thermal/tz-by-name/ocp_tpu/policy user_space - write /dev/thermal/tz-by-name/ocp_gpu/policy user_space - write /dev/thermal/tz-by-name/soft_ocp_cpu1/policy user_space - write /dev/thermal/tz-by-name/soft_ocp_cpu2/policy user_space - write /dev/thermal/tz-by-name/soft_ocp_tpu/policy user_space - write /dev/thermal/tz-by-name/soft_ocp_gpu/policy user_space - write /dev/thermal/tz-by-name/soc/policy user_space - write /dev/thermal/tz-by-name/batoilo/policy user_space write /sys/devices/virtual/pmic/mitigation/triggered_lvl/smpl_lvl 3100 write /sys/devices/virtual/pmic/mitigation/clock_div/tpu_clk_div 0x1 write /sys/devices/virtual/pmic/mitigation/clock_div/gpu_clk_div 0x1 write /sys/devices/virtual/pmic/mitigation/clock_div/cpu2_clk_div 0x1 - chown system system /dev/thermal/tz-by-name/soc/mode - chown system system /dev/thermal/tz-by-name/batoilo/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/batoilo/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/vdroop2/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/vdroop2/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/vdroop1/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/vdroop1/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/smpl_gm/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/smpl_gm/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/ocp_cpu1/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/ocp_cpu1/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/ocp_cpu2/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/ocp_cpu2/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/ocp_tpu/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/ocp_tpu/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/ocp_gpu/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/ocp_gpu/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/soft_ocp_cpu1/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/soft_ocp_cpu1/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/soft_ocp_cpu2/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/soft_ocp_cpu2/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/soft_ocp_tpu/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/soft_ocp_tpu/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/soft_ocp_gpu/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/soft_ocp_gpu/trip_point_0_hyst - chown system system /dev/thermal/tz-by-name/soc/trip_point_0_temp - chown system system /dev/thermal/tz-by-name/soc/trip_point_0_hyst # Thermal chown system system /dev/thermal/tz-by-name/quiet_therm/trip_point_0_temp chown system system /dev/thermal/tz-by-name/quiet_therm/trip_point_0_hyst diff --git a/powerhint_a1.json b/powerhint_a1.json index 7a980ba5..e51765b5 100644 --- a/powerhint_a1.json +++ b/powerhint_a1.json @@ -369,18 +369,6 @@ "Type": "EndHint", "Value": "DISABLE_TA_BOOST" }, - { - "PowerHint": "THERMAL_FLASH_LED_REDUCE_CRITICAL", - "Node": "LimitFlashCurrent", - "Duration": 0, - "Value": "100" - }, - { - "PowerHint": "THERMAL_FLASH_LED_REDUCE_NONE", - "Node": "LimitFlashCurrent", - "Duration": 0, - "Value": "1500" - }, { "PowerHint": "EXPENSIVE_RENDERING", "Node": "PowerHALRenderingState", From 9adfff45e2e3a06ad5f74946b56e746f4e2cdf70 Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Mon, 12 Aug 2024 14:31:07 +0000 Subject: [PATCH 16/25] BoardConfig-common.mk: Enable Lazy RCU And sync other RCU paramters. Bug: 340860065 Flag: EXEMPT boot time parameters Signed-off-by: Qais Yousef Change-Id: Ia41a45341e988cddcfcf850afd8398a7dc1a91fe --- BoardConfig-common.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 08b3a73e..e7184a76 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -46,6 +46,7 @@ endif BOARD_KERNEL_CMDLINE += dyndbg=\"func alloc_contig_dump_pages +p\" BOARD_KERNEL_CMDLINE += earlycon=exynos4210,0x10A00000 console=ttySAC0,115200 androidboot.console=ttySAC0 printk.devkmsg=on BOARD_KERNEL_CMDLINE += cma_sysfs.experimental=Y +BOARD_KERNEL_CMDLINE += rcupdate.rcu_expedited=1 rcu_nocbs=all rcutree.enable_rcu_lazy BOARD_KERNEL_CMDLINE += swiotlb=noforce BOARD_BOOTCONFIG += androidboot.boot_devices=14700000.ufs From e582d85720ec64d3bac3d6c8472faf39f2058f95 Mon Sep 17 00:00:00 2001 From: Betty Zhou Date: Wed, 21 Aug 2024 23:52:39 +0000 Subject: [PATCH 17/25] Revert "Enable KUnit testing on raviole userdebug & eng build target." This reverts commit c5b3375835a5dcda22a26cbc79060c42cd8d00c0. Reason for revert: It's not need anymore for kunit testing Change-Id: I8606bfb3cc375e97d78ff52cd4fe8b596c86d6fd Bug: 337797668 --- BoardConfig-common.mk | 5 ----- 1 file changed, 5 deletions(-) diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index e7184a76..e7c40867 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -50,11 +50,6 @@ BOARD_KERNEL_CMDLINE += rcupdate.rcu_expedited=1 rcu_nocbs=all rcutree.enable_rc BOARD_KERNEL_CMDLINE += swiotlb=noforce BOARD_BOOTCONFIG += androidboot.boot_devices=14700000.ufs -# Enable KUnit for userdebug and eng builds -ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) - BOARD_KERNEL_CMDLINE += kunit.enable=1 -endif - TARGET_NO_BOOTLOADER := true TARGET_NO_RADIOIMAGE := true BOARD_PREBUILT_BOOTIMAGE := $(wildcard $(TARGET_KERNEL_DIR)/boot.img) From 6c2502279f6e421ddbec47dffbb619408534236a Mon Sep 17 00:00:00 2001 From: samou Date: Tue, 16 Jul 2024 07:40:36 +0000 Subject: [PATCH 18/25] bcl: revision for kernel6.1 - Migrate dump_gs101.sh to dump_power - Enable battery_mitigation - Correct ocp_cpu1 threshold Flag: EXEMPT refactor Bug: 349935208 Change-Id: I7e7f155ba7722dc5c24c2795c2840395ed4f9043 Signed-off-by: samou --- conf/init.gs101.rc | 2 + device.mk | 3 + dumpstate/Android.bp | 20 +- dumpstate/dump_gs101.sh | 292 ---------------- dumpstate/dump_power.cpp | 723 +++++++++++++++++++++++++++++++++++++++ dumpstate/dump_power.rc | 131 +++++++ dumpstate/item.mk | 2 +- 7 files changed, 875 insertions(+), 298 deletions(-) delete mode 100644 dumpstate/dump_gs101.sh create mode 100644 dumpstate/dump_power.cpp create mode 100644 dumpstate/dump_power.rc diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index 94b981ce..54832adc 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -852,6 +852,8 @@ on property:vendor.thermal.link_ready=1 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 /sys/devices/virtual/pmic/mitigation/triggered_lvl/smpl_lvl 3100 + write /sys/devices/virtual/pmic/mitigation/triggered_lvl/ocp_cpu1_lvl 7000 + write /sys/devices/virtual/pmic/mitigation/triggered_lvl/soft_ocp_cpu1_lvl 7000 write /sys/devices/virtual/pmic/mitigation/clock_div/tpu_clk_div 0x1 write /sys/devices/virtual/pmic/mitigation/clock_div/gpu_clk_div 0x1 write /sys/devices/virtual/pmic/mitigation/clock_div/cpu2_clk_div 0x1 diff --git a/device.mk b/device.mk index 0e42a04b..8992a82c 100644 --- a/device.mk +++ b/device.mk @@ -571,6 +571,9 @@ include device/google/gs-common/storage/storage.mk PRODUCT_PACKAGES += \ android.hardware.health.storage-service.default +# Battery Mitigation +include device/google/gs-common/battery_mitigation/bcl.mk + # storage pixelstats -include hardware/google/pixel/pixelstats/device.mk diff --git a/dumpstate/Android.bp b/dumpstate/Android.bp index 8acc9e3b..c0fa4e1c 100644 --- a/dumpstate/Android.bp +++ b/dumpstate/Android.bp @@ -2,10 +2,20 @@ package { default_applicable_licenses: ["Android-Apache-2.0"], } -sh_binary { - name: "dump_gs101.sh", - src: "dump_gs101.sh", +cc_binary { + name: "dump_power", + srcs: ["dump_power.cpp"], + cflags: [ + "-Wall", + "-Wextra", + "-Werror", + ], + shared_libs: [ + "libbase", + "libdump", + "libdumpstateutil", + ], vendor: true, - sub_dir: "dump", + relative_install_path: "dump", + init_rc: ["dump_power.rc"], } - diff --git a/dumpstate/dump_gs101.sh b/dumpstate/dump_gs101.sh deleted file mode 100644 index e5a72254..00000000 --- a/dumpstate/dump_gs101.sh +++ /dev/null @@ -1,292 +0,0 @@ -#!/vendor/bin/sh -echo "------ Camera HAL Graph State Dump ------" -for f in $(ls -t /data/vendor/camera/hal_graph_state*.txt |head -1); do - echo $f - cat $f -done - -build_type="$(getprop ro.build.type)" - -echo "\n------ Power Stats Times ------" -echo -n "Boot: " && /vendor/bin/uptime -s && echo -n "Now: " && date; - -echo "\n------ ACPM stats ------" -for f in /sys/devices/platform/acpm_stats/*_stats ; do - echo "\n\n$f" - cat $f -done - -echo "\n------ CPU PM stats ------" -cat "/sys/devices/system/cpu/cpupm/cpupm/time_in_state" - -echo "\n------ GENPD summary ------" -cat "/d/pm_genpd/pm_genpd_summary" - -echo "\n------ Power supply property battery ------" -cat "/sys/class/power_supply/battery/uevent" -echo "\n------ Power supply property dc ------" -cat "/sys/class/power_supply/dc/uevent" -echo "\n------ Power supply property gcpm ------" -cat "/sys/class/power_supply/gcpm/uevent" -echo "\n------ Power supply property gcpm_pps ------" -cat "/sys/class/power_supply/gcpm_pps/uevent" -echo "\n------ Power supply property main-charger ------" -cat "/sys/class/power_supply/main-charger/uevent" -echo "\n------ Power supply property pca9486-mains ------" -cat "/sys/class/power_supply/pca9468-mains/uevent" -echo "\n------ Power supply property tcpm ------" -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 ------" -cat "/sys/class/power_supply/wireless/uevent" - -if [ -d "/sys/class/power_supply/maxfg" ] -then - echo "\n------ Power supply property maxfg ------" - cat "/sys/class/power_supply/maxfg/uevent" - echo "\n------ m5_state ------" - cat "/sys/class/power_supply/maxfg/m5_model_state" - echo "\n------ maxfg ------" - cat "/dev/logbuffer_maxfg" - echo "\n------ maxfg ------" - cat "/dev/logbuffer_maxfg_monitor" -else - echo "\n------ Power supply property maxfg_base ------" - cat "/sys/class/power_supply/maxfg_base/uevent" - echo "\n------ Power supply property maxfg_flip ------" - cat "/sys/class/power_supply/maxfg_flip/uevent" - echo "\n------ m5_state ------" - cat "/sys/class/power_supply/maxfg_base/m5_model_state" - echo "\n------ maxfg_base ------" - cat "/dev/logbuffer_maxfg_base" - echo "\n------ maxfg_flip ------" - cat "/dev/logbuffer_maxfg_flip" - echo "\n------ maxfg_base ------" - cat "/dev/logbuffer_maxfg_base_monitor" - echo "\n------ maxfg_flip ------" - cat "/dev/logbuffer_maxfg_flip_monitor" -fi - -if [ -d "/sys/class/power_supply/dock" ] -then - echo "\n------ Power supply property dock ------" - cat "/sys/class/power_supply/dock/uevent" -fi - -if [ -e "/dev/logbuffer_tcpm" ] -then - echo "\n------ Logbuffer TCPM ------" - cat "/dev/logbuffer_tcpm" - if [ -d "/sys/kernel/debug/tcpm" ] - then - echo "\n------ TCPM logs ------" - cat /sys/kernel/debug/tcpm/* - else - echo "\n------ TCPM logs ------" - cat /sys/kernel/debug/usb/tcpm* - fi -fi - -echo "\n------ TCPC ------" -max77759tcpc_path="/sys/devices/platform/10d50000.hsi2c/i2c-12/12-0025" -echo "registers:" -cat $max77759tcpc_path/registers -echo "frs:" -cat $max77759tcpc_path/frs -echo "auto_discharge:" -cat $max77759tcpc_path/auto_discharge -echo "bc12_enabled:" -cat $max77759tcpc_path/bc12_enabled -echo "cc_toggle_enable:" -cat $max77759tcpc_path/cc_toggle_enable -echo "contaminant_detection:" -cat $max77759tcpc_path/contaminant_detection -echo "contaminant_detection_status:" -cat $max77759tcpc_path/contaminant_detection_status - -echo "\n------ PD Engine ------" -cat "/dev/logbuffer_usbpd" -echo "\n------ POGO Transport ------" -cat "/dev/logbuffer_pogo_transport" -echo "\n------ PPS-google_cpm ------" -cat "/dev/logbuffer_cpm" -echo "\n------ PPS-dc ------" -cat "/dev/logbuffer_pca9468" - -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 ------" -cat "/dev/logbuffer_ttf" -echo "\n------ TTF details ------" -cat "/sys/class/power_supply/battery/ttf_details" -echo "\n------ TTF stats ------" -cat "/sys/class/power_supply/battery/ttf_stats" -echo "\n------ maxq ------" -cat "/dev/logbuffer_maxq" -echo "\n------ aacr_state ------" -cat "/sys/class/power_supply/battery/aacr_state" -echo "\n------ TEMP/DOCK-DEFEND ------" -cat "/dev/logbuffer_bd" - -echo "\n------ TRICKLE-DEFEND Config ------" -cd /sys/devices/platform/google,battery/power_supply/battery/ -for f in `ls bd_*` -do - echo $f: `cat $f` -done - -echo "\n------ DWELL-DEFEND Config ------" -cd /sys/devices/platform/google,charger/ -for f in `ls charge_s*` -do - echo "$f: `cat $f`" -done - -echo "\n------ TEMP-DEFEND Config ------" -cd /sys/devices/platform/google,charger/ -for f in `ls bd_*` -do - 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------ Charging table dump ------" - cat "/d/google_battery/chg_raw_profile" - - echo "\n------ fg_model ------" - for f in /d/maxfg* - do - regs=`cat $f/fg_model` - echo $f: - echo "$regs" - done - - echo "\n------ fg_alo_ver ------" - for f in /d/maxfg* - do - regs=`cat $f/algo_ver` - echo $f: - echo "$regs" - done - - echo "\n------ fg_model_ok ------" - for f in /d/maxfg* - do - regs=`cat $f/model_ok` - echo $f: - echo "$regs" - done - - echo "\n------ fg registers ------" - for f in /d/maxfg* - do - regs=`cat $f/registers` - echo $f: - echo "$regs" - done -fi - -echo "\n------ Battery EEPROM ------" -if [ -e "/sys/devices/platform/10970000.hsi2c/i2c-8/8-0050/eeprom" ] -then - xxd /sys/devices/platform/10970000.hsi2c/i2c-8/8-0050/eeprom -fi - -echo "\n------ Charger Stats ------" -cat "/sys/class/power_supply/battery/charge_details" -if [ $build_type = "userdebug" ] -then - echo "\n------ Google Charger ------" - cd /sys/kernel/debug/google_charger/ - for f in `ls pps_*` - do - echo "$f: `cat $f`" - done - echo "\n------ Google Battery ------" - cd /sys/kernel/debug/google_battery/ - for f in `ls ssoc_*` - do - echo "$f: `cat $f`" - done -fi - -echo "\n------ WLC logs ------" -cat "/dev/logbuffer_wireless" -echo "\n------ WLC VER ------" -cat "/sys/class/power_supply/wireless/device/version" -echo "\n------ WLC STATUS ------" -cat "/sys/class/power_supply/wireless/device/status" -echo "\n------ WLC FW Version ------" -cat "/sys/class/power_supply/wireless/device/fw_rev" -echo "\n------ RTX ------" -cat "/dev/logbuffer_rtx" - -if [ $build_type = "userdebug" ] -then - echo "\n------ gvotables ------" - cat /sys/kernel/debug/gvotables/*/status -fi - -echo "\n------ Mitigation Stats ------" -echo "Source\t\tCount\tSOC\tTime\tVoltage" -for f in `ls /sys/devices/virtual/pmic/mitigation/last_triggered_count/*` -do - count=`cat $f` - a=${f/\/sys\/devices\/virtual\/pmic\/mitigation\/last_triggered_count\//} - b=${f/last_triggered_count/last_triggered_capacity} - c=${f/last_triggered_count/last_triggered_timestamp/} - d=${f/last_triggered_count/last_triggered_voltage/} - cnt=`cat $f` - cap=`cat ${b/count/cap}` - ti=`cat ${c/count/time}` - volt=`cat ${d/count/volt}` - echo "${a/_count/} \t$cnt\t$cap\t$ti\t$volt" -done - -echo "\n------ Clock Divider Ratio ------" -echo \"Source\t\tRatio\" -for f in `ls /sys/devices/virtual/pmic/mitigation/clock_ratio/*` -do ratio=`cat $f` - a=${f/\/sys\/devices\/virtual\/pmic\/mitigation\/clock_ratio\//} - echo "${a/_ratio/} \t$ratio" -done - -echo "\n------ Clock Stats ------" -echo "Source\t\tStats" -for f in `ls /sys/devices/virtual/pmic/mitigation/clock_stats/*` -do - stats=`cat $f` - a=${f/\/sys\/devices\/virtual\/pmic\/mitigation\/clock_stats\//}; - echo "${a/_stats/} \t$stats" -done - -echo "\n------ Triggered Level ------" -echo "Source\t\tLevel" -for f in `ls /sys/devices/virtual/pmic/mitigation/triggered_lvl/*` -do - lvl=`cat $f` - a=${f/\/sys\/devices\/virtual\/pmic\/mitigation\/triggered_lvl\//} - echo "${a/_lvl/} \t$lvl" -done - -echo "\n------ Instruction ------" -for f in `ls /sys/devices/virtual/pmic/mitigation/instruction/*` -do - val=`cat $f` - a=${f/\/sys\/devices\/virtual\/pmic\/mitigation\/instruction\//} - echo "$a=$val" -done - diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp new file mode 100644 index 00000000..cdbfe648 --- /dev/null +++ b/dumpstate/dump_power.cpp @@ -0,0 +1,723 @@ + +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "DumpstateUtil.h" +void printTitle(const char *msg) { + printf("\n------ %s ------\n", msg); +} +int getCommandOutput(const char *cmd, std::string *output) { + char buffer[1024]; + FILE *pipe = popen(cmd, "r"); + if (!pipe) { + return -1; + } + while (fgets(buffer, sizeof buffer, pipe) != NULL) { + *output += buffer; + } + pclose(pipe); + if (output->back() == '\n') + output->pop_back(); + return 0; +} +bool isValidFile(const char *file) { + if (!access(file, R_OK)) { + return false; + } + return true; +} +bool isUserBuild() { + return ::android::os::dumpstate::PropertiesHelper::IsUserBuild(); +} +int getFilesInDir(const char *directory, std::vector *files) { + std::string content; + struct dirent *entry; + DIR *dir = opendir(directory); + if (dir == NULL) + return -1; + files->clear(); + while ((entry = readdir(dir)) != NULL) + files->push_back(entry->d_name); + closedir(dir); + sort(files->begin(), files->end()); + return 0; +} +void dumpPowerStatsTimes() { + const char *title = "Power Stats Times"; + char rBuff[128]; + struct timespec rTs; + struct sysinfo info; + int ret; + printTitle(title); + sysinfo(&info); + const time_t boottime = time(NULL) - info.uptime; + ret = clock_gettime(CLOCK_REALTIME, &rTs); + if (ret) + return; + struct tm *nowTime = std::localtime(&rTs.tv_sec); + std::strftime(rBuff, sizeof(rBuff), "%m/%d/%Y %H:%M:%S", nowTime); + printf("Boot: %s", ctime(&boottime)); + printf("Now: %s\n", rBuff); +} +int readContentsOfDir(const char* title, const char* directory, const char* strMatch, + bool useStrMatch = false, bool printDirectory = false) { + std::vector files; + std::string content; + std::string fileLocation; + int ret; + ret = getFilesInDir(directory, &files); + if (ret < 0) + return ret; + printTitle(title); + for (auto &file : files) { + if (useStrMatch && std::string::npos == std::string(file).find(strMatch)) { + continue; + } + fileLocation = std::string(directory) + std::string(file); + if (!android::base::ReadFileToString(fileLocation, &content)) { + continue; + } + if (printDirectory) { + printf("\n\n%s\n", fileLocation.c_str()); + } + if (content.back() == '\n') + content.pop_back(); + printf("%s\n", content.c_str()); + } + return 0; +} +void dumpAcpmStats() { + const char* acpmDir = "/sys/devices/platform/acpm_stats/"; + const char* statsSubStr = "_stats"; + const char* acpmTitle = "ACPM stats"; + readContentsOfDir(acpmTitle, acpmDir, statsSubStr, true, true); +} +void dumpPowerSupplyStats() { + const char* dumpList[][2] = { + {"CPU PM stats", "/sys/devices/system/cpu/cpupm/cpupm/time_in_state"}, + {"GENPD summary", "/d/pm_genpd/pm_genpd_summary"}, + {"Power supply property battery", "/sys/class/power_supply/battery/uevent"}, + {"Power supply property dc", "/sys/class/power_supply/dc/uevent"}, + {"Power supply property gcpm", "/sys/class/power_supply/gcpm/uevent"}, + {"Power supply property gcpm_pps", "/sys/class/power_supply/gcpm_pps/uevent"}, + {"Power supply property main-charger", "/sys/class/power_supply/main-charger/uevent"}, + {"Power supply property dc-mains", "/sys/class/power_supply/dc-mains/uevent"}, + {"Power supply property tcpm", "/sys/class/power_supply/tcpm-source-psy-8-0025/uevent"}, + {"Power supply property usb", "/sys/class/power_supply/usb/uevent"}, + {"Power supply property wireless", "/sys/class/power_supply/wireless/uevent"}, + }; + for (const auto &row : dumpList) { + dumpFileContent(row[0], row[1]); + } +} +void dumpMaxFg() { + const char *maxfgLoc = "/sys/class/power_supply/maxfg"; + const char *maxfg [][2] = { + {"Power supply property maxfg", "/sys/class/power_supply/maxfg/uevent"}, + {"m5_state", "/sys/class/power_supply/maxfg/m5_model_state"}, + {"maxfg", "/dev/logbuffer_maxfg"}, + {"maxfg", "/dev/logbuffer_maxfg_monitor"}, + }; + const char *maxfgFlip [][2] = { + {"Power supply property maxfg_base", "/sys/class/power_supply/maxfg_base/uevent"}, + {"Power supply property maxfg_flip", "/sys/class/power_supply/maxfg_flip/uevent"}, + {"m5_state", "/sys/class/power_supply/maxfg_base/m5_model_state"}, + {"maxfg_base", "/dev/logbuffer_maxfg_base"}, + {"maxfg_flip", "/dev/logbuffer_maxfg_flip"}, + {"maxfg_base", "/dev/logbuffer_maxfg_base_monitor"}, + {"maxfg_flip", "/dev/logbuffer_maxfg_flip_monitor"}, + }; + const char *maxfgHistoryName = "Maxim FG History"; + const char *maxfgHistoryDir = "/dev/maxfg_history"; + std::string content; + if (isValidFile(maxfgLoc)) { + for (const auto &row : maxfg) { + dumpFileContent(row[0], row[1]); + } + } else { + for (const auto &row : maxfgFlip) { + dumpFileContent(row[0], row[1]); + } + } + if (isValidFile(maxfgHistoryDir)) { + dumpFileContent(maxfgHistoryName, maxfgHistoryDir); + } +} +void dumpPowerSupplyDock() { + const char* powerSupplyPropertyDockTitle = "Power supply property dock"; + const char* powerSupplyPropertyDockFile = "/sys/class/power_supply/dock/uevent"; + dumpFileContent(powerSupplyPropertyDockTitle, powerSupplyPropertyDockFile); +} +void dumpLogBufferTcpm() { + const char* logbufferTcpmTitle = "Logbuffer TCPM"; + const char* logbufferTcpmFile = "/dev/logbuffer_tcpm"; + const char* debugTcpmFile = "/sys/kernel/debug/tcpm"; + const char* tcpmLogTitle = "TCPM logs"; + const char* tcpmFile = "/sys/kernel/debug/tcpm"; + const char* tcpmFileAlt = "/sys/kernel/debug/usb/tcpm"; + int retCode; + dumpFileContent(logbufferTcpmTitle, logbufferTcpmFile); + retCode = readContentsOfDir(tcpmLogTitle, isValidFile(debugTcpmFile) ? tcpmFile : tcpmFileAlt, + NULL); + if (retCode < 0) + printTitle(tcpmLogTitle); +} +void dumpTcpc() { + int ret; + const char* max77759TcpcHead = "TCPC"; + const char* i2cSubDirMatch = "i2c-"; + const char* directory = "/sys/devices/platform/10d60000.hsi2c/"; + const char* max77759Tcpc [][2] { + {"registers:", "/i2c-max77759tcpc/registers"}, + {"frs:", "/i2c-max77759tcpc/frs"}, + {"auto_discharge:", "/i2c-max77759tcpc/auto_discharge"}, + {"bcl2_enabled:", "/i2c-max77759tcpc/bcl2_enabled"}, + {"cc_toggle_enable:", "/i2c-max77759tcpc/cc_toggle_enable"}, + {"containment_detection:", "/i2c-max77759tcpc/containment_detection"}, + {"containment_detection_status:", "/i2c-max77759tcpc/containment_detection_status"}, + }; + std::vector files; + std::string content; + printTitle(max77759TcpcHead); + ret = getFilesInDir(directory, &files); + if (ret < 0) { + for (auto &tcpcVal : max77759Tcpc) + printf("%s\n", tcpcVal[0]); + return; + } + for (auto &file : files) { + for (auto &tcpcVal : max77759Tcpc) { + printf("%s ", tcpcVal[0]); + if (std::string::npos == std::string(file).find(i2cSubDirMatch)) { + continue; + } + std::string fileName = directory + file + "/" + std::string(tcpcVal[1]); + if (!android::base::ReadFileToString(fileName, &content)) { + continue; + } + printf("%s\n", content.c_str()); + } + } +} +void dumpPdEngine() { + const char* pdEngine [][2] { + {"PD Engine", "/dev/logbuffer_usbpd"}, + {"PPS-google_cpm", "/dev/logbuffer_cpm"}, + {"PPS-dc", "/dev/logbuffer_pca9468"}, + }; + for (const auto &row : pdEngine) { + dumpFileContent(row[0], row[1]); + } +} +void dumpWc68() { + const char* wc68Title = "WC68"; + const char* wc68File = "/dev/logbuffer_wc68"; + dumpFileContent(wc68Title, wc68File); +} +void dumpLn8411() { + const char* ln8411Title = "LN8411"; + const char* ln8411File = "/dev/logbuffer_ln8411"; + dumpFileContent(ln8411Title, ln8411File); +} +void dumpBatteryHealth() { + const char* batteryHealth [][2] { + {"Battery Health", "/sys/class/power_supply/battery/health_index_stats"}, + {"BMS", "/dev/logbuffer_ssoc"}, + {"TTF", "/dev/logbuffer_ttf"}, + {"TTF details", "/sys/class/power_supply/battery/ttf_details"}, + {"TTF stats", "/sys/class/power_supply/battery/ttf_stats"}, + {"aacr_state", "/sys/class/power_supply/battery/aacr_state"}, + {"maxq", "/dev/logbuffer_maxq"}, + {"TEMP/DOCK-DEFEND", "/dev/logbuffer_bd"}, + }; + for (const auto &row : batteryHealth) { + dumpFileContent(row[0], row[1]); + } +} +void dumpBatteryDefend() { + 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"}, + {"TEMP-DEFEND Config", "/sys/devices/platform/google,charger/", "bd_"}, + }; + std::vector files; + struct dirent *entry; + std::string content; + std::string fileLocation; + for (auto &config : defendConfig) { + 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 = "\n"; + } + printf("%s: %s", file.c_str(), content.c_str()); + if (content.back() != '\n') + printf("\n"); + } + files.clear(); + } +} +void dumpChgUserDebug() { + std::vector files; + struct dirent *entry; + std::string content; + const char *chgUserDebug [][2] { + {"DC_registers dump", "/sys/class/power_supply/dc-mains/device/registers_dump"}, + {"max77759_chg registers dump", "/d/max77759_chg/registers"}, + {"max77729_pmic registers dump", "/d/max77729_pmic/registers"}, + {"Charging table dump", "/d/google_battery/chg_raw_profile"}, + }; + const std::string debugfs = "/d/"; + const char *maxFgStrMatch = "maxfg"; + const char *fgInfo [][2] { + {"fg_model", "fg_model"}, + {"fg_alo_ver", "algo_ver"}, + {"fg_model_ok", "model_ok"}, + {"fg registers", "registers"}, + {"Maxim FG NV RAM", "nv_registers"}, + }; + if (!isUserBuild()) + return; + for (auto &row : chgUserDebug) { + dumpFileContent(row[0], row[1]); + } + for (auto &info : fgInfo) { + DIR *dir = opendir(debugfs.c_str()); + if (dir == NULL) + return; + printTitle(info[0]); + while ((entry = readdir(dir)) != NULL) + if (std::string(entry->d_name).find(maxFgStrMatch) != std::string::npos) + files.push_back(entry->d_name); + closedir(dir); + sort(files.begin(), files.end()); + for (auto &file : files) { + std::string fileDirectory = debugfs + file; + std::string fileLocation = fileDirectory + "/" + std::string(info[1]); + if (!android::base::ReadFileToString(fileLocation, &content)) { + content = "\n"; + } + printf("%s:\n%s", fileDirectory.c_str(), content.c_str()); + if (content.back() != '\n') + printf("\n"); + } + files.clear(); + } +} +void dumpBatteryEeprom() { + const char *title = "Battery EEPROM"; + const char *files[] { + "/sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom", + "/sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom", + "/sys/devices/platform/10da0000.hsi2c/i2c-6/6-0050/eeprom", + "/sys/devices/platform/10da0000.hsi2c/i2c-7/7-0050/eeprom", + "/sys/devices/platform/10c90000.hsi2c/i2c-7/7-0050/eeprom", + "/sys/devices/platform/10c90000.hsi2c/i2c-6/6-0050/eeprom", + }; + std::string result; + std::string xxdCmd; + printTitle(title); + for (auto &file : files) { + if (!isValidFile(file)) + continue; + xxdCmd = "xxd " + std::string(file); + int ret = getCommandOutput(xxdCmd.c_str(), &result); + if (ret < 0) + return; + printf("%s\n", result.c_str()); + } +} +void dumpChargerStats() { + const char *chgStatsTitle = "Charger Stats"; + const char *chgStatsLocation = "/sys/class/power_supply/battery/charge_details"; + const char *chargerStats [][3] { + {"Google Charger", "/sys/kernel/debug/google_charger/", "pps_"}, + {"Google Battery", "/sys/kernel/debug/google_battery/", "ssoc_"}, + }; + std::vector files; + std::string content; + struct dirent *entry; + dumpFileContent(chgStatsTitle, chgStatsLocation); + if (!isUserBuild()) + return; + for (auto &stat : chargerStats) { + DIR *dir = opendir(stat[1]); + if (dir == NULL) + return; + printTitle(stat[0]); + while ((entry = readdir(dir)) != NULL) + if (std::string(entry->d_name).find(stat[2]) != std::string::npos) + files.push_back(entry->d_name); + closedir(dir); + sort(files.begin(), files.end()); + for (auto &file : files) { + std::string fileLocation = std::string(stat[1]) + file; + if (!android::base::ReadFileToString(fileLocation, &content)) { + content = "\n"; + } + printf("%s: %s", file.c_str(), content.c_str()); + if (content.back() != '\n') + printf("\n"); + } + files.clear(); + } +} +void dumpWlcLogs() { + const char *dumpWlcList [][2] { + {"WLC Logs", "/dev/logbuffer_wireless"}, + {"WLC VER", "/sys/class/power_supply/wireless/device/version"}, + {"WLC STATUS", "/sys/class/power_supply/wireless/device/status"}, + {"WLC FW Version", "/sys/class/power_supply/wireless/device/fw_rev"}, + {"RTX", "/dev/logbuffer_rtx"}, + }; + for (auto &row : dumpWlcList) { + if (!isValidFile(row[1])) + printTitle(row[0]); + dumpFileContent(row[0], row[1]); + } +} +void dumpGvoteables() { + const char *directory = "/sys/kernel/debug/gvotables/"; + const char *statusName = "/status"; + const char *title = "gvotables"; + std::string content; + std::vector files; + int ret; + if (!isUserBuild()) + return; + ret = getFilesInDir(directory, &files); + if (ret < 0) + return; + printTitle(title); + for (auto &file : files) { + std::string fileLocation = std::string(directory) + file + std::string(statusName); + if (!android::base::ReadFileToString(fileLocation, &content)) { + continue; + } + printf("%s: %s", file.c_str(), content.c_str()); + if (content.back() != '\n') + printf("\n"); + } + files.clear(); +} +void dumpMitigation() { + const char *mitigationList [][2] { + {"Lastmeal" , "/data/vendor/mitigation/lastmeal.txt"}, + {"Thismeal" , "/data/vendor/mitigation/thismeal.txt"}, + }; + for (auto &row : mitigationList) { + if (!isValidFile(row[1])) + printTitle(row[0]); + dumpFileContent(row[0], row[1]); + } +} +void dumpMitigationStats() { + int ret; + const char *directory = "/sys/devices/virtual/pmic/mitigation/last_triggered_count/"; + const char *capacityDirectory = "/sys/devices/virtual/pmic/mitigation/last_triggered_capacity/"; + const char *timestampDirectory = + "/sys/devices/virtual/pmic/mitigation/last_triggered_timestamp/"; + const char *voltageDirectory = "/sys/devices/virtual/pmic/mitigation/last_triggered_voltage/"; + const char *capacitySuffix = "_cap"; + const char *timeSuffix = "_time"; + const char *voltageSuffix = "_volt"; + const char *countSuffix = "_count"; + const char *title = "Mitigation Stats"; + std::vector files; + std::string content; + std::string fileLocation; + std::string source; + std::string subModuleName; + int count; + int soc; + int time; + int voltage; + ret = getFilesInDir(directory, &files); + if (ret < 0) + return; + printTitle(title); + printf("Source\t\tCount\tSOC\tTime\tVoltage\n"); + for (auto &file : files) { + fileLocation = std::string(directory) + std::string(file); + if (!android::base::ReadFileToString(fileLocation, &content)) { + continue; + } + ret = atoi(android::base::Trim(content).c_str()); + if (ret == -1) + continue; + count = ret; + subModuleName = std::string(file); + subModuleName.erase(subModuleName.find(countSuffix), strlen(countSuffix)); + fileLocation = std::string(capacityDirectory) + std::string(subModuleName) + + std::string(capacitySuffix); + if (!android::base::ReadFileToString(fileLocation, &content)) { + continue; + } + ret = atoi(android::base::Trim(content).c_str()); + if (ret == -1) + continue; + soc = ret; + fileLocation = std::string(timestampDirectory) + std::string(subModuleName) + + std::string(timeSuffix); + if (!android::base::ReadFileToString(fileLocation, &content)) { + continue; + } + ret = atoi(android::base::Trim(content).c_str()); + if (ret == -1) + continue; + time = ret; + fileLocation = std::string(voltageDirectory) + std::string(subModuleName) + + std::string(voltageSuffix); + if (!android::base::ReadFileToString(fileLocation, &content)) { + continue; + } + ret = atoi(android::base::Trim(content).c_str()); + if (ret == -1) + continue; + voltage = ret; + printf("%s \t%i\t%i\t%i\t%i\n", subModuleName.c_str(), count, soc, time, voltage); + } +} +void dumpMitigationDirs() { + const int paramCount = 4; + const char *titles[] = { + "Clock Divider Ratio", + "Clock Stats", + "Triggered Level", + "Instruction", + }; + const char *directories[] = { + "/sys/devices/virtual/pmic/mitigation/clock_ratio/", + "/sys/devices/virtual/pmic/mitigation/clock_stats/", + "/sys/devices/virtual/pmic/mitigation/triggered_lvl/", + "/sys/devices/virtual/pmic/mitigation/instruction/", + }; + const char *paramSuffix[] = {"_ratio", "_stats", "_lvl", ""}; + const char *titleRowVal[] = { + "Source\t\tRatio", + "Source\t\tStats", + "Source\t\tLevel", + "", + }; + const int eraseCnt[] = {6, 6, 4, 0}; + const bool useTitleRow[] = {true, true, true, false}; + std::vector files; + std::string content; + std::string fileLocation; + std::string source; + std::string subModuleName; + std::string readout; + for (int i = 0; i < paramCount; i++) { + printTitle(titles[i]); + if (useTitleRow[i]) { + printf("%s\n", titleRowVal[i]); + } + getFilesInDir(directories[i], &files); + for (auto &file : files) { + fileLocation = std::string(directories[i]) + std::string(file); + if (!android::base::ReadFileToString(fileLocation, &content)) { + continue; + } + readout = android::base::Trim(content); + subModuleName = std::string(file); + subModuleName.erase(subModuleName.find(paramSuffix[i]), eraseCnt[i]); + if (useTitleRow[i]) { + printf("%s \t%s\n", subModuleName.c_str(), readout.c_str()); + } else { + printf("%s=%s\n", subModuleName.c_str(), readout.c_str()); + } + } + } +} +void dumpIrqDurationCounts() { + const char *title = "IRQ Duration Counts"; + const char *colNames = "Source\t\t\t\tlt_5ms_cnt\tbt_5ms_to_10ms_cnt\tgt_10ms_cnt\tCode" + "\tCurrent Threshold (uA)\tCurrent Reading (uA)\n"; + const int nonOdpmChannelCnt = 9; + const int odpmChCnt = 12; + enum Duration { + LT_5MS, + BT_5MS_10MS, + GT_10MS, + DUR_MAX, + }; + const char *irqDurDirectories[] = { + "/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/less_than_5ms_count", + "/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/between_5ms_to_10ms_count", + "/sys/devices/virtual/pmic/mitigation/irq_dur_cnt/greater_than_10ms_count", + }; + enum PowerWarn { + MAIN, + SUB, + PWRWARN_MAX, + }; + const char *pwrwarnDirectories[] = { + "/sys/devices/virtual/pmic/mitigation/main_pwrwarn/", + "/sys/devices/virtual/pmic/mitigation/sub_pwrwarn/", + }; + const char *lpfCurrentDirs[] = { + "/sys/devices/platform/acpm_mfd_bus@15500000/i2c-1/1-001f/s2mpg14-meter/" + "s2mpg14-odpm/iio:device1/lpf_current", + "/sys/devices/platform/acpm_mfd_bus@15510000/i2c-0/0-002f/s2mpg15-meter/" + "s2mpg15-odpm/iio:device0/lpf_current", + }; + bool titlesInitialized = false; + std::vector channelNames; + std::vector channelData[DUR_MAX]; + std::vector pwrwarnThreshold[PWRWARN_MAX]; + std::vector pwrwarnCode[PWRWARN_MAX]; + std::vector lpfCurrentVals[PWRWARN_MAX]; + std::vector files; + std::string content; + std::string token; + std::string tokenCh; + std::string fileLocation; + for (int i = 0; i < DUR_MAX; i++) { + if (!android::base::ReadFileToString(irqDurDirectories[i], &content)) { + return; + } + std::istringstream tokenStream(content); + while (std::getline(tokenStream, token, '\n')) { + if (!titlesInitialized) { + tokenCh = token; + tokenCh.erase(tokenCh.find(':'), tokenCh.length()); + channelNames.push_back(tokenCh); + } + // there is a space after the ':' which needs to be removed + token.erase(0, token.find(':') + 1); + channelData[i].push_back(token); + } + if (!titlesInitialized) + titlesInitialized = true; + } + for (int i = 0; i < PWRWARN_MAX; i++) { + getFilesInDir(pwrwarnDirectories[i], &files); + for (auto &file : files) { + fileLocation = std::string(pwrwarnDirectories[i]) + std::string(file); + if (!android::base::ReadFileToString(fileLocation, &content)) { + continue; + } + std::string readout; + readout = android::base::Trim(content); + std::string readoutThreshold = readout; + readoutThreshold.erase(0, readoutThreshold.find('=') + 1); + std::string readoutCode = readout; + readoutCode.erase(readoutCode.find('='), readoutCode.length()); + pwrwarnThreshold[i].push_back(readoutThreshold); + pwrwarnCode[i].push_back(readoutCode); + } + } + for (int i = 0; i < PWRWARN_MAX; i++) { + if (!android::base::ReadFileToString(lpfCurrentDirs[i], &content)) { + continue; + } + std::istringstream tokenStream(content); + bool first = true; + while (std::getline(tokenStream, token, '\n')) { + token.erase(0, token.find(' ')); + if (first) { + first = false; + continue; + } + lpfCurrentVals[i].push_back(token); + } + } + printTitle(title); + printf("%s", colNames); + for (uint i = 0; i < channelNames.size(); i++) { + std::string code = ""; + std::string threshold = ""; + std::string current = ""; + std::string ltDataMsg = ""; + std::string btDataMsg = ""; + std::string gtDataMsg = ""; + int pmicSel = 0; + int offset = 0; + std::string channelNameSuffix = " \t"; + if (i >= nonOdpmChannelCnt) { + offset = nonOdpmChannelCnt; + if (i >= (odpmChCnt + nonOdpmChannelCnt)) { + pmicSel = 1; + offset = odpmChCnt + nonOdpmChannelCnt; + } + channelNameSuffix = ""; + code = pwrwarnCode[pmicSel][i - offset]; + threshold = pwrwarnThreshold[pmicSel][i - offset]; + current = lpfCurrentVals[pmicSel][i - offset]; + } + if (i < channelData[0].size()) + ltDataMsg = channelData[0][i]; + if (i < channelData[1].size()) + btDataMsg = channelData[1][i]; + if (i < channelData[2].size()) + gtDataMsg = channelData[2][i]; + std::string adjustedChannelName = channelNames[i] + channelNameSuffix; + printf("%s \t%s\t\t%s\t\t\t%s\t\t%s \t%s \t\t%s\n", + adjustedChannelName.c_str(), + ltDataMsg.c_str(), + btDataMsg.c_str(), + gtDataMsg.c_str(), + code.c_str(), + threshold.c_str(), + current.c_str()); + } +} +int main() { + dumpPowerStatsTimes(); + dumpAcpmStats(); + dumpPowerSupplyStats(); + dumpMaxFg(); + dumpPowerSupplyDock(); + dumpLogBufferTcpm(); + dumpTcpc(); + dumpPdEngine(); + dumpWc68(); + dumpLn8411(); + dumpBatteryHealth(); + dumpBatteryDefend(); + dumpChgUserDebug(); + dumpBatteryEeprom(); + dumpChargerStats(); + dumpWlcLogs(); + dumpGvoteables(); + dumpMitigation(); + dumpMitigationStats(); + dumpMitigationDirs(); + dumpIrqDurationCounts(); +} diff --git a/dumpstate/dump_power.rc b/dumpstate/dump_power.rc new file mode 100644 index 00000000..3ccc2f3c --- /dev/null +++ b/dumpstate/dump_power.rc @@ -0,0 +1,131 @@ +on init + # Dump maxfg + chown system system /sys/class/power_supply/maxfg/m5_model_state + chown system system /sys/class/power_supply/maxfg_base/model_state + chown system system /sys/class/power_supply/max77779fg/model_state + + # Dump eeprom + chown system system /sys/devices/platform/10c90000.hsi2c/i2c-9/9-0050/eeprom + chown system system /sys/devices/platform/10ca0000.hsi2c/i2c-10/10-0050/eeprom + + chown system system /dev/battery_history + chmod 0644 /dev/battery_history + + chown system system /dev/maxfg_history + chmod 0644 /dev/maxfg_history + + # Charge stats (write 0) + chown system system /sys/class/power_supply/battery/charge_stats + + # Pca Charge stats (write 0) + chown system system /sys/class/power_supply/dc-mains/device/chg_stats + + # Wireless Charge stats (write 0) + chown system system /sys/class/power_supply/wireless/device/charge_stats + + # Thermal Charge stats (write 0) + chown system system /sys/devices/platform/google,charger/thermal_stats + + # Google Charger stats (write 0) + chown system system /sys/devices/platform/google,charger/charge_stats + + # Permission for wireless charging + chown system system /sys/class/power_supply/wireless/capacity + chown system system /sys/class/power_supply/wireless/device/rtx + chown system system /sys/class/power_supply/wireless/device/rxdata + chown system system /sys/class/power_supply/wireless/device/txdata + chown system system /sys/class/power_supply/wireless/device/rxlen + chown system system /sys/class/power_supply/wireless/device/txlen + chown system system /sys/class/power_supply/wireless/device/ccreset + chown system system /sys/class/power_supply/wireless/device/status + chown system system /sys/class/power_supply/wireless/device/version + chown system system /sys/class/power_supply/wireless/device/features + chown system system /sys/class/power_supply/wireless/device/authtype + chown system system /sys/class/power_supply/wireless/device/authstart + + # Adaptive charge + chown system system /sys/class/power_supply/battery/charge_deadline + + # Charging policy + chown system system /sys/class/power_supply/battery/charging_policy + + # BatteryHealthData + chown system system /sys/class/power_supply/battery/first_usage_date + + # Battery Defender + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_cnt + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_dry_run + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_enable + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_recharge_soc + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_reset_sec + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_clear + chown system system /sys/devices/platform/google,battery/power_supply/battery/health_safety_margin + chown system system /sys/devices/platform/google,battery/power_supply/battery/swelling_data + chown system system /sys/devices/platform/google,charger/bd_drainto_soc + chown system system /sys/devices/platform/google,charger/bd_recharge_soc + chown system system /sys/devices/platform/google,charger/bd_recharge_voltage + chown system system /sys/devices/platform/google,charger/bd_resume_abs_temp + chown system system /sys/devices/platform/google,charger/bd_resume_soc + chown system system /sys/devices/platform/google,charger/bd_resume_temp + chown system system /sys/devices/platform/google,charger/bd_resume_time + chown system system /sys/devices/platform/google,charger/bd_temp_dry_run + chown system system /sys/devices/platform/google,charger/bd_temp_enable + chown system system /sys/devices/platform/google,charger/bd_trigger_temp + 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/charge_start_level + chown system system /sys/devices/platform/google,charger/charge_stop_level + chown system system /sys/devices/platform/google,cpm/dc_ctl + # Important to include dd_state as it's used in battery defender in charger mode + chown system system /sys/devices/platform/google,charger/dd_state + chown system system /sys/devices/platform/google,charger/dd_settings + + # for parsing thismeal.bin + chown system system /vendor/bin/hw/battery_mitigation + +on early-boot + # Wait for insmod_sh to finish all common modules + wait_for_prop vendor.common.modules.ready 1 + + # logbuffer + chown system system /dev/logbuffer_maxfg + chown system system /dev/logbuffer_maxfg_monitor + chown system system /dev/logbuffer_max77779fg + chown system system /dev/logbuffer_max77779fg_monitor + chown system system /dev/logbuffer_maxfg_base + 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_maxq + chown system system /dev/logbuffer_rtx + chown system system /dev/logbuffer_ssoc + chown system system /dev/logbuffer_ttf + chown system system /dev/logbuffer_tcpm + 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_cpm + chown system system /dev/logbuffer_wc68 + chown system system /dev/logbuffer_max77779_fwupdate + +on property:sys.boot_completed=1 + # gvotables for dumpstate + chown system system /sys/kernel/debug/gvotables + + # Permission for wireless charging + chown system system /sys/class/power_supply/wireless/capacity + chown system system /sys/class/power_supply/wireless/device/rtx + chown system system /sys/class/power_supply/wireless/device/rxdata + chown system system /sys/class/power_supply/wireless/device/txdata + chown system system /sys/class/power_supply/wireless/device/rxlen + chown system system /sys/class/power_supply/wireless/device/txlen + chown system system /sys/class/power_supply/wireless/device/ccreset + chown system system /sys/class/power_supply/wireless/device/status + chown system system /sys/class/power_supply/wireless/device/version + chown system system /sys/class/power_supply/wireless/device/authstart + + # write serialno to battery path for pairing + write /sys/class/power_supply/battery/dev_sn ${ro.boot.serialno} diff --git a/dumpstate/item.mk b/dumpstate/item.mk index 7a1d2ba0..6f4299bf 100644 --- a/dumpstate/item.mk +++ b/dumpstate/item.mk @@ -1,2 +1,2 @@ -PRODUCT_PACKAGES += dump_gs101.sh +PRODUCT_PACKAGES += dump_power From 8d0a51e5911d50cf7ef41bbc0f19661b9e6ee5f4 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Fri, 23 Aug 2024 18:10:22 +0000 Subject: [PATCH 19/25] usb: correct sys.usb.controller sysprop system/core/init/init.cpp SetUsbController picks the first udc device if there're multiple udc devices present on the system to populate sys.usb.controller system property. CONFIG_USB_DUMMY_HCD enabled in kernel-5.10 GKI would introduce a dummy udc device named "dummy_udc.0". Depends on timing, the dummy device might be picked up by the init process and incorrectly populate sys.usb.controller. This issue only applies to devices on kernel-5.10 GKI, the WAR is to overwrite the sysprop if it's incorrectly populated by the dummy udc. Bug: 333778731 Test: tested on Cheetah Flag: EXEMPT bugfix Change-Id: Idefd1a5d8154a51792c6cb52ee6d11cbb7f6df78 --- conf/init.gs101.usb.rc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/init.gs101.usb.rc b/conf/init.gs101.usb.rc index 69bbf493..0243d0f1 100644 --- a/conf/init.gs101.usb.rc +++ b/conf/init.gs101.usb.rc @@ -414,3 +414,7 @@ on property:vendor.usb.contaminantdisable=true on property:ro.bootmode=usbuwb setprop persist.vendor.usb.usbradio.config uwb_acm + +# WAR for kernel 5.10 with CONFIG_USB_DUMMY_HCD enabled +on property:sys.usb.controller=dummy_udc.0 + setprop sys.usb.controller "11110000.dwc3" From dc56b4d57bcd4adf880b41f05896d6bbe0ba5948 Mon Sep 17 00:00:00 2001 From: Masha Chizhova Date: Thu, 29 Aug 2024 10:11:54 +0000 Subject: [PATCH 20/25] Define use_hwc2 variable Bug: 340865092 Change-Id: I5e55034c5e5d03089453c843753af3419026d3cb Flag: TEST_ONLY --- device.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/device.mk b/device.mk index 8992a82c..0f430f1c 100644 --- a/device.mk +++ b/device.mk @@ -213,6 +213,8 @@ PRODUCT_SOONG_NAMESPACES += \ vendor/arm/mali/valhall $(call soong_config_set,pixel_mali,soc,$(TARGET_BOARD_PLATFORM)) +# Used in gfx_tools when defining tests with composer2 interface for gs101 devices +$(call soong_config_set,gfx_tools,use_hwc2,true) include device/google/gs-common/gpu/gpu.mk PRODUCT_PACKAGES += \ From c38c1cc1a9815a620f78f54fadb6f886095df88c Mon Sep 17 00:00:00 2001 From: Ankit Goyal Date: Wed, 28 Aug 2024 22:53:32 -0700 Subject: [PATCH 21/25] Delete mapper4 manifest Bug: 362183626 Flag: EXEMPT manifest update Test: Boot to home on shiba Change-Id: Iec298886a796f49145cf4400ef2e086a6312d572 --- manifest.xml | 9 --------- manifest_64.xml | 9 --------- 2 files changed, 18 deletions(-) diff --git a/manifest.xml b/manifest.xml index 02a3b593..05b09ddc 100644 --- a/manifest.xml +++ b/manifest.xml @@ -12,15 +12,6 @@ default - - android.hardware.graphics.mapper - passthrough - 4.0 - - IMapper - default - - android.hardware.graphics.composer hwbinder diff --git a/manifest_64.xml b/manifest_64.xml index d8d7b111..73d3d924 100644 --- a/manifest_64.xml +++ b/manifest_64.xml @@ -1,13 +1,4 @@ - - android.hardware.graphics.mapper - passthrough - 4.0 - - IMapper - default - - android.hardware.graphics.composer hwbinder From 0c84b40b0024c524277f270bd7048d1d32102fec Mon Sep 17 00:00:00 2001 From: carmenyip Date: Tue, 27 Aug 2024 08:20:31 +0000 Subject: [PATCH 22/25] extended_log: update directory permissions for gs101 Bug: 336638376 Test: $ cd data/vendor/radio $ ls -la Flag: NONE changing directory permissions only Change-Id: Id6a76769e84f778e730cfcdffcd6779b5d8c89ce --- conf/init.gs101.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index 54832adc..ee643b1b 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -379,7 +379,7 @@ on post-fs-data mkdir /data/vendor/radio/logs/always-on 777 system radio # Modem extended log folder - mkdir /data/vendor/radio/extended_logs 0770 radio system + mkdir /data/vendor/radio/extended_logs 0771 radio system # Modem MDS log folder mkdir /data/vendor/radio/mds 0771 radio system From e7603cd7a950f90b33f26da44bddf60593a96283 Mon Sep 17 00:00:00 2001 From: samou Date: Wed, 4 Sep 2024 16:22:39 +0000 Subject: [PATCH 23/25] bcl: remove charging debugfs data logging Flag: EXEMPT refactor Bug: 362671589 Signed-off-by: samou Change-Id: I389f4318f9fc62039d422e5c909576c0e6d5daf9 --- dumpstate/dump_power.cpp | 49 ---------------------------------------- 1 file changed, 49 deletions(-) diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp index cdbfe648..ba96a0cc 100644 --- a/dumpstate/dump_power.cpp +++ b/dumpstate/dump_power.cpp @@ -118,7 +118,6 @@ void dumpAcpmStats() { void dumpPowerSupplyStats() { const char* dumpList[][2] = { {"CPU PM stats", "/sys/devices/system/cpu/cpupm/cpupm/time_in_state"}, - {"GENPD summary", "/d/pm_genpd/pm_genpd_summary"}, {"Power supply property battery", "/sys/class/power_supply/battery/uevent"}, {"Power supply property dc", "/sys/class/power_supply/dc/uevent"}, {"Power supply property gcpm", "/sys/class/power_supply/gcpm/uevent"}, @@ -293,53 +292,6 @@ void dumpBatteryDefend() { files.clear(); } } -void dumpChgUserDebug() { - std::vector files; - struct dirent *entry; - std::string content; - const char *chgUserDebug [][2] { - {"DC_registers dump", "/sys/class/power_supply/dc-mains/device/registers_dump"}, - {"max77759_chg registers dump", "/d/max77759_chg/registers"}, - {"max77729_pmic registers dump", "/d/max77729_pmic/registers"}, - {"Charging table dump", "/d/google_battery/chg_raw_profile"}, - }; - const std::string debugfs = "/d/"; - const char *maxFgStrMatch = "maxfg"; - const char *fgInfo [][2] { - {"fg_model", "fg_model"}, - {"fg_alo_ver", "algo_ver"}, - {"fg_model_ok", "model_ok"}, - {"fg registers", "registers"}, - {"Maxim FG NV RAM", "nv_registers"}, - }; - if (!isUserBuild()) - return; - for (auto &row : chgUserDebug) { - dumpFileContent(row[0], row[1]); - } - for (auto &info : fgInfo) { - DIR *dir = opendir(debugfs.c_str()); - if (dir == NULL) - return; - printTitle(info[0]); - while ((entry = readdir(dir)) != NULL) - if (std::string(entry->d_name).find(maxFgStrMatch) != std::string::npos) - files.push_back(entry->d_name); - closedir(dir); - sort(files.begin(), files.end()); - for (auto &file : files) { - std::string fileDirectory = debugfs + file; - std::string fileLocation = fileDirectory + "/" + std::string(info[1]); - if (!android::base::ReadFileToString(fileLocation, &content)) { - content = "\n"; - } - printf("%s:\n%s", fileDirectory.c_str(), content.c_str()); - if (content.back() != '\n') - printf("\n"); - } - files.clear(); - } -} void dumpBatteryEeprom() { const char *title = "Battery EEPROM"; const char *files[] { @@ -711,7 +663,6 @@ int main() { dumpLn8411(); dumpBatteryHealth(); dumpBatteryDefend(); - dumpChgUserDebug(); dumpBatteryEeprom(); dumpChargerStats(); dumpWlcLogs(); From 5c249e52ce38d8926269b58d98a455ecb0d34759 Mon Sep 17 00:00:00 2001 From: Ocean Chen Date: Wed, 4 Sep 2024 13:26:21 +0800 Subject: [PATCH 24/25] Switch from the BFQ to the mq-deadline I/O scheduler The mq-deadline I/O scheduler is more stable than BFQ. Additionally, the boot time is shorter with the mq-deadline I/O scheduler. It only changes the scheduler on new kernel. Bug: 186902601 Test: forrest build Change-Id: I9433d73e7ed4bfd5e72a0f8318e959373e76202e Signed-off-by: Ocean Chen --- conf/init.gs101.rc | 5 +---- device.mk | 8 ++++++++ storage/5.10/init.gs101.storage.rc | 3 +++ storage/6.1/init.gs101.storage.rc | 2 ++ 4 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 storage/5.10/init.gs101.storage.rc create mode 100644 storage/6.1/init.gs101.storage.rc diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index ee643b1b..a3a7156b 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -1,3 +1,4 @@ +import /vendor/etc/init/hw/init.gs101.storage.rc import /vendor/etc/init/hw/init.gs101.usb.rc import android.hardware.drm@1.2-service.widevine.rc import init.exynos.sensorhub.rc @@ -15,10 +16,6 @@ on init # Disable util-awareness write /proc/vendor_sched/teo_util_threshold "1024 1024 1024" - # Boot time fs tuning - write /sys/block/sda/queue/scheduler bfq - write /sys/block/sda/queue/iosched/slice_idle 0 - chown system system /proc/vendor_sched/groups/bg/set_task_group chown system system /proc/vendor_sched/groups/cam/set_task_group chown system system /proc/vendor_sched/groups/fg/set_task_group diff --git a/device.mk b/device.mk index 0f430f1c..b0cd0662 100644 --- a/device.mk +++ b/device.mk @@ -327,6 +327,14 @@ PRODUCT_COPY_FILES += \ device/google/gs101/conf/init.debug.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.debug.rc endif +ifneq (,$(filter 5.%, $(TARGET_LINUX_KERNEL_VERSION))) +PRODUCT_COPY_FILES += \ + device/google/gs101/storage/5.10/init.gs101.storage.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.gs101.storage.rc +else +PRODUCT_COPY_FILES += \ + device/google/gs101/storage/6.1/init.gs101.storage.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.gs101.storage.rc +endif + # Recovery files PRODUCT_COPY_FILES += \ device/google/gs101/conf/init.recovery.device.rc:$(TARGET_COPY_OUT_RECOVERY)/root/init.recovery.gs101.rc diff --git a/storage/5.10/init.gs101.storage.rc b/storage/5.10/init.gs101.storage.rc new file mode 100644 index 00000000..7df260de --- /dev/null +++ b/storage/5.10/init.gs101.storage.rc @@ -0,0 +1,3 @@ +on init + write /sys/block/sda/queue/scheduler bfq + write /sys/block/sda/queue/iosched/slice_idle 0 \ No newline at end of file diff --git a/storage/6.1/init.gs101.storage.rc b/storage/6.1/init.gs101.storage.rc new file mode 100644 index 00000000..3d88bb69 --- /dev/null +++ b/storage/6.1/init.gs101.storage.rc @@ -0,0 +1,2 @@ +on init + write /sys/block/sda/queue/scheduler mq-deadline \ No newline at end of file From b6da7df66ee9a45e8a5dd8b3b61a830955108a27 Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Mon, 1 Jul 2024 08:51:33 +0000 Subject: [PATCH 25/25] Add input event profile to mitigate input latency of input threads Bug: 347122505 Test: check the priority and latency of input thread in Perffeto Flag: NONE early device setting updates Change-Id: I0c0a39e3fc03d8df4e9e87cf61fb8e1dafcfc996 --- conf/init.gs101.rc | 4 ++++ task_profiles.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index a3a7156b..0edace57 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -44,6 +44,8 @@ on init chown system system /proc/vendor_sched/prefer_idle_clear chown system system /proc/vendor_sched/pmu_poll_enable chown system system /proc/vendor_sched/pmu_poll_time + chown system system /proc/vendor_sched/uclamp_fork_reset_clear + chown system system /proc/vendor_sched/uclamp_fork_reset_set chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/lcpi_threshold chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/spc_threshold chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/limit_frequency @@ -93,6 +95,8 @@ on init chmod 0220 /proc/vendor_sched/prefer_idle_clear chmod 0220 /proc/vendor_sched/pmu_poll_enable chmod 0220 /proc/vendor_sched/pmu_poll_time + chmod 0220 /proc/vendor_sched/uclamp_fork_reset_clear + chmod 0220 /proc/vendor_sched/uclamp_fork_reset_set start vendor.keymaster-3-0 diff --git a/task_profiles.json b/task_profiles.json index fda6c3ea..81e5e41f 100644 --- a/task_profiles.json +++ b/task_profiles.json @@ -288,6 +288,10 @@ { "Name": "OtaProfiles", "Profiles": [ "OtaPerformance", "ProcessCapacityNormal", "LowIoPriority", "TimerSlackHigh" ] + }, + { + "Name": "InputPolicy", + "Profiles": [ "ResetUclampGrp" ] } ] }