1 | // SPDX-License-Identifier: GPL-2.0 |
---|---|
2 | /* |
3 | * SH-Mobile Timer |
4 | * |
5 | * Copyright (C) 2010 Magnus Damm |
6 | * Copyright (C) 2002 - 2009 Paul Mundt |
7 | */ |
8 | #include <linux/platform_device.h> |
9 | #include <linux/clocksource.h> |
10 | #include <linux/delay.h> |
11 | #include <linux/of_address.h> |
12 | |
13 | #include "common.h" |
14 | |
15 | void __init shmobile_init_delay(void) |
16 | { |
17 | struct device_node *np; |
18 | u32 max_freq = 0; |
19 | |
20 | for_each_of_cpu_node(np) { |
21 | u32 freq; |
22 | |
23 | if (!of_property_read_u32(np, propname: "clock-frequency", out_value: &freq)) |
24 | max_freq = max(max_freq, freq); |
25 | } |
26 | |
27 | if (!max_freq) |
28 | return; |
29 | |
30 | /* |
31 | * Calculate a worst-case loops-per-jiffy value |
32 | * based on maximum cpu core hz setting and the |
33 | * __delay() implementation in arch/arm/lib/delay.S. |
34 | * |
35 | * This will result in a longer delay than expected |
36 | * when the cpu core runs on lower frequencies. |
37 | */ |
38 | |
39 | if (!preset_lpj) |
40 | preset_lpj = max_freq / HZ; |
41 | } |
42 |