diff options
Diffstat (limited to 'arch/arm/mach-tegra')
-rw-r--r-- | arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.h | 8 | ||||
-rw-r--r-- | arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c | 21 |
2 files changed, 20 insertions, 9 deletions
diff --git a/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.h b/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.h index dcd1be33422b..ee846b53cfcd 100644 --- a/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.h +++ b/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.h @@ -80,7 +80,7 @@ extern "C" */ #define NVRM_DFS_PARAM_AVP_AP20 \ NvRmFreqMaximum, /* Maximum domain frequency set to h/w limit */ \ - 24000, /* Minimum domain frequency 24 MHz */ \ + 36000, /* Minimum domain frequency 36 MHz */ \ 1000, /* Frequency change upper band 1 MHz */ \ 1000, /* Frequency change lower band 1 MHz */ \ { /* RT starvation control parameters */ \ @@ -89,12 +89,12 @@ extern "C" 128, /* Proportional frequency boost decrease 128/256 ~ 50% */ \ },\ { /* NRT starvation control parameters */ \ - 1000, /* Fixed frequency NRT boost increase 1 MHz */ \ + 2000, /* Fixed frequency NRT boost increase 2 MHz */ \ 255, /* Proportional frequency boost increase 255/256 ~ 100% */ \ 128, /* Proportional frequency boost decrease 128/256 ~ 50% */ \ },\ 3, /* Relative adjustement of average freqiency 1/2^3 ~ 12% */ \ - 2, /* Number of smaple intervals with NRT to trigger boost = 3 */ \ + 3, /* Number of smaple intervals with NRT to trigger boost = 4 */ \ 1 /* NRT idle cycles threshold = 1 */ /** @@ -209,7 +209,7 @@ extern "C" // Defines minimum scaling limit for each supported SDRAM type #define NVRM_AP20_DDR2_MIN_KHZ (50000) -#define NVRM_AP20_LPDDR2_MIN_KHZ (50000) +#define NVRM_AP20_LPDDR2_MIN_KHZ (18000) /** * Defines CPU frequency threshold for slave CPU1 power management: 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 8b2357afedd4..37ddba022dc4 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 @@ -1206,13 +1206,24 @@ DfsGetTargetFrequencies( } /* - * Domain frequency is above low limit with tolerance band, or frequency - * is above low limit and it was not in low corner (hysteresis) - clear - * low corner hit + * Determine if low corner is hit in this domain - clear hit indicator + * if new target domain frequency is above low limit (with hysteresis + * equal to the 1st NRT starvation step). For platform with dedicated + * CPU partition reduce activity margin by half when there is no busy + * or starvation requirements */ + if (NvRmPrivIsCpuRailDedicated(pDfs->hRm) && + (DomainBusyKHz <= LowCornerDomainKHz) && + ((*pDomainKHz) == pDomainSampler->BumpedAverageKHz)) + { + // Multiplying threshold has the same effect as dividing target + // to reduce margin + LowCornerDomainKHz += + (LowCornerDomainKHz >> (pDomainParam->RelAdjustBits + 1)); + } if ( ((*pDomainKHz) > - (LowCornerDomainKHz + pDomainParam->UpperBandKHz)) || - (((*pDomainKHz) > LowCornerDomainKHz) && (!pDfs->LowCornerHit)) + (LowCornerDomainKHz + pDomainParam->NrtStarveParam.BoostStepKHz)) + || (((*pDomainKHz) > LowCornerDomainKHz) && (!pDfs->LowCornerHit)) ) { LowCornerHit = NV_FALSE; |