[pvmfw][rialto] Refactor and reuse console_uart_range()

This cl:

- Extracts console_uart_range() into a function and moves it to vmbase.
  There is no behavior change for pvmfw.
- Allocates device memory for UART range in rialto.

Bug: 284462758
Test: m pvmfw_img && atest rialto_test
Change-Id: I7f38e7c91869692ed535d00d62713f5be6b8f8ab
diff --git a/pvmfw/src/entry.rs b/pvmfw/src/entry.rs
index 08f076b..8cdd0f5 100644
--- a/pvmfw/src/entry.rs
+++ b/pvmfw/src/entry.rs
@@ -207,18 +207,10 @@
     // script prevents it from overlapping with other objects.
     let appended_data = unsafe { get_appended_data_slice() };
 
-    let mut page_table = memory::init_page_table().map_err(|e| {
+    let page_table = memory::init_page_table().map_err(|e| {
         error!("Failed to set up the dynamic page tables: {e}");
         RebootReason::InternalError
     })?;
-
-    const CONSOLE_LEN: usize = 1; // vmbase::uart::Uart only uses one u8 register.
-    let uart_range = console::BASE_ADDRESS..(console::BASE_ADDRESS + CONSOLE_LEN);
-    page_table.map_device(&uart_range).map_err(|e| {
-        error!("Failed to remap the UART as a dynamic page table entry: {e}");
-        RebootReason::InternalError
-    })?;
-
     // SAFETY - We only get the appended payload from here, once. It is statically mapped and the
     // linker script prevents it from overlapping with other objects.
     let mut appended = unsafe { AppendedPayload::new(appended_data) }.ok_or_else(|| {
diff --git a/pvmfw/src/memory.rs b/pvmfw/src/memory.rs
index d4e548b..f4fc3b1 100644
--- a/pvmfw/src/memory.rs
+++ b/pvmfw/src/memory.rs
@@ -640,6 +640,9 @@
     page_table.map_code(&layout::text_range())?;
     page_table.map_rodata(&layout::rodata_range())?;
     page_table.map_data_dbm(&appended_payload_range())?;
-
+    if let Err(e) = page_table.map_device(&layout::console_uart_range()) {
+        error!("Failed to remap the UART as a dynamic page table entry: {e}");
+        return Err(e);
+    }
     Ok(page_table)
 }
diff --git a/rialto/src/main.rs b/rialto/src/main.rs
index 77999fb..30bc5b0 100644
--- a/rialto/src/main.rs
+++ b/rialto/src/main.rs
@@ -63,6 +63,7 @@
     page_table.map_data(&layout::stack_range(40 * SZ_4K))?;
     page_table.map_code(&layout::text_range())?;
     page_table.map_rodata(&layout::rodata_range())?;
+    page_table.map_device(&layout::console_uart_range())?;
 
     // SAFETY: It is safe to activate the page table by setting `TTBR0_EL1` to point to
     // it as this is the first time we activate the page table.
diff --git a/vmbase/src/layout.rs b/vmbase/src/layout.rs
index ead4f8e..43bcb2c 100644
--- a/vmbase/src/layout.rs
+++ b/vmbase/src/layout.rs
@@ -14,6 +14,7 @@
 
 //! Memory layout.
 
+use crate::console::BASE_ADDRESS;
 use core::ops::Range;
 use core::ptr::addr_of;
 
@@ -75,6 +76,13 @@
     linker_region!(eh_stack_limit, bss_end)
 }
 
+/// UART console range.
+pub fn console_uart_range() -> Range<usize> {
+    const CONSOLE_LEN: usize = 1; // `uart::Uart` only uses one u8 register.
+
+    BASE_ADDRESS..(BASE_ADDRESS + CONSOLE_LEN)
+}
+
 /// Read-write data (original).
 pub fn data_load_address() -> usize {
     linker_addr!(data_lma)