* Distributed under the terms of the MIT License.
*/
#include <arch/platform.h>
#include <boot/kernel_args.h>
#include <Htif.h>
#include <Plic.h>
#include <Clint.h>
#include <platform/sbi/sbi_syscalls.h>
#include <debug.h>
uint32 gPlatform;
void* gFDT = NULL;
HtifRegs *volatile gHtifRegs = (HtifRegs *volatile)0;
PlicRegs *volatile gPlicRegs;
ClintRegs *volatile gClintRegs;
status_t
arch_platform_init(struct kernel_args *args)
{
gPlatform = args->arch_args.machine_platform;
debug_early_boot_message("machine_platform: ");
switch (gPlatform) {
case kPlatformMNative:
debug_early_boot_message("Native mmode hooks\n");
break;
case kPlatformSbi:
debug_early_boot_message("SBI\n");
break;
default:
debug_early_boot_message("?\n");
break;
}
gFDT = args->arch_args.fdt;
gHtifRegs = (HtifRegs *volatile)args->arch_args.htif.start;
gPlicRegs = (PlicRegs *volatile)args->arch_args.plic.start;
gClintRegs = (ClintRegs *volatile)args->arch_args.clint.start;
return B_OK;
}
status_t
arch_platform_init_post_vm(struct kernel_args *kernelArgs)
{
if (gPlatform == kPlatformSbi) {
sbiret res;
res = sbi_get_spec_version();
dprintf("SBI spec version: %#lx\n", res.value);
res = sbi_get_impl_id();
dprintf("SBI implementation ID: %#lx\n", res.value);
res = sbi_get_impl_version();
dprintf("SBI implementation version: %#lx\n", res.value);
res = sbi_get_mvendorid();
dprintf("SBI vendor ID: %#lx\n", res.value);
res = sbi_get_marchid();
dprintf("SBI arch ID: %#lx\n", res.value);
}
return B_OK;
}
status_t
arch_platform_init_post_thread(struct kernel_args *kernelArgs)
{
return B_OK;
}