hw/riscv/virt-acpi-build.c: Add PLIC in MADT
Add PLIC structures for each socket in the MADT when system is configured with PLIC as the external interrupt controller. Signed-off-by: Haibo Xu <haibo1.xu@intel.com> Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Message-ID: <20231218150247.466427-14-sunilvl@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
55ecd83b36
commit
d641da6ed4
@ -94,6 +94,12 @@ static void riscv_acpi_madt_add_rintc(uint32_t uid,
|
||||
arch_ids->cpus[uid].props.node_id,
|
||||
local_cpu_id),
|
||||
4);
|
||||
} else if (s->aia_type == VIRT_AIA_TYPE_NONE) {
|
||||
build_append_int_noprefix(entry,
|
||||
ACPI_BUILD_INTC_ID(
|
||||
arch_ids->cpus[uid].props.node_id,
|
||||
2 * local_cpu_id + 1),
|
||||
4);
|
||||
} else {
|
||||
build_append_int_noprefix(entry, 0, 4);
|
||||
}
|
||||
@ -494,6 +500,29 @@ static void build_madt(GArray *table_data,
|
||||
build_append_int_noprefix(table_data,
|
||||
s->memmap[VIRT_APLIC_S].size, 4);
|
||||
}
|
||||
} else {
|
||||
/* PLICs */
|
||||
for (socket = 0; socket < riscv_socket_count(ms); socket++) {
|
||||
aplic_addr = s->memmap[VIRT_PLIC].base +
|
||||
s->memmap[VIRT_PLIC].size * socket;
|
||||
gsi_base = VIRT_IRQCHIP_NUM_SOURCES * socket;
|
||||
build_append_int_noprefix(table_data, 0x1B, 1); /* Type */
|
||||
build_append_int_noprefix(table_data, 36, 1); /* Length */
|
||||
build_append_int_noprefix(table_data, 1, 1); /* Version */
|
||||
build_append_int_noprefix(table_data, socket, 1); /* PLIC ID */
|
||||
build_append_int_noprefix(table_data, 0, 8); /* Hardware ID */
|
||||
/* Total External Interrupt Sources Supported */
|
||||
build_append_int_noprefix(table_data,
|
||||
VIRT_IRQCHIP_NUM_SOURCES - 1, 2);
|
||||
build_append_int_noprefix(table_data, 0, 2); /* Max Priority */
|
||||
build_append_int_noprefix(table_data, 0, 4); /* Flags */
|
||||
/* PLIC Size */
|
||||
build_append_int_noprefix(table_data, s->memmap[VIRT_PLIC].size, 4);
|
||||
/* PLIC Address */
|
||||
build_append_int_noprefix(table_data, aplic_addr, 8);
|
||||
/* Global System Interrupt Vector Base */
|
||||
build_append_int_noprefix(table_data, gsi_base, 4);
|
||||
}
|
||||
}
|
||||
|
||||
acpi_table_end(linker, &table);
|
||||
|
Loading…
Reference in New Issue
Block a user