summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra')
-rw-r--r--arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.h8
-rw-r--r--arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c21
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;