iop: enable generic time
authorMikael Pettersson <mikpe@it.uu.se>
Thu, 29 Oct 2009 18:46:55 +0000 (11:46 -0700)
committerDan Williams <dan.j.williams@intel.com>
Thu, 29 Oct 2009 18:46:55 +0000 (11:46 -0700)
This updates the IOP platform to use the kernel's generic time
framework. With clockevent support in place, this reduces to
selecting GENERIC_TIME and removing the platform's private timer
->offset() operation (iop_gettimeoffset).

Tested on n2100, compile-tested for all plat-iop machines.

Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
13 files changed:
arch/arm/Kconfig
arch/arm/include/asm/hardware/iop3xx.h
arch/arm/mach-iop13xx/include/mach/time.h
arch/arm/mach-iop13xx/iq81340mc.c
arch/arm/mach-iop13xx/iq81340sc.c
arch/arm/mach-iop32x/em7210.c
arch/arm/mach-iop32x/glantank.c
arch/arm/mach-iop32x/iq31244.c
arch/arm/mach-iop32x/iq80321.c
arch/arm/mach-iop32x/n2100.c
arch/arm/mach-iop33x/iq80331.c
arch/arm/mach-iop33x/iq80332.c
arch/arm/plat-iop/time.c

index e732fcc305267554dfed980010f789497cff8f8b..455284edda253aaebaaa28af4dbf42bef4fc4d03 100644 (file)
@@ -811,6 +811,7 @@ config ARCH_ACORN
 config PLAT_IOP
        bool
        select GENERIC_CLOCKEVENTS
+       select GENERIC_TIME
 
 config PLAT_ORION
        bool
index 34601b952045b26decb2918863ccb3fce2379800..5daea2961d48b42f34102697149ab505ea558b1e 100644 (file)
@@ -234,7 +234,6 @@ extern int iop3xx_get_init_atu(void);
 void iop3xx_map_io(void);
 void iop_init_cp6_handler(void);
 void iop_init_time(unsigned long tickrate);
