summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAlex Frid <afrid@nvidia.com>2010-02-22 20:25:07 -0800
committerAlex Frid <afrid@nvidia.com>2010-02-23 13:32:16 -0800
commit05d411c54e896ebaa836e0bb3e9e0809c77c7a0b (patch)
tree36833efd50349382c8eb1a0ba74c028c0a9ef9d9 /arch
parentbdbfc7a9b82eb6c26524f46523b7728dd645a3ef (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')
-rw-r--r--arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.c7
-rw-r--r--arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_power_dfs.h4
-rw-r--r--arch/arm/mach-tegra/nvrm/core/common/nvrm_power_dfs.c8
-rw-r--r--arch/arm/mach-tegra/nvrm_user.c7
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
}