175786993SClément Léger // SPDX-License-Identifier: BSD-2-Clause
275786993SClément Léger /*
375786993SClément Léger * Copyright 2022 Microchip
475786993SClément Léger */
575786993SClément Léger
675786993SClément Léger #include <assert.h>
7*f496f2c4STony Han #include <at91_clk.h>
8c6a18428SThomas Perrot #include <config.h>
975786993SClément Léger #include <drivers/clk.h>
1075786993SClément Léger #include <drivers/clk_dt.h>
1175786993SClément Léger #include <kernel/boot.h>
12e6027f48SAlvin Chang #include <kernel/dt.h>
1375786993SClément Léger #include <kernel/panic.h>
1475786993SClément Léger #include <libfdt.h>
1575786993SClément Léger
1675786993SClément Léger static unsigned long freq;
1775786993SClément Léger
get_freq_from_dt(void)1875786993SClément Léger static TEE_Result get_freq_from_dt(void)
1975786993SClément Léger {
2075786993SClément Léger int node;
2175786993SClément Léger struct clk *clk;
2275786993SClément Léger const void *fdt = get_embedded_dt();
2375786993SClément Léger
2475786993SClément Léger if (!fdt)
2575786993SClément Léger panic();
2675786993SClément Léger
27c6a18428SThomas Perrot if (IS_ENABLED(CFG_SAMA7G5))
28c6a18428SThomas Perrot node = fdt_node_offset_by_compatible(fdt, -1, "arm,cortex-a7");
29c6a18428SThomas Perrot else
3075786993SClément Léger node = fdt_node_offset_by_compatible(fdt, -1, "arm,cortex-a5");
31c6a18428SThomas Perrot
3275786993SClément Léger if (!node)
3375786993SClément Léger panic();
3475786993SClément Léger
3575786993SClément Léger if (clk_dt_get_by_name(fdt, node, "cpu", &clk))
3675786993SClément Léger panic();
3775786993SClément Léger
3875786993SClément Léger freq = clk_get_rate(clk);
3975786993SClément Léger
40*f496f2c4STony Han return at91_clk_register_cpu_opp(fdt, node, clk);
4175786993SClément Léger }
4275786993SClément Léger early_init_late(get_freq_from_dt);
4375786993SClément Léger
plat_get_freq(void)4475786993SClément Léger unsigned long plat_get_freq(void)
4575786993SClément Léger {
4675786993SClément Léger assert(freq);
4775786993SClément Léger
4875786993SClément Léger return freq;
4975786993SClément Léger }
50