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

Commit 5cfc8ee0 authored by John Stultz's avatar John Stultz Committed by Russell King
Browse files

ARM: convert arm to arch_gettimeoffset()



Convert arm to use GENERIC_TIME via the arch_getoffset() infrastructure,
reducing the amount of arch specific code we need to maintain.

The arm architecture is the last arch that need to be converted.

Signed-off-by: default avatarJohn Stultz <johnstul@us.ibm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
parent e4bf5bec
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -42,6 +42,11 @@ config GENERIC_GPIO

config GENERIC_TIME
	bool
	default y

config ARCH_USES_GETTIMEOFFSET
	bool
	default n

config GENERIC_CLOCKEVENTS
	bool
@@ -231,6 +236,7 @@ config ARCH_AAEC2000
	select CPU_ARM920T
	select ARM_AMBA
	select HAVE_CLK
	select ARCH_USES_GETTIMEOFFSET
	help
	  This enables support for systems based on the Agilent AAEC-2000

@@ -271,6 +277,7 @@ config ARCH_AT91
	select GENERIC_GPIO
	select ARCH_REQUIRE_GPIOLIB
	select HAVE_CLK
	select ARCH_USES_GETTIMEOFFSET
	help
	  This enables support for systems based on the Atmel AT91RM9200,
	  AT91SAM9 and AT91CAP9 processors.
@@ -290,6 +297,7 @@ config ARCH_BCMRING
config ARCH_CLPS711X
	bool "Cirrus Logic CLPS711x/EP721x-based"
	select CPU_ARM720T
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support for Cirrus Logic 711x/721x based boards.

@@ -298,6 +306,7 @@ config ARCH_GEMINI
	select CPU_FA526
	select GENERIC_GPIO
	select ARCH_REQUIRE_GPIOLIB
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support for the Cortina Systems Gemini family SoCs

@@ -306,6 +315,7 @@ config ARCH_EBSA110
	select CPU_SA110
	select ISA
	select NO_IOPORT
	select ARCH_USES_GETTIMEOFFSET
	help
	  This is an evaluation board for the StrongARM processor available
	  from Digital. It has limited hardware on-board, including an
@@ -321,6 +331,7 @@ config ARCH_EP93XX
	select COMMON_CLKDEV
	select ARCH_REQUIRE_GPIOLIB
	select ARCH_HAS_HOLES_MEMORYMODEL
	select ARCH_USES_GETTIMEOFFSET
	help
	  This enables support for the Cirrus EP93xx series of CPUs.

@@ -328,6 +339,7 @@ config ARCH_FOOTBRIDGE
	bool "FootBridge"
	select CPU_SA110
	select FOOTBRIDGE
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support for systems based on the DC21285 companion chip
	  ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder.
@@ -366,6 +378,7 @@ config ARCH_H720X
	bool "Hynix HMS720x-based"
	select CPU_ARM720T
	select ISA_DMA_API
	select ARCH_USES_GETTIMEOFFSET
	help
	  This enables support for systems based on the Hynix HMS720x

@@ -408,6 +421,7 @@ config ARCH_IXP23XX
	depends on MMU
	select CPU_XSC3
 	select PCI
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support for Intel's IXP23xx (XScale) family of processors.

@@ -416,6 +430,7 @@ config ARCH_IXP2000
	depends on MMU
	select CPU_XSCALE
	select PCI
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support for Intel's IXP2400/2800 (XScale) family of processors.

@@ -434,6 +449,7 @@ config ARCH_L7200
	bool "LinkUp-L7200"
	select CPU_ARM720T
	select FIQ
	select ARCH_USES_GETTIMEOFFSET
	help
	  Say Y here if you intend to run this kernel on a LinkUp Systems
	  L7200 Software Development Board which uses an ARM720T processor.
@@ -523,6 +539,7 @@ config ARCH_KS8695
	select CPU_ARM922T
	select GENERIC_GPIO
        select ARCH_REQUIRE_GPIOLIB
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based
	  System-on-Chip devices.
@@ -569,6 +586,7 @@ config ARCH_PNX4008
	bool "Philips Nexperia PNX4008 Mobile"
	select CPU_ARM926T
	select COMMON_CLKDEV
	select ARCH_USES_GETTIMEOFFSET
	help
	  This enables support for Philips PNX4008 mobile platform.

@@ -613,6 +631,7 @@ config ARCH_RPC
	select ISA_DMA_API
	select NO_IOPORT
	select ARCH_SPARSEMEM_ENABLE
	select ARCH_USES_GETTIMEOFFSET
	help
	  On the Acorn Risc-PC, Linux can support the internal IDE disk and
	  CD-ROM interface, serial and parallel port, and the floppy drive.
