Loongson2 cpu_wait function
During the 3.10 merge cycle many MIPS platforms were broken by the generic idle loop patches. A patch series to fix this has already been merged but I'm wondering if fb40bc3e94933007d3e42e96daf1ec8044821cb8 [MIPS: Idle: Re-enable irqs at the end of r3081, au1k and loongson2 cpu_wait.] is sufficient and correct for Loongson 2.
In particular:
o drivers/cpufreq/loongson2_cpufreq.c protects accesses to LOONGSON_CHIPCFG0 in loongson2_cpu_wait with a spinlock. This spinlock is not used anywhere else in the kernel so it would appear there is still a race with other accesses to LOONGSON_CHIPCFG0.
o It's not SMPly correct - even if cpufreq_exit restores the old value of cpu_wait on a SMP system another processor might still be executing loongson2_cpu_wait().
o I'd appreciate if at least some basic power saving would be used even if CONFIG_LOONGSON2_CPUFREQ was disabled, that is loongson2_cpu_wait should go back to arch/mips/kernel/idle.c.
o Could somebody test if Loongson 2 is working? Thanks!
Ralf
Hi,
Quoted 8 lines · Ralf Baechle
During the 3.10 merge cycle many MIPS platforms were broken by the generic idle loop patches. A patch series to fix this has already been merged but I'm wondering if
fb40bc3e94933007d3e42e96daf1ec8044821cb8[MIPS: Idle: Re-enable irqs at the end of r3081, au1k and loongson2cpu_wait.] is sufficient and correct for Loongson 2.In particular:
Quoted 7 lines
o
drivers/cpufreq/loongson2_cpufreq.cprotects accesses toLOONGSON_CHIPCFG0inloongson2_cpu_waitwith a spinlock. This spinlock is not used anywhere else in the kernel so it would appear there is still a race with other accesses toLOONGSON_CHIPCFG0.
o It's not SMPly correct - even ifcpufreq_exitrestores the old value ofcpu_waiton a SMP system another processor might still be executingloongson2_cpu_wait().
I think Loongson2 is UP-only?
Quoted 4 lines
o I'd appreciate if at least some basic power saving would be used even if
CONFIG_LOONGSON2_CPUFREQwas disabled, that isloongson2_cpu_waitshould go back toarch/mips/kernel/idle.c.
o Could somebody test if Loongson 2 is working? Thanks!
It works (tested d97955625710b57f24427e403f150126078273c2), but cpufreq seems to be broken for some reason:
[ 6.136000] calling cpufreq_init+0x0/0x8c @ 1 [ 6.140000] cpufreq: Loongson-2F CPU frequency driver. [ 6.144000] initcall cpufreq_init+0x0/0x8c returned -19 after 4000 usecs
I would also like to remind that the boot is still unreliable without this patch: http://patchwork.linux-mips.org/patch/4958/
A.