// SPDX-License-Identifier: GPL-2.0 /* * 8253/PIT functions * */ #include #include #include #include #include #include #include /* * HPET replaces the PIT, when enabled. So we need to know, which of * the two timers is used */ struct clock_event_device *global_clock_event; void __init setup_pit_timer(void) { clockevent_i8253_init(true); global_clock_event = &i8253_clockevent; } #ifndef CONFIG_X86_64 static int __init init_pit_clocksource(void) { /* * Several reasons not to register PIT as a clocksource: * * - On SMP PIT does not scale due to i8253_lock * - when HPET is enabled * - when local APIC timer is active (PIT is switched off) */ if (num_possible_cpus() > 1 || is_hpet_enabled() || !clockevent_state_periodic(&i8253_clockevent)) return 0; return clocksource_i8253_init(); } arch_initcall(init_pit_clocksource); #endif /* !CONFIG_X86_64 */