aboutsummaryrefslogtreecommitdiff
path: root/rootdir/etc/init.qcom.power.rc
blob: 0728e546fbddbdb4abc01d4cf0402b58b102d773 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# Copyright (c) 2016, Code Aurora Forum. 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 Code Aurora 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.
#

on init
    write /sys/module/lpm_levels/parameters/sleep_disabled "Y"

    # Drop write bit from cpu_max_freq so that libqti-perfd can't set it
    chmod 0444 /sys/module/msm_performance/parameters/cpu_max_freq

on boot
    # Update foreground and background cpusets
    write /dev/cpuset/foreground/cpus 0-3
    write /dev/cpuset/background/cpus 0-3
    write /dev/cpuset/system-background/cpus 0-3
    write /dev/cpuset/top-app/cpus 0-3
    write /dev/cpuset/restricted/cpus 0-3

    # Add a cpuset for the camera daemon
    # we want all cores for camera
    mkdir /dev/cpuset/camera-daemon
    write /dev/cpuset/camera-daemon/cpus 0-3
    write /dev/cpuset/camera-daemon/mems 0
    chown system system /dev/cpuset/camera-daemon
    chown system system /dev/cpuset/camera-daemon/tasks
    chmod 0664 /dev/cpuset/camera-daemon/tasks

    # Enable sched boost
    write /proc/sys/kernel/sched_boost 1

on charger
    wait /dev/block/platform/soc/${ro.boot.bootdevice}
    write /sys/module/lpm_levels/parameters/sleep_disabled "N"

    write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor "userspace"
    write /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed 300000
    write /sys/devices/system/cpu/cpu1/online 1
    write /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor "userspace"
    write /sys/devices/system/cpu/cpu1/cpufreq/scaling_setspeed 300000
    write /sys/devices/system/cpu/cpu2/online 0
    write /sys/devices/system/cpu/cpu3/online 0
    write /sys/module/msm_thermal/parameters/enabled "N"
    start thermal-engine

on property:sys.post_boot.parsed=1
    # Setup permission for powerHAL
    chown system system /sys/devices/soc/soc:qcom,cpubw/devfreq/soc:qcom,cpubw/bw_hwmon/hyst_trigger_count
    chown system system /sys/devices/soc/soc:qcom,cpubw/devfreq/soc:qcom,cpubw/bw_hwmon/hist_memory
    chown system system /sys/devices/soc/soc:qcom,cpubw/devfreq/soc:qcom,cpubw/bw_hwmon/hyst_length

on enable-low-power
    # Disable thermal hotplug to switch governor
    write /sys/module/msm_thermal/core_control/enabled 0

    # Enable Adaptive LMK
    write /sys/module/lowmemorykiller/parameters/enable_adaptive_lmk 1
    write /sys/module/lowmemorykiller/parameters/vmpressure_file_min 81250

    # Set sync wakee policy tunable
    write /proc/sys/kernel/sched_prefer_sync_wakee_to_waker 1

    # Configure governor settings for little cluster
    write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor "interactive"
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/use_sched_load 1
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/use_migration_notif 1
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/above_hispeed_delay 19000
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/go_hispeed_load 90
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/timer_rate 20000
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/hispeed_freq 960000
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/io_is_busy 1
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/target_loads 80
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/min_sample_time 19000
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/max_freq_hysteresis 79000
    write /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 300000
    write /sys/devices/system/cpu/cpu0/cpufreq/interactive/ignore_hispeed_on_notif 1

    # Bring CPU2 online
    write /sys/devices/system/cpu/cpu2/online 1

    # Configure governor settings for big cluster
    write /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor "interactive"
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/use_sched_load 1
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/use_migration_notif 1
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/above_hispeed_delay "19000 1400000:39000 1700000:19000 2100000:79000"
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/go_hispeed_load 90
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/timer_rate 20000
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/hispeed_freq 1248000
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/io_is_busy 1
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/target_loads "85 1500000:90 1800000:70 2100000:95"
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/min_sample_time 19000
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/max_freq_hysteresis 79000
    write /sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq 300000
    write /sys/devices/system/cpu/cpu2/cpufreq/interactive/ignore_hispeed_on_notif 1

    # Re-enable thermal hotplug
    write /sys/module/msm_thermal/core_control/enabled 1

    # Input boost config
    write /sys/module/cpu_boost/parameters/input_boost_freq "0:1036000 2:1324800"
    write /sys/module/cpu_boost/parameters/input_boost_ms 40

    # Set big.LITTLE scheduler parameters
    write /proc/sys/kernel/sched_boost 0
    write /proc/sys/kernel/sched_migration_fixup 1
    write /proc/sys/kernel/sched_upmigrate 45
    write /proc/sys/kernel/sched_downmigrate 45
    write /proc/sys/kernel/sched_freq_inc_notify 400000
    write /proc/sys/kernel/sched_freq_dec_notify 400000
    write /proc/sys/kernel/sched_spill_nr_run 3
    write /proc/sys/kernel/sched_init_task_load 100

    # Enable bus-dcvs
    write /sys/class/devfreq/soc:qcom,cpubw/governor "bw_hwmon"
    write /sys/class/devfreq/soc:qcom,cpubw/polling_interval 50
    write /sys/class/devfreq/soc:qcom,cpubw/min_freq 1525
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/mbps_zones "1525 5195 11863 13763"
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/sample_ms 4
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/io_percent 34
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/hist_memory 20
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/hyst_length 10
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/low_power_ceil_mbps 0
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/low_power_io_percent 34
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/low_power_delay 20
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/guard_band_mbps 0
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/up_scale 250
    write /sys/class/devfreq/soc:qcom,cpubw/bw_hwmon/idle_mbps 1600

    write /sys/class/devfreq/soc:qcom,memlat-cpu0/governor "mem_latency"
    write /sys/class/devfreq/soc:qcom,memlat-cpu0/polling_interval 10
    write /sys/class/devfreq/soc:qcom,memlat-cpu2/governor "mem_latency"
    write /sys/class/devfreq/soc:qcom,memlat-cpu2/polling_interval 10
    write /sys/class/devfreq/soc:qcom,mincpubw/governor "cpufreq"

    # Enable all LPMs (this will enable C4, D4, D3, E4 and M3 LPMs)
    write /sys/module/lpm_levels/parameters/sleep_disabled "N"

    # Set perfd properties
    setprop sys.post_boot.parsed 1

on property:sys.boot_completed=1
    trigger enable-low-power

    # Set I/O squeduler
    setprop sys.io.scheduler "cfq"

    # update cpusets now that boot is complete and we want better load balancing
    write /dev/cpuset/top-app/cpus 0-3
    write /dev/cpuset/foreground/cpus 0-2
    write /dev/cpuset/background/cpus 0
    write /dev/cpuset/system-background/cpus 0-2
    write /dev/cpuset/restricted/cpus 0-1

on property:init.svc.recovery=running
    trigger enable-low-power

service charger /charger
    class charger
    group system graphics
    seclabel u:r:healthd:s0