xref: /haiku/src/system/boot/arch/riscv64/arch_cpu.cpp (revision a127b88ecbfab58f64944c98aa47722a18e363b2)
1 /*
2  * Copyright 2012-2020, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Ithamar R. Adema <ithamar@upgrade-android.com>
7  */
8 
9 #include <OS.h>
10 #include <boot/platform.h>
11 #include <boot/stdio.h>
12 #include <boot/kernel_args.h>
13 #include <boot/stage2.h>
14 #include <arch/cpu.h>
15 #include <arch_cpu_defs.h>
16 #include <arch_kernel.h>
17 #include <arch_system_info.h>
18 #include <string.h>
19 
20 
21 #define TRACE_CPU
22 #ifdef TRACE_CPU
23 #	define TRACE(x) dprintf x
24 #else
25 #	define TRACE(x) ;
26 #endif
27 
28 
29 /*! Detect RISCV core extensions.
30 */
31 static status_t
32 check_cpu_features()
33 {
34 	// only seems possible from bootloader openfirmware or FDT?
35 	return B_OK;
36 }
37 
38 
39 extern "C" status_t
40 boot_arch_cpu_init(void)
41 {
42 	status_t err = check_cpu_features();
43 	if (err != B_OK) {
44 		panic("It's RISCY business trying to boot Haiku on the wrong CPU!\n");
45 		return err;
46 	}
47 
48 	return B_OK;
49 }
50 
51 
52 extern "C" void
53 arch_ucode_load(BootVolume& volume)
54 {
55 	// NOP on riscv currently
56 }
57 
58 
59 extern "C" bigtime_t
60 system_time()
61 {
62 	// TODO: units conversion
63 	return CpuTime();
64 }
65 
66 
67 extern "C" void
68 spin(bigtime_t microseconds)
69 {
70 	bigtime_t time = system_time();
71 	while ((system_time() - time) < microseconds)
72 		asm volatile ("nop;");
73 }
74