diff options
author | Alex Frid <afrid@nvidia.com> | 2010-03-29 22:00:03 -0700 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-03-31 10:11:00 -0800 |
commit | 68f6049a0f64995dc21d4276b058ec86904c8ea3 (patch) | |
tree | 1e5e39e6246745019e7c5f6a876fefd9c6c71c4b | |
parent | b6a75a5236899a25f2c05934cf22129d4ae8f763 (diff) |
tegra RM: Moved AVP and EMC low corners.
Moved AVP low corner to 36MHz (from 24MHz) and EMC low corner for LPDDR2
platforms to 18MHz (from 50MHz), as determined by audio use case testing.
Increased low corner detection hysteresis for CPU to 4MHz (from 1MHz),
and removed half of activity margin from low corner hit requirements in
case when no starvation/busy hints are present.
Change-Id: Ia3ccbaefb542066a20a1ac238e88026655c76223
Reviewed-on: http://git-master/r/985
Reviewed-by: Niranjan Wartikar <nwartikar@nvidia.com>
Tested-by: Niranjan Wartikar <nwartikar@nvidia.com>
Reviewed-by: Gary King <gking@nvidia.com>
-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; |