1#!/system/bin/sh
2
3################################################################################
4# helper functions to allow Android init like script
5
6function write() {
7    echo -n $2 > $1
8}
9
10function copy() {
11    cat $1 > $2
12}
13
14function get-set-forall() {
15    for f in $1 ; do
16        cat $f
17        write $f $2
18    done
19}
20
21################################################################################
22
23# disable thermal bcl hotplug to switch governor
24write /sys/module/msm_thermal/core_control/enabled 0
25get-set-forall /sys/devices/soc.0/qcom,bcl.*/mode disable
26bcl_hotplug_mask=`get-set-forall /sys/devices/soc.0/qcom,bcl.*/hotplug_mask 0`
27bcl_hotplug_soc_mask=`get-set-forall /sys/devices/soc.0/qcom,bcl.*/hotplug_soc_mask 0`
28get-set-forall /sys/devices/soc.0/qcom,bcl.*/mode enable
29
30# some files in /sys/devices/system/cpu are created after the restorecon of
31# /sys/. These files receive the default label "sysfs".
32# Restorecon again to give new files the correct label.
33restorecon -R /sys/devices/system/cpu
34
35# ensure at most one A57 is online when thermal hotplug is disabled
36write /sys/devices/system/cpu/cpu5/online 0
37write /sys/devices/system/cpu/cpu6/online 0
38write /sys/devices/system/cpu/cpu7/online 0
39
40# Best effort limiting for first time boot if msm_performance module is absent
41write /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq 960000
42
43# Limit A57 max freq from msm_perf module in case CPU 4 is offline
44write /sys/module/msm_performance/parameters/cpu_max_freq "4:960000 5:960000 6:960000 7:960000"
45
46# configure governor settings for little cluster
47write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor interactive
48restorecon -R /sys/devices/system/cpu # must restore after interactive
49write /sys/devices/system/cpu/cpu0/cpufreq/interactive/use_sched_load 1
50write /sys/devices/system/cpu/cpu0/cpufreq/interactive/use_migration_notif 1
51write /sys/devices/system/cpu/cpu0/cpufreq/interactive/above_hispeed_delay 19000
52write /sys/devices/system/cpu/cpu0/cpufreq/interactive/go_hispeed_load 99
53write /sys/devices/system/cpu/cpu0/cpufreq/interactive/timer_rate 19000
54write /sys/devices/system/cpu/cpu0/cpufreq/interactive/hispeed_freq 960000
55write /sys/devices/system/cpu/cpu0/cpufreq/interactive/io_is_busy 1
56write /sys/devices/system/cpu/cpu0/cpufreq/interactive/target_loads "65 460000:75 960000:80"
57write /sys/devices/system/cpu/cpu0/cpufreq/interactive/min_sample_time 40000
58write /sys/devices/system/cpu/cpu0/cpufreq/interactive/max_freq_hysteresis 80000
59write /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 384000
60
61# online CPU4
62write /sys/devices/system/cpu/cpu4/online 1
63
64# configure governor settings for big cluster
65write /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor interactive
66restorecon -R /sys/devices/system/cpu # must restore after interactive
67write /sys/devices/system/cpu/cpu4/cpufreq/interactive/use_sched_load 1
68write /sys/devices/system/cpu/cpu4/cpufreq/interactive/use_migration_notif 1
69write /sys/devices/system/cpu/cpu4/cpufreq/interactive/above_hispeed_delay 19000
70write /sys/devices/system/cpu/cpu4/cpufreq/interactive/go_hispeed_load 99
71write /sys/devices/system/cpu/cpu4/cpufreq/interactive/timer_rate 19000
72write /sys/devices/system/cpu/cpu4/cpufreq/interactive/hispeed_freq 1248000
73write /sys/devices/system/cpu/cpu4/cpufreq/interactive/io_is_busy 1
74write /sys/devices/system/cpu/cpu4/cpufreq/interactive/target_loads "70 960000:80 1248000:85"
75write /sys/devices/system/cpu/cpu4/cpufreq/interactive/min_sample_time 40000
76write /sys/devices/system/cpu/cpu4/cpufreq/interactive/max_freq_hysteresis 80000
77write /sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq 633600
78
79# restore A57's max
80copy /sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_max_freq /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
81
82# plugin remaining A57s
83write /sys/devices/system/cpu/cpu5/online 1
84write /sys/devices/system/cpu/cpu6/online 1
85write /sys/devices/system/cpu/cpu7/online 1
86
87# Restore CPU 4 max freq from msm_performance
88write /sys/module/msm_performance/parameters/cpu_max_freq "4:4294967295 5:4294967295 6:4294967295 7:4294967295"
89
90# input boost configuration
91write /sys/module/cpu_boost/parameters/input_boost_freq "0:1344000"
92write /sys/module/cpu_boost/parameters/input_boost_ms 40
93
94# Setting B.L scheduler parameters
95write /proc/sys/kernel/sched_migration_fixup 1
96write /proc/sys/kernel/sched_upmigrate 95
97write /proc/sys/kernel/sched_downmigrate 85
98write /proc/sys/kernel/sched_freq_inc_notify 400000
99write /proc/sys/kernel/sched_freq_dec_notify 400000
100
101# android background processes are set to nice 10. Never schedule these on the a57s.
102write /proc/sys/kernel/sched_upmigrate_min_nice 9
103
104get-set-forall  /sys/class/devfreq/qcom,cpubw*/governor bw_hwmon
105
106# Disable sched_boost
107write /proc/sys/kernel/sched_boost 0
108
109# re-enable thermal and BCL hotplug
110write /sys/module/msm_thermal/core_control/enabled 1
111get-set-forall /sys/devices/soc.0/qcom,bcl.*/mode disable
112get-set-forall /sys/devices/soc.0/qcom,bcl.*/hotplug_mask $bcl_hotplug_mask
113get-set-forall /sys/devices/soc.0/qcom,bcl.*/hotplug_soc_mask $bcl_hotplug_soc_mask
114get-set-forall /sys/devices/soc.0/qcom,bcl.*/mode enable
115
116# change GPU initial power level from 305MHz(level 4) to 180MHz(level 5) for power savings
117write /sys/class/kgsl/kgsl-3d0/default_pwrlevel 5
118