Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

John Stultz and committed by
Russell King
5cfc8ee0 e4bf5bec

+31 -65
+23
arch/arm/Kconfig
··· 42 42 43 43 config GENERIC_TIME 44 44 bool 45 + default y 46 + 47 + config ARCH_USES_GETTIMEOFFSET 48 + bool 49 + default n 45 50 46 51 config GENERIC_CLOCKEVENTS 47 52 bool ··· 236 231 select CPU_ARM920T 237 232 select ARM_AMBA 238 233 select HAVE_CLK 234 + select ARCH_USES_GETTIMEOFFSET 239 235 help 240 236 This enables support for systems based on the Agilent AAEC-2000 241 237 ··· 277 271 select GENERIC_GPIO 278 272 select ARCH_REQUIRE_GPIOLIB 279 273 select HAVE_CLK 274 + select ARCH_USES_GETTIMEOFFSET 280 275 help 281 276 This enables support for systems based on the Atmel AT91RM9200, 282 277 AT91SAM9 and AT91CAP9 processors. ··· 297 290 config ARCH_CLPS711X 298 291 bool "Cirrus Logic CLPS711x/EP721x-based" 299 292 select CPU_ARM720T 293 + select ARCH_USES_GETTIMEOFFSET 300 294 help 301 295 Support for Cirrus Logic 711x/721x based boards. 302 296 ··· 306 298 select CPU_FA526 307 299 select GENERIC_GPIO 308 300 select ARCH_REQUIRE_GPIOLIB 301 + select ARCH_USES_GETTIMEOFFSET 309 302 help 310 303 Support for the Cortina Systems Gemini family SoCs 311 304 ··· 315 306 select CPU_SA110 316 307 select ISA 317 308 select NO_IOPORT 309 + select ARCH_USES_GETTIMEOFFSET 318 310 help 319 311 This is an evaluation board for the StrongARM processor available 320 312 from Digital. It has limited hardware on-board, including an ··· 331 321 select COMMON_CLKDEV 332 322 select ARCH_REQUIRE_GPIOLIB 333 323 select ARCH_HAS_HOLES_MEMORYMODEL 324 + select ARCH_USES_GETTIMEOFFSET 334 325 help 335 326 This enables support for the Cirrus EP93xx series of CPUs. 336 327 ··· 339 328 bool "FootBridge" 340 329 select CPU_SA110 341 330 select FOOTBRIDGE 331 + select ARCH_USES_GETTIMEOFFSET 342 332 help 343 333 Support for systems based on the DC21285 companion chip 344 334 ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder. ··· 378 366 bool "Hynix HMS720x-based" 379 367 select CPU_ARM720T 380 368 select ISA_DMA_API 369 + select ARCH_USES_GETTIMEOFFSET 381 370 help 382 371 This enables support for systems based on the Hynix HMS720x 383 372 ··· 421 408 depends on MMU 422 409 select CPU_XSC3 423 410 select PCI 411 + select ARCH_USES_GETTIMEOFFSET 424 412 help 425 413 Support for Intel's IXP23xx (XScale) family of processors. 426 414 ··· 430 416 depends on MMU 431 417 select CPU_XSCALE 432 418 select PCI 419 + select ARCH_USES_GETTIMEOFFSET 433 420 help 434 421 Support for Intel's IXP2400/2800 (XScale) family of processors. 435 422 ··· 449 434 bool "LinkUp-L7200" 450 435 select CPU_ARM720T 451 436 select FIQ 437 + select ARCH_USES_GETTIMEOFFSET 452 438 help 453 439 Say Y here if you intend to run this kernel on a LinkUp Systems 454 440 L7200 Software Development Board which uses an ARM720T processor. ··· 539 523 select CPU_ARM922T 540 524 select GENERIC_GPIO 541 525 select ARCH_REQUIRE_GPIOLIB 526 + select ARCH_USES_GETTIMEOFFSET 542 527 help 543 528 Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based 544 529 System-on-Chip devices. ··· 586 569 bool "Philips Nexperia PNX4008 Mobile" 587 570 select CPU_ARM926T 588 571 select COMMON_CLKDEV 572 + select ARCH_USES_GETTIMEOFFSET 589 573 help 590 574 This enables support for Philips PNX4008 mobile platform. 591 575 ··· 631 613 select ISA_DMA_API 632 614 select NO_IOPORT 633 615 select ARCH_SPARSEMEM_ENABLE 616 + select ARCH_USES_GETTIMEOFFSET 634 617 help 635 618 On the Acorn Risc-PC, Linux can support the internal IDE disk and 636 619 CD-ROM interface, serial and parallel port, and the floppy drive. ··· 658 639 select GENERIC_GPIO 659 640 select ARCH_HAS_CPUFREQ 660 641 select HAVE_CLK 642 + select ARCH_USES_GETTIMEOFFSET 661 643 help 662 644 Samsung S3C2410X CPU based systems, such as the Simtec Electronics 663 645 BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or ··· 672 652 select ARM_VIC 673 653 select HAVE_CLK 674 654 select NO_IOPORT 655 + select ARCH_USES_GETTIMEOFFSET 675 656 select ARCH_HAS_CPUFREQ 676 657 select ARCH_REQUIRE_GPIOLIB 677 658 select SAMSUNG_CLKSRC ··· 729 708 select ISA_DMA 730 709 select ZONE_DMA 731 710 select PCI 711 + select ARCH_USES_GETTIMEOFFSET 732 712 help 733 713 Support for the StrongARM based Digital DNARD machine, also known 734 714 as "Shark" (<http://www.shark-linux.de/shark.html>). ··· 739 717 select CPU_ARM922T 740 718 select ARCH_DISCONTIGMEM_ENABLE if !LH7A40X_CONTIGMEM 741 719 select ARCH_SPARSEMEM_ENABLE if !LH7A40X_CONTIGMEM 720 + select ARCH_USES_GETTIMEOFFSET 742 721 help 743 722 Say Y here for systems based on one of the Sharp LH7A40X 744 723 System on a Chip processors. These CPUs include an ARM922T
+1 -1
arch/arm/include/asm/mach/time.h
··· 38 38 void (*init)(void); 39 39 void (*suspend)(void); 40 40 void (*resume)(void); 41 - #ifndef CONFIG_GENERIC_TIME 41 + #ifdef CONFIG_ARCH_USES_GETTIMEOFFSET 42 42 unsigned long (*offset)(void); 43 43 #endif 44 44 };
+6 -64
arch/arm/kernel/time.c
··· 72 72 EXPORT_SYMBOL(profile_pc); 73 73 #endif 74 74 75 - #ifndef CONFIG_GENERIC_TIME 76 - static unsigned long dummy_gettimeoffset(void) 75 + #ifdef CONFIG_ARCH_USES_GETTIMEOFFSET 76 + u32 arch_gettimeoffset(void) 77 77 { 78 + if (system_timer->offset != NULL) 79 + return system_timer->offset() * 1000; 80 + 78 81 return 0; 79 82 } 80 - #endif 83 + #endif /* CONFIG_ARCH_USES_GETTIMEOFFSET */ 81 84 82 85 #ifdef CONFIG_LEDS_TIMER 83 86 static inline void do_leds(void) ··· 96 93 #define do_leds() 97 94 #endif 98 95 99 - #ifndef CONFIG_GENERIC_TIME 100 - void do_gettimeofday(struct timeval *tv) 101 - { 102 - unsigned long flags; 103 - unsigned long seq; 104 - unsigned long usec, sec; 105 - 106 - do { 107 - seq = read_seqbegin_irqsave(&xtime_lock, flags); 108 - usec = system_timer->offset(); 109 - sec = xtime.tv_sec; 110 - usec += xtime.tv_nsec / 1000; 111 - } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); 112 - 113 - /* usec may have gone up a lot: be safe */ 114 - while (usec >= 1000000) { 115 - usec -= 1000000; 116 - sec++; 117 - } 118 - 119 - tv->tv_sec = sec; 120 - tv->tv_usec = usec; 121 - } 122 - 123 - EXPORT_SYMBOL(do_gettimeofday); 124 - 125 - int do_settimeofday(struct timespec *tv) 126 - { 127 - time_t wtm_sec, sec = tv->tv_sec; 128 - long wtm_nsec, nsec = tv->tv_nsec; 129 - 130 - if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) 131 - return -EINVAL; 132 - 133 - write_seqlock_irq(&xtime_lock); 134 - /* 135 - * This is revolting. We need to set "xtime" correctly. However, the 136 - * value in this location is the value at the most recent update of 137 - * wall time. Discover what correction gettimeofday() would have 138 - * done, and then undo it! 139 - */ 140 - nsec -= system_timer->offset() * NSEC_PER_USEC; 141 - 142 - wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); 143 - wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); 144 - 145 - set_normalized_timespec(&xtime, sec, nsec); 146 - set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec); 147 - 148 - ntp_clear(); 149 - write_sequnlock_irq(&xtime_lock); 150 - clock_was_set(); 151 - return 0; 152 - } 153 - 154 - EXPORT_SYMBOL(do_settimeofday); 155 - #endif /* !CONFIG_GENERIC_TIME */ 156 96 157 97 #ifndef CONFIG_GENERIC_CLOCKEVENTS 158 98 /* ··· 160 214 161 215 void __init time_init(void) 162 216 { 163 - #ifndef CONFIG_GENERIC_TIME 164 - if (system_timer->offset == NULL) 165 - system_timer->offset = dummy_gettimeoffset; 166 - #endif 167 217 system_timer->init(); 168 218 } 169 219
+1
arch/arm/mach-at91/Kconfig
··· 97 97 98 98 config ARCH_AT91X40 99 99 bool "AT91x40" 100 + select ARCH_USES_GETTIMEOFFSET 100 101 101 102 endchoice 102 103