mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
[MIPS] Fixup migration to GENERIC_TIME
Since we already moved to GENERIC_TIME, we should implement alternatives
of old do_gettimeoffset routines to get sub-jiffies resolution from
gettimeofday(). This patch includes:
* MIPS clocksource support (based on works by Manish Lachwani).
* remove unused gettimeoffset routines and related codes.
* remove unised 64bit do_div64_32().
* simplify mips_hpt_init. (no argument needed, __init tag)
* simplify c0_hpt_timer_init. (no need to write to c0_count)
* remove some hpt_init routines.
* mips_hpt_mask variable to specify bitmask of hpt value.
* convert jmr3927_do_gettimeoffset to jmr3927_hpt_read.
* convert ip27_do_gettimeoffset to ip27_hpt_read.
* convert bcm1480_do_gettimeoffset to bcm1480_hpt_read.
* simplify sb1250 hpt functions. (no need to subtract and shift)
Signed-off-by: Atsushi Nemoto <[email protected]>
Signed-off-by: Ralf Baechle <[email protected]>
This commit is contained in:
parent
70e46f48cb
commit
16b7b2ac01
13 changed files with 103 additions and 522 deletions
|
|
@ -38,19 +38,14 @@ The new time code provide the following services:
|
|||
|
||||
a) Implements functions required by Linux common code:
|
||||
time_init
|
||||
do_gettimeofday
|
||||
do_settimeofday
|
||||
|
||||
b) provides an abstraction of RTC and null RTC implementation as default.
|
||||
extern unsigned long (*rtc_get_time)(void);
|
||||
extern int (*rtc_set_time)(unsigned long);
|
||||
|
||||
c) a set of gettimeoffset functions for different CPUs and different
|
||||
needs.
|
||||
|
||||
d) high-level and low-level timer interrupt routines where the timer
|
||||
interrupt source may or may not be the CPU timer. The high-level
|
||||
routine is dispatched through do_IRQ() while the low-level is
|
||||
c) high-level and low-level timer interrupt routines where the timer
|
||||
interrupt source may or may not be the CPU timer. The high-level
|
||||
routine is dispatched through do_IRQ() while the low-level is
|
||||
dispatched in assemably code (usually int-handler.S)
|
||||
|
||||
|
||||
|
|
@ -73,8 +68,7 @@ the following functions or values:
|
|||
c) (optional) board-specific RTC routines.
|
||||
|
||||
d) (optional) mips_hpt_frequency - It must be definied if the board
|
||||
is using CPU counter for timer interrupt or it is using fixed rate
|
||||
gettimeoffset().
|
||||
is using CPU counter for timer interrupt.
|
||||
|
||||
|
||||
PORTING GUIDE
|
||||
|
|
@ -89,16 +83,6 @@ Step 1: decide how you like to implement the time services.
|
|||
If the answer is no, you need a timer to provide the timer interrupt
|
||||
at 100 HZ speed.
|
||||
|
||||
You cannot use the fast gettimeoffset functions, i.e.,
|
||||
|
||||
unsigned long fixed_rate_gettimeoffset(void);
|
||||
unsigned long calibrate_div32_gettimeoffset(void);
|
||||
unsigned long calibrate_div64_gettimeoffset(void);
|
||||
|
||||
You can use null_gettimeoffset() will gives the same time resolution as
|
||||
jiffy. Or you can implement your own gettimeoffset (probably based on
|
||||
some ad hoc hardware on your machine.)
|
||||
|
||||
c) The following sub steps assume your CPU has counter register.
|
||||
Do you plan to use the CPU counter register as the timer interrupt
|
||||
or use an exnternal timer?
|
||||
|
|
@ -123,8 +107,8 @@ Step 3: implement rtc routines, board_time_init() and plat_timer_setup()
|
|||
board_time_init() -
|
||||
a) (optional) set up RTC routines,
|
||||
b) (optional) calibrate and set the mips_hpt_frequency
|
||||
(only needed if you intended to use fixed_rate_gettimeoffset
|
||||
or use cpu counter as timer interrupt source)
|
||||
(only needed if you intended to use cpu counter as timer interrupt
|
||||
source)
|
||||
|
||||
plat_timer_setup() -
|
||||
a) (optional) over-write any choices made above by time_init().
|
||||
|
|
@ -154,8 +138,8 @@ for some of the functions in time.c.
|
|||
For example, you may define your own timer interrupt routine, which does
|
||||
some of its own processing and then calls timer_interrupt().
|
||||
|
||||
You can also over-ride any of the built-in functions (gettimeoffset,
|
||||
RTC routines and/or timer interrupt routine).
|
||||
You can also over-ride any of the built-in functions (RTC routines
|
||||
and/or timer interrupt routine).
|
||||
|
||||
|
||||
PORTING NOTES FOR SMP
|
||||
|
|
@ -187,10 +171,3 @@ You need to decide on your timer interrupt sources.
|
|||
|
||||
You can also do the low-level version of those interrupt routines,
|
||||
following similar dispatching routes described above.
|
||||
|
||||
Note about do_gettimeoffset():
|
||||
|
||||
It is very likely the CPU counter registers are not sync'ed up in a SMP box.
|
||||
Therefore you cannot really use the many of the existing routines that
|
||||
are based on CPU counter. You should wirte your own gettimeoffset rouinte
|
||||
if you want intra-jiffy resolution.
|
||||
|
|
|
|||
Loading…
Reference in a new issue