From 7870d56b155c2be73cdacfba94eeb893cd55628e Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Tue, 26 Nov 2024 13:59:54 +0100 Subject: dt: Fetch the CPU frequency as well MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the 'timebase-frequency' property is available under the 'cpus' node from the DTB blob, it makes sense to try to fetch this value from there instead of hardcoding it. For other use-cases, where this information is not available through DT (e.g. ACPI on the VisionFive2 board), we will have to hardcode it with a default value even if it's not the proper one. Signed-off-by: Miquel Sabaté Solà --- kernel/main.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'kernel/main.c') diff --git a/kernel/main.c b/kernel/main.c index fdcef1f..a39ed29 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -16,6 +16,13 @@ struct task_struct tasks[4] = { [TASK_FIZZBUZZ] = { .stack = stack[3], .entry_addr = nullptr, }, }; +// Defined in fbos/init.h. +struct dt_info info = { + .cpu_freq = 0, + .initrd_start = 0, + .initrd_end = 0, +}; + /* * This is the main entry point of the kernel after head.S is done. This * function can (and will) assume that everything has been reset and that we can @@ -26,8 +33,8 @@ __noreturn __kernel void start_kernel(void *dtb) printk("Welcome to FizzBuzz OS!\n"); // Extract information from the DTB blob. - struct initrd_addr addr = find_dt_initrd_addr(dtb); - extract_initrd((unsigned char *)addr.start, addr.end - addr.start, tasks); + get_dt_info(dtb, &info); + extract_initrd((unsigned char *)info.initrd_start, info.initrd_end - info.initrd_start, tasks); // At this point everything has already been handled: setup the interrupt // vector and enable the timer to start ticking and scheduling the three -- cgit v1.2.3