@@ -639,6 +658,7 @@ config ARCH_S3C2410
	select GENERIC_GPIO
	select ARCH_HAS_CPUFREQ
	select HAVE_CLK
	select ARCH_USES_GETTIMEOFFSET
	help
	  Samsung S3C2410X CPU based systems, such as the Simtec Electronics
	  BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
@@ -652,6 +672,7 @@ config ARCH_S3C64XX
	select ARM_VIC
	select HAVE_CLK
	select NO_IOPORT
	select ARCH_USES_GETTIMEOFFSET
	select ARCH_HAS_CPUFREQ
	select ARCH_REQUIRE_GPIOLIB
	select SAMSUNG_CLKSRC
@@ -708,6 +729,7 @@ config ARCH_SHARK
	select ISA_DMA
	select ZONE_DMA
	select PCI
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support for the StrongARM based Digital DNARD machine, also known
	  as "Shark" (<http://www.shark-linux.de/shark.html>).
@@ -717,6 +739,7 @@ config ARCH_LH7A40X
	select CPU_ARM922T
	select ARCH_DISCONTIGMEM_ENABLE if !LH7A40X_CONTIGMEM
	select ARCH_SPARSEMEM_ENABLE if !LH7A40X_CONTIGMEM
	select ARCH_USES_GETTIMEOFFSET
	help
	  Say Y here for systems based on one of the Sharp LH7A40X
	  System on a Chip processors.  These CPUs include an ARM922T
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ struct sys_timer {
	void			(*init)(void);
	void			(*suspend)(void);
	void			(*resume)(void);
#ifndef CONFIG_GENERIC_TIME
#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
	unsigned long		(*offset)(void);
#endif
};
+6 −64
Original line number Diff line number Diff line
@@ -72,12 +72,15 @@ unsigned long profile_pc(struct pt_regs *regs)
EXPORT_SYMBOL(profile_pc);
#endif

#ifndef CONFIG_GENERIC_TIME
static unsigned long dummy_gettimeoffset(void)
#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
u32 arch_gettimeoffset(void)
{
	if (system_timer->offset != NULL)
		return system_timer->offset() * 1000;

	return 0;
}
#endif
#endif /* CONFIG_ARCH_USES_GETTIMEOFFSET */

#ifdef CONFIG_LEDS_TIMER
static inline void do_leds(void)
@@ -93,63 +96,6 @@ static inline void do_leds(void)
#define	do_leds()
#endif

#ifndef CONFIG_GENERIC_TIME
void do_gettimeofday(struct timeval *tv)
{
	unsigned long flags;
	unsigned long seq;
	unsigned long usec, sec;

	do {
		seq = read_seqbegin_irqsave(&xtime_lock, flags);
		usec = system_timer->offset();
		sec = xtime.tv_sec;
		usec += xtime.tv_nsec / 1000;
	} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));

	/* usec may have gone up a lot: be safe */
	while (usec >= 1000000) {
		usec -= 1000000;
		sec++;
	}

	tv->tv_sec = sec;
	tv->tv_usec = usec;
}

EXPORT_SYMBOL(do_gettimeofday);

int do_settimeofday(struct timespec *tv)
{
	time_t wtm_sec, sec = tv->tv_sec;
	long wtm_nsec, nsec = tv->tv_nsec;

	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
		return -EINVAL;

	write_seqlock_irq(&xtime_lock);
	/*
	 * This is revolting. We need to set "xtime" correctly. However, the
	 * value in this location is the value at the most recent update of
	 * wall time.  Discover what correction gettimeofday() would have
	 * done, and then undo it!
	 */
	nsec -= system_timer->offset() * NSEC_PER_USEC;

	wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
	wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);

	set_normalized_timespec(&xtime, sec, nsec);
	set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);

	ntp_clear();
	write_sequnlock_irq(&xtime_lock);
	clock_was_set();
	return 0;
}

EXPORT_SYMBOL(do_settimeofday);
#endif /* !CONFIG_GENERIC_TIME */

#ifndef CONFIG_GENERIC_CLOCKEVENTS
/*
@@ -214,10 +160,6 @@ device_initcall(timer_init_sysfs);

void __init time_init(void)
{
#ifndef CONFIG_GENERIC_TIME
	if (system_timer->offset == NULL)
		system_timer->offset = dummy_gettimeoffset;
#endif
	system_timer->init();
}
+1 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ config ARCH_AT572D940HF

config ARCH_AT91X40
	bool "AT91x40"
	select ARCH_USES_GETTIMEOFFSET

endchoice