mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 01:34:00 +08:00
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: John Stultz <johnstul@us.ibm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Cc: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
e4bf5beccc
commit
5cfc8ee0bb
@ -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
|
||||
|
@ -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
|
||||
};
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -97,6 +97,7 @@ config ARCH_AT572D940HF
|
||||
|
||||
config ARCH_AT91X40
|
||||
bool "AT91x40"
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
|
||||
endchoice
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user