static bool arch_timer_mem_use_virtual;
static bool arch_counter_suspend_stop;
static bool vdso_default = true;
+static bool arch_timer_use_clocksource_only;
static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
struct clock_event_device *clk = this_cpu_ptr(arch_timer_evt);
u32 flags;
+ /*
+ * if arch_timer is used to clocksource only,
+ * it doesn't need to setup clockevent configuration.
+ * this is only for exynos soc
+ */
+ if (arch_timer_use_clocksource_only)
+ goto skip_clockevent_setup;
+
__arch_timer_setup(ARCH_TIMER_TYPE_CP15, clk);
flags = check_ppi_trigger(arch_timer_ppi[arch_timer_uses_ppi]);
flags);
}
+skip_clockevent_setup:
arch_counter_set_user_access();
if (evtstrm_enable)
arch_timer_configure_evtstream();
{
struct clock_event_device *clk = this_cpu_ptr(arch_timer_evt);
+ /*
+ * If arch_timer is used to clocksource only,
+ * it doesn't need to setup clockevent configuration.
+ * This is only for Exynos SoC
+ */
+ if (arch_timer_use_clocksource_only)
+ goto skip_clockevent_setup;
+
arch_timer_stop(clk);
+
+skip_clockevent_setup:
return 0;
}
rate = arch_timer_get_cntfrq();
arch_timer_of_configure_rate(rate, np);
+ /* Exynos Specific Device Tree Information */
+ if (of_property_read_bool(np, "use-clocksource-only")) {
+ pr_info("%s: arch_timer is used only clocksource\n", __func__);
+ arch_timer_use_clocksource_only = true;
+ }
+
arch_timer_c3stop = !of_property_read_bool(np, "always-on");
/* Check for globally applicable workarounds */