msm: kgsl: Create sysfs entry to control GPU clock throttling.
Create sysfs entry to control GPU clock throttling. When 0 is written - all sources of clock throlling - ie LM, BCL, IDLE are disabled. CRs-Fixed: 973565 Change-Id: Iad588eb94861bd6b223715cc05354e3c39db9b24 Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
This commit is contained in:
parent
3e39d1775a
commit
aaf93b3e62
5 changed files with 23 additions and 1 deletions
|
@ -97,7 +97,8 @@ static struct adreno_device device_3d0 = {
|
||||||
.input_work = __WORK_INITIALIZER(device_3d0.input_work,
|
.input_work = __WORK_INITIALIZER(device_3d0.input_work,
|
||||||
adreno_input_work),
|
adreno_input_work),
|
||||||
.pwrctrl_flag = BIT(ADRENO_SPTP_PC_CTRL) | BIT(ADRENO_PPD_CTRL) |
|
.pwrctrl_flag = BIT(ADRENO_SPTP_PC_CTRL) | BIT(ADRENO_PPD_CTRL) |
|
||||||
BIT(ADRENO_LM_CTRL) | BIT(ADRENO_HWCG_CTRL),
|
BIT(ADRENO_LM_CTRL) | BIT(ADRENO_HWCG_CTRL) |
|
||||||
|
BIT(ADRENO_THROTTLING_CTRL),
|
||||||
.profile.enabled = false,
|
.profile.enabled = false,
|
||||||
.active_list = LIST_HEAD_INIT(device_3d0.active_list),
|
.active_list = LIST_HEAD_INIT(device_3d0.active_list),
|
||||||
.active_list_lock = __SPIN_LOCK_UNLOCKED(device_3d0.active_list_lock),
|
.active_list_lock = __SPIN_LOCK_UNLOCKED(device_3d0.active_list_lock),
|
||||||
|
|
|
@ -183,6 +183,8 @@ enum adreno_gpurev {
|
||||||
#define ADRENO_PPD_CTRL 1
|
#define ADRENO_PPD_CTRL 1
|
||||||
#define ADRENO_LM_CTRL 2
|
#define ADRENO_LM_CTRL 2
|
||||||
#define ADRENO_HWCG_CTRL 3
|
#define ADRENO_HWCG_CTRL 3
|
||||||
|
#define ADRENO_THROTTLING_CTRL 4
|
||||||
|
|
||||||
|
|
||||||
/* number of throttle counters for DCVS adjustment */
|
/* number of throttle counters for DCVS adjustment */
|
||||||
#define ADRENO_GPMU_THROTTLE_COUNTERS 4
|
#define ADRENO_GPMU_THROTTLE_COUNTERS 4
|
||||||
|
|
|
@ -1853,6 +1853,9 @@ static void a540_lm_init(struct adreno_device *adreno_dev)
|
||||||
<< AGC_GPU_VERSION_SHIFT);
|
<< AGC_GPU_VERSION_SHIFT);
|
||||||
unsigned int r, i;
|
unsigned int r, i;
|
||||||
|
|
||||||
|
if (!test_bit(ADRENO_THROTTLING_CTRL, &adreno_dev->pwrctrl_flag))
|
||||||
|
agc_lm_config |= AGC_THROTTLE_DISABLE;
|
||||||
|
|
||||||
if (lm_on(adreno_dev)) {
|
if (lm_on(adreno_dev)) {
|
||||||
agc_lm_config |=
|
agc_lm_config |=
|
||||||
AGC_LM_CONFIG_ENABLE_GPMU_ADAPTIVE |
|
AGC_LM_CONFIG_ENABLE_GPMU_ADAPTIVE |
|
||||||
|
|
|
@ -194,6 +194,8 @@ void a5xx_hwcg_set(struct adreno_device *adreno_dev, bool on);
|
||||||
#define AGC_LM_CONFIG_ENABLE_ERROR (3 << 4)
|
#define AGC_LM_CONFIG_ENABLE_ERROR (3 << 4)
|
||||||
|
|
||||||
#define AGC_THROTTLE_SEL_DCS (1 << 8)
|
#define AGC_THROTTLE_SEL_DCS (1 << 8)
|
||||||
|
#define AGC_THROTTLE_DISABLE (2 << 8)
|
||||||
|
|
||||||
|
|
||||||
#define AGC_LLM_ENABLED (1 << 16)
|
#define AGC_LLM_ENABLED (1 << 16)
|
||||||
#define AGC_GPU_VERSION_MASK GENMASK(18, 17)
|
#define AGC_GPU_VERSION_MASK GENMASK(18, 17)
|
||||||
|
|
|
@ -201,6 +201,17 @@ static unsigned int _hwcg_show(struct adreno_device *adreno_dev)
|
||||||
return test_bit(ADRENO_HWCG_CTRL, &adreno_dev->pwrctrl_flag);
|
return test_bit(ADRENO_HWCG_CTRL, &adreno_dev->pwrctrl_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _throttling_store(struct adreno_device *adreno_dev,
|
||||||
|
unsigned int val)
|
||||||
|
{
|
||||||
|
return _pwrctrl_store(adreno_dev, val, ADRENO_THROTTLING_CTRL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int _throttling_show(struct adreno_device *adreno_dev)
|
||||||
|
{
|
||||||
|
return test_bit(ADRENO_THROTTLING_CTRL, &adreno_dev->pwrctrl_flag);
|
||||||
|
}
|
||||||
|
|
||||||
static int _sptp_pc_store(struct adreno_device *adreno_dev,
|
static int _sptp_pc_store(struct adreno_device *adreno_dev,
|
||||||
unsigned int val)
|
unsigned int val)
|
||||||
{
|
{
|
||||||
|
@ -315,6 +326,8 @@ static ADRENO_SYSFS_BOOL(sptp_pc);
|
||||||
static ADRENO_SYSFS_BOOL(lm);
|
static ADRENO_SYSFS_BOOL(lm);
|
||||||
static ADRENO_SYSFS_BOOL(preemption);
|
static ADRENO_SYSFS_BOOL(preemption);
|
||||||
static ADRENO_SYSFS_BOOL(hwcg);
|
static ADRENO_SYSFS_BOOL(hwcg);
|
||||||
|
static ADRENO_SYSFS_BOOL(throttling);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static const struct device_attribute *_attr_list[] = {
|
static const struct device_attribute *_attr_list[] = {
|
||||||
|
@ -329,6 +342,7 @@ static const struct device_attribute *_attr_list[] = {
|
||||||
&adreno_attr_lm.attr,
|
&adreno_attr_lm.attr,
|
||||||
&adreno_attr_preemption.attr,
|
&adreno_attr_preemption.attr,
|
||||||
&adreno_attr_hwcg.attr,
|
&adreno_attr_hwcg.attr,
|
||||||
|
&adreno_attr_throttling.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue