pvmfw: Use vmbase::logger and the log API
For now, initialize the logger to print any log entry.
Replace all println!() with their appropriate corresponding log macro.
Rework the main() bootflow to have a single reboot() point.
Test: -
Change-Id: I3633b7f4c406887c6a810c43f2ec5a6ccf4b7907
diff --git a/pvmfw/Android.bp b/pvmfw/Android.bp
index 84cb18c..296644a 100644
--- a/pvmfw/Android.bp
+++ b/pvmfw/Android.bp
@@ -9,6 +9,7 @@
srcs: ["src/main.rs"],
edition: "2021",
rustlibs: [
+ "liblog_rust_nostd",
"libvmbase",
],
apex_available: ["com.android.virt"],
diff --git a/pvmfw/src/main.rs b/pvmfw/src/main.rs
index eb97961..4fdd30e 100644
--- a/pvmfw/src/main.rs
+++ b/pvmfw/src/main.rs
@@ -23,8 +23,8 @@
use core::fmt;
use helpers::checked_page_of;
-
-use vmbase::{console, main, power::reboot, println};
+use log::{debug, error, info, LevelFilter};
+use vmbase::{console, logger, main, power::reboot};
#[derive(Debug, Clone)]
enum Error {
@@ -48,13 +48,13 @@
let uart_page = checked_page_of(uart, mmio_granule).ok_or(Error::FailedUartSetup)?;
smccc::mmio_guard_map(uart_page).map_err(|_| Error::FailedUartSetup)?;
- println!("pVM firmware");
- println!(
+ info!("pVM firmware");
+ debug!(
"fdt_address={:#018x}, payload_start={:#018x}, payload_size={:#018x}, x3={:#018x}",
fdt_address, payload_start, payload_size, arg3,
);
- println!("Starting payload...");
+ info!("Starting payload...");
Ok(())
}
@@ -63,12 +63,13 @@
/// Entry point for pVM firmware.
pub fn main_wrapper(fdt_address: u64, payload_start: u64, payload_size: u64, arg3: u64) {
- match main(fdt_address, payload_start, payload_size, arg3) {
- Ok(()) => jump_to_payload(fdt_address, payload_start),
- Err(e) => {
- println!("Boot rejected: {}", e);
- }
+ if logger::init(LevelFilter::Debug).is_err() {
+ } else if let Err(e) = main(fdt_address, payload_start, payload_size, arg3) {
+ error!("Boot rejected: {e}");
+ } else {
+ jump_to_payload(fdt_address, payload_start);
}
+
reboot()
}