summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c')
-rw-r--r--arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c b/arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c
index 0f25159a15f6..a75d7b04a084 100644
--- a/arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c
+++ b/arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c
@@ -288,6 +288,9 @@ do\
/*****************************************************************************/
+// LP2 entry policy
+NvRmLp2Policy g_Lp2Policy = NVRM_DEFAULT_LP2POLICY;
+
// DFS object
static NvRmDfs s_Dfs;
@@ -1210,19 +1213,23 @@ DfsGetTargetFrequencies(
/*
* Determine if low corner is hit in this domain - clear hit indicator
- * if new target domain frequency is above low limit (with hysteresis)
- * For platform with dedicated CPU partition do not include activity
- * margin when there is no busy or starvation requirements
+ * if new target domain frequency is above low limit (with hysteresis).
+ * For platform with dedicated CPU partition adjust low corner threshold
+ * when no starvation is detected: if target frequency is limited by
+ * activity, include activity margin in the threshold; otherwise set
+ * low corner at busy hint level per LP2 policy
*/
if (NvRmPrivIsCpuRailDedicated(pDfs->hRm) &&
- (DomainBusyKHz <= LowCornerDomainKHz) &&
- ((*pDomainKHz) == pDomainSampler->BumpedAverageKHz))
+ (!pDomainSampler->RtStarveBoostKHz) &&
+ (!pDomainSampler->NrtStarveBoostKHz))
{
- // Multiplying threshold has the same effect as dividing target
- // to reduce margin
- LowCornerDomainKHz +=
- (LowCornerDomainKHz >> pDomainParam->RelAdjustBits);
+ if ((*pDomainKHz) == pDomainSampler->BumpedAverageKHz)
+ LowCornerDomainKHz +=
+ (LowCornerDomainKHz >> pDomainParam->RelAdjustBits);
+ else if (g_Lp2Policy != NvRmLp2Policy_EnterInLowCorner)
+ LowCornerDomainKHz = NV_MAX(DomainBusyKHz, LowCornerDomainKHz);
}
+
if ( ((*pDomainKHz) >
(LowCornerDomainKHz + pDomainParam->NrtStarveParam.BoostStepKHz))
|| (((*pDomainKHz) > LowCornerDomainKHz) && (!pDfs->LowCornerHit))