浏览代码

[MIPS] Use generic NTP code for all MIPS platforms

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Ralf Baechle 17 年之前
父节点
当前提交
f5ff0a2802
共有 3 个文件被更改,包括 8 次插入38 次删除
  1. 4 0
      arch/mips/Kconfig
  2. 4 20
      arch/mips/kernel/time.c
  3. 0 18
      arch/mips/sgi-ip27/ip27-timer.c

+ 4 - 0
arch/mips/Kconfig

@@ -670,6 +670,10 @@ config GENERIC_TIME
 	bool
 	bool
 	default y
 	default y
 
 
+config GENERIC_CMOS_UPDATE
+	bool
+	default y
+
 config SCHED_NO_NO_OMIT_FRAME_POINTER
 config SCHED_NO_NO_OMIT_FRAME_POINTER
 	bool
 	bool
 	default y
 	default y

+ 4 - 20
arch/mips/kernel/time.c

@@ -67,6 +67,10 @@ unsigned long (*rtc_mips_get_time)(void) = null_rtc_get_time;
 int (*rtc_mips_set_time)(unsigned long) = null_rtc_set_time;
 int (*rtc_mips_set_time)(unsigned long) = null_rtc_set_time;
 int (*rtc_mips_set_mmss)(unsigned long);
 int (*rtc_mips_set_mmss)(unsigned long);
 
 
+int update_persistent_clock(struct timespec now)
+{
+	return rtc_mips_set_mmss(now.tv_sec);
+}
 
 
 /* how many counter cycles in a jiffy */
 /* how many counter cycles in a jiffy */
 static unsigned long cycles_per_jiffy __read_mostly;
 static unsigned long cycles_per_jiffy __read_mostly;
@@ -125,9 +129,6 @@ static void __init c0_hpt_timer_init(void)
 int (*mips_timer_state)(void);
 int (*mips_timer_state)(void);
 void (*mips_timer_ack)(void);
 void (*mips_timer_ack)(void);
 
 
-/* last time when xtime and rtc are sync'ed up */
-static long last_rtc_update;
-
 /*
 /*
  * local_timer_interrupt() does profiling and process accounting
  * local_timer_interrupt() does profiling and process accounting
  * on a per-CPU basis.
  * on a per-CPU basis.
@@ -159,23 +160,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id)
 	 */
 	 */
 	do_timer(1);
 	do_timer(1);
 
 
-	/*
-	 * If we have an externally synchronized Linux clock, then update
-	 * CMOS clock accordingly every ~11 minutes. rtc_mips_set_time() has to be
-	 * called as close as possible to 500 ms before the new second starts.
-	 */
-	if (ntp_synced() &&
-	    xtime.tv_sec > last_rtc_update + 660 &&
-	    (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
-	    (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
-		if (rtc_mips_set_mmss(xtime.tv_sec) == 0) {
-			last_rtc_update = xtime.tv_sec;
-		} else {
-			/* do it again in 60 s */
-			last_rtc_update = xtime.tv_sec - 600;
-		}
-	}
-
 	write_sequnlock(&xtime_lock);
 	write_sequnlock(&xtime_lock);
 
 
 	/*
 	/*

+ 0 - 18
arch/mips/sgi-ip27/ip27-timer.c

@@ -40,7 +40,6 @@
 #define TICK_SIZE (tick_nsec / 1000)
 #define TICK_SIZE (tick_nsec / 1000)
 
 
 static unsigned long ct_cur[NR_CPUS];	/* What counter should be at next timer irq */
 static unsigned long ct_cur[NR_CPUS];	/* What counter should be at next timer irq */
-static long last_rtc_update;		/* Last time the rtc clock got updated */
 
 
 #if 0
 #if 0
 static int set_rtc_mmss(unsigned long nowtime)
 static int set_rtc_mmss(unsigned long nowtime)
@@ -113,23 +112,6 @@ again:
 
 
 	update_process_times(user_mode(get_irq_regs()));
 	update_process_times(user_mode(get_irq_regs()));
 
 
-	/*
-	 * If we have an externally synchronized Linux clock, then update
-	 * RTC clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
-	 * called as close as possible to when a second starts.
-	 */
-	if (ntp_synced() &&
-	    xtime.tv_sec > last_rtc_update + 660 &&
-	    (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
-	    (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
-		if (rtc_mips_set_time(xtime.tv_sec) == 0) {
-			last_rtc_update = xtime.tv_sec;
-		} else {
-			last_rtc_update = xtime.tv_sec - 600;
-			/* do it again in 60 s */
-		}
-	}
-
 	write_sequnlock(&xtime_lock);
 	write_sequnlock(&xtime_lock);
 	irq_exit();
 	irq_exit();
 }
 }