[PATCH 5/5] lib: utils: Use fdt_cpu_get_timebase_frequency()
Samuel Holland
samuel.holland at sifive.com
Thu Feb 20 16:09:12 PST 2025
Since fdt_cpu_init() already parsed the /cpus node, use the cached value
instead of parsing the DT again.
The logic should otherwise be equivalent.
Signed-off-by: Samuel Holland <samuel.holland at sifive.com>
---
include/sbi_utils/fdt/fdt_helper.h | 2 --
lib/utils/fdt/fdt_helper.c | 21 ---------------------
lib/utils/timer/fdt_timer_mtimer.c | 7 ++++---
lib/utils/timer/fdt_timer_plmt.c | 8 +++++---
platform/fpga/openpiton/platform.c | 6 +++---
5 files changed, 12 insertions(+), 32 deletions(-)
diff --git a/include/sbi_utils/fdt/fdt_helper.h b/include/sbi_utils/fdt/fdt_helper.h
index f94e535f..0d81efcc 100644
--- a/include/sbi_utils/fdt/fdt_helper.h
+++ b/include/sbi_utils/fdt/fdt_helper.h
@@ -51,8 +51,6 @@ bool fdt_node_is_enabled(const void *fdt, int nodeoff);
int fdt_parse_hart_id(const void *fdt, int cpu_offset, u32 *hartid);
-int fdt_parse_timebase_frequency(const void *fdt, unsigned long *freq);
-
int fdt_parse_isa_extensions(const void *fdt, unsigned int hartid,
unsigned long *extensions);
diff --git a/lib/utils/fdt/fdt_helper.c b/lib/utils/fdt/fdt_helper.c
index 088e5045..772096bd 100644
--- a/lib/utils/fdt/fdt_helper.c
+++ b/lib/utils/fdt/fdt_helper.c
@@ -266,27 +266,6 @@ int fdt_parse_hart_id(const void *fdt, int cpu_offset, u32 *hartid)
return 0;
}
-int fdt_parse_timebase_frequency(const void *fdt, unsigned long *freq)
-{
- const fdt32_t *val;
- int len, cpus_offset;
-
- if (!fdt || !freq)
- return SBI_EINVAL;
-
- cpus_offset = fdt_path_offset(fdt, "/cpus");
- if (cpus_offset < 0)
- return cpus_offset;
-
- val = fdt_getprop(fdt, cpus_offset, "timebase-frequency", &len);
- if (len > 0 && val)
- *freq = fdt32_to_cpu(*val);
- else
- return SBI_ENOENT;
-
- return 0;
-}
-
#define RISCV_ISA_EXT_NAME_LEN_MAX 32
static unsigned long fdt_isa_bitmap_offset;
diff --git a/lib/utils/timer/fdt_timer_mtimer.c b/lib/utils/timer/fdt_timer_mtimer.c
index 224534d8..7dfc63f3 100644
--- a/lib/utils/timer/fdt_timer_mtimer.c
+++ b/lib/utils/timer/fdt_timer_mtimer.c
@@ -11,6 +11,7 @@
#include <sbi/sbi_error.h>
#include <sbi/sbi_heap.h>
#include <sbi/sbi_list.h>
+#include <sbi_utils/fdt/fdt_cpu.h>
#include <sbi_utils/fdt/fdt_helper.h>
#include <sbi_utils/timer/fdt_timer.h>
#include <sbi_utils/timer/aclint_mtimer.h>
@@ -55,10 +56,10 @@ static int timer_mtimer_cold_init(const void *fdt, int nodeoff,
mt->has_64bit_mmio = true;
mt->has_shared_mtime = false;
- rc = fdt_parse_timebase_frequency(fdt, &mt->mtime_freq);
- if (rc) {
+ mt->mtime_freq = fdt_cpu_get_timebase_frequency();
+ if (!mt->mtime_freq) {
sbi_free(mtn);
- return rc;
+ return SBI_ENOENT;
}
if (is_clint) { /* SiFive CLINT */
diff --git a/lib/utils/timer/fdt_timer_plmt.c b/lib/utils/timer/fdt_timer_plmt.c
index 1e146689..23ca8f3d 100644
--- a/lib/utils/timer/fdt_timer_plmt.c
+++ b/lib/utils/timer/fdt_timer_plmt.c
@@ -7,6 +7,8 @@
* Yu Chien Peter Lin <peterlin at andestech.com>
*/
+#include <sbi/sbi_error.h>
+#include <sbi_utils/fdt/fdt_cpu.h>
#include <sbi_utils/fdt/fdt_helper.h>
#include <sbi_utils/timer/fdt_timer.h>
#include <sbi_utils/timer/andes_plmt.h>
@@ -27,9 +29,9 @@ static int fdt_plmt_cold_timer_init(const void *fdt, int nodeoff,
plmt.time_val = (u64 *)plmt_base;
plmt.time_cmp = (u64 *)(plmt_base + 0x8);
- rc = fdt_parse_timebase_frequency(fdt, &plmt.timer_freq);
- if (rc)
- return rc;
+ plmt.timer_freq = fdt_cpu_get_timebase_frequency();
+ if (!plmt.timer_freq)
+ return SBI_ENOENT;
rc = plmt_cold_timer_init(&plmt);
if (rc)
diff --git a/platform/fpga/openpiton/platform.c b/platform/fpga/openpiton/platform.c
index 2789c5c8..3a7d0ac9 100644
--- a/platform/fpga/openpiton/platform.c
+++ b/platform/fpga/openpiton/platform.c
@@ -80,8 +80,8 @@ static int openpiton_early_init(bool cold_boot)
const void *fdt;
struct platform_uart_data uart_data = { 0 };
struct plic_data plic_data;
- unsigned long aclint_freq;
uint64_t clint_addr;
+ u32 aclint_freq;
int rc;
if (!cold_boot)
@@ -100,8 +100,8 @@ static int openpiton_early_init(bool cold_boot)
if (!rc)
plic = plic_data;
- rc = fdt_parse_timebase_frequency(fdt, &aclint_freq);
- if (!rc)
+ aclint_freq = fdt_cpu_get_timebase_frequency();
+ if (aclint_freq)
mtimer.mtime_freq = aclint_freq;
rc = fdt_parse_compat_addr(fdt, &clint_addr, "riscv,clint0");
--
2.47.2
More information about the opensbi
mailing list