xref: /openbmc/linux/arch/arm/mach-shmobile/timer.c (revision 3eb66e91a25497065c5322b1268cbc3953642227)
1e2f2594bSKuninori Morimoto // SPDX-License-Identifier: GPL-2.0
2c793c1b0SMagnus Damm /*
3c793c1b0SMagnus Damm  * SH-Mobile Timer
4c793c1b0SMagnus Damm  *
5c793c1b0SMagnus Damm  * Copyright (C) 2010  Magnus Damm
6c793c1b0SMagnus Damm  * Copyright (C) 2002 - 2009  Paul Mundt
7c793c1b0SMagnus Damm  */
8c793c1b0SMagnus Damm #include <linux/platform_device.h>
90583fe47SRob Herring #include <linux/clocksource.h>
100f2c9f20SMagnus Damm #include <linux/delay.h>
11c39dae38SMagnus Damm #include <linux/of_address.h>
12c793c1b0SMagnus Damm 
132e41e5feSGeert Uytterhoeven #include "common.h"
142e41e5feSGeert Uytterhoeven 
shmobile_init_delay(void)15c39dae38SMagnus Damm void __init shmobile_init_delay(void)
16c39dae38SMagnus Damm {
17*5af5d40cSRob Herring 	struct device_node *np;
18edc8fb1dSLaurent Pinchart 	u32 max_freq = 0;
19c39dae38SMagnus Damm 
20*5af5d40cSRob Herring 	for_each_of_cpu_node(np) {
21edc8fb1dSLaurent Pinchart 		u32 freq;
22edc8fb1dSLaurent Pinchart 
23c39dae38SMagnus Damm 		if (!of_property_read_u32(np, "clock-frequency", &freq))
24c39dae38SMagnus Damm 			max_freq = max(max_freq, freq);
25c39dae38SMagnus Damm 	}
26c39dae38SMagnus Damm 
27a4b8c18cSGeert Uytterhoeven 	if (!max_freq)
28edc8fb1dSLaurent Pinchart 		return;
29edc8fb1dSLaurent Pinchart 
30a4b8c18cSGeert Uytterhoeven 	/*
31a4b8c18cSGeert Uytterhoeven 	 * Calculate a worst-case loops-per-jiffy value
32a4b8c18cSGeert Uytterhoeven 	 * based on maximum cpu core hz setting and the
33a4b8c18cSGeert Uytterhoeven 	 * __delay() implementation in arch/arm/lib/delay.S.
34a4b8c18cSGeert Uytterhoeven 	 *
35a4b8c18cSGeert Uytterhoeven 	 * This will result in a longer delay than expected
36a4b8c18cSGeert Uytterhoeven 	 * when the cpu core runs on lower frequencies.
37a4b8c18cSGeert Uytterhoeven 	 */
38a4b8c18cSGeert Uytterhoeven 
39a4b8c18cSGeert Uytterhoeven 	if (!preset_lpj)
40a4b8c18cSGeert Uytterhoeven 		preset_lpj = max_freq / HZ;
4127f3c708SMagnus Damm }
42