diff options
-rw-r--r-- | arch/arm/mach-tegra/tegra_simon.c | 16 | ||||
-rw-r--r-- | arch/arm/mach-tegra/tegra_simon.h | 5 |
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); }; |