Commit 5d14a18d authored by Paul Mackerras's avatar Paul Mackerras

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: default avatarPaul Mackerras <paulus@samba.org>
parent 17a6392d
...@@ -222,7 +222,7 @@ static inline void timer_sync_xtime(unsigned long cur_tb) ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment