[PATCH 3/7] acpi: madt: update madt revisions to ACPI 6.6 and add RISC-V
Sunil V L
sunilvl at ventanamicro.com
Fri Jul 11 13:26:31 UTC 2025
From: Haibo Xu <haibo1.xu at intel.com>
Add new MADT structures defined for RISC-V in ACPI 6.6.
Co-developed-by: Sunil V L <sunilvl at ventanamicro.com>
Signed-off-by: Sunil V L <sunilvl at ventanamicro.com>
Signed-off-by: Haibo Xu <haibo1.xu at intel.com>
---
src/acpi/madt/madt.c | 14 +++++++++-
src/lib/include/fwts_acpi.h | 55 +++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 1 deletion(-)
diff --git a/src/acpi/madt/madt.c b/src/acpi/madt/madt.c
index 21e614a6..5d597f4e 100644
--- a/src/acpi/madt/madt.c
+++ b/src/acpi/madt/madt.c
@@ -122,7 +122,7 @@
#define SUBTABLE_UNDEFINED 0x00
#define SUBTABLE_VARIABLE 0xff
-#define NUM_SUBTABLE_TYPES 24
+#define NUM_SUBTABLE_TYPES 28
#define MAX_IO_APIC_ID 256 /* IO APIC ID field is 1 byte */
#define SBBR_ACPI_MAJOR_VERSION 6
@@ -247,6 +247,15 @@ static struct acpi_madt_subtable_lengths spec_info[] = {
16, 16, 12, 82, 24, 24, 16, 20, 16,
15, 23, 21, 13, 19, 17, 15 }
},
+ { /* for ACPI 6.6 */
+ .major_version = 6,
+ .minor_version = 6,
+ .madt_version = 7,
+ .num_types = 28,
+ .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE,
+ 16, 16, 12, 82, 24, 24, 16, 20, 16,
+ 15, 23, 21, 13, 19, 17, 15, 36, 16, 36, 36 }
+ },
{ /* terminator */
.major_version = 0,
.minor_version = 0,
@@ -516,6 +525,9 @@ static int madt_arch_revision(fwts_framework *fw)
if (fw->target_arch == FWTS_ARCH_ARM64) {
minrev = 3;
arch = "aarch64";
+ } else if (fw->target_arch == FWTS_ARCH_RISCV64) {
+ minrev = 6;
+ arch = "riscv64";
} else {
minrev = 1;
arch = "intel";
diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
index e6702aff..6f3fe445 100644
--- a/src/lib/include/fwts_acpi.h
+++ b/src/lib/include/fwts_acpi.h
@@ -544,6 +544,10 @@ typedef enum {
FWTS_MADT_MSI_PIC,
FWTS_MADT_BIO_PIC,
FWTS_MADT_LPC_PIC,
+ FWTS_MADT_RINTC,
+ FWTS_MADT_IMSIC,
+ FWTS_MADT_APLIC,
+ FWTS_MADT_PLIC,
FWTS_MADT_RESERVED, /* does not have defined structure */
FWTS_MADT_OEM /* does not have defined structure */
} fwts_acpi_madt_type;
@@ -713,6 +717,57 @@ typedef struct {
uint32_t flag;
} __attribute__ ((packed)) fwts_acpi_madt_core_pic;
+/* Type 24, FWTS_MADT_RINTC */
+typedef struct {
+ uint8_t version;
+ uint8_t reserved;
+ uint32_t flags;
+ uint64_t hart_id;
+ uint32_t uid;
+ uint32_t ext_intc_id;
+ uint64_t imsic_addr;
+ uint32_t imsic_size;
+} __attribute__ ((packed)) fwts_acpi_madt_rintc;
+
+/* Type 25, FWTS_MADT_IMSIC */
+typedef struct {
+ uint8_t version;
+ uint8_t reserved;
+ uint32_t flags;
+ uint16_t num_ids;
+ uint16_t num_guest_ids;
+ uint8_t guest_index_bits;
+ uint8_t hart_index_bits;
+ uint8_t group_index_bits;
+ uint8_t group_index_shift;
+} __attribute__ ((packed)) fwts_acpi_madt_imsic;
+
+/* Type 26, FWTS_MADT_APLIC */
+typedef struct {
+ uint8_t version;
+ uint8_t id;
+ uint32_t flags;
+ uint8_t hw_id[8];
+ uint16_t num_idcs;
+ uint16_t num_sources;
+ uint32_t gsi_base;
+ uint64_t addr;
+ uint32_t size;
+} __attribute__ ((packed)) fwts_acpi_madt_aplic;
+
+/* Type 27, FWTS_MADT_PLIC */
+typedef struct {
+ uint8_t version;
+ uint8_t id;
+ uint8_t hw_id[8];
+ uint16_t num_irqs;
+ uint16_t max_prio;
+ uint32_t flags;
+ uint32_t size;
+ uint64_t base_addr;
+ uint32_t gsi_base;
+} __attribute__ ((packed)) fwts_acpi_madt_plic;
+
/*
* ACPI TCPA (Trusted Computing Platform Alliance Capabilities Table)
* http://www.kuro5hin.org/story/2002/10/27/16622/530,
--
2.43.0
More information about the fwts-devel
mailing list