mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 01:11:14 +00:00
3cc8011171
Now that we provide a clock driver for the Reltek SOCs the CPU frequency might change on demand. This has direct visible effects during operation - the CEVT 4K timer is no longer a stable clocksource - after CPU frequencies changes time calculation works wrong - sched_clock falls back to kernel default interval (100 Hz) - timestamps in dmesg have only 2 digits left [ 0.000000] sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps ... [ 0.060000] pid_max: default: 32768 minimum: 301 [ 0.070000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.070000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.080000] dyndbg: Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build [ 0.090000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, ... Looking around where we can start the CEVT timer for RTL930X is a good basis. Initially it was developed as a clocksource driver for the broken timer in that specific SOC series. Afterwards it was shifted around to the CEVT location, got SMP enablement and lost its clocksource feature. So we at least have something to copy from. As the timers on these devices are well understood the implementation follows this way: - leave the RTL930X implementation as is - provide a new driver for RTL83XX devices only - swap RTL930X driver at a later time Like the clock driver this patch contains a self contained module that is SOC independet and already provides full support for the RTL838X, RTL839X and RTL930X devices. Some of the new (or reestablished) features are: - simplified initialization routines - SMP setup with CPU hotplug framework - derived from LXB clock speed - supplied clocksource - dedicated register functions for better readability - documentation about some caveats Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> [remove unused header includes, remove old CONFIG_MIPS dependency, add REALTEK_ prefix to driver symbol] Signed-off-by: Sander Vanheule <sander@svanheule.net>
41 lines
1.4 KiB
Diff
41 lines
1.4 KiB
Diff
--- a/drivers/clocksource/Kconfig
|
|
+++ b/drivers/clocksource/Kconfig
|
|
@@ -127,6 +127,17 @@ config RDA_TIMER
|
|
help
|
|
Enables the support for the RDA Micro timer driver.
|
|
|
|
+config REALTEK_OTTO_TIMER
|
|
+ bool "Clocksource/timer for the Realtek Otto platform"
|
|
+ select COMMON_CLK
|
|
+ select TIMER_OF
|
|
+ help
|
|
+ This driver adds support for the timers found in the Realtek RTL83xx
|
|
+ and RTL93xx SoCs series. This includes chips such as RTL8380, RTL8381
|
|
+ and RTL832, as well as chips from the RTL839x series, such as RTL8390
|
|
+ RT8391, RTL8392, RTL8393 and RTL8396 and chips of the RTL930x series
|
|
+ such as RTL9301, RTL9302 or RTL9303.
|
|
+
|
|
config SUN4I_TIMER
|
|
bool "Sun4i timer driver" if COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
--- a/drivers/clocksource/Makefile
|
|
+++ b/drivers/clocksource/Makefile
|
|
@@ -63,6 +63,7 @@ obj-$(CONFIG_MILBEAUT_TIMER) += timer-mi
|
|
obj-$(CONFIG_SPRD_TIMER) += timer-sprd.o
|
|
obj-$(CONFIG_NPCM7XX_TIMER) += timer-npcm7xx.o
|
|
obj-$(CONFIG_RDA_TIMER) += timer-rda.o
|
|
+obj-$(CONFIG_REALTEK_OTTO_TIMER) += timer-rtl-otto.o
|
|
|
|
obj-$(CONFIG_ARC_TIMERS) += arc_timer.o
|
|
obj-$(CONFIG_ARM_ARCH_TIMER) += arm_arch_timer.o
|
|
--- a/include/linux/cpuhotplug.h
|
|
+++ b/include/linux/cpuhotplug.h
|
|
@@ -133,6 +133,7 @@ enum cpuhp_state {
|
|
CPUHP_AP_MARCO_TIMER_STARTING,
|
|
CPUHP_AP_MIPS_GIC_TIMER_STARTING,
|
|
CPUHP_AP_ARC_TIMER_STARTING,
|
|
+ CPUHP_AP_REALTEK_TIMER_STARTING,
|
|
CPUHP_AP_RISCV_TIMER_STARTING,
|
|
CPUHP_AP_CLINT_TIMER_STARTING,
|
|
CPUHP_AP_CSKY_TIMER_STARTING,
|