Message ID | 1390299016-14105-5-git-send-email-acourbot@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 01/21/2014 03:10 AM, Alexandre Courbot wrote: > Support the do_idle() firmware call, which is necessary to properly > support cpuidle. > diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c > +#define TF_CPU_PM 0xfffffffc > +#define TF_CPU_PM_LP0 0xffffffe3 > +#define TF_CPU_PM_LP1 0xffffffe6 > +#define TF_CPU_PM_LP1_NO_MC_CLK 0xffffffe5 > +#define TF_CPU_PM_LP2 0xffffffe4 > +#define TF_CPU_PM_LP2_NOFLUSH_L2 0xffffffe7 Hmm. This must be Tegra-specific, not generic to any TF client, since aren't the names of the suspend states (LP0, LP1, LP2) entirely specific to Tegra?
On Thu, Jan 23, 2014 at 5:43 AM, Stephen Warren <swarren@wwwdotorg.org> wrote: > On 01/21/2014 03:10 AM, Alexandre Courbot wrote: >> Support the do_idle() firmware call, which is necessary to properly >> support cpuidle. > >> diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c > >> +#define TF_CPU_PM 0xfffffffc >> +#define TF_CPU_PM_LP0 0xffffffe3 >> +#define TF_CPU_PM_LP1 0xffffffe6 >> +#define TF_CPU_PM_LP1_NO_MC_CLK 0xffffffe5 >> +#define TF_CPU_PM_LP2 0xffffffe4 >> +#define TF_CPU_PM_LP2_NOFLUSH_L2 0xffffffe7 > > Hmm. This must be Tegra-specific, not generic to any TF client, since > aren't the names of the suspend states (LP0, LP1, LP2) entirely specific > to Tegra? The names are negligence on my part, actually. I arbitrarily named them that way without thinking this was Tegra-only denomination. The downstream kernel does not even use these, they hardcode the values directly. Will fix that, thanks for spotting it.
diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c index ef1e3d8f4af0..7c14af809995 100644 --- a/arch/arm/firmware/trusted_foundations.c +++ b/arch/arm/firmware/trusted_foundations.c @@ -22,6 +22,15 @@ #define TF_SET_CPU_BOOT_ADDR_SMC 0xfffff200 +#define TF_CPU_PM 0xfffffffc +#define TF_CPU_PM_LP0 0xffffffe3 +#define TF_CPU_PM_LP1 0xffffffe6 +#define TF_CPU_PM_LP1_NO_MC_CLK 0xffffffe5 +#define TF_CPU_PM_LP2 0xffffffe4 +#define TF_CPU_PM_LP2_NOFLUSH_L2 0xffffffe7 + +static unsigned long cpu_boot_addr; + static void __naked tf_generic_smc(u32 type, u32 arg1, u32 arg2) { asm volatile( @@ -41,13 +50,22 @@ static void __naked tf_generic_smc(u32 type, u32 arg1, u32 arg2) static int tf_set_cpu_boot_addr(int cpu, unsigned long boot_addr) { - tf_generic_smc(TF_SET_CPU_BOOT_ADDR_SMC, boot_addr, 0); + cpu_boot_addr = boot_addr; + tf_generic_smc(TF_SET_CPU_BOOT_ADDR_SMC, cpu_boot_addr, 0); + + return 0; +} + +static int tf_do_idle(void) +{ + tf_generic_smc(TF_CPU_PM, TF_CPU_PM_LP2_NOFLUSH_L2, cpu_boot_addr); return 0; } static const struct firmware_ops trusted_foundations_ops = { .set_cpu_boot_addr = tf_set_cpu_boot_addr, + .do_idle = tf_do_idle, }; void register_trusted_foundations(struct trusted_foundations_platform_data *pd)
Support the do_idle() firmware call, which is necessary to properly support cpuidle. Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> --- arch/arm/firmware/trusted_foundations.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)