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