-unsigned long iop_gettimeoffset(void);
 
 static inline u32 read_tmr0(void)
 {
index b2fb17b35423d6c0edf364d2b1c4733740ae4ea5..f1c00d6d560ba497a8fc9ffaf47913f513d8036e 100644 (file)
@@ -20,7 +20,6 @@
 #define IOP13XX_CORE_FREQ_1200         (5 << 16)
 
 void iop_init_time(unsigned long tickrate);
-unsigned long iop_gettimeoffset(void);
 
 static inline unsigned long iop13xx_core_freq(void)
 {
index 5051c03d437c883f167eeb5f930137d7e82454dd..f91f3154577df1b0e1373239c756dd6d5fd1e33a 100644 (file)
@@ -87,7 +87,6 @@ static void __init iq81340mc_timer_init(void)
 
 static struct sys_timer iq81340mc_timer = {
        .init       = iq81340mc_timer_init,
-       .offset     = iop_gettimeoffset,
 };
 
 MACHINE_START(IQ81340MC, "Intel IQ81340MC")
index bc443073a8e387a19253d6375d635044dc32516b..ddb7a3435de9e906e0017549a39a255d975bc05b 100644 (file)
@@ -89,7 +89,6 @@ static void __init iq81340sc_timer_init(void)
 
 static struct sys_timer iq81340sc_timer = {
        .init       = iq81340sc_timer_init,
-       .offset     = iop_gettimeoffset,
 };
 
 MACHINE_START(IQ81340SC, "Intel IQ81340SC")
index 3ad4696ade42dbed70dcffe1421d51248a3f40b1..2bef9b6e1cc91700c631fb93438589db938bbd67 100644 (file)
@@ -42,7 +42,6 @@ static void __init em7210_timer_init(void)
 
 static struct sys_timer em7210_timer = {
        .init           = em7210_timer_init,
-       .offset         = iop_gettimeoffset,
 };
 
 /*
index a9c2dfdb2507c0648e611b8fdbff0b0b83dae5fc..93370a46b620972a66fc810b18dd71132efc426e 100644 (file)
@@ -47,7 +47,6 @@ static void __init glantank_timer_init(void)
 
 static struct sys_timer glantank_timer = {
        .init           = glantank_timer_init,
-       .offset         = iop_gettimeoffset,
 };
 
 
index dd1cd990451820ffde2bef6cd1ca4aa77b3d3f2f..a7a08dda7f331c98f90b27ec17f5f5f9e14c0380 100644 (file)
@@ -78,7 +78,6 @@ static void __init iq31244_timer_init(void)
 
 static struct sys_timer iq31244_timer = {
        .init           = iq31244_timer_init,
-       .offset         = iop_gettimeoffset,
 };
 
 
index fbe27798759d8449c60a1d245db2375d06c352e1..0200f80c1e171d99f48233e3a98accaf97076928 100644 (file)
@@ -46,7 +46,6 @@ static void __init iq80321_timer_init(void)
 
 static struct sys_timer iq80321_timer = {
        .init           = iq80321_timer_init,
-       .offset         = iop_gettimeoffset,
 };
 
 
index d2e427899729d19531d7236d1151d6b040f68730..2a5c637639bb9984c4a3a4923f511a32cec67967 100644 (file)
@@ -53,7 +53,6 @@ static void __init n2100_timer_init(void)
 
 static struct sys_timer n2100_timer = {
        .init           = n2100_timer_init,
-       .offset         = iop_gettimeoffset,
 };
 
 
index d51e10cddf20773f3d2bc5ed87c0106cbbeecd03..394e95a30b75f8a124dc2828401da7766fb118c1 100644 (file)
@@ -48,7 +48,6 @@ static void __init iq80331_timer_init(void)
 
 static struct sys_timer iq80331_timer = {
        .init           = iq80331_timer_init,
-       .offset         = iop_gettimeoffset,
 };
 
 
index 92fb44cdbcadf440bdd30048765eee11dd176e71..a40badf126c29552b303bd0b8d6d7976a15e57a7 100644 (file)
@@ -48,7 +48,6 @@ static void __init iq80332_timer_init(void)
 
 static struct sys_timer iq80332_timer = {
        .init           = iq80332_timer_init,
-       .offset         = iop_gettimeoffset,
 };
 
 
index a550e96394ab366dd52ec93e4e45f0546289aa84..aaaef3b4bc65f6ff41b2871091c879bc963d3f9f 100644 (file)
@@ -140,33 +140,6 @@ static void __init iop_clockevent_set_hz(struct clock_event_device *ce, unsigned
               ce->name, ce->shift, ce->mult);
 }
 
-static unsigned long ticks_per_usec;
-static unsigned long next_jiffy_time;
-
-unsigned long iop_gettimeoffset(void)
-{
-       unsigned long offset, temp;
-
-       /* enable cp6, if necessary, to avoid taking the overhead of an
-        * undefined instruction trap
-        */
-       asm volatile (
-       "mrc    p15, 0, %0, c15, c1, 0\n\t"
-       "tst    %0, #(1 << 6)\n\t"
-       "orreq  %0, %0, #(1 << 6)\n\t"
-       "mcreq  p15, 0, %0, c15, c1, 0\n\t"
-#ifdef CONFIG_CPU_XSCALE
-       "mrceq  p15, 0, %0, c15, c1, 0\n\t"
-       "moveq  %0, %0\n\t"
-       "subeq  pc, pc, #4\n\t"
-#endif
-       : "=r"(temp) : : "cc");
-
-       offset = next_jiffy_time - read_tcr1();
-
-       return offset / ticks_per_usec;
-}
-
 static irqreturn_t
 iop_timer_interrupt(int irq, void *dev_id)
 {
@@ -196,8 +169,6 @@ void __init iop_init_time(unsigned long tick_rate)
        u32 timer_ctl;
 
        ticks_per_jiffy = DIV_ROUND_CLOSEST(tick_rate, HZ);
-       ticks_per_usec = tick_rate / 1000000;
-       next_jiffy_time = 0xffffffff;
        iop_tick_rate = tick_rate;
 
        timer_ctl = IOP_TMR_EN | IOP_TMR_PRIVILEGED |