mirror of
https://github.com/ARM-software/devlib.git
synced 2025-01-31 10:10:46 +00:00
Merge pull request #199 from kdub/gh-kdub-gpufreq
module: add a gpufreq module for interacting with GPUs.
This commit is contained in:
commit
a7b9ef594f
75
devlib/module/gpufreq.py
Normal file
75
devlib/module/gpufreq.py
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# Copyright 2017 Google, ARM Limited
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
import re
|
||||||
|
import json
|
||||||
|
from devlib.module import Module
|
||||||
|
from devlib.exception import TargetError
|
||||||
|
from devlib.utils.misc import memoized
|
||||||
|
|
||||||
|
class GpufreqModule(Module):
|
||||||
|
|
||||||
|
name = 'gpufreq'
|
||||||
|
path = ''
|
||||||
|
|
||||||
|
def __init__(self, target):
|
||||||
|
super(GpufreqModule, self).__init__(target)
|
||||||
|
frequencies_str = self.target.read_value("/sys/kernel/gpu/gpu_freq_table")
|
||||||
|
self.frequencies = map(int, frequencies_str.split(" "))
|
||||||
|
self.frequencies.sort()
|
||||||
|
self.governors = self.target.read_value("/sys/kernel/gpu/gpu_available_governor").split(" ")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def probe(target):
|
||||||
|
# kgsl/Adreno
|
||||||
|
probe_path = '/sys/kernel/gpu/'
|
||||||
|
if target.file_exists(probe_path):
|
||||||
|
model = target.read_value(probe_path + "gpu_model")
|
||||||
|
if re.search('adreno', model, re.IGNORECASE):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def set_governor(self, governor):
|
||||||
|
if governor not in self.governors:
|
||||||
|
raise TargetError('Governor {} not supported for gpu {}'.format(governor, cpu))
|
||||||
|
self.target.write_value("/sys/kernel/gpu/gpu_governor", governor)
|
||||||
|
|
||||||
|
def get_frequencies(self):
|
||||||
|
"""
|
||||||
|
Returns the list of frequencies that the GPU can have
|
||||||
|
"""
|
||||||
|
return self.frequencies
|
||||||
|
|
||||||
|
def get_current_frequency(self):
|
||||||
|
"""
|
||||||
|
Returns the current frequency currently set for the GPU.
|
||||||
|
|
||||||
|
Warning, this method does not check if the gpu is online or not. It will
|
||||||
|
try to read the current frequency and the following exception will be
|
||||||
|
raised ::
|
||||||
|
|
||||||
|
:raises: TargetError if for some reason the frequency could not be read.
|
||||||
|
|
||||||
|
"""
|
||||||
|
return int(self.target.read_value("/sys/kernel/gpu/gpu_clock"))
|
||||||
|
|
||||||
|
@memoized
|
||||||
|
def get_model_name(self):
|
||||||
|
"""
|
||||||
|
Returns the model name reported by the GPU.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return self.target.read_value("/sys/kernel/gpu/gpu_model")
|
||||||
|
except:
|
||||||
|
return "unknown"
|
Loading…
x
Reference in New Issue
Block a user