1c085f386SAlexander von Gluck IV /* 2c085f386SAlexander von Gluck IV * Copyright 2019, Adrien Destugues, pulkomandy@pulkomandy.tk. 3c085f386SAlexander von Gluck IV * Distributed under the terms of the MIT License. 4c085f386SAlexander von Gluck IV */ 5c085f386SAlexander von Gluck IV 6c085f386SAlexander von Gluck IV 7c085f386SAlexander von Gluck IV #include <KernelExport.h> 8c085f386SAlexander von Gluck IV 9c085f386SAlexander von Gluck IV #include <arch/cpu.h> 10c085f386SAlexander von Gluck IV #include <boot/kernel_args.h> 11*d031c09cSX512 #include <vm/VMAddressSpace.h> 12c085f386SAlexander von Gluck IV #include <commpage.h> 13c085f386SAlexander von Gluck IV #include <elf.h> 14*d031c09cSX512 #include <Htif.h> 15*d031c09cSX512 #include <platform/sbi/sbi_syscalls.h> 16*d031c09cSX512 17*d031c09cSX512 18*d031c09cSX512 extern uint32 gPlatform1; 19*d031c09cSX512 extern uint32 gPlatform2; 20c085f386SAlexander von Gluck IV 21c085f386SAlexander von Gluck IV 22c085f386SAlexander von Gluck IV status_t 23c085f386SAlexander von Gluck IV arch_cpu_preboot_init_percpu(kernel_args *args, int curr_cpu) 24c085f386SAlexander von Gluck IV { 25c085f386SAlexander von Gluck IV return B_OK; 26c085f386SAlexander von Gluck IV } 27c085f386SAlexander von Gluck IV 28c085f386SAlexander von Gluck IV 29c085f386SAlexander von Gluck IV status_t 30c085f386SAlexander von Gluck IV arch_cpu_init_percpu(kernel_args *args, int curr_cpu) 31c085f386SAlexander von Gluck IV { 32c085f386SAlexander von Gluck IV //detect_cpu(curr_cpu); 33c085f386SAlexander von Gluck IV 34c085f386SAlexander von Gluck IV // we only support one anyway... 35c085f386SAlexander von Gluck IV return 0; 36c085f386SAlexander von Gluck IV } 37c085f386SAlexander von Gluck IV 38c085f386SAlexander von Gluck IV 39c085f386SAlexander von Gluck IV status_t 40c085f386SAlexander von Gluck IV arch_cpu_init(kernel_args *args) 41c085f386SAlexander von Gluck IV { 42*d031c09cSX512 /* 43*d031c09cSX512 uint64 conversionFactor 44*d031c09cSX512 = (1LL << 32) * 1000000LL / args->arch_args.timerFrequrency; 45*d031c09cSX512 46*d031c09cSX512 __riscv64_setup_system_time(conversionFactor); 47*d031c09cSX512 */ 48c085f386SAlexander von Gluck IV return B_OK; 49c085f386SAlexander von Gluck IV } 50c085f386SAlexander von Gluck IV 51c085f386SAlexander von Gluck IV 52c085f386SAlexander von Gluck IV status_t 53c085f386SAlexander von Gluck IV arch_cpu_init_post_vm(kernel_args *args) 54c085f386SAlexander von Gluck IV { 55*d031c09cSX512 // Set address space ownership to currently running threads 56*d031c09cSX512 for (uint32 i = 0; i < args->num_cpus; i++) { 57*d031c09cSX512 VMAddressSpace::Kernel()->Get(); 58*d031c09cSX512 } 59*d031c09cSX512 60c085f386SAlexander von Gluck IV return B_OK; 61c085f386SAlexander von Gluck IV } 62c085f386SAlexander von Gluck IV 63c085f386SAlexander von Gluck IV 64c085f386SAlexander von Gluck IV status_t 65c085f386SAlexander von Gluck IV arch_cpu_init_post_modules(kernel_args *args) 66c085f386SAlexander von Gluck IV { 67c085f386SAlexander von Gluck IV return B_OK; 68c085f386SAlexander von Gluck IV } 69c085f386SAlexander von Gluck IV 70c085f386SAlexander von Gluck IV 71c085f386SAlexander von Gluck IV void 72c085f386SAlexander von Gluck IV arch_cpu_sync_icache(void *address, size_t len) 73c085f386SAlexander von Gluck IV { 74c085f386SAlexander von Gluck IV } 75c085f386SAlexander von Gluck IV 76c085f386SAlexander von Gluck IV 77c085f386SAlexander von Gluck IV void 78c085f386SAlexander von Gluck IV arch_cpu_memory_read_barrier(void) 79c085f386SAlexander von Gluck IV { 80c085f386SAlexander von Gluck IV } 81c085f386SAlexander von Gluck IV 82c085f386SAlexander von Gluck IV 83c085f386SAlexander von Gluck IV void 84c085f386SAlexander von Gluck IV arch_cpu_memory_write_barrier(void) 85c085f386SAlexander von Gluck IV { 86c085f386SAlexander von Gluck IV } 87c085f386SAlexander von Gluck IV 88c085f386SAlexander von Gluck IV 89c085f386SAlexander von Gluck IV void 90c085f386SAlexander von Gluck IV arch_cpu_invalidate_TLB_range(addr_t start, addr_t end) 91c085f386SAlexander von Gluck IV { 92c085f386SAlexander von Gluck IV } 93c085f386SAlexander von Gluck IV 94c085f386SAlexander von Gluck IV 95c085f386SAlexander von Gluck IV void 96c085f386SAlexander von Gluck IV arch_cpu_invalidate_TLB_list(addr_t pages[], int num_pages) 97c085f386SAlexander von Gluck IV { 98c085f386SAlexander von Gluck IV } 99c085f386SAlexander von Gluck IV 100c085f386SAlexander von Gluck IV 101c085f386SAlexander von Gluck IV void 102c085f386SAlexander von Gluck IV arch_cpu_global_TLB_invalidate(void) 103c085f386SAlexander von Gluck IV { 104c085f386SAlexander von Gluck IV } 105c085f386SAlexander von Gluck IV 106c085f386SAlexander von Gluck IV 107c085f386SAlexander von Gluck IV void 108c085f386SAlexander von Gluck IV arch_cpu_user_TLB_invalidate(void) 109c085f386SAlexander von Gluck IV { 110c085f386SAlexander von Gluck IV } 111c085f386SAlexander von Gluck IV 112c085f386SAlexander von Gluck IV 113c085f386SAlexander von Gluck IV status_t 114c085f386SAlexander von Gluck IV arch_cpu_shutdown(bool reboot) 115c085f386SAlexander von Gluck IV { 116*d031c09cSX512 if (gPlatform1 == kPlatform1Sbi) { 117*d031c09cSX512 sbi_system_reset( 118*d031c09cSX512 reboot ? SBI_RESET_TYPE_COLD_REBOOT : SBI_RESET_TYPE_SHUTDOWN, 119*d031c09cSX512 SBI_RESET_REASON_NONE); 120*d031c09cSX512 } 121*d031c09cSX512 122*d031c09cSX512 HtifShutdown(); 123c085f386SAlexander von Gluck IV return B_ERROR; 124c085f386SAlexander von Gluck IV } 125