aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv64/kernel
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-07-06 23:37:11 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-07-06 23:37:11 +0300
commit3fedbb6e1f849c5e0a4033d68201d60c2fc48121 (patch)
treebd219cef69a19938ecf453c3c3bb76fc13bd31a9 /arch/riscv64/kernel
parent3528f88fc36df6964c0efed784ae223cfe93544e (diff)
downloadkmi-3fedbb6e1f849c5e0a4033d68201d60c2fc48121.tar.gz
kmi-3fedbb6e1f849c5e0a4033d68201d60c2fc48121.zip
core bringup + various warnings
+ dbg_fdt() is apparently broken, possibly due to UB or something, but it causes some issues with optimizations enabled. Remove it temporarily
Diffstat (limited to 'arch/riscv64/kernel')
-rw-r--r--arch/riscv64/kernel/core_bringup.S4
-rw-r--r--arch/riscv64/kernel/smp.c5
-rw-r--r--arch/riscv64/kernel/vmem.c2
3 files changed, 6 insertions, 5 deletions
diff --git a/arch/riscv64/kernel/core_bringup.S b/arch/riscv64/kernel/core_bringup.S
index aff9b0b..83b017c 100644
--- a/arch/riscv64/kernel/core_bringup.S
+++ b/arch/riscv64/kernel/core_bringup.S
@@ -12,12 +12,12 @@ riscv_bringup:
sfence.vma
/* fetch the stack allocated to us at our hart index in smp_init_stacks */
- la t0, smp_init_stacks
+ lla t0, smp_init_stacks
slli t1, a0, RW_SHIFT
add t0, t0, t1
lr sp, 0(t0)
mv tp, sp
/* jump to C to handle rest of bringup */
- la t0, core_bringup
+ lla t0, core_bringup
jr t0
diff --git a/arch/riscv64/kernel/smp.c b/arch/riscv64/kernel/smp.c
index 8d04491..74cc930 100644
--- a/arch/riscv64/kernel/smp.c
+++ b/arch/riscv64/kernel/smp.c
@@ -93,8 +93,9 @@ void smp_bringup(struct vmem *b, void *fdt)
/** @todo try to remember to free these as well */
smp_init_stacks[hartid] = (void *)alloc_page(BASE_PAGE) +
BASE_PAGE_SIZE;
- r = sbi_hart_start(hartid,
- (unsigned long)__pa(riscv_bringup), satp);
+
+ pm_t bringup = (pm_t)__pa(riscv_bringup);
+ r = sbi_hart_start(hartid, bringup, satp);
if (r.error) {
warn("failed bringing up hart %ld: %ld\n",
diff --git a/arch/riscv64/kernel/vmem.c b/arch/riscv64/kernel/vmem.c
index 00752c1..97b9cce 100644
--- a/arch/riscv64/kernel/vmem.c
+++ b/arch/riscv64/kernel/vmem.c
@@ -536,7 +536,7 @@ void setup_rpc_stack(struct tcb *t)
* which means that it must also be the leaf */
t->arch.rpc_leaf = (struct vmem *)__find_vmem(t->rpc.vmem,
RPC_STACK_BASE,
- BASE_PAGE);
+ NULL);
/* we count downward in base pages */
t->arch.rpc_idx = rpc_pages;
}