diff mbox series

[v1,5/5] xen/riscv: map FDT

Message ID 7e492df051c949744755a221c0448c740d2c681b.1720002425.git.oleksii.kurochko@gmail.com (mailing list archive)
State New
Headers show
Series RISCV device tree mapping | expand

Commit Message

Oleksii July 3, 2024, 10:42 a.m. UTC
Except mapping of FDT, it is also printing command line passed by
a DTB and initialize bootinfo from a DTB.

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
---
 xen/arch/riscv/riscv64/head.S |  3 +++
 xen/arch/riscv/setup.c        | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+)
diff mbox series

Patch

diff --git a/xen/arch/riscv/riscv64/head.S b/xen/arch/riscv/riscv64/head.S
index 3261e9fce8..22fb36a861 100644
--- a/xen/arch/riscv/riscv64/head.S
+++ b/xen/arch/riscv/riscv64/head.S
@@ -41,6 +41,9 @@  FUNC(start)
 
         jal     setup_initial_pagetables
 
+        mv      a0, s1
+        jal     fdt_map
+
         /* Calculate proper VA after jump from 1:1 mapping */
         la      a0, .L_primary_switched
         sub     a0, a0, s2
diff --git a/xen/arch/riscv/setup.c b/xen/arch/riscv/setup.c
index 4f06203b46..b346956e06 100644
--- a/xen/arch/riscv/setup.c
+++ b/xen/arch/riscv/setup.c
@@ -1,7 +1,9 @@ 
 /* SPDX-License-Identifier: GPL-2.0-only */
 
+#include <xen/bootfdt.h>
 #include <xen/bug.h>
 #include <xen/compile.h>
+#include <xen/device_tree.h>
 #include <xen/init.h>
 #include <xen/mm.h>
 
@@ -33,15 +35,34 @@  static void test_macros_from_bug_h(void)
     printk("WARN is most likely working\n");
 }
 
+void __init fdt_map(paddr_t dtb_addr)
+{
+    device_tree_flattened = early_fdt_map(dtb_addr);
+    if ( !device_tree_flattened )
+    {
+        printk("wrong FDT\n");
+        die();
+    }
+}
+
 void __init noreturn start_xen(unsigned long bootcpu_id,
                                paddr_t dtb_addr)
 {
+    size_t fdt_size;
+    const char *cmdline;
+
     remove_identity_mapping();
 
     trap_init();
 
     test_macros_from_bug_h();
 
+    fdt_size = boot_fdt_info(device_tree_flattened, dtb_addr);
+
+    cmdline = boot_fdt_cmdline(device_tree_flattened);
+    printk("Command line: %s\n", cmdline);
+    cmdline_parse(cmdline);
+
     printk("All set up\n");
 
     for ( ;; )