small-package/luci-app-amlogic/luasrc/model/cbi/amlogic/amlogic_armcpu.lua

95 lines
3.3 KiB
Lua

--Copyright: https://github.com/coolsnowwolf/lede/tree/master/package/lean/luci-app-cpufreq
--Planner: https://github.com/unifreq/openwrt_packit
--Extended support: https://github.com/ophub/luci-app-amlogic
--Function: Support multi-core
local fs = require "luci.fs"
local mp
--Remove the spaces in the string
function trim(str)
--return (string.gsub(str, "^%s*(.-)%s*$", "%1"))
return (string.gsub(str, "%s+", ""))
end
--split
function string.split(e, t)
e = tostring(e)
t = tostring(t)
if (t == '') then return false end
local a,o = 0,{}
for i,t in function() return string.find(e, t, a, true) end do
table.insert(o,string.sub(e, a, i-1))
a = t + 1
end
table.insert(o,string.sub(e, a))
return o
end
--Auto-complete node
local check_config_settings = luci.sys.exec("uci get amlogic.@settings[0].governor0 2>/dev/null") or ""
if (trim(check_config_settings) == "") then
luci.sys.exec("uci delete amlogic.@settings[0] 2>/dev/null")
luci.sys.exec("uci set amlogic.armcpu='settings' 2>/dev/null")
luci.sys.exec("uci commit amlogic 2>/dev/null")
end
mp = Map("amlogic")
mp.title = translate("CPU Freq Settings")
mp.description = translate("Set CPU Scaling Governor to Max Performance or Balance Mode")
s = mp:section(NamedSection,"armcpu","settings")
s.anonymouse = true
local cpu_policys = luci.sys.exec("ls /sys/devices/system/cpu/cpufreq | grep -E 'policy[0-9]{1,3}' | xargs") or "policy0"
policy_array = string.split(cpu_policys, " ")
for tt,policy_name in ipairs(policy_array) do
--Dynamic tab, automatically changes according to the number of cores, begin ------
policy_name = tostring(trim(policy_name))
policy_id = tostring(trim(string.gsub(policy_name, "policy", "")))
tab_name = policy_name
tab_id = tostring(trim("tab" .. policy_id))
cpu_freqs = fs.readfile(trim("/sys/devices/system/cpu/cpufreq/" .. policy_name .. "/scaling_available_frequencies")) or "100000"
cpu_freqs = string.sub(cpu_freqs, 1, -3)
cpu_governors = fs.readfile(trim("/sys/devices/system/cpu/cpufreq/" .. policy_name .. "/scaling_available_governors")) or "performance"
cpu_governors = string.sub(cpu_governors, 1, -3)
freq_array = string.split(cpu_freqs, " ")
governor_array = string.split(cpu_governors, " ")
s:tab(tab_id, tab_name)
tab_core_type = s:taboption(tab_id, DummyValue, trim("core_type" .. policy_id), translate("Microarchitectures:"))
tab_core_type.default = luci.sys.exec("cat /sys/devices/system/cpu/cpu" .. policy_id .. "/uevent | grep -E '^OF_COMPATIBLE_0.*' | tr -d 'OF_COMPATIBLE_0=' | xargs") or "Unknown"
tab_core_type.rmempty = false
governor = s:taboption(tab_id, ListValue, trim("governor" .. policy_id), translate("CPU Scaling Governor:"))
for t,e in ipairs(governor_array) do
if e ~= "" then governor:value(e,translate(e,string.upper(e))) end
end
governor.default = "schedutil"
governor.rmempty = false
minfreq = s:taboption(tab_id, ListValue, trim("minfreq" .. policy_id), translate("Min Freq:"))
for t,e in ipairs(freq_array) do
if e ~= "" then minfreq:value(e) end
end
minfreq.default = "500000"
minfreq.rmempty = false
maxfreq = s:taboption(tab_id, ListValue, trim("maxfreq" .. policy_id), translate("Max Freq:"))
for t,e in ipairs(freq_array) do
if e ~= "" then maxfreq:value(e) end
end
maxfreq.default = "1512000"
maxfreq.rmempty = false
--Dynamic tab, automatically changes according to the number of cores, end ------
end
return mp