Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f2c2679 authored by Greg Ungerer's avatar Greg Ungerer Committed by Linus Torvalds
Browse files

m68knommu: cleanup m68knommu timer code



Reduce the function pointer mess of the m68knommu timer code by calling
directly to the local hardware's timer setup, and expose the local
common timer interrupt handler to the lower level hardware timer.

Ultimately this will save definitions of all these functions across all
the platform code to setup the function pointers (which for any given
m68knommu CPU family member can be only one set of hardware timer
functions).

Signed-off-by: default avatarGreg Ungerer <gerg@uclinux.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 49aa49bf
Loading
Loading
Loading
Loading
+0 −9
Original line number Original line Diff line number Diff line
@@ -273,12 +273,3 @@ struct seq_operations cpuinfo_op = {
	.show	= show_cpuinfo,
	.show	= show_cpuinfo,
};
};
void arch_gettod(int *year, int *mon, int *day, int *hour,
		 int *min, int *sec)
{
	if (mach_gettod)
		mach_gettod(year, mon, day, hour, min, sec);
	else
		*year = *mon = *day = *hour = *min = *sec = 0;
}
+8 −14
Original line number Original line Diff line number Diff line
@@ -27,7 +27,6 @@


#define	TICK_SIZE (tick_nsec / 1000)
#define	TICK_SIZE (tick_nsec / 1000)



