From 0d801eceb5a4fdd73de8c2f81691b527ae4ccb79 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Sat, 11 May 2019 23:12:05 +0800 Subject: [PATCH] [WIP] Fix rv32 serial interrupt --- kernel/src/arch/riscv32/board/virt/mod.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/src/arch/riscv32/board/virt/mod.rs b/kernel/src/arch/riscv32/board/virt/mod.rs index 52df872..cd1aa37 100644 --- a/kernel/src/arch/riscv32/board/virt/mod.rs +++ b/kernel/src/arch/riscv32/board/virt/mod.rs @@ -1,4 +1,5 @@ use super::consts::KERNEL_OFFSET; +use crate::memory::phys_to_virt; /// Mask all external interrupt except serial. pub unsafe fn init_external_interrupt() { @@ -6,13 +7,13 @@ pub unsafe fn init_external_interrupt() { // riscv-pk (bbl) enables all S-Mode IRQs (ref: machine/minit.c) // OpenSBI v0.3 disables all IRQs (ref: platform/common/irqchip/plic.c) - const HART0_S_MODE_INTERRUPT_ENABLES: *mut u32 = (KERNEL_OFFSET + 0x0C00_2080) as *mut u32; + const HART0_S_MODE_INTERRUPT_ENABLES: *mut u32 = phys_to_virt(0x0C00_2080) as *mut u32; const SERIAL: u32 = 0xa; HART0_S_MODE_INTERRUPT_ENABLES.write_volatile(1 << SERIAL); } pub unsafe fn enable_serial_interrupt() { - const UART16550: *mut u8 = (KERNEL_OFFSET + 0x10000000) as *mut u8; + const UART16550: *mut u8 = phys_to_virt(0x10000000) as *mut u8; UART16550.add(4).write_volatile(0x0B); UART16550.add(1).write_volatile(0x01); }