nx: migrate to perfmgr OSS power HAL
- Exercise greater control over hinting, power profiles, specific behavior, etc. - Better support in the future vs maintaining phs - Totally nuke nvcpl to remove variables in display handling and power profiles Change-Id: If9076248fcacfdc8165bd814ad78786134997b97
This commit is contained in:
1 parent
d33f7e37f9
commit
6fe016e60e
9 files changed
+675
-63
No files matched your search
@@ -18,11 +18,13 @@ TARGET_TEGRA_VARIANT ?= common
|
||||
|
||||
TARGET_TEGRA_BT ?= bcm
|
||||
TARGET_TEGRA_CEC := aosp
|
||||
TARGET_TEGRA_CPL := none
|
||||
TARGET_TEGRA_KERNEL ?= 4.9
|
||||
TARGET_TEGRA_KEYSTORE := software
|
||||
TARGET_TEGRA_LIGHT ?= lineage
|
||||
TARGET_TEGRA_MAN_LVL := 5
|
||||
TARGET_TEGRA_MEMTRACK ?= rel-shield-r
|
||||
TARGET_TEGRA_POWER := perfmgr
|
||||
TARGET_TEGRA_THERMAL ?= lineage
|
||||
TARGET_TEGRA_UBOOT := prebuilt
|
||||
TARGET_TEGRA_WIDEVINE ?= rel-shield-r
|
||||
@@ -167,8 +169,10 @@ PRODUCT_COPY_FILES += \
|
||||
system/core/libprocessgroup/profiles/task_profiles_28.json:$(TARGET_COPY_OUT_VENDOR)/etc/task_profiles.json
|
||||
|
||||
# PHS
|
||||
ifneq ($(TARGET_TEGRA_PHS),)
|
||||
PRODUCT_PACKAGES += \
|
||||
nvphsd.conf
|
||||
endif
|
||||
|
||||
# Recovery
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += persist.vendor.recovery_update=true
|
||||
|
||||
@@ -20,9 +20,17 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.hardware.power.IPower;
|
||||
import android.hardware.power.Mode;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.SystemProperties;
|
||||
import android.util.Log;
|
||||
|
||||
public class BootCompletedReceiver extends BroadcastReceiver {
|
||||
private static final String TAG = BootCompletedReceiver.class.getSimpleName();
|
||||
private IPower mPerfMgr;
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (SystemProperties.get("ro.product.device", "").equals("nx") &&
|
||||
@@ -30,10 +38,27 @@ public class BootCompletedReceiver extends BroadcastReceiver {
|
||||
context.startService(new Intent(context, DockService.class));
|
||||
}
|
||||
|
||||
final SharedPreferences sharedPrefs = context.getSharedPreferences(
|
||||
"org.lineageos.settings.device_preferences", Context.MODE_PRIVATE);
|
||||
|
||||
mPerfMgr = IPower.Stub.asInterface(
|
||||
ServiceManager.waitForDeclaredService(IPower.DESCRIPTOR + "/default"));
|
||||
|
||||
// Enable/disable perf mode power mode with perfmgr
|
||||
final boolean perfMode = sharedPrefs.getBoolean("perf_mode", false);
|
||||
|
||||
try {
|
||||
mPerfMgr.setMode(Mode.SUSTAINED_PERFORMANCE, false);
|
||||
if (!perfMode)
|
||||
mPerfMgr.setMode(Mode.LOW_POWER, true);
|
||||
else
|
||||
mPerfMgr.setMode(Mode.LOW_POWER, false);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to set on boot power mode!");
|
||||
}
|
||||
|
||||
// Set preferred OLED panel mode
|
||||
if(SystemProperties.get("ro.boot.hardware.sku", "").equals("fric")) {
|
||||
final SharedPreferences sharedPrefs = context.getSharedPreferences(
|
||||
"org.lineageos.settings.device_preferences", Context.MODE_PRIVATE);
|
||||
final String panelMode = sharedPrefs.getString("panel_color_mode", "0x23");
|
||||
|
||||
DisplayUtils.setPanelColorMode(panelMode);
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
package org.lineageos.settings.device;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.RemoteException;
|
||||
import android.provider.Settings;
|
||||
@@ -31,9 +29,6 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.nvidia.NvCPLSvc.INvCPLRemoteService;
|
||||
import com.nvidia.framework.NvConstants;
|
||||
|
||||
import vendor.nvidia.hardware.graphics.display.V1_0.HwcSvcDisplay;
|
||||
import vendor.nvidia.hardware.graphics.display.V1_0.HwcSvcDisplayMode;
|
||||
import vendor.nvidia.hardware.graphics.display.V1_0.HwcSvcDisplayModePixEnc;
|
||||
@@ -48,8 +43,6 @@ public class DisplayUtils {
|
||||
"/sys/class/backlight/backlight/brightness";
|
||||
public static final String PANEL_MODE_SYSFS =
|
||||
"/sys/devices/50000000.host1x/tegradc.0/panel_color_mode";
|
||||
public static final String PWM_FAN_PROFILE_SYSFS = "/sys/devices/pwm-fan/fan_profile";
|
||||
public static final String EST_FAN_PROFILE_SYSFS = "/sys/devices/thermal-fan-est/fan_profile";
|
||||
public static final String INT_DISPLAY_MODE_SYSFS =
|
||||
"/sys/bus/platform/devices/tegradc.0/enable";
|
||||
|
||||
@@ -209,35 +202,4 @@ public class DisplayUtils {
|
||||
public static Integer getPanelBrightness(ContentResolver resolver) {
|
||||
return Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS, 0);
|
||||
}
|
||||
|
||||
|
||||
public static void setFanProfile(String profile) {
|
||||
Log.i(TAG, "Setting fan profile: " + profile);
|
||||
try {
|
||||
final FileOutputStream pwmProfile = new FileOutputStream(PWM_FAN_PROFILE_SYSFS);
|
||||
pwmProfile.write(profile.getBytes());
|
||||
pwmProfile.close();
|
||||
final FileOutputStream estProfile = new FileOutputStream(EST_FAN_PROFILE_SYSFS);
|
||||
estProfile.write(profile.getBytes());
|
||||
estProfile.close();
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Failed to update fan profile");
|
||||
}
|
||||
}
|
||||
|
||||
public static void setPowerMode(INvCPLRemoteService service, int index) throws RemoteException {
|
||||
Log.i(TAG, "Setting power mode: " + String.valueOf(index));
|
||||
|
||||
if(service == null) {
|
||||
Log.e(TAG, "setPowerMode called on null INvCPLRemoteService");
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setClassName(NvConstants.NvCPLSvc, NvConstants.NvCPLService);
|
||||
intent.putExtra(NvConstants.NvOrigin, 1);
|
||||
intent.putExtra(NvConstants.NvPowerMode , String.valueOf(index));
|
||||
|
||||
service.handleIntent(intent);
|
||||
}
|
||||
}
|
||||
@@ -29,9 +29,8 @@ import android.util.Log;
|
||||
import android.view.IWindowManager;
|
||||
import android.view.WindowManagerPolicyConstants;
|
||||
|
||||
import com.nvidia.NvCPLSvc.INvCPLRemoteService;
|
||||
|
||||
import com.nvidia.framework.NvConstants;
|
||||
import android.hardware.power.IPower;
|
||||
import android.hardware.power.Mode;
|
||||
|
||||
import vendor.nvidia.hardware.graphics.display.V1_0.INvDisplay;
|
||||
|
||||
@@ -41,7 +40,7 @@ public class DockService extends Service {
|
||||
final private Receiver mReceiver = new Receiver();
|
||||
private INvDisplay mDisplayService;
|
||||
private IWindowManager mWindowManager;
|
||||
private INvCPLRemoteService mNvCPLSvc = null;
|
||||
private IPower mPerfMgr;
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
@@ -53,6 +52,8 @@ public class DockService extends Service {
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
mWindowManager = IWindowManager.Stub.asInterface(
|
||||
ServiceManager.getService(Context.WINDOW_SERVICE));
|
||||
mPerfMgr = IPower.Stub.asInterface(
|
||||
ServiceManager.waitForDeclaredService(IPower.DESCRIPTOR + "/default"));
|
||||
|
||||
try {
|
||||
mDisplayService = INvDisplay.getService(true /* retry */);
|
||||
@@ -73,29 +74,20 @@ public class DockService extends Service {
|
||||
.getSharedPreferences("org.lineageos.settings.device_preferences",
|
||||
Context.MODE_PRIVATE);
|
||||
final boolean perfMode = sharedPrefs.getBoolean("perf_mode", false);
|
||||
final String sku = SystemProperties.get("ro.boot.hardware.sku", "");
|
||||
|
||||
if (mNvCPLSvc == null) {
|
||||
try {
|
||||
mNvCPLSvc = INvCPLRemoteService.Stub.asInterface(
|
||||
ServiceManager.getService("nvcpl"));
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Failed to bind to service. " + e.getMessage());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
if (connected) {
|
||||
DisplayUtils.setFanProfile(perfMode ? "Cool" : "Console");
|
||||
DisplayUtils.setPowerMode(mNvCPLSvc, perfMode ?
|
||||
NvConstants.NV_POWER_MODE_MAX_PERF :
|
||||
NvConstants.NV_POWER_MODE_OPTIMIZED);
|
||||
mPerfMgr.setMode(Mode.LOW_POWER, false);
|
||||
if (perfMode)
|
||||
mPerfMgr.setMode(Mode.SUSTAINED_PERFORMANCE, true);
|
||||
else
|
||||
mPerfMgr.setMode(Mode.SUSTAINED_PERFORMANCE, false);
|
||||
} else {
|
||||
DisplayUtils.setFanProfile(perfMode ? "Cool" : "Handheld");
|
||||
DisplayUtils.setPowerMode(mNvCPLSvc, perfMode ?
|
||||
NvConstants.NV_POWER_MODE_OPTIMIZED :
|
||||
NvConstants.NV_POWER_MODE_BATTERY_SAVER);
|
||||
mPerfMgr.setMode(Mode.SUSTAINED_PERFORMANCE, false);
|
||||
if (perfMode)
|
||||
mPerfMgr.setMode(Mode.LOW_POWER, false);
|
||||
else
|
||||
mPerfMgr.setMode(Mode.LOW_POWER, true);
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to set power profiles");
|
||||
|
||||
@@ -21,11 +21,20 @@ import /vendor/etc/init/hw/init.${ro.boot.hardware.sku}.rc
|
||||
on init
|
||||
setprop ro.surface_flinger.primary_display_orientation ORIENTATION_270
|
||||
setprop ro.boot.secureos none
|
||||
setprop vendor.powerhal.config powerhint.${ro.boot.hardware.sku}.json
|
||||
|
||||
on fs
|
||||
mount_all /vendor/etc/fstab.nx
|
||||
swapon_all /vendor/etc/fstab.nx
|
||||
|
||||
on post-fs-data
|
||||
chmod 0664 /sys/devices/57000000.gpu/devfreq/57000000.gpu/max_freq
|
||||
chown system system /sys/devices/57000000.gpu/devfreq/57000000.gpu/max_freq
|
||||
chmod 0664 /sys/devices/57000000.gpu/devfreq/57000000.gpu/min_freq
|
||||
chown system system /sys/devices/57000000.gpu/devfreq/57000000.gpu/min_freq
|
||||
chmod 0666 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
|
||||
chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
|
||||
|
||||
on boot
|
||||
write /sys/devices/system/cpu/cpufreq/schedutil/up_rate_limit_us 500
|
||||
write /sys/module/input_cfboost/parameters/boost_gpu 460800
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (C) 2024 The LineageOS 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.
|
||||
*/
|
||||
|
||||
phony {
|
||||
name: "powerhint.json",
|
||||
required: [
|
||||
"powerhint.odin.json",
|
||||
"powerhint.modin.json",
|
||||
"powerhint.vali.json",
|
||||
"powerhint.fric.json",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
name: "powerhint.odin.json",
|
||||
src: "powerhint.t210.json",
|
||||
vendor: true,
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
name: "powerhint.modin.json",
|
||||
src: "powerhint.t210b01.json",
|
||||
vendor: true,
|
||||
}
|
||||
|
||||
/* NOTE: vali sets kernel-side limits so scaling is locked down */
|
||||
prebuilt_etc {
|
||||
name: "powerhint.vali.json",
|
||||
src: "powerhint.t210b01.json",
|
||||
vendor: true,
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
name: "powerhint.fric.json",
|
||||
src: "powerhint.t210b01.json",
|
||||
vendor: true,
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
# `libperfmgr` Power Profiles
|
||||
|
||||
In lieu of comments, this document is presented.
|
||||
|
||||
## Configs
|
||||
|
||||
We have three `powerhint.${sku}.json` configs, parsed by `libperfmgr` and chosen on init via `vendor.powerhal.config` (see `init.nx.rc`).
|
||||
|
||||
The `odin` config handles T210 performance, based on `CPU_PLL_CVB_TABLE_ODN` and `NA_FREQ_CVB_TABLE`.
|
||||
|
||||
The `modin` config handles performance for `modin` and `fric` which have more robuse cooling and power solutions than `vali` and can support the range of T210B01 freqs, based on `CPUB01_PLL_CVB_TABLE` and `GPUB01_NA_CVB_TABLE`. We rely on `cpufreq` and `devfreq` closest freq matching for the SLT freqs instead of having a billion configs for different tables.
|
||||
|
||||
The `vali` config is tuned for stripped-down B01 performance due to its limited nature.
|
||||
|
||||
## Clocks
|
||||
|
||||
Clocks are based on DVFS tables for ODN (`odin`) and B01. Defaults are chosen based on HOS (low-power and standard profiles) and Shield (perf mode, now mapped to `SUSTAINED_PERFORMANCE` hint fired by `devicesettings`).
|
||||
|
||||
For overclocking, we will provide an option to have init poke the OC sysfs node, and with the perf mode profiles we will likely not have userspace clock limits. This does not allow for fine-grained control, so we may opt to set up some other system for setting `userspace` governor or something like that and allowing users with experience to manually set freqs.
|
||||
|
||||
Profiles are as such:
|
||||
- LOW_POWER (handheld standard)
|
||||
- Default (docked standard / handheld perf mode)
|
||||
- SUSTAINED_PERFORMANCE (docked perf mode)
|
||||
|
||||
DeviceSettings's BootCompletedRecevier handles requesting these on boot.
|
||||
|
||||
## `nvcpl`, `nvphs`
|
||||
|
||||
`libperfmgr` replaces both here. It does not do all CPL does but this is for the best, especially on `nx` where undefined behavior tuned for Shield tables is nsuboptimal. We do not implement CPL's app profiles functionality or some of PHS's hinting--this is stubbed in `tegra-common` and not much uses these APIs anyway.
|
||||
@@ -0,0 +1,256 @@
|
||||
{
|
||||
"Nodes": [
|
||||
{
|
||||
"Name": "CPUMinFreq",
|
||||
"Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq",
|
||||
"Values": [
|
||||
"204000",
|
||||
"306000",
|
||||
"408000",
|
||||
"510000",
|
||||
"612000",
|
||||
"714000",
|
||||
"816000",
|
||||
"918000",
|
||||
"1020000",
|
||||
"1122000",
|
||||
"1224000",
|
||||
"1326000",
|
||||
"1428000",
|
||||
"1581000",
|
||||
"1683000",
|
||||
"1785000",
|
||||
"1887000",
|
||||
"1989000",
|
||||
"2091000"
|
||||
],
|
||||
"DefaultIndex": 0,
|
||||
"ResetOnInit": true
|
||||
},
|
||||
{
|
||||
"Name": "CPUMaxFreq",
|
||||
"Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq",
|
||||
"Values": [
|
||||
"204000",
|
||||
"306000",
|
||||
"408000",
|
||||
"510000",
|
||||
"612000",
|
||||
"714000",
|
||||
"816000",
|
||||
"918000",
|
||||
"1020000",
|
||||
"1122000",
|
||||
"1224000",
|
||||
"1326000",
|
||||
"1428000",
|
||||
"1581000",
|
||||
"1683000",
|
||||
"1785000",
|
||||
"1887000",
|
||||
"1989000",
|
||||
"2091000"
|
||||
],
|
||||
"DefaultIndex": 13,
|
||||
"ResetOnInit": false
|
||||
},
|
||||
{
|
||||
"Name": "GPUMinFreq",
|
||||
"Path": "/sys/devices/57000000.gpu/devfreq/57000000.gpu/min_freq",
|
||||
"Values": [
|
||||
"76800000",
|
||||
"153600000",
|
||||
"230400000",
|
||||
"307200000",
|
||||
"384000000",
|
||||
"460800000",
|
||||
"537600000",
|
||||
"614400000",
|
||||
"691200000",
|
||||
"768000000",
|
||||
"844800000",
|
||||
"921600000",
|
||||
"998400000"
|
||||
],
|
||||
"DefaultIndex": 0,
|
||||
"ResetOnInit": true
|
||||
},
|
||||
{
|
||||
"Name": "GPUMaxFreq",
|
||||
"Path": "/sys/devices/57000000.gpu/devfreq/57000000.gpu/max_freq",
|
||||
"Values": [
|
||||
"76800000",
|
||||
"153600000",
|
||||
"230400000",
|
||||
"307200000",
|
||||
"384000000",
|
||||
"460800000",
|
||||
"537600000",
|
||||
"614400000",
|
||||
"691200000",
|
||||
"768000000",
|
||||
"844800000",
|
||||
"921600000",
|
||||
"998400000"
|
||||
],
|
||||
"DefaultIndex": 9,
|
||||
"ResetOnInit": false
|
||||
},
|
||||
{
|
||||
"Name": "PwmFanProfile",
|
||||
"Path": "/sys/devices/pwm-fan/fan_profile",
|
||||
"Values": [
|
||||
"Handheld",
|
||||
"Console",
|
||||
"Cool"
|
||||
],
|
||||
"DefaultIndex": 1,
|
||||
"ResetOnInit": false
|
||||
},
|
||||
{
|
||||
"Name": "EstFanProfile",
|
||||
"Path": "/sys/devices/thermal-fan-est/fan_profile",
|
||||
"Values": [
|
||||
"Handheld",
|
||||
"Console",
|
||||
"Cool"
|
||||
],
|
||||
"DefaultIndex": 1,
|
||||
"ResetOnInit": false
|
||||
}
|
||||
],
|
||||
"Actions": [
|
||||
{
|
||||
"PowerHint": "INTERACTION",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 1000,
|
||||
"Value": "1326000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "INTERACTION",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 1000,
|
||||
"Value": "537600000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "GAME_LOADING",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "1326000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "GAME",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "1326000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "GAME",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "537600000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "INTERACTIVE",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "537600000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_INACTIVE",
|
||||
"Node": "GPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "76800000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_INACTIVE",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "204000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LAUNCH",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "1428000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LAUNCH",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "307200000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_CHANGE",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "1581000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_CHANGE",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "307200000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_UPDATE_IMMINENT",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "1581000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_UPDATE_IMMINENT",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "307200000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "SUSTAINED_PERFORMANCE",
|
||||
"Node": "PwmFanProfile",
|
||||
"Duration": 0,
|
||||
"Value": "Cool"
|
||||
},
|
||||
{
|
||||
"PowerHint": "SUSTAINED_PERFORMANCE",
|
||||
"Node": "EstFanProfile",
|
||||
"Duration": 0,
|
||||
"Value": "Cool"
|
||||
},
|
||||
{
|
||||
"PowerHint": "SUSTAINED_PERFORMANCE",
|
||||
"Node": "CPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "2091000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "SUSTAINED_PERFORMANCE",
|
||||
"Node": "GPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "921600000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "204000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "CPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "1224000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "76800000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "GPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "460800000"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,284 @@
|
||||
{
|
||||
"Nodes": [
|
||||
{
|
||||
"Name": "CPUMinFreq",
|
||||
"Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq",
|
||||
"Values": [
|
||||
"204000",
|
||||
"306000",
|
||||
"408000",
|
||||
"510000",
|
||||
"612000",
|
||||
"714000",
|
||||
"816000",
|
||||
"918000",
|
||||
"1020000",
|
||||
"1122000",
|
||||
"1224000",
|
||||
"1326000",
|
||||
"1428000",
|
||||
"1581000",
|
||||
"1683000",
|
||||
"1785000",
|
||||
"1887000",
|
||||
"1963500",
|
||||
"2014500",
|
||||
"2091000",
|
||||
"2193000",
|
||||
"2295000",
|
||||
"2397000"
|
||||
],
|
||||
"DefaultIndex": 0,
|
||||
"ResetOnInit": true
|
||||
},
|
||||
{
|
||||
"Name": "CPUMaxFreq",
|
||||
"Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq",
|
||||
"Values": [
|
||||
"204000",
|
||||
"306000",
|
||||
"408000",
|
||||
"510000",
|
||||
"612000",
|
||||
"714000",
|
||||
"816000",
|
||||
"918000",
|
||||
"1020000",
|
||||
"1122000",
|
||||
"1224000",
|
||||
"1326000",
|
||||
"1428000",
|
||||
"1581000",
|
||||
"1683000",
|
||||
"1785000",
|
||||
"1887000",
|
||||
"1963500",
|
||||
"2014500",
|
||||
"2091000",
|
||||
"2193000",
|
||||
"2295000",
|
||||
"2397000"
|
||||
],
|
||||
"DefaultIndex": 15,
|
||||
"ResetOnInit": false
|
||||
},
|
||||
{
|
||||
"Name": "GPUMinFreq",
|
||||
"Path": "/sys/devices/57000000.gpu/devfreq/57000000.gpu/min_freq",
|
||||
"Values": [
|
||||
"76800000",
|
||||
"153600000",
|
||||
"230400000",
|
||||
"307200000",
|
||||
"384000000",
|
||||
"460800000",
|
||||
"537600000",
|
||||
"614400000",
|
||||
"691200000",
|
||||
"768000000",
|
||||
"844800000",
|
||||
"921600000",
|
||||
"998400000",
|
||||
"1075200000",
|
||||
"1152000000",
|
||||
"1228800000",
|
||||
"1267200000"
|
||||
],
|
||||
"DefaultIndex": 0,
|
||||
"ResetOnInit": true
|
||||
},
|
||||
{
|
||||
"Name": "GPUMaxFreq",
|
||||
"Path": "/sys/devices/57000000.gpu/devfreq/57000000.gpu/max_freq",
|
||||
"Values": [
|
||||
"76800000",
|
||||
"153600000",
|
||||
"230400000",
|
||||
"307200000",
|
||||
"384000000",
|
||||
"460800000",
|
||||
"537600000",
|
||||
"614400000",
|
||||
"691200000",
|
||||
"768000000",
|
||||
"844800000",
|
||||
"921600000",
|
||||
"998400000",
|
||||
"1075200000",
|
||||
"1152000000",
|
||||
"1228800000",
|
||||
"1267200000"
|
||||
],
|
||||
"DefaultIndex": 11,
|
||||
"ResetOnInit": false
|
||||
},
|
||||
{
|
||||
"Name": "PwmFanProfile",
|
||||
"Path": "/sys/devices/pwm-fan/fan_profile",
|
||||
"Values": [
|
||||
"Handheld",
|
||||
"Console",
|
||||
"Cool"
|
||||
],
|
||||
"DefaultIndex": 1,
|
||||
"ResetOnInit": false
|
||||
},
|
||||
{
|
||||
"Name": "EstFanProfile",
|
||||
"Path": "/sys/devices/thermal-fan-est/fan_profile",
|
||||
"Values": [
|
||||
"Handheld",
|
||||
"Console",
|
||||
"Cool"
|
||||
],
|
||||
"DefaultIndex": 1,
|
||||
"ResetOnInit": false
|
||||
}
|
||||
],
|
||||
"Actions": [
|
||||
{
|
||||
"PowerHint": "INTERACTION",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 1000,
|
||||
"Value": "1326000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "INTERACTION",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 1000,
|
||||
"Value": "537600000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "GAME_LOADING",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "1326000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "GAME",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "1326000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "GAME",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "537600000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "INTERACTIVE",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "537600000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_INACTIVE",
|
||||
"Node": "GPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "76800000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_INACTIVE",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "204000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LAUNCH",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "1428000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LAUNCH",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "307200000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_CHANGE",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "1581000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_CHANGE",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "307200000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_UPDATE_IMMINENT",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "1581000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "DISPLAY_UPDATE_IMMINENT",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 5000,
|
||||
"Value": "307200000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "SUSTAINED_PERFORMANCE",
|
||||
"Node": "PwmFanProfile",
|
||||
"Duration": 0,
|
||||
"Value": "Cool"
|
||||
},
|
||||
{
|
||||
"PowerHint": "SUSTAINED_PERFORMANCE",
|
||||
"Node": "EstFanProfile",
|
||||
"Duration": 0,
|
||||
"Value": "Cool"
|
||||
},
|
||||
{
|
||||
"PowerHint": "SUSTAINED_PERFORMANCE",
|
||||
"Node": "CPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "2397000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "SUSTAINED_PERFORMANCE",
|
||||
"Node": "GPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "1267200000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "PwmFanProfile",
|
||||
"Duration": 0,
|
||||
"Value": "Handheld"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "EstFanProfile",
|
||||
"Duration": 0,
|
||||
"Value": "Handheld"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "CPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "204000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "CPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "1785000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "GPUMinFreq",
|
||||
"Duration": 0,
|
||||
"Value": "76800000"
|
||||
},
|
||||
{
|
||||
"PowerHint": "LOW_POWER",
|
||||
"Node": "GPUMaxFreq",
|
||||
"Duration": 0,
|
||||
"Value": "768000000"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user