static inline int set_rtc_mmss(unsigned long nowtime)
static inline int set_rtc_mmss(unsigned long nowtime)
{
{
	if (mach_set_clock_mmss)
	if (mach_set_clock_mmss)
@@ -39,15 +38,11 @@ static inline int set_rtc_mmss(unsigned long nowtime)
 * timer_interrupt() needs to keep up the real-time clock,
 * timer_interrupt() needs to keep up the real-time clock,
 * as well as call the "do_timer()" routine every clocktick
 * as well as call the "do_timer()" routine every clocktick
 */
 */
static irqreturn_t timer_interrupt(int irq, void *dummy)
irqreturn_t arch_timer_interrupt(int irq, void *dummy)
{
{
	/* last time the cmos clock got updated */
	/* last time the cmos clock got updated */
	static long last_rtc_update=0;
	static long last_rtc_update=0;


	/* may need to kick the hardware timer */
	if (mach_tick)
	  mach_tick();

	write_seqlock(&xtime_lock);
	write_seqlock(&xtime_lock);


	do_timer(1);
	do_timer(1);
@@ -103,10 +98,10 @@ void time_init(void)
{
{
	unsigned int year, mon, day, hour, min, sec;
	unsigned int year, mon, day, hour, min, sec;


	extern void arch_gettod(int *year, int *mon, int *day, int *hour,
	if (mach_gettod)
				int *min, int *sec);
		mach_gettod(&year, &mon, &day, &hour, &min, &sec);

	else
	arch_gettod(&year, &mon, &day, &hour, &min, &sec);
		year = mon = day = hour = min = sec = 0;


	if ((year += 1900) < 1970)
	if ((year += 1900) < 1970)
		year += 100;
		year += 100;
@@ -114,7 +109,7 @@ void time_init(void)
	xtime.tv_nsec = 0;
	xtime.tv_nsec = 0;
	wall_to_monotonic.tv_sec = -xtime.tv_sec;
	wall_to_monotonic.tv_sec = -xtime.tv_sec;


	mach_sched_init(timer_interrupt);
	hw_timer_init();
}
}


/*
/*
@@ -128,7 +123,7 @@ void do_gettimeofday(struct timeval *tv)


	do {
	do {
		seq = read_seqbegin_irqsave(&xtime_lock, flags);
		seq = read_seqbegin_irqsave(&xtime_lock, flags);
		usec = mach_gettimeoffset ? mach_gettimeoffset() : 0;
		usec = hw_timer_offset();
		sec = xtime.tv_sec;
		sec = xtime.tv_sec;
		usec += (xtime.tv_nsec / 1000);
		usec += (xtime.tv_nsec / 1000);
	} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
	} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
@@ -160,8 +155,7 @@ int do_settimeofday(struct timespec *tv)
	 * Discover what correction gettimeofday
	 * Discover what correction gettimeofday
	 * would have done, and then undo it!
	 * would have done, and then undo it!
	 */
	 */
	if (mach_gettimeoffset)
	nsec -= (hw_timer_offset() * 1000);
		nsec -= (mach_gettimeoffset() * 1000);


	wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
	wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
	wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
	wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
+0 −9
Original line number Original line Diff line number Diff line
@@ -10,13 +10,10 @@
/***************************************************************************/
/***************************************************************************/


#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/param.h>
#include <linux/param.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <asm/irq.h>
#include <asm/dma.h>
#include <asm/dma.h>
#include <asm/traps.h>
#include <asm/machdep.h>
#include <asm/machdep.h>
#include <asm/coldfire.h>
#include <asm/coldfire.h>
#include <asm/mcftimer.h>
#include <asm/mcftimer.h>
@@ -25,9 +22,6 @@


/***************************************************************************/
/***************************************************************************/


void coldfire_tick(void);
void coldfire_timer_init(irq_handler_t handler);
unsigned long coldfire_timer_offset(void);
void coldfire_reset(void);
void coldfire_reset(void);


/***************************************************************************/
/***************************************************************************/
@@ -97,9 +91,6 @@ int mcf_timerirqpending(int timer)
void config_BSP(char *commandp, int size)
void config_BSP(char *commandp, int size)
{
{
	mcf_setimr(MCFSIM_IMR_MASKALL);
	mcf_setimr(MCFSIM_IMR_MASKALL);
	mach_sched_init = coldfire_timer_init;
	mach_tick = coldfire_tick;
	mach_gettimeoffset = coldfire_timer_offset;
	mach_reset = coldfire_reset;
	mach_reset = coldfire_reset;
}
}


+0 −10
Original line number Original line Diff line number Diff line
@@ -9,23 +9,16 @@
/***************************************************************************/
/***************************************************************************/


#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/param.h>
#include <linux/param.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <asm/irq.h>
#include <asm/dma.h>
#include <asm/dma.h>
#include <asm/traps.h>
#include <asm/machdep.h>
#include <asm/machdep.h>
#include <asm/coldfire.h>
#include <asm/coldfire.h>
#include <asm/mcftimer.h>
#include <asm/mcfsim.h>
#include <asm/mcfsim.h>
#include <asm/mcfdma.h>
#include <asm/mcfdma.h>


/***************************************************************************/
/***************************************************************************/


void coldfire_tick(void);
void coldfire_timer_init(irq_handler_t handler);
unsigned long coldfire_timer_offset(void);
void coldfire_reset(void);
void coldfire_reset(void);


/***************************************************************************/
/***************************************************************************/
@@ -102,9 +95,6 @@ void config_BSP(char *commandp, int size)
	commandp[size-1] = 0;
	commandp[size-1] = 0;
#endif /* CONFIG_NETtel */
#endif /* CONFIG_NETtel */


	mach_sched_init = coldfire_timer_init;
	mach_tick = coldfire_tick;
	mach_gettimeoffset = coldfire_timer_offset;
	mach_reset = coldfire_reset;
	mach_reset = coldfire_reset;
}
}


+1 −7
Original line number Original line Diff line number Diff line
@@ -27,9 +27,6 @@ unsigned int dma_device_address[MAX_M68K_DMA_CHANNELS];


/***************************************************************************/
/***************************************************************************/


void coldfire_pit_tick(void);
void coldfire_pit_init(irq_handler_t handler);
unsigned long coldfire_pit_offset(void);
void coldfire_reset(void);
void coldfire_reset(void);


/***************************************************************************/
/***************************************************************************/
@@ -47,9 +44,6 @@ void mcf_autovector(unsigned int vec)


void config_BSP(char *commandp, int size)
void config_BSP(char *commandp, int size)
{
{
    mach_sched_init = coldfire_pit_init;
    mach_tick = coldfire_pit_tick;
    mach_gettimeoffset = coldfire_pit_offset;
	mach_reset = coldfire_reset;
	mach_reset = coldfire_reset;
}
}


Loading