[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 <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
70e46f48cb
commit
16b7b2ac01
@@ -47,6 +47,12 @@
|
||||
#define IMR_IP3_VAL K_BCM1480_INT_MAP_I1
|
||||
#define IMR_IP4_VAL K_BCM1480_INT_MAP_I2
|
||||
|
||||
#ifdef CONFIG_SIMULATION
|
||||
#define BCM1480_HPT_VALUE 50000
|
||||
#else
|
||||
#define BCM1480_HPT_VALUE 1000000
|
||||
#endif
|
||||
|
||||
extern int bcm1480_steal_irq(int irq);
|
||||
|
||||
void bcm1480_time_init(void)
|
||||
@@ -59,11 +65,6 @@ void bcm1480_time_init(void)
|
||||
BUG();
|
||||
}
|
||||
|
||||
if (!cpu) {
|
||||
/* Use our own gettimeoffset() routine */
|
||||
do_gettimeoffset = bcm1480_gettimeoffset;
|
||||
}
|
||||
|
||||
bcm1480_mask_irq(cpu, irq);
|
||||
|
||||
/* Map the timer interrupt to ip[4] of this cpu */
|
||||
@@ -74,11 +75,7 @@ void bcm1480_time_init(void)
|
||||
/* Disable the timer and set up the count */
|
||||
__raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG)));
|
||||
__raw_writeq(
|
||||
#ifndef CONFIG_SIMULATION
|
||||
1000000/HZ
|
||||
#else
|
||||
50000/HZ
|
||||
#endif
|
||||
BCM1480_HPT_VALUE/HZ
|
||||
, IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT)));
|
||||
|
||||
/* Set the timer running */
|
||||
@@ -122,16 +119,16 @@ void bcm1480_timer_interrupt(void)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We use our own do_gettimeoffset() instead of the generic one,
|
||||
* because the generic one does not work for SMP case.
|
||||
* In addition, since we use general timer 0 for system time,
|
||||
* we can get accurate intra-jiffy offset without calibration.
|
||||
*/
|
||||
unsigned long bcm1480_gettimeoffset(void)
|
||||
static unsigned int bcm1480_hpt_read(void)
|
||||
{
|
||||
/* We assume this function is called xtime_lock held. */
|
||||
unsigned long count =
|
||||
__raw_readq(IOADDR(A_SCD_TIMER_REGISTER(0, R_SCD_TIMER_CNT)));
|
||||
|
||||
return 1000000/HZ - count;
|
||||
return (jiffies + 1) * (BCM1480_HPT_VALUE / HZ) - count;
|
||||
}
|
||||
|
||||
void __init bcm1480_hpt_setup(void)
|
||||
{
|
||||
mips_hpt_read = bcm1480_hpt_read;
|
||||
mips_hpt_frequency = BCM1480_HPT_VALUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user