diff options
author | Alex Frid <afrid@nvidia.com> | 2010-02-22 20:25:07 -0800 |
---|---|---|
committer | Alex Frid <afrid@nvidia.com> | 2010-02-23 13:32:16 -0800 |
commit | 05d411c54e896ebaa836e0bb3e9e0809c77c7a0b (patch) | |
tree | 36833efd50349382c8eb1a0ba74c028c0a9ef9d9 /arch | |
parent | bdbfc7a9b82eb6c26524f46523b7728dd645a3ef (diff) |
tegra RM: Skipped CPU1 BogoMIPS re-calibration.
Skipped CPU1 BogoMIPS re-calibration every time it is hotplugged.
(made sure both CPUs are running at maximum frequency while hotplugging
CPU1, and preset CPU1 BogoMIPS equal to CPU0 settings).
Change-Id: Id238fef211414e5ef88f5739191b700262cafa78
Diffstat (limited to 'arch')
4 files changed, 16 insertions, 10 deletions
diff --git a/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.c b/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.c index f1fadbdbc201..b525e1b16bae 100644 --- a/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.c +++ b/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.c @@ -349,7 +349,7 @@ NvRmPmRequest NvRmPrivAp20GetPmRequest( NvRmDeviceHandle hRmDevice, const NvRmDfsSampler* pCpuSampler, - NvRmFreqKHz CpuKHz) + NvRmFreqKHz* pCpuKHz) { // Assume initial slave CPU1 On request static NvRmPmRequest s_LastPmRequest = (NvRmPmRequest_CpuOnFlag | 0x1); @@ -361,7 +361,7 @@ NvRmPrivAp20GetPmRequest( (0 != NV_DRF_VAL(CLK_RST_CONTROLLER, RST_CPU_CMPLX_SET, SET_CPURESET1, NV_REGR(hRmDevice, NvRmPrivModuleID_ClockAndReset, 0, CLK_RST_CONTROLLER_RST_CPU_CMPLX_SET_0))); - NvRmFreqKHz CpuLoadGaugeKHz = CpuKHz; + NvRmFreqKHz CpuLoadGaugeKHz = *pCpuKHz; // Slave CPU1 power management policy thresholds: // - use fixed values if they are defined explicitly, otherwise @@ -415,7 +415,10 @@ NvRmPrivAp20GetPmRequest( return PmRequest; } if ((s_LastPmRequest & NvRmPmRequest_CpuOffFlag) && Cpu1Off) + { s_LastPmRequest = PmRequest = (NvRmPmRequest_CpuOnFlag | 0x1); + *pCpuKHz = NvRmPrivGetSocClockLimits(NvRmModuleID_Cpu)->MaxKHz; + } #if NVRM_TEST_PMREQUEST_UP_MODE NV_REGW(hRmDevice, NvRmPrivModuleID_ClockAndReset, 0, CLK_RST_CONTROLLER_RST_CPU_CMPLX_CLR_0, 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 0f104fe2ae02..c4424599a93c 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 @@ -331,7 +331,7 @@ NvRmPrivAp20DttClockUpdate( * * @param hRmDevice The RM device handle. * @param pCpuSampler Pointer to the DFS CPU clock sampling records - * @param CpuKHz CPU clock frequency target + * @param pCpuKHz Pointer to the CPU clock frequency target * * @return New PM request to change CPU power state */ @@ -339,7 +339,7 @@ NvRmPmRequest NvRmPrivAp20GetPmRequest( NvRmDeviceHandle hRmDevice, const NvRmDfsSampler* pCpuSampler, - NvRmFreqKHz CpuKHz); + NvRmFreqKHz* pCpuKHz); #ifdef __cplusplus } 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 74c28a5f9c42..f031ec95d592 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 @@ -397,7 +397,7 @@ static NvRmPmRequest DfsGetPmRequest( NvRmDeviceHandle hRmDevice, NvRmDfsSampler* pCpuSampler, - NvRmFreqKHz CpuKHz); + NvRmFreqKHz* pCpuKHz); /*****************************************************************************/ @@ -991,11 +991,11 @@ static NvRmPmRequest DfsGetPmRequest( NvRmDeviceHandle hRmDevice, NvRmDfsSampler* pCpuSampler, - NvRmFreqKHz CpuKHz) + NvRmFreqKHz* pCpuKHz) { if (hRmDevice->ChipId.Id == 0x20) { - return NvRmPrivAp20GetPmRequest(hRmDevice, pCpuSampler, CpuKHz); + return NvRmPrivAp20GetPmRequest(hRmDevice, pCpuSampler, pCpuKHz); } return NvRmPmRequest_None; } @@ -1223,7 +1223,7 @@ DfsGetTargetFrequencies( if (i == NvRmDfsClockId_Cpu) { NvRmPmRequest r = - DfsGetPmRequest(pDfs->hRm, pDomainSampler, *pDomainKHz); + DfsGetPmRequest(pDfs->hRm, pDomainSampler, pDomainKHz); if (r != NvRmPmRequest_None) { pDfs->PmRequest = r; diff --git a/arch/arm/mach-tegra/nvrm_user.c b/arch/arm/mach-tegra/nvrm_user.c index e1dcc26aba9c..2ae106bedecd 100644 --- a/arch/arm/mach-tegra/nvrm_user.c +++ b/arch/arm/mach-tegra/nvrm_user.c @@ -30,6 +30,8 @@ #include <linux/platform_device.h> #include <linux/freezer.h> #include <linux/suspend.h> +#include <linux/percpu.h> +#include <asm/cpu.h> #include "nvcommon.h" #include "nvassert.h" #include "nvos.h" @@ -173,7 +175,8 @@ static void NvRmDfsThread(void *args) if (Request & NvRmPmRequest_CpuOnFlag) { #ifdef CONFIG_HOTPLUG_CPU - printk("DFS requested CPU ON\n"); + printk("DFS requested CPU1 ON\n"); + preset_lpj = per_cpu(cpu_data, 0).loops_per_jiffy; cpu_up(1); #endif } @@ -181,7 +184,7 @@ static void NvRmDfsThread(void *args) if (Request & NvRmPmRequest_CpuOffFlag) { #ifdef CONFIG_HOTPLUG_CPU - printk("DFS requested CPU OFF\n"); + printk("DFS requested CPU1 OFF\n"); cpu_down(1); #endif } |