ARM: shmobile: Do additional settings for L2shutdown mode
RFC PATCH 6/7 ARM: shmobile: Do additional settings for L2shutdown mode
According to Cortex-A15 TRM, some additional settings are needed. Although the procedure was not completely same as in TRM, it was referred to vexpress implementation to arrange order of additional settings.
--- arch/arm/mach-shmobile/platsmp-apmu.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
arch/arm/mach-shmobile/platsmp-apmu.c +25 -0
@@ -161,8 +161,32 @@ int shmobile_smp_apmu_boot_secondary(unsigned int cpu, struct task_struct *idle)#if defined(CONFIG_HOTPLUG_CPU ) || defined(CONFIG_SUSPEND ) || \ defined(CONFIG_CPU_IDLE ) +static void do_l2shutdown_settings (void ) +{ +unsigned int v; + +/* Disable L2$ prefetches */ + asmvolatile ( +" mrc p15, 1, %0, c15, c0, 3\n" +" orr %0, %0, %1\n" +" mcr p15, 1, %0, c15, c0, 3\n" + :"=&r" (v) + :"Ir" (0x400 ) + :"cc" ); +isb (); +dsb (); + +flush_cache_all (); + +/* Set Double lock control bit */ + __asm__ __volatile__("mcr p14, 0, %0, c1, c3, 4" : :"r" (0x1 )); +} +static inline void cpu_enter_lowpower_a15 (void ) { +if (is_a15_l2shutdown) +do_l2shutdown_settings (); +v7_exit_coherency_flush (louis); }
@@ -245,6 +269,7 @@ static int shmobile_smp_apmu_enter_suspend(suspend_state_t state)writel_relaxed (0x0 , cpucmcr);rcar_sysc_clear_event_status (); + is_a15_l2shutdown =0 ;return 0 ; }
Signature · 1 line
1.7.9.5
Hi Khiem-san,
Quoted 48 lines · Khiem Nguyen
According to Cortex-A15 TRM, some additional settings are needed. Although the procedure was not completely same as in TRM, it was referred to vexpress implementation to arrange order of additional settings.
Signed-off-by Khiem Nguyen <[email protected]>--- arch/arm/mach-shmobile/platsmp-apmu.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)arch/arm/mach-shmobile/platsmp-apmu.c +24
-0@@ -161,8 +161,32 @@ int shmobile_smp_apmu_boot_secondary(unsigned int cpu, struct task_struct *idle)#if defined(CONFIG_HOTPLUG_CPU ) || defined(CONFIG_SUSPEND ) || \ defined(CONFIG_CPU_IDLE ) +static void do_l2shutdown_settings (void ) +{ +unsigned int v; + +/* Disable L2$ prefetches */ + asmvolatile ( +" mrc p15, 1, %0, c15, c0, 3\n" +" orr %0, %0, %1\n" +" mcr p15, 1, %0, c15, c0, 3\n" + :"=&r" (v) + :"Ir" (0x400 ) + :"cc" ); +isb (); +dsb (); + +flush_cache_all (); + +/* Set Double lock control bit */ + __asm__ __volatile__("mcr p14, 0, %0, c1, c3, 4" : :"r" (0x1 )); +} +static inline void cpu_enter_lowpower_a15 (void ) { +if (is_a15_l2shutdown) +do_l2shutdown_settings (); +v7_exit_coherency_flush (louis); }
arch/arm/mach-shmobile/platsmp-apmu.c static int shmobile_smp_apmu_enter_suspend(suspend_state_t state) · line 272
Quoted 4 lines
arch/arm/mach-shmobile/platsmp-apmu.c +1
-0@@ -245,6 +269,7 @@ static int shmobile_smp_apmu_enter_suspend(suspend_state_t state)writel_relaxed (0x0 , cpucmcr);rcar_sysc_clear_event_status (); + is_a15_l2shutdown =0 ;
What's the purpose of clearing is_a15_l2shutdown here?
arch/arm/mach-shmobile/platsmp-apmu.c static int shmobile_smp_apmu_enter_suspend(suspend_state_t state) · line 275
Quoted 3 lines
arch/arm/mach-shmobile/platsmp-apmu.c +0
-0return 0 ; }
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Hi Geert-san,
Quoted 51 lines · Geert Uytterhoeven
Hi Khiem-san,
Quoted 47 lines · Khiem Nguyen
According to Cortex-A15 TRM, some additional settings are needed. Although the procedure was not completely same as in TRM, it was referred to vexpress implementation to arrange order of additional settings.
Signed-off-by Khiem Nguyen <[email protected]>--- arch/arm/mach-shmobile/platsmp-apmu.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)arch/arm/mach-shmobile/platsmp-apmu.c +24
-0@@ -161,8 +161,32 @@ int shmobile_smp_apmu_boot_secondary(unsigned int cpu, struct task_struct *idle)#if defined(CONFIG_HOTPLUG_CPU ) || defined(CONFIG_SUSPEND ) || \ defined(CONFIG_CPU_IDLE ) +static void do_l2shutdown_settings (void ) +{ +unsigned int v; + +/* Disable L2$ prefetches */ + asmvolatile ( +" mrc p15, 1, %0, c15, c0, 3\n" +" orr %0, %0, %1\n" +" mcr p15, 1, %0, c15, c0, 3\n" + :"=&r" (v) + :"Ir" (0x400 ) + :"cc" ); +isb (); +dsb (); + +flush_cache_all (); + +/* Set Double lock control bit */ + __asm__ __volatile__("mcr p14, 0, %0, c1, c3, 4" : :"r" (0x1 )); +} +static inline void cpu_enter_lowpower_a15 (void ) { +if (is_a15_l2shutdown) +do_l2shutdown_settings (); +v7_exit_coherency_flush (louis); }
Quoted 7 lines
arch/arm/mach-shmobile/platsmp-apmu.c static int shmobile_smp_apmu_enter_suspend(suspend_state_t state) · line 272
Quoted 5 lines
arch/arm/mach-shmobile/platsmp-apmu.c +1
-0@@ -245,6 +269,7 @@ static int shmobile_smp_apmu_enter_suspend(suspend_state_t state)writel_relaxed (0x0 , cpucmcr);rcar_sysc_clear_event_status (); + is_a15_l2shutdown =0 ;What's the purpose of clearing
is_a15_l2shutdownhere?
As this bit was set in suspend processing,
it should be cleared in resume processing.
And this is to make sure L2shutdown setting is only executed within Suspend-to-RAM, not CPUIdle/Core-Standby or CPU hotplug. :)
Quoted 15 lines
arch/arm/mach-shmobile/platsmp-apmu.c static int shmobile_smp_apmu_enter_suspend(suspend_state_t state) · line 275
Quoted 3 lines
arch/arm/mach-shmobile/platsmp-apmu.c +0
-0return 0 ; }Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Signature · 2 lines
Best regards, KHIEM Nguyen