Skip to content

Commit

Permalink
build: Implement startup function for aarch64
Browse files Browse the repository at this point in the history
This commit implements aarch64 specific `rust64_start()` to enable
aarch64 boot.

Signed-off-by: Akira Moroo <[email protected]>
  • Loading branch information
retrage committed Nov 4, 2022
1 parent 8469995 commit 568ed71
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ fn boot_from_device(device: &mut block::VirtioBlockDevice, info: &dyn boot::Info

let mut l = pe::Loader::new(&mut file);
#[cfg(target_arch = "aarch64")]
let load_addr = 0x4040_0000;
let load_addr = arch::aarch64::layout::map::dram::KERNEL_START as u64;
#[cfg(target_arch = "x86_64")]
let load_addr = 0x20_0000;
let (entry_addr, load_addr, size) = match l.load(load_addr) {
Expand Down Expand Up @@ -167,11 +167,20 @@ pub extern "C" fn rust64_start(#[cfg(not(feature = "coreboot"))] pvh_info: &pvh:

#[cfg(target_arch = "aarch64")]
#[no_mangle]
pub extern "C" fn rust64_start(_x0: *const u8) -> ! {
todo!();
pub extern "C" fn rust64_start(x0: *const u8) -> ! {
serial::PORT.borrow_mut().init();

arch::aarch64::paging::setup();

let info = fdt::StartInfo::new(x0);

if let Some((base, length)) = info.find_compatible_region(&["pci-host-ecam-generic"]) {
pci::init(base as u64, length as u64);
}

main(&info)
}

#[cfg(target_arch = "x86_64")]
fn main(info: &dyn boot::Info) -> ! {
log!("\nBooting with {}", info.name());

Expand Down

0 comments on commit 568ed71

Please sign in to comment.