Commit 62c6df62 authored by David Brownell's avatar David Brownell Committed by Haavard Skinnemoen

avr32: start clocksource cleanup

Start cleaning up the AVR32 clocksource mess, starting with the cycle
counter clocksource:  remove unneeded pseudo-RTC (just inline that
call to mktime) and associated build warning, and unused sysdev.

Add comment about the problem using the cycle counter register,
and adjust the clocksource rating accordingly.  Later patches can
make this usable again (by disabling use of the idle state and
providing a proper clocksource without the weak binding hacks)
and move towards TCB-based clockevent support (including high
resolution timers) that's shared between AT91 and AVR32.
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarHaavard Skinnemoen <hskinnemoen@atmel.com>
parent 040b28fc
...@@ -38,9 +38,15 @@ cycle_t __weak read_cycle_count(void) ...@@ -38,9 +38,15 @@ cycle_t __weak read_cycle_count(void)
return (cycle_t)sysreg_read(COUNT); return (cycle_t)sysreg_read(COUNT);
} }
/*
* The architectural cycle count registers are a fine clocksource unless
* the system idle loop use sleep states like "idle": the CPU cycles
* measured by COUNT (and COMPARE) don't happen during sleep states.
* So we rate the clocksource using COUNT as very low quality.
*/
struct clocksource __weak clocksource_avr32 = { struct clocksource __weak clocksource_avr32 = {
.name = "avr32", .name = "avr32",
.rating = 350, .rating = 50,
.read = read_cycle_count, .read = read_cycle_count,
.mask = CLOCKSOURCE_MASK(32), .mask = CLOCKSOURCE_MASK(32),
.shift = 16, .shift = 16,
...@@ -55,22 +61,6 @@ struct irqaction timer_irqaction = { ...@@ -55,22 +61,6 @@ struct irqaction timer_irqaction = {
.name = "timer", .name = "timer",
}; };
/*
* By default we provide the null RTC ops
*/
static unsigned long null_rtc_get_time(void)
{
return mktime(2007, 1, 1, 0, 0, 0);
}
static int null_rtc_set_time(unsigned long sec)
{
return 0;
}
static unsigned long (*rtc_get_time)(void) = null_rtc_get_time;
static int (*rtc_set_time)(unsigned long) = null_rtc_set_time;
static void avr32_timer_ack(void) static void avr32_timer_ack(void)
{ {
u32 count; u32 count;
...@@ -190,7 +180,7 @@ void __init time_init(void) ...@@ -190,7 +180,7 @@ void __init time_init(void)
*/ */
sysreg_write(COMPARE, 0); sysreg_write(COMPARE, 0);
xtime.tv_sec = rtc_get_time(); xtime.tv_sec = mktime(2007, 1, 1, 0, 0, 0);
xtime.tv_nsec = 0; xtime.tv_nsec = 0;
set_normalized_timespec(&wall_to_monotonic, set_normalized_timespec(&wall_to_monotonic,
...@@ -212,22 +202,3 @@ void __init time_init(void) ...@@ -212,22 +202,3 @@ void __init time_init(void)
return; return;
} }
} }
static struct sysdev_class timer_class = {
.name = "timer",
};
static struct sys_device timer_device = {
.id = 0,
.cls = &timer_class,
};
static int __init init_timer_sysfs(void)
{
int err = sysdev_class_register(&timer_class);
if (!err)
err = sysdev_register(&timer_device);
return err;
}
device_initcall(init_timer_sysfs);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment