diff options
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.c | 25 |
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)) |