From 83662ab93f1521193fca801bfe1baf83efe4c01b Mon Sep 17 00:00:00 2001 From: Giovanni Ricca <giovanniricca@protonmail.com> Date: Sun, 24 Apr 2022 17:59:36 +0200 Subject: [PATCH] sm8350-common: rootdir: Add shima and yupik kernel post_boot scripts While at it, update lahaina one from odin V12.5.12.0.RKMCNXM Apply the following commits to all scripts: commit a7efe9f3af96175fa2f2cfab9f21ba83cf572182 Author: Cosmin Tanislav <demonsingur@gmail.com> Date: Tue Sep 28 09:15:41 2021 +0300 sm8350-common: rootdir: remove cpu 7 from foreground tasks commit 52fde070d638e361bedf025a7dfac620a44697a0 Author: Cosmin Tanislav <demonsingur@gmail.com> Date: Fri Sep 24 02:44:34 2021 +0300 sm8350-common: rootdir: do not touch sleep disabled commit 30ddf5a818542ebb5abb0c514f497abbf32bd34d Author: Cosmin Tanislav <demonsingur@gmail.com> Date: Sat Sep 18 02:57:51 2021 +0300 sm8350-common: rootdir: cleanup Change-Id: Ibd4e8717b52c35faa4d43ade170dbde58c04ed37 --- common.mk | 3 + rootdir/bin/init.kernel.post_boot-lahaina.sh | 17 +- rootdir/bin/init.kernel.post_boot-shima.sh | 382 +++++++++++++++++++ rootdir/bin/init.kernel.post_boot-yupik.sh | 359 +++++++++++++++++ rootdir/bin/init.kernel.post_boot.sh | 52 +++ rootdir/etc/init.qti.kernel.rc | 2 +- 6 files changed, 799 insertions(+), 16 deletions(-) create mode 100755 rootdir/bin/init.kernel.post_boot-shima.sh create mode 100755 rootdir/bin/init.kernel.post_boot-yupik.sh create mode 100755 rootdir/bin/init.kernel.post_boot.sh diff --git a/common.mk b/common.mk index 48cefba..b804934 100644 --- a/common.mk +++ b/common.mk @@ -250,6 +250,9 @@ PRODUCT_COPY_FILES += \ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/rootdir/bin/init.kernel.post_boot-lahaina.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.kernel.post_boot-lahaina.sh \ + $(LOCAL_PATH)/rootdir/bin/init.kernel.post_boot-shima.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.kernel.post_boot-shima.sh \ + $(LOCAL_PATH)/rootdir/bin/init.kernel.post_boot-yupik.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.kernel.post_boot-yupik.sh \ + $(LOCAL_PATH)/rootdir/bin/init.kernel.post_boot.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.kernel.post_boot.sh \ $(LOCAL_PATH)/rootdir/bin/init.qcom.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.qcom.sh \ $(LOCAL_PATH)/rootdir/bin/vendor_modprobe.sh:$(TARGET_COPY_OUT_VENDOR)/bin/vendor_modprobe.sh diff --git a/rootdir/bin/init.kernel.post_boot-lahaina.sh b/rootdir/bin/init.kernel.post_boot-lahaina.sh index bec5716..fe19d68 100755 --- a/rootdir/bin/init.kernel.post_boot-lahaina.sh +++ b/rootdir/bin/init.kernel.post_boot-lahaina.sh @@ -1,5 +1,5 @@ #============================================================================= -# Copyright (c) 2020 Qualcomm Technologies, Inc. +# Copyright (c) 2020-2021 Qualcomm Technologies, Inc. # All Rights Reserved. # Confidential and Proprietary - Qualcomm Technologies, Inc. # @@ -61,7 +61,7 @@ function configure_zram_parameters() { if [ -f /sys/block/zram0/use_dedup ]; then echo 1 > /sys/block/zram0/use_dedup fi - echo "$zRamSizeMB""$diskSizeUnit" > /sys/block/zram0/disksize + # echo "$zRamSizeMB""$diskSizeUnit" > /sys/block/zram0/disksize # ZRAM may use more memory than it saves if SLAB_STORE_USER # debug option is enabled. @@ -127,18 +127,6 @@ function configure_memory_parameters() { echo 100 > /proc/sys/vm/swappiness echo 1 > /proc/sys/vm/watermark_scale_factor echo 0 > /proc/sys/vm/watermark_boost_factor - - # add memory limit to camera cgroup - MemTotalStr=`cat /proc/meminfo | grep MemTotal` - MemTotal=${MemTotalStr:16:8} - - if [ $MemTotal -gt 8388608 ]; then - let LimitSize=838860800 - else - let LimitSize=524288000 - fi - - echo $LimitSize > /dev/memcg/camera/memory.soft_limit_in_bytes } rev=`cat /sys/devices/soc0/revision` @@ -348,7 +336,6 @@ do echo 50 > $qoslat/mem_latency/ratio_ceil done done - echo deep > /sys/power/mem_sleep configure_memory_parameters diff --git a/rootdir/bin/init.kernel.post_boot-shima.sh b/rootdir/bin/init.kernel.post_boot-shima.sh new file mode 100755 index 0000000..12ebfd2 --- /dev/null +++ b/rootdir/bin/init.kernel.post_boot-shima.sh @@ -0,0 +1,382 @@ +#============================================================================= +# Copyright (c) 2020 Qualcomm Technologies, Inc. +# All Rights Reserved. +# Confidential and Proprietary - Qualcomm Technologies, Inc. +# +# Copyright (c) 2009-2012, 2014-2019, The Linux Foundation. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Linux Foundation nor +# the names of its contributors may be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +function configure_zram_parameters() { + MemTotalStr=`cat /proc/meminfo | grep MemTotal` + MemTotal=${MemTotalStr:16:8} + + low_ram=`getprop ro.config.low_ram` + + # Zram disk - 75% for Go and < 2GB devices . + # For >2GB Non-Go devices, size = 50% of RAM size. Limit the size to 4GB. + # And enable lz4 zram compression for Go targets. + + let RamSizeGB="( $MemTotal / 1048576 ) + 1" + diskSizeUnit=M + if [ $RamSizeGB -le 2 ]; then + let zRamSizeMB="( $RamSizeGB * 1024 ) * 3 / 4" + else + let zRamSizeMB="( $RamSizeGB * 1024 ) / 2" + fi + + # use MB avoid 32 bit overflow + if [ $zRamSizeMB -gt 4096 ]; then + let zRamSizeMB=4096 + fi + + if [ "$low_ram" == "true" ]; then + echo lz4 > /sys/block/zram0/comp_algorithm + fi + + if [ -f /sys/block/zram0/disksize ]; then + if [ -f /sys/block/zram0/use_dedup ]; then + echo 1 > /sys/block/zram0/use_dedup + fi + #echo "$zRamSizeMB""$diskSizeUnit" > /sys/block/zram0/disksize + + # ZRAM may use more memory than it saves if SLAB_STORE_USER + # debug option is enabled. + if [ -e /sys/kernel/slab/zs_handle ]; then + echo 0 > /sys/kernel/slab/zs_handle/store_user + fi + if [ -e /sys/kernel/slab/zspage ]; then + echo 0 > /sys/kernel/slab/zspage/store_user + fi + + mkswap /dev/block/zram0 + swapon /dev/block/zram0 -p 32758 + fi +} + +function configure_read_ahead_kb_values() { + MemTotalStr=`cat /proc/meminfo | grep MemTotal` + MemTotal=${MemTotalStr:16:8} + + dmpts=$(ls /sys/block/*/queue/read_ahead_kb | grep -e dm -e mmc) + + # Set 128 for <= 3GB & + # set 512 for >= 4GB targets. + if [ $MemTotal -le 3145728 ]; then + ra_kb=128 + else + ra_kb=512 + fi + if [ -f /sys/block/mmcblk0/bdi/read_ahead_kb ]; then + echo $ra_kb > /sys/block/mmcblk0/bdi/read_ahead_kb + fi + if [ -f /sys/block/mmcblk0rpmb/bdi/read_ahead_kb ]; then + echo $ra_kb > /sys/block/mmcblk0rpmb/bdi/read_ahead_kb + fi + for dm in $dmpts; do + echo $ra_kb > $dm + done +} + +function configure_memory_parameters() { + # Set Memory parameters. + # + # Set per_process_reclaim tuning parameters + # All targets will use vmpressure range 50-70, + # All targets will use 512 pages swap size. + # + # Set Low memory killer minfree parameters + # 32 bit Non-Go, all memory configurations will use 15K series + # 32 bit Go, all memory configurations will use uLMK + Memcg + # 64 bit will use Google default LMK series. + # + # Set ALMK parameters (usually above the highest minfree values) + # vmpressure_file_min threshold is always set slightly higher + # than LMK minfree's last bin value for all targets. It is calculated as + # vmpressure_file_min = (last bin - second last bin ) + last bin + # + # Set allocstall_threshold to 0 for all targets. + # + + ProductName=`getprop ro.product.name` + + configure_zram_parameters + configure_read_ahead_kb_values + echo 0 > /proc/sys/vm/page-cluster + echo 100 > /proc/sys/vm/swappiness + + # Disable wsf beacause we are using efk. + # wsf Range : 1..1000. So set to bare minimum value 1. + echo 1 > /proc/sys/vm/watermark_scale_factor + echo 0 > /proc/sys/vm/watermark_boost_factor + + #Spawn 2 kswapd threads which can help in fast reclaiming of pages + echo 2 > /proc/sys/vm/kswapd_threads +} + +rev=`cat /sys/devices/soc0/revision` +ddr_type=`od -An -tx /proc/device-tree/memory/ddr_device_type` +ddr_type4="07" +ddr_type5="08" + +# Core control parameters for gold +echo 2 > /sys/devices/system/cpu/cpu4/core_ctl/min_cpus +echo 60 > /sys/devices/system/cpu/cpu4/core_ctl/busy_up_thres +echo 30 > /sys/devices/system/cpu/cpu4/core_ctl/busy_down_thres +echo 100 > /sys/devices/system/cpu/cpu4/core_ctl/offline_delay_ms +echo 3 > /sys/devices/system/cpu/cpu4/core_ctl/task_thres + +# Core control parameters for gold+ +echo 0 > /sys/devices/system/cpu/cpu7/core_ctl/min_cpus +echo 60 > /sys/devices/system/cpu/cpu7/core_ctl/busy_up_thres +echo 30 > /sys/devices/system/cpu/cpu7/core_ctl/busy_down_thres +echo 100 > /sys/devices/system/cpu/cpu7/core_ctl/offline_delay_ms +echo 1 > /sys/devices/system/cpu/cpu7/core_ctl/task_thres + +# Controls how many more tasks should be eligible to run on gold CPUs +# w.r.t number of gold CPUs available to trigger assist (max number of +# tasks eligible to run on previous cluster minus number of CPUs in +# the previous cluster). +# +# Setting to 1 by default which means there should be at least +# 4 tasks eligible to run on gold cluster (tasks running on gold cores +# plus misfit tasks on silver cores) to trigger assitance from gold+. +echo 1 > /sys/devices/system/cpu/cpu7/core_ctl/nr_prev_assist_thresh + +# Disable Core control on silver +echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable + +# Setting b.L scheduler parameters +echo 71 95 > /proc/sys/kernel/sched_upmigrate +echo 65 85 > /proc/sys/kernel/sched_downmigrate +echo 100 > /proc/sys/kernel/sched_group_upmigrate +echo 85 > /proc/sys/kernel/sched_group_downmigrate +echo 1 > /proc/sys/kernel/sched_walt_rotate_big_tasks + + +echo 0 > /proc/sys/kernel/sched_coloc_busy_hysteresis_enable_cpus + +# cpuset parameters +echo 0-2 > /dev/cpuset/background/cpus +echo 0-3 > /dev/cpuset/system-background/cpus +echo 4-6 > /dev/cpuset/foreground/boost/cpus +echo 0-2,4-6 > /dev/cpuset/foreground/cpus +echo 0-7 > /dev/cpuset/top-app/cpus + +#io limit +echo 11 > /dev/cpuset/top-app/types +echo 1 > /dev/cpuset/background/types +echo 9 > /dev/cpuset/foreground/types +echo 11 > /proc/sys/kernel/mi_iolimit + +# configure governor settings for silver cluster +echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor +echo 0 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/down_rate_limit_us +echo 0 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/up_rate_limit_us +echo 1171200 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/hispeed_freq +echo 691200 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq +echo 0 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/pl + +# configure input boost settings +echo "0:0 1:0 2:0 3:0 4:2131200 5:0 6:0 7:0" > /sys/devices/system/cpu/cpu_boost/powerkey_input_boost_freq +echo 400 > /sys/devices/system/cpu/cpu_boost/input_boost_ms + +# configure governor settings for gold cluster +echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor +echo 0 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/down_rate_limit_us +echo 0 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/up_rate_limit_us +echo 1209000 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/hispeed_freq +echo 691200 > /sys/devices/system/cpu/cpufreq/policy4/scaling_min_freq +echo 85 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/hispeed_load +echo -6 > /sys/devices/system/cpu/cpu4/sched_load_boost +echo -6 > /sys/devices/system/cpu/cpu5/sched_load_boost +echo -6 > /sys/devices/system/cpu/cpu6/sched_load_boost +echo 0 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/rtg_boost_freq +echo 0 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/pl + +# configure governor settings for gold+ cluster +echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy7/scaling_governor +echo 0 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/down_rate_limit_us +echo 0 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/up_rate_limit_us +echo 1267000 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/hispeed_freq +echo 806400 > /sys/devices/system/cpu/cpufreq/policy7/scaling_min_freq +echo 85 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/hispeed_load +echo -6 > /sys/devices/system/cpu/cpu7/sched_load_boost +echo 0 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/rtg_boost_freq +echo 0 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/pl + +# colocation V3 settings +echo 691200 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/rtg_boost_freq +echo 51 > /proc/sys/kernel/sched_min_task_util_for_boost +echo 35 > /proc/sys/kernel/sched_min_task_util_for_colocation +echo 20000000 > /proc/sys/kernel/sched_task_unfilter_period + +# Enable conservative pl +echo 1 > /proc/sys/kernel/sched_conservative_pl + +# configure bus-dcvs +for device in /sys/devices/platform/soc +do + for cpubw in $device/*cpu-cpu-llcc-bw/devfreq/*cpu-cpu-llcc-bw + do + cat $cpubw/available_frequencies | cut -d " " -f 1 > $cpubw/min_freq + echo "2288 4577 7110 9155 12298 14236 15258" > $cpubw/bw_hwmon/mbps_zones + echo 4 > $cpubw/bw_hwmon/sample_ms + echo 68 > $cpubw/bw_hwmon/io_percent + echo 20 > $cpubw/bw_hwmon/hist_memory + echo 0 > $cpubw/bw_hwmon/hyst_length + echo 80 > $cpubw/bw_hwmon/down_thres + echo 0 > $cpubw/bw_hwmon/guard_band_mbps + echo 250 > $cpubw/bw_hwmon/up_scale + echo 1600 > $cpubw/bw_hwmon/idle_mbps + echo 40 > $cpubw/polling_interval + done + + for llccbw in $device/*cpu-llcc-ddr-bw/devfreq/*cpu-llcc-ddr-bw + do + cat $llccbw/available_frequencies | cut -d " " -f 1 > $llccbw/min_freq + if [ ${ddr_type:4:2} == $ddr_type4 ]; then + echo "1144 1720 2086 2929 3879 5931 6515 8136" > $llccbw/bw_hwmon/mbps_zones + elif [ ${ddr_type:4:2} == $ddr_type5 ]; then + echo "1144 1720 2086 2929 3879 5931 6515 7980 12191" > $llccbw/bw_hwmon/mbps_zones + fi + echo 4 > $llccbw/bw_hwmon/sample_ms + echo 68 > $llccbw/bw_hwmon/io_percent + echo 20 > $llccbw/bw_hwmon/hist_memory + echo 0 > $llccbw/bw_hwmon/hyst_length + echo 80 > $llccbw/bw_hwmon/down_thres + echo 0 > $llccbw/bw_hwmon/guard_band_mbps + echo 250 > $llccbw/bw_hwmon/up_scale + echo 1600 > $llccbw/bw_hwmon/idle_mbps + echo 48 > $llccbw/polling_interval + done + + for l3bw in $device/*snoop-l3-bw/devfreq/*snoop-l3-bw + do + cat $l3bw/available_frequencies | cut -d " " -f 1 > $l3bw/min_freq + echo 4 > $l3bw/bw_hwmon/sample_ms + echo 10 > $l3bw/bw_hwmon/io_percent + echo 20 > $l3bw/bw_hwmon/hist_memory + echo 10 > $l3bw/bw_hwmon/hyst_length + echo 0 > $l3bw/bw_hwmon/down_thres + echo 0 > $l3bw/bw_hwmon/guard_band_mbps + echo 0 > $l3bw/bw_hwmon/up_scale + echo 1600 > $l3bw/bw_hwmon/idle_mbps + echo 9155 > $l3bw/max_freq + echo 40 > $l3bw/polling_interval + done + + # configure mem_latency settings for LLCC and DDR scaling and qoslat + for memlat in $device/*lat/devfreq/*lat + do + cat $memlat/available_frequencies | cut -d " " -f 1 > $memlat/min_freq + echo 8 > $memlat/polling_interval + echo 400 > $memlat/mem_latency/ratio_ceil + done + + # configure compute settings for silver latfloor + for latfloor in $device/*cpu0-cpu*latfloor/devfreq/*cpu0-cpu*latfloor + do + cat $latfloor/available_frequencies | cut -d " " -f 1 > $latfloor/min_freq + echo 8 > $latfloor/polling_interval + done + + # configure compute settings for gold latfloor + for latfloor in $device/*cpu4-cpu*latfloor/devfreq/*cpu4-cpu*latfloor + do + cat $latfloor/available_frequencies | cut -d " " -f 1 > $latfloor/min_freq + echo 8 > $latfloor/polling_interval + done + + # configure mem_latency settings for prime latfloor + for latfloor in $device/*cpu7-cpu*latfloor/devfreq/*cpu7-cpu*latfloor + do + cat $latfloor/available_frequencies | cut -d " " -f 1 > $latfloor/min_freq + echo 8 > $latfloor/polling_interval + echo 25000 > $latfloor/mem_latency/ratio_ceil + done + + # CPU4 L3 ratio ceil + for l3gold in $device/*cpu4-cpu-l3-lat/devfreq/*cpu4-cpu-l3-lat + do + echo 4000 > $l3gold/mem_latency/ratio_ceil + echo 25000 > $l3gold/mem_latency/wb_filter_ratio + echo 60 > $l3gold/mem_latency/wb_pct_thres + done + + # CPU5 L3 ratio ceil + for l3gold in $device/*cpu5-cpu-l3-lat/devfreq/*cpu5-cpu-l3-lat + do + echo 4000 > $l3gold/mem_latency/ratio_ceil + echo 25000 > $l3gold/mem_latency/wb_filter_ratio + echo 60 > $l3gold/mem_latency/wb_pct_thres + done + + # CPU6 L3 ratio ceil + for l3gold in $device/*cpu6-cpu-l3-lat/devfreq/*cpu6-cpu-l3-lat + do + echo 4000 > $l3gold/mem_latency/ratio_ceil + echo 25000 > $l3gold/mem_latency/wb_filter_ratio + echo 60 > $l3gold/mem_latency/wb_pct_thres + done + + # prime L3 ratio ceil + for l3prime in $device/*cpu7-cpu-l3-lat/devfreq/*cpu7-cpu-l3-lat + do + echo 20000 > $l3prime/mem_latency/ratio_ceil + echo 25000 > $l3prime/mem_latency/wb_filter_ratio + echo 60 > $l3prime/mem_latency/wb_pct_thres + done + + # qoslat ratio ceil + for qoslat in $device/*qoslat/devfreq/*qoslat + do + echo 50 > $qoslat/mem_latency/ratio_ceil + done +done + +# set s2idle as default suspend mode +echo s2idle > /sys/power/mem_sleep + +configure_memory_parameters + +# Let kernel know our image version/variant/crm_version +if [ -f /sys/devices/soc0/select_image ]; then + image_version="10:" + image_version+=`getprop ro.build.id` + image_version+=":" + image_version+=`getprop ro.build.version.incremental` + image_variant=`getprop ro.product.name` + image_variant+="-" + image_variant+=`getprop ro.build.type` + oem_version=`getprop ro.build.version.codename` + echo 10 > /sys/devices/soc0/select_image + echo $image_version > /sys/devices/soc0/image_version + echo $image_variant > /sys/devices/soc0/image_variant + echo $oem_version > /sys/devices/soc0/image_crm_version +fi + +setprop vendor.post_boot.parsed 1 diff --git a/rootdir/bin/init.kernel.post_boot-yupik.sh b/rootdir/bin/init.kernel.post_boot-yupik.sh new file mode 100755 index 0000000..5c6e8cf --- /dev/null +++ b/rootdir/bin/init.kernel.post_boot-yupik.sh @@ -0,0 +1,359 @@ +#============================================================================= +# Copyright (c) 2020-2021 Qualcomm Technologies, Inc. +# All Rights Reserved. +# Confidential and Proprietary - Qualcomm Technologies, Inc. +# +# Copyright (c) 2009-2012, 2014-2019, The Linux Foundation. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Linux Foundation nor +# the names of its contributors may be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +function configure_zram_parameters() { + MemTotalStr=`cat /proc/meminfo | grep MemTotal` + MemTotal=${MemTotalStr:16:8} + + low_ram=`getprop ro.config.low_ram` + + # Zram disk - 75% for Go and < 2GB devices . + # For >2GB Non-Go devices, size = 50% of RAM size. Limit the size to 4GB. + # And enable lz4 zram compression for Go targets. + + let RamSizeGB="( $MemTotal / 1048576 ) + 1" + diskSizeUnit=M + if [ $RamSizeGB -le 2 ]; then + let zRamSizeMB="( $RamSizeGB * 1024 ) * 3 / 4" + else + let zRamSizeMB="( $RamSizeGB * 1024 ) / 2" + fi + + # use MB avoid 32 bit overflow + if [ $zRamSizeMB -gt 4096 ]; then + let zRamSizeMB=4096 + fi + + if [ "$low_ram" == "true" ]; then + echo lz4 > /sys/block/zram0/comp_algorithm + fi + + if [ -f /sys/block/zram0/disksize ]; then + if [ -f /sys/block/zram0/use_dedup ]; then + echo 1 > /sys/block/zram0/use_dedup + fi + echo "$zRamSizeMB""$diskSizeUnit" > /sys/block/zram0/disksize + + # ZRAM may use more memory than it saves if SLAB_STORE_USER + # debug option is enabled. + if [ -e /sys/kernel/slab/zs_handle ]; then + echo 0 > /sys/kernel/slab/zs_handle/store_user + fi + if [ -e /sys/kernel/slab/zspage ]; then + echo 0 > /sys/kernel/slab/zspage/store_user + fi + + mkswap /dev/block/zram0 + swapon /dev/block/zram0 -p 32758 + fi +} + +function configure_read_ahead_kb_values() { + MemTotalStr=`cat /proc/meminfo | grep MemTotal` + MemTotal=${MemTotalStr:16:8} + + dmpts=$(ls /sys/block/*/queue/read_ahead_kb | grep -e dm -e mmc) + + # Set 128 for <= 3GB & + # set 512 for >= 4GB targets. + if [ $MemTotal -le 3145728 ]; then + ra_kb=128 + else + ra_kb=512 + fi + if [ -f /sys/block/mmcblk0/bdi/read_ahead_kb ]; then + echo $ra_kb > /sys/block/mmcblk0/bdi/read_ahead_kb + fi + if [ -f /sys/block/mmcblk0rpmb/bdi/read_ahead_kb ]; then + echo $ra_kb > /sys/block/mmcblk0rpmb/bdi/read_ahead_kb + fi + for dm in $dmpts; do + echo $ra_kb > $dm + done +} + +function configure_memory_parameters() { + # Set Memory parameters. + # + # Set per_process_reclaim tuning parameters + # All targets will use vmpressure range 50-70, + # All targets will use 512 pages swap size. + # + # Set Low memory killer minfree parameters + # 32 bit Non-Go, all memory configurations will use 15K series + # 32 bit Go, all memory configurations will use uLMK + Memcg + # 64 bit will use Google default LMK series. + # + # Set ALMK parameters (usually above the highest minfree values) + # vmpressure_file_min threshold is always set slightly higher + # than LMK minfree's last bin value for all targets. It is calculated as + # vmpressure_file_min = (last bin - second last bin ) + last bin + # + # Set allocstall_threshold to 0 for all targets. + # + + ProductName=`getprop ro.product.name` + + configure_zram_parameters + configure_read_ahead_kb_values + echo 100 > /proc/sys/vm/swappiness + + # Disable wsf beacause we are using efk. + # wsf Range : 1..1000. So set to bare minimum value 1. + echo 1 > /proc/sys/vm/watermark_scale_factor + + #Spawn 2 kswapd threads which can help in fast reclaiming of pages + echo 2 > /proc/sys/vm/kswapd_threads +} + +rev=`cat /sys/devices/soc0/revision` +ddr_type=`od -An -tx /proc/device-tree/memory/ddr_device_type` +ddr_type4="07" +ddr_type5="08" + +# Core control parameters for gold +# Prefer CPU4 for isolation based on the thermal characteristics. +echo 1 0 0 > /sys/devices/system/cpu/cpu4/core_ctl/not_preferred +echo 2 > /sys/devices/system/cpu/cpu4/core_ctl/min_cpus +echo 60 > /sys/devices/system/cpu/cpu4/core_ctl/busy_up_thres +echo 30 > /sys/devices/system/cpu/cpu4/core_ctl/busy_down_thres +echo 100 > /sys/devices/system/cpu/cpu4/core_ctl/offline_delay_ms +echo 3 > /sys/devices/system/cpu/cpu4/core_ctl/task_thres + +# Core control parameters for gold+ +echo 0 > /sys/devices/system/cpu/cpu7/core_ctl/min_cpus +echo 60 > /sys/devices/system/cpu/cpu7/core_ctl/busy_up_thres +echo 30 > /sys/devices/system/cpu/cpu7/core_ctl/busy_down_thres +echo 100 > /sys/devices/system/cpu/cpu7/core_ctl/offline_delay_ms +echo 1 > /sys/devices/system/cpu/cpu7/core_ctl/task_thres + +# Controls how many more tasks should be eligible to run on gold CPUs +# w.r.t number of gold CPUs available to trigger assist (max number of +# tasks eligible to run on previous cluster minus number of CPUs in +# the previous cluster). +# +# Setting to 1 by default which means there should be at least +# 4 tasks eligible to run on gold cluster (tasks running on gold cores +# plus misfit tasks on silver cores) to trigger assitance from gold+. +echo 1 > /sys/devices/system/cpu/cpu7/core_ctl/nr_prev_assist_thresh + +# Disable Core control on silver +echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable + +# Setting b.L scheduler parameters +echo 71 95 > /proc/sys/kernel/sched_upmigrate +echo 65 85 > /proc/sys/kernel/sched_downmigrate +echo 100 > /proc/sys/kernel/sched_group_upmigrate +echo 85 > /proc/sys/kernel/sched_group_downmigrate +echo 1 > /proc/sys/kernel/sched_walt_rotate_big_tasks + + +echo 0 > /proc/sys/kernel/sched_coloc_busy_hysteresis_enable_cpus + +# cpuset parameters +echo 0-2 > /dev/cpuset/background/cpus +echo 0-3 > /dev/cpuset/system-background/cpus +echo 4-6 > /dev/cpuset/foreground/boost/cpus +echo 0-2,4-6 > /dev/cpuset/foreground/cpus +echo 0-7 > /dev/cpuset/top-app/cpus + +# configure governor settings for silver cluster +echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor +echo 0 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/down_rate_limit_us +echo 0 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/up_rate_limit_us +echo 1152000 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/hispeed_freq +echo 691200 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq +echo 0 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/pl + +# configure input boost settings +echo "0:1152000" > /sys/devices/system/cpu/cpu_boost/input_boost_freq +echo 120 > /sys/devices/system/cpu/cpu_boost/input_boost_ms + +# configure powerkey boost settings +echo "0:0 1:0 2:0 3:0 4:2131200 5:0 6:0 7:0" > /sys/devices/system/cpu/cpu_boost/powerkey_input_boost_freq +echo 400 > /sys/devices/system/cpu/cpu_boost/powerkey_input_boost_ms + +# configure governor settings for gold cluster +echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor +echo 0 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/down_rate_limit_us +echo 0 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/up_rate_limit_us +echo 1228800 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/hispeed_freq +echo 691200 > /sys/devices/system/cpu/cpufreq/policy4/scaling_min_freq +echo 85 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/hispeed_load +echo -6 > /sys/devices/system/cpu/cpu4/sched_load_boost +echo -6 > /sys/devices/system/cpu/cpu5/sched_load_boost +echo -6 > /sys/devices/system/cpu/cpu6/sched_load_boost +echo 0 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/rtg_boost_freq +echo 0 > /sys/devices/system/cpu/cpufreq/policy4/schedutil/pl + +# configure governor settings for gold+ cluster +echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy7/scaling_governor +echo 0 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/down_rate_limit_us +echo 0 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/up_rate_limit_us +echo 1324800 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/hispeed_freq +echo 806400 > /sys/devices/system/cpu/cpufreq/policy7/scaling_min_freq +echo 85 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/hispeed_load +echo -6 > /sys/devices/system/cpu/cpu7/sched_load_boost +echo 0 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/rtg_boost_freq +echo 0 > /sys/devices/system/cpu/cpufreq/policy7/schedutil/pl + +# colocation V3 settings +echo 691200 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/rtg_boost_freq +echo 51 > /proc/sys/kernel/sched_min_task_util_for_boost +echo 35 > /proc/sys/kernel/sched_min_task_util_for_colocation +echo 20000000 > /proc/sys/kernel/sched_task_unfilter_period + +# Enable conservative pl +echo 1 > /proc/sys/kernel/sched_conservative_pl + +# configure RIMPS for L3 DCVS +for c0_rimps_l3 in /sys/devices/system/cpu/memlat/c0_memlat/cpu0-cpu-l3-lat +do + cat $c0_rimps_l3/available_frequencies | cut -d " " -f 1 > $c0_rimps_l3/min_freq + echo 400 > $c0_rimps_l3/ratio_ceil + echo 3 > $c0_rimps_l3/sample_ms +done + +for c4_rimps_l3 in /sys/devices/system/cpu/memlat/c4_memlat/cpu4-cpu-l3-lat +do + cat $c4_rimps_l3/available_frequencies | cut -d " " -f 1 > $c4_rimps_l3/min_freq + echo 4000 > $c4_rimps_l3/ratio_ceil + echo 3 > $c4_rimps_l3/sample_ms + echo 60 > $c4_rimps_l3/l2wb_pct + echo 25000 > $c4_rimps_l3/l2wb_filter +done + +for c7_rimps_l3 in /sys/devices/system/cpu/memlat/c7_memlat/cpu7-cpu-l3-lat +do + cat $c7_rimps_l3/available_frequencies | cut -d " " -f 1 > $c7_rimps_l3/min_freq + echo 20000 > $c7_rimps_l3/ratio_ceil + echo 3 > $c7_rimps_l3/sample_ms + echo 60 > $c7_rimps_l3/l2wb_pct + echo 25000 > $c7_rimps_l3/l2wb_filter +done + + +# configure bus-dcvs +for device in /sys/devices/platform/soc +do + for cpubw in $device/*cpu-cpu-llcc-bw/devfreq/*cpu-cpu-llcc-bw + do + cat $cpubw/available_frequencies | cut -d " " -f 1 > $cpubw/min_freq + echo "2288 4577 7110 9155 12298 14236 15258" > $cpubw/bw_hwmon/mbps_zones + echo 4 > $cpubw/bw_hwmon/sample_ms + echo 68 > $cpubw/bw_hwmon/io_percent + echo 20 > $cpubw/bw_hwmon/hist_memory + echo 0 > $cpubw/bw_hwmon/hyst_length + echo 80 > $cpubw/bw_hwmon/down_thres + echo 0 > $cpubw/bw_hwmon/guard_band_mbps + echo 250 > $cpubw/bw_hwmon/up_scale + echo 1600 > $cpubw/bw_hwmon/idle_mbps + echo 40 > $cpubw/polling_interval + done + + for llccbw in $device/*cpu-llcc-ddr-bw/devfreq/*cpu-llcc-ddr-bw + do + cat $llccbw/available_frequencies | cut -d " " -f 1 > $llccbw/min_freq + if [ ${ddr_type:4:2} == $ddr_type4 ]; then + echo "1144 1720 2086 2929 3879 5931 6515 8136" > $llccbw/bw_hwmon/mbps_zones + elif [ ${ddr_type:4:2} == $ddr_type5 ]; then + echo "1144 1720 2086 2929 3879 5931 6515 7980 12191" > $llccbw/bw_hwmon/mbps_zones + fi + echo 4 > $llccbw/bw_hwmon/sample_ms + echo 68 > $llccbw/bw_hwmon/io_percent + echo 20 > $llccbw/bw_hwmon/hist_memory + echo 0 > $llccbw/bw_hwmon/hyst_length + echo 80 > $llccbw/bw_hwmon/down_thres + echo 0 > $llccbw/bw_hwmon/guard_band_mbps + echo 250 > $llccbw/bw_hwmon/up_scale + echo 1600 > $llccbw/bw_hwmon/idle_mbps + echo 48 > $llccbw/polling_interval + done + + for l3bw in $device/*snoop-l3-bw/devfreq/*snoop-l3-bw + do + cat $l3bw/available_frequencies | cut -d " " -f 1 > $l3bw/min_freq + echo 4 > $l3bw/bw_hwmon/sample_ms + echo 10 > $l3bw/bw_hwmon/io_percent + echo 20 > $l3bw/bw_hwmon/hist_memory + echo 10 > $l3bw/bw_hwmon/hyst_length + echo 0 > $l3bw/bw_hwmon/down_thres + echo 0 > $l3bw/bw_hwmon/guard_band_mbps + echo 0 > $l3bw/bw_hwmon/up_scale + echo 1600 > $l3bw/bw_hwmon/idle_mbps + echo 9155 > $l3bw/max_freq + echo 40 > $l3bw/polling_interval + done + + # configure mem_latency settings for LLCC and DDR scaling and qoslat + for memlat in $device/*lat/devfreq/*lat + do + cat $memlat/available_frequencies | cut -d " " -f 1 > $memlat/min_freq + echo 8 > $memlat/polling_interval + echo 400 > $memlat/mem_latency/ratio_ceil + done + + # configure compute settings for silver latfloor + for latfloor in $device/*cpu0-cpu*latfloor/devfreq/*cpu0-cpu*latfloor + do + cat $latfloor/available_frequencies | cut -d " " -f 1 > $latfloor/min_freq + echo 8 > $latfloor/polling_interval + done + + # configure compute settings for gold latfloor + for latfloor in $device/*cpu4-cpu*latfloor/devfreq/*cpu4-cpu*latfloor + do + cat $latfloor/available_frequencies | cut -d " " -f 1 > $latfloor/min_freq + echo 8 > $latfloor/polling_interval + done + + # configure mem_latency settings for prime latfloor + for latfloor in $device/*cpu7-cpu*latfloor/devfreq/*cpu7-cpu*latfloor + do + cat $latfloor/available_frequencies | cut -d " " -f 1 > $latfloor/min_freq + echo 8 > $latfloor/polling_interval + echo 25000 > $latfloor/mem_latency/ratio_ceil + done + + # qoslat ratio ceil + for qoslat in $device/*qoslat/devfreq/*qoslat + do + echo 50 > $qoslat/mem_latency/ratio_ceil + done +done + +# set s2idle as default suspend mode +echo s2idle > /sys/power/mem_sleep + +configure_memory_parameters + +setprop vendor.post_boot.parsed 1 diff --git a/rootdir/bin/init.kernel.post_boot.sh b/rootdir/bin/init.kernel.post_boot.sh new file mode 100755 index 0000000..b855bfe --- /dev/null +++ b/rootdir/bin/init.kernel.post_boot.sh @@ -0,0 +1,52 @@ +#============================================================================= +# Copyright (c) 2019-2021 Qualcomm Technologies, Inc. +# All Rights Reserved. +# Confidential and Proprietary - Qualcomm Technologies, Inc. +# +# Copyright (c) 2009-2012, 2014-2019, The Linux Foundation. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Linux Foundation nor +# the names of its contributors may be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +if [ -f /sys/devices/soc0/soc_id ]; then + platformid=`cat /sys/devices/soc0/soc_id` +fi + +case "$platformid" in + "415"|"439"|"456"|"501"|"502") + /vendor/bin/sh /vendor/bin/init.kernel.post_boot-lahaina.sh + ;; + + "450") + /vendor/bin/sh /vendor/bin/init.kernel.post_boot-shima.sh + ;; + "475"|"499"|"487"|"488"|"498"|"497"|"515") + /vendor/bin/sh /vendor/bin/init.kernel.post_boot-yupik.sh + ;; + *) + echo "***WARNING***: Invalid SoC ID\n\t No postboot settings applied!!\n" + ;; +esac + diff --git a/rootdir/etc/init.qti.kernel.rc b/rootdir/etc/init.qti.kernel.rc index f0011b9..9dec04c 100644 --- a/rootdir/etc/init.qti.kernel.rc +++ b/rootdir/etc/init.qti.kernel.rc @@ -62,7 +62,7 @@ on boot write /sys/block/sde/queue/iosched/slice_idle 0 write /sys/block/sdf/queue/iosched/slice_idle 0 -service kernel-post-boot /vendor/bin/sh /vendor/bin/init.kernel.post_boot-lahaina.sh +service kernel-post-boot /vendor/bin/sh /vendor/bin/init.kernel.post_boot.sh class core user root group root system wakelock graphics -- GitLab