diff options
author | David S. Miller <davem@davemloft.net> | 2008-03-26 04:11:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-03-26 04:11:55 -0400 |
commit | cf3d7c1ef418863376d556c48c214cb828623584 (patch) | |
tree | eaabbd9e0f0ad01e49069de10a80939ce1f23674 | |
parent | bfdf9ebc396a2373af2f1d117491dc6bbdc9ee75 (diff) |
[SPARC64]: Fix sparse warnings in arch/sparc64/kernel/time.c
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/sparc64/kernel/entry.h | 2 | ||||
-rw-r--r-- | arch/sparc64/kernel/smp.c | 3 | ||||
-rw-r--r-- | arch/sparc64/kernel/time.c | 66 | ||||
-rw-r--r-- | include/asm-sparc64/timer.h | 9 |
4 files changed, 49 insertions, 31 deletions
diff --git a/arch/sparc64/kernel/entry.h b/arch/sparc64/kernel/entry.h index 0d0de9c32a80..4e238a11bdfe 100644 --- a/arch/sparc64/kernel/entry.h +++ b/arch/sparc64/kernel/entry.h | |||
@@ -14,6 +14,8 @@ extern void __init boot_cpu_id_too_large(int cpu); | |||
14 | extern unsigned int dcache_parity_tl1_occurred; | 14 | extern unsigned int dcache_parity_tl1_occurred; |
15 | extern unsigned int icache_parity_tl1_occurred; | 15 | extern unsigned int icache_parity_tl1_occurred; |
16 | 16 | ||
17 | extern void timer_interrupt(int irq, struct pt_regs *regs); | ||
18 | |||
17 | extern asmlinkage void syscall_trace(struct pt_regs *regs, | 19 | extern asmlinkage void syscall_trace(struct pt_regs *regs, |
18 | int syscall_exit_p); | 20 | int syscall_exit_p); |
19 | 21 | ||
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index 5a1126b363a4..59f020d69d4c 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* smp.c: Sparc64 SMP support. | 1 | /* smp.c: Sparc64 SMP support. |
2 | * | 2 | * |
3 | * Copyright (C) 1997, 2007 David S. Miller (davem@davemloft.net) | 3 | * Copyright (C) 1997, 2007, 2008 David S. Miller (davem@davemloft.net) |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <linux/module.h> | 6 | #include <linux/module.h> |
@@ -30,6 +30,7 @@ | |||
30 | #include <asm/cpudata.h> | 30 | #include <asm/cpudata.h> |
31 | #include <asm/hvtramp.h> | 31 | #include <asm/hvtramp.h> |
32 | #include <asm/io.h> | 32 | #include <asm/io.h> |
33 | #include <asm/timer.h> | ||
33 | 34 | ||
34 | #include <asm/irq.h> | 35 | #include <asm/irq.h> |
35 | #include <asm/irq_regs.h> | 36 | #include <asm/irq_regs.h> |
diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c index d204f1ab1d4c..e5d238970c7e 100644 --- a/arch/sparc64/kernel/time.c +++ b/arch/sparc64/kernel/time.c | |||
@@ -1,7 +1,6 @@ | |||
1 | /* $Id: time.c,v 1.42 2002/01/23 14:33:55 davem Exp $ | 1 | /* time.c: UltraSparc timer and TOD clock support. |
2 | * time.c: UltraSparc timer and TOD clock support. | ||
3 | * | 2 | * |
4 | * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) | 3 | * Copyright (C) 1997, 2008 David S. Miller (davem@davemloft.net) |
5 | * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be) | 4 | * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be) |
6 | * | 5 | * |
7 | * Based largely on code which is: | 6 | * Based largely on code which is: |
@@ -48,6 +47,8 @@ | |||
48 | #include <asm/uaccess.h> | 47 | #include <asm/uaccess.h> |
49 | #include <asm/irq_regs.h> | 48 | #include <asm/irq_regs.h> |
50 | 49 | ||
50 | #include "entry.h" | ||
51 | |||
51 | DEFINE_SPINLOCK(mostek_lock); | 52 | DEFINE_SPINLOCK(mostek_lock); |
52 | DEFINE_SPINLOCK(rtc_lock); | 53 | DEFINE_SPINLOCK(rtc_lock); |
53 | void __iomem *mstk48t02_regs = NULL; | 54 | void __iomem *mstk48t02_regs = NULL; |
@@ -508,6 +509,37 @@ static int __init has_low_battery(void) | |||
508 | return (data1 == data2); /* Was the write blocked? */ | 509 | return (data1 == data2); /* Was the write blocked? */ |
509 | } | 510 | } |
510 | 511 | ||
512 | static void __init mostek_set_system_time(void __iomem *mregs) | ||
513 | { | ||
514 | unsigned int year, mon, day, hour, min, sec; | ||
515 | u8 tmp; | ||
516 | |||
517 | spin_lock_irq(&mostek_lock); | ||
518 | |||
519 | /* Traditional Mostek chip. */ | ||
520 | tmp = mostek_read(mregs + MOSTEK_CREG); | ||
521 | tmp |= MSTK_CREG_READ; | ||
522 | mostek_write(mregs + MOSTEK_CREG, tmp); | ||
523 | |||
524 | sec = MSTK_REG_SEC(mregs); | ||
525 | min = MSTK_REG_MIN(mregs); | ||
526 | hour = MSTK_REG_HOUR(mregs); | ||
527 | day = MSTK_REG_DOM(mregs); | ||
528 | mon = MSTK_REG_MONTH(mregs); | ||
529 | year = MSTK_CVT_YEAR( MSTK_REG_YEAR(mregs) ); | ||
530 | |||
531 | xtime.tv_sec = mktime(year, mon, day, hour, min, sec); | ||
532 | xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ); | ||
533 | set_normalized_timespec(&wall_to_monotonic, | ||
534 | -xtime.tv_sec, -xtime.tv_nsec); | ||
535 | |||
536 | tmp = mostek_read(mregs + MOSTEK_CREG); | ||
537 | tmp &= ~MSTK_CREG_READ; | ||
538 | mostek_write(mregs + MOSTEK_CREG, tmp); | ||
539 | |||
540 | spin_unlock_irq(&mostek_lock); | ||
541 | } | ||
542 | |||
511 | /* Probe for the real time clock chip. */ | 543 | /* Probe for the real time clock chip. */ |
512 | static void __init set_system_time(void) | 544 | static void __init set_system_time(void) |
513 | { | 545 | { |
@@ -520,7 +552,6 @@ static void __init set_system_time(void) | |||
520 | unsigned long dregs = 0UL; | 552 | unsigned long dregs = 0UL; |
521 | void __iomem *bregs = 0UL; | 553 | void __iomem *bregs = 0UL; |
522 | #endif | 554 | #endif |
523 | u8 tmp; | ||
524 | 555 | ||
525 | if (!mregs && !dregs && !bregs) { | 556 | if (!mregs && !dregs && !bregs) { |
526 | prom_printf("Something wrong, clock regs not mapped yet.\n"); | 557 | prom_printf("Something wrong, clock regs not mapped yet.\n"); |
@@ -528,20 +559,11 @@ static void __init set_system_time(void) | |||
528 | } | 559 | } |
529 | 560 | ||
530 | if (mregs) { | 561 | if (mregs) { |
531 | spin_lock_irq(&mostek_lock); | 562 | mostek_set_system_time(mregs); |
532 | 563 | return; | |
533 | /* Traditional Mostek chip. */ | 564 | } |
534 | tmp = mostek_read(mregs + MOSTEK_CREG); | ||
535 | tmp |= MSTK_CREG_READ; | ||
536 | mostek_write(mregs + MOSTEK_CREG, tmp); | ||
537 | 565 | ||
538 | sec = MSTK_REG_SEC(mregs); | 566 | if (bregs) { |
539 | min = MSTK_REG_MIN(mregs); | ||
540 | hour = MSTK_REG_HOUR(mregs); | ||
541 | day = MSTK_REG_DOM(mregs); | ||
542 | mon = MSTK_REG_MONTH(mregs); | ||
543 | year = MSTK_CVT_YEAR( MSTK_REG_YEAR(mregs) ); | ||
544 | } else if (bregs) { | ||
545 | unsigned char val = readb(bregs + 0x0e); | 567 | unsigned char val = readb(bregs + 0x0e); |
546 | unsigned int century; | 568 | unsigned int century; |
547 | 569 | ||
@@ -596,14 +618,6 @@ static void __init set_system_time(void) | |||
596 | xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ); | 618 | xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ); |
597 | set_normalized_timespec(&wall_to_monotonic, | 619 | set_normalized_timespec(&wall_to_monotonic, |
598 | -xtime.tv_sec, -xtime.tv_nsec); | 620 | -xtime.tv_sec, -xtime.tv_nsec); |
599 | |||
600 | if (mregs) { | ||
601 | tmp = mostek_read(mregs + MOSTEK_CREG); | ||
602 | tmp &= ~MSTK_CREG_READ; | ||
603 | mostek_write(mregs + MOSTEK_CREG, tmp); | ||
604 | |||
605 | spin_unlock_irq(&mostek_lock); | ||
606 | } | ||
607 | } | 621 | } |
608 | 622 | ||
609 | /* davem suggests we keep this within the 4M locked kernel image */ | 623 | /* davem suggests we keep this within the 4M locked kernel image */ |
@@ -1027,7 +1041,7 @@ void __init time_init(void) | |||
1027 | setup_clockevent_multiplier(clock); | 1041 | setup_clockevent_multiplier(clock); |
1028 | 1042 | ||
1029 | sparc64_clockevent.max_delta_ns = | 1043 | sparc64_clockevent.max_delta_ns = |
1030 | clockevent_delta2ns(0x7fffffffffffffff, &sparc64_clockevent); | 1044 | clockevent_delta2ns(0x7fffffffffffffffUL, &sparc64_clockevent); |
1031 | sparc64_clockevent.min_delta_ns = | 1045 | sparc64_clockevent.min_delta_ns = |
1032 | clockevent_delta2ns(0xF, &sparc64_clockevent); | 1046 | clockevent_delta2ns(0xF, &sparc64_clockevent); |
1033 | 1047 | ||
diff --git a/include/asm-sparc64/timer.h b/include/asm-sparc64/timer.h index ccbd69448866..5b779fd1f788 100644 --- a/include/asm-sparc64/timer.h +++ b/include/asm-sparc64/timer.h | |||
@@ -1,14 +1,13 @@ | |||
1 | /* $Id: timer.h,v 1.3 2000/05/09 17:40:15 davem Exp $ | 1 | /* timer.h: System timer definitions for sun5. |
2 | * timer.h: System timer definitions for sun5. | ||
3 | * | 2 | * |
4 | * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) | 3 | * Copyright (C) 1997, 2008 David S. Miller (davem@davemloft.net) |
5 | */ | 4 | */ |
6 | 5 | ||
7 | #ifndef _SPARC64_TIMER_H | 6 | #ifndef _SPARC64_TIMER_H |
8 | #define _SPARC64_TIMER_H | 7 | #define _SPARC64_TIMER_H |
9 | 8 | ||
10 | #include <linux/types.h> | 9 | #include <linux/types.h> |
11 | 10 | #include <linux/init.h> | |
12 | 11 | ||
13 | struct sparc64_tick_ops { | 12 | struct sparc64_tick_ops { |
14 | unsigned long (*get_tick)(void); | 13 | unsigned long (*get_tick)(void); |
@@ -25,5 +24,7 @@ struct sparc64_tick_ops { | |||
25 | extern struct sparc64_tick_ops *tick_ops; | 24 | extern struct sparc64_tick_ops *tick_ops; |
26 | 25 | ||
27 | extern unsigned long sparc64_get_clock_tick(unsigned int cpu); | 26 | extern unsigned long sparc64_get_clock_tick(unsigned int cpu); |
27 | extern void __devinit setup_sparc64_timer(void); | ||
28 | extern void __init time_init(void); | ||
28 | 29 | ||
29 | #endif /* _SPARC64_TIMER_H */ | 30 | #endif /* _SPARC64_TIMER_H */ |