summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-tegra/tegra_simon.c16
-rw-r--r--arch/arm/mach-tegra/tegra_simon.h5
2 files changed, 15 insertions, 6 deletions
diff --git a/arch/arm/mach-tegra/tegra_simon.c b/arch/arm/mach-tegra/tegra_simon.c
index b767de8d1691..71fcbcee562f 100644
--- a/arch/arm/mach-tegra/tegra_simon.c
+++ b/arch/arm/mach-tegra/tegra_simon.c
@@ -83,7 +83,7 @@ static int tegra_simon_gpu_grading_cb(
return NOTIFY_OK;
mv = (mv > 0) ? mv / 1000 : mv;
- if ((mv <= 0) || (mv > grader->desc->grading_mv_limit))
+ if ((mv <= 0) || (mv > grader->desc->grading_mv_max))
return NOTIFY_OK;
if (grader->last_grading.tv64 &&
@@ -97,6 +97,9 @@ static int tegra_simon_gpu_grading_cb(
return NOTIFY_OK;
}
+ if (t < grader->desc->grading_temperature_min)
+ return NOTIFY_OK;
+
if (grader->desc->grade_simon_domain) {
settle_delay(grader); /* delay for voltage to settle */
grade = grader->desc->grade_simon_domain(grader->domain, mv, t);
@@ -175,7 +178,7 @@ static int tegra_simon_cpu_grading_cb(
if (grader->stop_grading)
return NOTIFY_OK;
- if (is_lp_cluster() || (rate > grader->desc->garding_rate_limit) ||
+ if (is_lp_cluster() || (rate > grader->desc->garding_rate_max) ||
!tegra_dvfs_rail_is_dfll_mode(tegra_cpu_rail))
return NOTIFY_OK;
@@ -190,6 +193,9 @@ static int tegra_simon_cpu_grading_cb(
return NOTIFY_OK;
}
+ if (t < grader->desc->grading_temperature_min)
+ return NOTIFY_OK;
+
cld = tegra_dfll_get_cl_dvfs_data(
clk_get_parent(clk_get_parent(grader->clk)));
if (IS_ERR(cld)) {
@@ -437,14 +443,16 @@ static int fake_grader(int domain, int mv, int temperature)
static struct tegra_simon_grader_desc gpu_grader_desc = {
.domain = TEGRA_SIMON_DOMAIN_GPU,
- .grading_mv_limit = 850,
+ .grading_mv_max = 850,
+ .grading_temperature_min = 20000,
.settle_us = 3000,
.grade_simon_domain = fake_grader,
};
static struct tegra_simon_grader_desc cpu_grader_desc = {
.domain = TEGRA_SIMON_DOMAIN_CPU,
- .garding_rate_limit = 714000000,
+ .garding_rate_max = 714000000,
+ .grading_temperature_min = 20000,
.settle_us = 3000,
.grade_simon_domain = fake_grader,
};
diff --git a/arch/arm/mach-tegra/tegra_simon.h b/arch/arm/mach-tegra/tegra_simon.h
index 44056cbfcd9d..eca53c0cb1ce 100644
--- a/arch/arm/mach-tegra/tegra_simon.h
+++ b/arch/arm/mach-tegra/tegra_simon.h
@@ -31,8 +31,9 @@ enum tegra_simon_domain {
struct tegra_simon_grader_desc {
enum tegra_simon_domain domain;
int settle_us;
- int grading_mv_limit;
- unsigned long garding_rate_limit;
+ int grading_mv_max;
+ unsigned long garding_rate_max;
+ int grading_temperature_min;
int (*grade_simon_domain) (int domain, int mv, int temperature);
};