xref: /optee_os/core/arch/arm/plat-sam/freq.c (revision f496f2c40c7cfad27e0596070b126b86ef46ae8d)
1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3  * Copyright 2022 Microchip
4  */
5 
6 #include <assert.h>
7 #include <at91_clk.h>
8 #include <config.h>
9 #include <drivers/clk.h>
10 #include <drivers/clk_dt.h>
11 #include <kernel/boot.h>
12 #include <kernel/dt.h>
13 #include <kernel/panic.h>
14 #include <libfdt.h>
15 
16 static unsigned long freq;
17 
get_freq_from_dt(void)18 static TEE_Result get_freq_from_dt(void)
19 {
20 	int node;
21 	struct clk *clk;
22 	const void *fdt = get_embedded_dt();
23 
24 	if (!fdt)
25 		panic();
26 
27 	if (IS_ENABLED(CFG_SAMA7G5))
28 		node = fdt_node_offset_by_compatible(fdt, -1, "arm,cortex-a7");
29 	else
30 		node = fdt_node_offset_by_compatible(fdt, -1, "arm,cortex-a5");
31 
32 	if (!node)
33 		panic();
34 
35 	if (clk_dt_get_by_name(fdt, node, "cpu", &clk))
36 		panic();
37 
38 	freq = clk_get_rate(clk);
39 
40 	return at91_clk_register_cpu_opp(fdt, node, clk);
41 }
42 early_init_late(get_freq_from_dt);
43 
plat_get_freq(void)44 unsigned long plat_get_freq(void)
45 {
46 	assert(freq);
47 
48 	return freq;
49 }
50