Compare commits

...

2 commits

Author SHA1 Message Date
gil 391b13a314 Troubleshooting issue with setting CSRs 2024-05-16 12:30:03 -05:00
gil 3827beec26 Correction to prev comment 2024-05-16 12:21:33 -05:00

View file

@ -31,29 +31,28 @@ unsafe extern "C" fn _enter() -> ! {
"la gp, _global_pointer", "la gp, _global_pointer",
".option pop", // pops the current option stack ".option pop", // pops the current option stack
// delegate all traps to S-mode trap handler // // delegate all traps to S-mode trap handler
"li t5, 0xffff", // "li t5, 0xffff",
"csrw medeleg, t5", // delegate all machine exceptions // "csrw medeleg, t5", // delegate all machine exceptions
"csrw mideleg, t5", // delegate all machine interrupts // "csrw mideleg, t5", // delegate all machine interrupts
// set the stack pointer // set the stack pointer
"la sp, _init_stack_top", "la sp, _init_stack_top",
// We use mret here so that the mstatus register // // Make sure machine mode is set, and enable coarse interrupts
// is properly updated. // "li t0, (0b11 << 11) | (1 << 7) | (1 << 3)",
"li t0, (0b11 << 11) | (1 << 7) | (1 << 3)", // "csrw mstatus, t0",
"csrw mstatus, t0",
// Set mtvec to the location of our trap handler function // // Set mtvec to the location of our trap handler function
"la t1, {trap_vector}", // "la t1, {trap_vector}",
"csrw mtvec, t1", // "csrw mtvec, t1",
// Set MSIE, MTIE, and MEIE on machine interrupt enable CSR: // // Set MSIE, MTIE, and MEIE on machine interrupt enable CSR:
// MSIE to enable machine-/M-mode software interrupts // // MSIE to enable machine-/M-mode software interrupts
// MTIE to enable M-mode timer interrupts // // MTIE to enable M-mode timer interrupts
// MEIE to enable M-mode external interrupts // // MEIE to enable M-mode external interrupts
"li t2, (1 << 3) | (1 << 7) | (1 << 11)", // "li t2, (1 << 3) | (1 << 7) | (1 << 11)",
"csrw mie, t2", // "csrw mie, t2",
// clear the BSS // clear the BSS
"la t0, _bss_start", "la t0, _bss_start",
@ -76,7 +75,7 @@ unsafe extern "C" fn _enter() -> ! {
// "tail-call" to {start} (call without saving a return address) // "tail-call" to {start} (call without saving a return address)
"tail {start}", "tail {start}",
start = sym start, // {start} refers to the function [start] below start = sym start, // {start} refers to the function [start] below
trap_vector = sym trap::trap_handler, // {trap_vector} refers to function [trap::trap_handler] //trap_vector = sym trap::trap_handler, // {trap_vector} refers to function [trap::trap_handler]
options(noreturn) // we must handle "returning" from assembly options(noreturn) // we must handle "returning" from assembly
); );
} }