RE: [PATCH v4 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
From: Wang Dongsheng-B40534 <hidden>
Date: 2013-09-25 08:10:16
-----Original Message----- From: Bhushan Bharat-R65777 Sent: Wednesday, September 25, 2013 2:23 PM To: Wang Dongsheng-B40534; Wood Scott-B07421 Cc: linuxppc-dev@lists.ozlabs.org; Wang Dongsheng-B40534 Subject: RE: [PATCH v4 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle =20 =20 =20quoted
-----Original Message----- From: Linuxppc-dev [mailto:linuxppc-dev- bounces+bharat.bhushan=3Dfreescale.com@lists.ozlabs.org] On Behalf Of bounces+Dongsheng Wang Sent: Tuesday, September 24, 2013 2:59 PM To: Wood Scott-B07421 Cc: linuxppc-dev@lists.ozlabs.org; Wang Dongsheng-B40534 Subject: [PATCH v4 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle From: Wang Dongsheng <redacted> Add a sys interface to enable/diable pw20 state or altivec idle, and control the wait entry time. Enable/Disable interface: 0, disable. 1, enable. /sys/devices/system/cpu/cpuX/pw20_state /sys/devices/system/cpu/cpuX/altivec_idle Set wait time interface:(Nanosecond) /sys/devices/system/cpu/cpuX/pw20_wait_time /sys/devices/system/cpu/cpuX/altivec_idle_wait_time Example: Base on TBfreq is 41MHZ. 1~47(ns): TB[63] 48~95(ns): TB[62] 96~191(ns): TB[61] 192~383(ns): TB[62] 384~767(ns): TB[60] ... Signed-off-by: Wang Dongsheng <redacted> --- *v4: Move code from 85xx/common.c to kernel/sysfs.c. Remove has_pw20_altivec_idle function. Change wait "entry_bit" to wait time. arch/powerpc/kernel/sysfs.c | 291 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+)diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c index 27a90b9..23fece6 100644 --- a/arch/powerpc/kernel/sysfs.c +++ b/arch/powerpc/kernel/sysfs.c@@ -85,6 +85,279 @@ __setup("smt-snooze-delay=3D",setup_smt_snooze_delay); #endif /* CONFIG_PPC64 */ +#ifdef CONFIG_FSL_SOC +#define MAX_BIT 63 + +static u64 pw20_wt; +static u64 altivec_idle_wt; + +static unsigned int get_idle_ticks_bit(u64 ns) { + u64 cycle; + + cycle =3D div_u64(ns, 1000 / tb_ticks_per_usec);=20 When tb_ticks_per_usec > 1000 (timebase frequency > 1GHz) then this will always be ns, which is not correct, no? =20
"1000 / tb_ticks_per_usec" means nsec_ticks_per_tb If timebase frequency > 1GHz, this should be "tb_ticks_per_usec / 1000" and= to get tb_ticks_per_nsec. This should be changed to "cycle =3D ns * tb_ticks_per_nsec;" But at present we do not have such a platform that timebase frequency more = than 1GHz. And I think it is not need to support such a situation. Because = we have no environment to test it. If later there will be more than 1GHZ platform at that time to add this sup= port. Thanks. -dongsheng