2025-05-08 01:51:22 |
MontyZhao |
description |
When certain CPU cores are disabled (i.e., their _STA value is changed from 0xF to 0x0), FWTS correctly skips these cores. However, it still checks whether the _UID in the MADT GIC entries matches the UID of the cores, which causes the test to FAIL.
log like this:
madt: GICC has no matching processor UID x.
This behavior is not compliant with the ACPI specification, as the correct way to indicate whether a GIC is used by the OS is through the Flags field in the MADT GICC entries, not the _STA value.
URL:https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/05_ACPI_Software_Programming_Model/ACPI_Software_Programming_Model.html?highlight=madt#gicc-cpu-interface-flags
We've made a little modification to fix this:
diff --git a/src/acpi/madt/madt.c b/src/acpi/madt/madt.c
index 0b6d00ad..21e614a6 100644
--- a/src/acpi/madt/madt.c
+++ b/src/acpi/madt/madt.c
@@ -1083,7 +1083,8 @@ static int madt_gicc(fwts_framework *fw,
"MADT %s reserved field properly set to zero.",
madt_sub_names[hdr->type]);
- madt_find_processor_uid(fw, gic->processor_uid, "GICC");
+ if((gic->flags & 1) != 0)
+ madt_find_processor_uid(fw, gic->processor_uid, "GICC");
mask = 0xfffffffc;
start = 2; |
When certain CPU cores are disabled (i.e., their _STA value is changed from 0xF to 0x0), FWTS correctly skips these cores. However, it still checks whether the _UID in the MADT GIC entries matches the UID of the cores, which causes the test to FAIL.
log like this:
madt: GICC has no matching processor UID x.
This behavior is not compliant with the ACPI specification, as the correct way to indicate whether a GIC is used by the OS is through the Flags field in the MADT GICC entries, not the _STA value.
URL:https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/05_ACPI_Software_Programming_Model/ACPI_Software_Programming_Model.html?highlight=madt#gicc-cpu-interface-flags
We've made a little modification to fix this:
diff --git a/src/acpi/madt/madt.c b/src/acpi/madt/madt.c
index 0b6d00ad..21e614a6 100644
--- a/src/acpi/madt/madt.c
+++ b/src/acpi/madt/madt.c
@@ -1083,7 +1083,8 @@ static int madt_gicc(fwts_framework *fw,
"MADT %s reserved field properly set to zero.",
madt_sub_names[hdr->type]);
- madt_find_processor_uid(fw, gic->processor_uid, "GICC");
+ if((gic->flags & 1) != 0)
+ madt_find_processor_uid(fw, gic->processor_uid, "GICC");
mask = 0xfffffffc;
start = 2; |
|