]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
plat/common/arm: Check for offline GICC during ACPI MP enumeration
authorSergiu Moga <sergiu@unikraft.io>
Sat, 23 Sep 2023 12:21:30 +0000 (15:21 +0300)
committerRazvan Deaconescu <razvand@unikraft.io>
Fri, 20 Oct 2023 16:35:55 +0000 (19:35 +0300)
When we probe for available, valid GICC's, we only look for those
that are already online and initialized, totally forgetting about
those that are usable but offline. Therefore, check for powered off
GICC's as well, since, during probe, we re-initialize GICC's anyway.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
GitHub-Closes: #1120

plat/common/arm/lcpu.c
plat/common/include/uk/plat/common/madt.h

index 1a6a0f9d41404abe940942601a82b9dd85f0a62a..2d4021bd1a10967e494b117179d2b9b33ee8192c 100644 (file)
@@ -118,7 +118,8 @@ static int do_arch_mp_init(void *arg __unused)
                m.h = (struct acpi_subsdt_hdr *)(madt->entries + off);
 
                if (m.h->type != ACPI_MADT_GICC ||
-                   !(m.gicc->flags & ACPI_MADT_GICC_FLAGS_EN))
+                   (!(m.gicc->flags & ACPI_MADT_GICC_FLAGS_EN) &&
+                    !(m.gicc->flags & ACPI_MADT_GICC_FLAGS_ON_CAP)))
                        continue;
 
                cpu_id = m.gicc->mpidr & CPU_ID_MASK;
index aae94dda988074960df8c2239208954f6006f16e..c4d7911719788bcc2a3afc80da6d87dee65b65dd 100644 (file)
@@ -170,6 +170,7 @@ struct acpi_madt_x2apic_nmi {
 #define ACPI_MADT_GICC_FLAGS_EN                                        0x01
 #define ACPI_MADT_GICC_FLAGS_PERF_IRQ_MODE                     0x02
 #define ACPI_MADT_GICC_FLAGS_VGIC_IRQ_MODE                     0x04
+#define ACPI_MADT_GICC_FLAGS_ON_CAP                            0x08
 struct acpi_madt_gicc {
        struct acpi_subsdt_hdr hdr;
        __u16 reserved;