Hi,
Currently APEI depends on x86 architecture. It is because of many x86
specific features like "IA-32 Architecture Corrected Machine Check
" error source or NMI hardware error notification. However, many other
features like "PCI Express Device AER Structure" or GHES via external
interrupt can be still used perfectly by other architectures. So my idea
is to move x86 dependency away form Kconfig to APEI areas where it
really applies to.
I have started refactoring ghes.c driver in that direction. And here
comes my confusion, how should we treat x86 related parts, as fixed
profile? (which means we could use ACPI_REDUCED_HARDWARE or
CONFIG_ACPI_REDUCED_HARDWARE_ONLY define). I would like to ask for your
opinion.
Regards,
Tomasz
This reverts commit df86f5df79d8c2035a88fb985925e49475c0cdca.
APIC ID refers the hardware ID of the CPU, which means MPIDR on
ARM/ARM64, but in ACPI 5.0, GIC ID feild in GIC structure have
no explicit definition and may not refer to the MPIDR.
This patch just assume gic->gic_id as MPIDR which is not suitable,
revert it for now and wait for the explicit definition of GIC
structure is ready.
Signed-off-by: Hanjun Guo <hanjun.guo(a)linaro.org>
---
drivers/acpi/processor_core.c | 27 ---------------------------
1 file changed, 27 deletions(-)
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 86d73d5..71e2065 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -70,28 +70,6 @@ static int map_lsapic_id(struct acpi_subtable_header *entry,
return 0;
}
-static int map_gic_id(struct acpi_subtable_header *entry,
- int device_declaration, u32 acpi_id, int *apic_id)
-{
- struct acpi_madt_generic_interrupt *gic =
- (struct acpi_madt_generic_interrupt *)entry;
-
- if (!(gic->flags & ACPI_MADT_ENABLED))
- return -ENODEV;
-
- /*
- * In the GIC interrupt model, logical processors are
- * required to have a Processor Device object in the DSDT,
- * so we should check device_declaration here
- */
- if (device_declaration && (gic->uid == acpi_id)) {
- *apic_id = gic->gic_id;
- return 0;
- }
-
- return -EINVAL;
-}
-
static int map_madt_entry(int type, u32 acpi_id)
{
unsigned long madt_end, entry;
@@ -127,9 +105,6 @@ static int map_madt_entry(int type, u32 acpi_id)
} else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC) {
if (!map_lsapic_id(header, type, acpi_id, &apic_id))
break;
- } else if (header->type == ACPI_MADT_TYPE_GENERIC_INTERRUPT) {
- if (!map_gic_id(header, type, acpi_id, &apic_id))
- break;
}
entry += header->length;
}
@@ -160,8 +135,6 @@ static int map_mat_entry(acpi_handle handle, int type, u32 acpi_id)
map_lapic_id(header, acpi_id, &apic_id);
} else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC) {
map_lsapic_id(header, type, acpi_id, &apic_id);
- } else if (header->type == ACPI_MADT_TYPE_GENERIC_INTERRUPT) {
- map_gic_id(header, type, acpi_id, &apic_id);
}
exit:
--
1.7.9.5
The leg-kernel release has been made and tagged as leg-20140318.0
This is based on mainline kernel v3.14-rc7
Repository : http://git.linaro.org/leg/acpi/leg-kernel.git
Direct Link: https://git.linaro.org/leg/acpi/leg-kernel.git/commit/9ce67dfb053ccec04f580…
Notes :-
1) starting from this release, a FDT is not used to describe the platform. The
kernel uses ACPI tables only. This release contains prototype code to boot
the CPUs from information held in the MADT. It is hard coded to PSCI control
method for the FVP base model