qemu-riscv
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/1] Added support for the MMU node in the RHCT


From: Lilly Anderson
Subject: [PATCH 1/1] Added support for the MMU node in the RHCT
Date: Mon, 31 Jul 2023 18:09:59 -0400

---
 hw/riscv/virt-acpi-build.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c
index 7331248f59..cb36e52169 100644
--- a/hw/riscv/virt-acpi-build.c
+++ b/hw/riscv/virt-acpi-build.c
@@ -119,7 +119,8 @@ static void acpi_dsdt_add_fw_cfg(Aml *scope, const 
MemMapEntry *fw_cfg_memmap)
 /*
  * ACPI spec, Revision 6.5+
  * 5.2.36 RISC-V Hart Capabilities Table (RHCT)
- * REF: https://github.com/riscv-non-isa/riscv-acpi/issues/16
+ * REF: https://github.com/riscv-non-isa/riscv-acpi/issues/18
+ *      https://drive.google.com/file/d/1sKbOa8m1UZw1JkquZYe3F1zQBN1xXsaf/view
  *      https://drive.google.com/file/d/1nP3nFiH4jkPMp6COOxP6123DCZKR-tia/view
  */
 static void build_rhct(GArray *table_data,
@@ -133,6 +134,7 @@ static void build_rhct(GArray *table_data,
     uint32_t isa_offset, num_rhct_nodes;
     RISCVCPU *cpu;
     char *isa;
+    uint8_t mmu_type;
 
     AcpiTable table = { .sig = "RHCT", .rev = 1, .oem_id = s->oem_id,
                         .oem_table_id = s->oem_table_id };
@@ -145,8 +147,8 @@ static void build_rhct(GArray *table_data,
     build_append_int_noprefix(table_data,
                               RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ, 8);
 
-    /* ISA + N hart info */
-    num_rhct_nodes = 1 + ms->smp.cpus;
+    /* ISA + MMU + N hart info */
+    num_rhct_nodes = 2 + ms->smp.cpus;
 
     /* Number of RHCT nodes*/
     build_append_int_noprefix(table_data, num_rhct_nodes, 4);
@@ -174,6 +176,15 @@ static void build_rhct(GArray *table_data,
         build_append_int_noprefix(table_data, 0x0, 1);   /* Optional Padding */
     }
 
+    /* MMU Node */
+    build_append_int_noprefix(table_data, 2, 2); /* Type 2 */
+    build_append_int_noprefix(table_data, 8, 2); /* Length */
+    build_append_int_noprefix(table_data, 1, 2); /* Revision */
+    build_append_int_noprefix(table_data, 0, 1); /* Reserved */
+    
+    mmu_type = satp_mode_max_from_map(riscv_cpu_cfg(&cpu->env)->satp_mode.map) 
- 8;
+    build_append_int_noprefix(table_data, mmu_type, 1); /* MMU Type */
+
     /* Hart Info Node */
     for (int i = 0; i < arch_ids->len; i++) {
         build_append_int_noprefix(table_data, 0xFFFF, 2);  /* Type */
-- 
2.41.0

Signed-off-by: Lilly Anderson <fermium@anarchist.gay>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]