root/src/system/boot/platform/riscv/entry.S
/*
 * Copyright 2020-2021, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */

#include <asm_defs.h>

    .text

/*  status_t arch_enter_kernel(uint64 satp, struct kernel_args *kernelArgs,
        addr_t kernelEntry, addr_t kernelStackTop);

    a0  - SATP register value
    a1  - kernelArgs
    a2  - kernelEntry
    a3  - kernelStackTop
*/
FUNCTION(arch_enter_kernel):
        csrw satp, a0
        sfence.vma

        // set the kernel stack
        mv      sp, a3
#       li      fp, 0
#       li  ra, 0

        // Setup kernel args
        mv      a0, a1  // kernelArgs
        mv      t0, a2
        li      a1, 0   // currentCPU=0

        // call the kernel
        jr      t0

        // return
        li      a0,-1  // B_ERROR
        ret
FUNCTION_END(arch_enter_kernel)