diff options
| -rw-r--r-- | arch/x86/kernel/hpet.c | 13 | ||||
| -rw-r--r-- | arch/x86/kernel/tsc.c | 5 | ||||
| -rw-r--r-- | drivers/clocksource/acpi_pm.c | 9 |
3 files changed, 12 insertions, 15 deletions
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index ba390d731175..33dbcc4ec5ff 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include <asm/hpet.h> | 16 | #include <asm/hpet.h> |
| 17 | 17 | ||
| 18 | #define HPET_MASK CLOCKSOURCE_MASK(32) | 18 | #define HPET_MASK CLOCKSOURCE_MASK(32) |
| 19 | #define HPET_SHIFT 22 | ||
| 20 | 19 | ||
| 21 | /* FSEC = 10^-15 | 20 | /* FSEC = 10^-15 |
| 22 | NSEC = 10^-9 */ | 21 | NSEC = 10^-9 */ |
| @@ -787,7 +786,6 @@ static struct clocksource clocksource_hpet = { | |||
| 787 | .rating = 250, | 786 | .rating = 250, |
| 788 | .read = read_hpet, | 787 | .read = read_hpet, |
| 789 | .mask = HPET_MASK, | 788 | .mask = HPET_MASK, |
| 790 | .shift = HPET_SHIFT, | ||
| 791 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 789 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
| 792 | .resume = hpet_resume_counter, | 790 | .resume = hpet_resume_counter, |
| 793 | #ifdef CONFIG_X86_64 | 791 | #ifdef CONFIG_X86_64 |
| @@ -798,6 +796,7 @@ static struct clocksource clocksource_hpet = { | |||
| 798 | static int hpet_clocksource_register(void) | 796 | static int hpet_clocksource_register(void) |
| 799 | { | 797 | { |
| 800 | u64 start, now; | 798 | u64 start, now; |
| 799 | u64 hpet_freq; | ||
| 801 | cycle_t t1; | 800 | cycle_t t1; |
| 802 | 801 | ||
| 803 | /* Start the counter */ | 802 | /* Start the counter */ |
| @@ -832,9 +831,15 @@ static int hpet_clocksource_register(void) | |||
| 832 | * mult = (hpet_period * 2^shift)/10^6 | 831 | * mult = (hpet_period * 2^shift)/10^6 |
| 833 | * mult = (hpet_period << shift)/FSEC_PER_NSEC | 832 | * mult = (hpet_period << shift)/FSEC_PER_NSEC |
| 834 | */ | 833 | */ |
| 835 | clocksource_hpet.mult = div_sc(hpet_period, FSEC_PER_NSEC, HPET_SHIFT); | ||
| 836 | 834 | ||
| 837 | clocksource_register(&clocksource_hpet); | 835 | /* Need to convert hpet_period (fsec/cyc) to cyc/sec: |
| 836 | * | ||
| 837 | * cyc/sec = FSEC_PER_SEC/hpet_period(fsec/cyc) | ||
| 838 | * cyc/sec = (FSEC_PER_NSEC * NSEC_PER_SEC)/hpet_period | ||
| 839 | */ | ||
| 840 | hpet_freq = FSEC_PER_NSEC * NSEC_PER_SEC; | ||
| 841 | do_div(hpet_freq, hpet_period); | ||
| 842 | clocksource_register_hz(&clocksource_hpet, (u32)hpet_freq); | ||
| 838 | 843 | ||
| 839 | return 0; | 844 | return 0; |
| 840 | } | 845 | } |
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 9faf91ae1841..ce8e50239332 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c | |||
| @@ -751,7 +751,6 @@ static struct clocksource clocksource_tsc = { | |||
| 751 | .read = read_tsc, | 751 | .read = read_tsc, |
| 752 | .resume = resume_tsc, | 752 | .resume = resume_tsc, |
| 753 | .mask = CLOCKSOURCE_MASK(64), | 753 | .mask = CLOCKSOURCE_MASK(64), |
| 754 | .shift = 22, | ||
| 755 | .flags = CLOCK_SOURCE_IS_CONTINUOUS | | 754 | .flags = CLOCK_SOURCE_IS_CONTINUOUS | |
| 756 | CLOCK_SOURCE_MUST_VERIFY, | 755 | CLOCK_SOURCE_MUST_VERIFY, |
| 757 | #ifdef CONFIG_X86_64 | 756 | #ifdef CONFIG_X86_64 |
| @@ -845,8 +844,6 @@ __cpuinit int unsynchronized_tsc(void) | |||
| 845 | 844 | ||
| 846 | static void __init init_tsc_clocksource(void) | 845 | static void __init init_tsc_clocksource(void) |
| 847 | { | 846 | { |
| 848 | clocksource_tsc.mult = clocksource_khz2mult(tsc_khz, | ||
| 849 | clocksource_tsc.shift); | ||
| 850 | if (tsc_clocksource_reliable) | 847 | if (tsc_clocksource_reliable) |
| 851 | clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY; | 848 | clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY; |
| 852 | /* lower the rating if we already know its unstable: */ | 849 | /* lower the rating if we already know its unstable: */ |
| @@ -854,7 +851,7 @@ static void __init init_tsc_clocksource(void) | |||
| 854 | clocksource_tsc.rating = 0; | 851 | clocksource_tsc.rating = 0; |
| 855 | clocksource_tsc.flags &= ~CLOCK_SOURCE_IS_CONTINUOUS; | 852 | clocksource_tsc.flags &= ~CLOCK_SOURCE_IS_CONTINUOUS; |
| 856 | } | 853 | } |
| 857 | clocksource_register(&clocksource_tsc); | 854 | clocksource_register_khz(&clocksource_tsc, tsc_khz); |
| 858 | } | 855 | } |
| 859 | 856 | ||
| 860 | #ifdef CONFIG_X86_64 | 857 | #ifdef CONFIG_X86_64 |
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index 72a633a6ec98..cfb0f5278415 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c | |||
| @@ -68,10 +68,7 @@ static struct clocksource clocksource_acpi_pm = { | |||
| 68 | .rating = 200, | 68 | .rating = 200, |
| 69 | .read = acpi_pm_read, | 69 | .read = acpi_pm_read, |
| 70 | .mask = (cycle_t)ACPI_PM_MASK, | 70 | .mask = (cycle_t)ACPI_PM_MASK, |
| 71 | .mult = 0, /*to be calculated*/ | ||
| 72 | .shift = 22, | ||
| 73 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 71 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
| 74 | |||
| 75 | }; | 72 | }; |
| 76 | 73 | ||
| 77 | 74 | ||
| @@ -190,9 +187,6 @@ static int __init init_acpi_pm_clocksource(void) | |||
| 190 | if (!pmtmr_ioport) | 187 | if (!pmtmr_ioport) |
| 191 | return -ENODEV; | 188 | return -ENODEV; |
| 192 | 189 | ||
| 193 | clocksource_acpi_pm.mult = clocksource_hz2mult(PMTMR_TICKS_PER_SEC, | ||
| 194 | clocksource_acpi_pm.shift); | ||
| 195 | |||
| 196 | /* "verify" this timing source: */ | 190 | /* "verify" this timing source: */ |
| 197 | for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { | 191 | for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { |
| 198 | udelay(100 * j); | 192 | udelay(100 * j); |
| @@ -220,7 +214,8 @@ static int __init init_acpi_pm_clocksource(void) | |||
| 220 | if (verify_pmtmr_rate() != 0) | 214 | if (verify_pmtmr_rate() != 0) |
| 221 | return -ENODEV; | 215 | return -ENODEV; |
| 222 | 216 | ||
| 223 | return clocksource_register(&clocksource_acpi_pm); | 217 | return clocksource_register_hz(&clocksource_acpi_pm, |
| 218 | PMTMR_TICKS_PER_SEC); | ||
| 224 | } | 219 | } |
| 225 | 220 | ||
| 226 | /* We use fs_initcall because we want the PCI fixups to have run | 221 | /* We use fs_initcall because we want the PCI fixups to have run |
