mirror of https://gitee.com/openkylin/linux.git
powerpc: Fix some bugs in the new merged time code
I had the sense of the test for when to use the old 601-style RTC registers inverted. pmac_calibrate_decr and via_calibrate_decr weren't setting ppc_tb_freq, on which all the further calculations depended. Lastly, update_gtod was losing the top 32 bits of the new tb_to_xs value. Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
17a6392d30
commit
5d14a18d59
|
@ -222,7 +222,7 @@ static inline void timer_sync_xtime(unsigned long cur_tb)
|
||||||
* between updates.
|
* between updates.
|
||||||
*/
|
*/
|
||||||
static inline void update_gtod(u64 new_tb_stamp, u64 new_stamp_xsec,
|
static inline void update_gtod(u64 new_tb_stamp, u64 new_stamp_xsec,
|
||||||
unsigned int new_tb_to_xs)
|
u64 new_tb_to_xs)
|
||||||
{
|
{
|
||||||
unsigned temp_idx;
|
unsigned temp_idx;
|
||||||
struct gettimeofday_vars *temp_varp;
|
struct gettimeofday_vars *temp_varp;
|
||||||
|
|
|
@ -216,8 +216,8 @@ via_calibrate_decr(void)
|
||||||
;
|
;
|
||||||
dend = get_dec();
|
dend = get_dec();
|
||||||
|
|
||||||
|
ppc_tb_freq = (dstart - dend) * 100 / 6;
|
||||||
tb_ticks_per_jiffy = (dstart - dend) / ((6 * HZ)/100);
|
tb_ticks_per_jiffy = (dstart - dend) / ((6 * HZ)/100);
|
||||||
tb_to_us = mulhwu_scale_factor(dstart - dend, 60000);
|
|
||||||
|
|
||||||
printk(KERN_INFO "via_calibrate_decr: ticks per jiffy = %lu (%u ticks)\n",
|
printk(KERN_INFO "via_calibrate_decr: ticks per jiffy = %lu (%u ticks)\n",
|
||||||
tb_ticks_per_jiffy, dstart - dend);
|
tb_ticks_per_jiffy, dstart - dend);
|
||||||
|
@ -306,6 +306,5 @@ pmac_calibrate_decr(void)
|
||||||
freq = *fp;
|
freq = *fp;
|
||||||
printk("time_init: decrementer frequency = %u.%.6u MHz\n",
|
printk("time_init: decrementer frequency = %u.%.6u MHz\n",
|
||||||
freq/1000000, freq%1000000);
|
freq/1000000, freq%1000000);
|
||||||
tb_ticks_per_jiffy = freq / HZ;
|
ppc_tb_freq = freq;
|
||||||
tb_to_us = mulhwu_scale_factor(freq, 1000000);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ struct div_result {
|
||||||
/* Accessor functions for the timebase (RTC on 601) registers. */
|
/* Accessor functions for the timebase (RTC on 601) registers. */
|
||||||
/* If one day CONFIG_POWER is added just define __USE_RTC as 1 */
|
/* If one day CONFIG_POWER is added just define __USE_RTC as 1 */
|
||||||
#ifdef CONFIG_6xx
|
#ifdef CONFIG_6xx
|
||||||
#define __USE_RTC() cpu_has_feature(CPU_FTR_USE_TB)
|
#define __USE_RTC() (!cpu_has_feature(CPU_FTR_USE_TB))
|
||||||
#else
|
#else
|
||||||
#define __USE_RTC() 0
|
#define __USE_RTC() 0
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue