[RESEND PATCH v1 3/7] acpi: madt: update madt revisions to ACPI 6.6 and add RISC-V

Ivan Hu ivan.hu at canonical.com
Thu Jul 24 06:42:56 UTC 2025


Thanks!

Acked-by: Ivan Hu <ivan.hu at canonical.com>

On Tue, Jul 15, 2025 at 11:29 PM Sunil V L <sunilvl at ventanamicro.com> wrote:

> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/fwts-devel/attachments/20250724/41ff4f56/attachment-0001.html>


More information about the fwts-devel mailing list