fix qemu-arm64 run error

This commit is contained in:
Ivan Tan
2023-12-03 12:41:24 +08:00
committed by Jeremy Soller
parent 1c1c541f0e
commit 44b14f994a
5 changed files with 12 additions and 8 deletions
+2 -4
View File
@@ -35,7 +35,7 @@ pub unsafe fn init_early(dtb_base: usize, dtb_size: usize) {
let virt = crate::PHYS_OFFSET + phys;
{
let mut serial_port = SerialPort::new(virt);
//serial_port.init(false);
serial_port.init(false);
*COM1.lock() = Some(serial_port);
}
println!("UART at {:X}", virt);
@@ -43,12 +43,10 @@ pub unsafe fn init_early(dtb_base: usize, dtb_size: usize) {
}
pub unsafe fn init() {
println!("test 1");
if let Some(ref mut serial_port) = *COM1.lock() {
serial_port.receive();
//serial_port.init(true);
serial_port.init(true);
}
println!("test 2");
let data = DTB_BINARY.get().unwrap();
let fdt = fdt::DeviceTree::new(data).unwrap();
if let Some(node) = find_compatible_node(&fdt, "arm,pl011") {
+8
View File
@@ -126,6 +126,14 @@ unsafe fn instr_trapped_msr_mrs_inner(stack: &mut InterruptStack, from_user: boo
exception_stack!(synchronous_exception_at_el1_with_spx, |stack| {
if !pf_inner(stack, exception_code(stack.iret.esr_el1), "sync_exc_el1_spx") {
println!("Synchronous exception at EL1 with SPx");
if exception_code(stack.iret.esr_el1) == 0b100101 {
let far_el1 = far_el1();
println!("FAR_EL1 = 0x{:08x}", far_el1);
}
else if exception_code(stack.iret.esr_el1) == 0b100100 {
let far_el1 = far_el1();
println!("USER FAR_EL1 = 0x{:08x}", far_el1);
}
stack.dump();
stack_trace();
loop {}
-2
View File
@@ -9,7 +9,6 @@ pub struct IrqDesc {
exception_stack!(irq_at_el0, |stack| {
let irq = IRQ_CHIP.irq_ack();
//println!("el0 irq num {}", irq);
if let Some(virq) = IRQ_CHIP.irq_to_virq(irq) && virq < 1024 {
if let Some(handler) = &mut IRQ_CHIP.irq_desc[virq].handler {
handler.irq_handler(virq as u32);
@@ -23,7 +22,6 @@ exception_stack!(irq_at_el0, |stack| {
exception_stack!(irq_at_el1, |stack| {
let irq = IRQ_CHIP.irq_ack();
//println!("el1 irq num {}", irq);
if let Some(virq) = IRQ_CHIP.irq_to_virq(irq) && virq < 1024 {
if let Some(handler) = &mut IRQ_CHIP.irq_desc[virq].handler {
handler.irq_handler(virq as u32);
+1 -1
View File
@@ -76,7 +76,7 @@ pub unsafe extern "C" fn kstart(args_ptr: *const KernelArgs) -> ! {
KERNEL_SIZE.store(args.kernel_size, Ordering::SeqCst);
// Convert env to slice
let env = slice::from_raw_parts((args.env_base) as *const u8, args.env_size);
let env = slice::from_raw_parts((crate::PHYS_OFFSET + args.env_base) as *const u8, args.env_size);
// Set up graphical debug
#[cfg(feature = "graphical_debug")]
+1 -1
View File
@@ -53,7 +53,7 @@ pub extern fn irq_trigger(irq: u8) {
event::trigger(*scheme_id, *fd, EVENT_READ);
}
} else {
println!("Calling IRQ without triggering");
println!("Calling IRQ without triggering {}", irq);
}
}