acpi/ghes: better handle source_id and notification
GHES has two fields that are stored on HEST error source blocks associated with notifications: - notification type, which is a number defined at the ACPI spec containing several arch-specific synchronous and assynchronous types; - source id, which is a HW/FW defined number, used to distinguish between different implemented sources. There could be several sources with the same notification type, which is dependent of the way each architecture maps notifications. Right now, build_ghes_v2() hardcodes a 1:1 mapping between such fields. Move it to two independent parameters, allowing the caller function to fill both. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <133ff72ea1041fed7dbcf97b7a2b0f4dfacde31a.1736945236.git.mchehab+huawei@kernel.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
606a42c4c1
commit
a85a3b729b
@ -284,9 +284,13 @@ static void build_ghes_error_table(GArray *hardware_errors, BIOSLinker *linker)
|
||||
}
|
||||
|
||||
/* Build Generic Hardware Error Source version 2 (GHESv2) */
|
||||
static void build_ghes_v2(GArray *table_data, int source_id, BIOSLinker *linker)
|
||||
static void build_ghes_v2(GArray *table_data,
|
||||
BIOSLinker *linker,
|
||||
enum AcpiGhesNotifyType notify,
|
||||
uint16_t source_id)
|
||||
{
|
||||
uint64_t address_offset;
|
||||
|
||||
/*
|
||||
* Type:
|
||||
* Generic Hardware Error Source version 2(GHESv2 - Type 10)
|
||||
@ -316,18 +320,8 @@ static void build_ghes_v2(GArray *table_data, int source_id, BIOSLinker *linker)
|
||||
address_offset + GAS_ADDR_OFFSET, sizeof(uint64_t),
|
||||
ACPI_GHES_ERRORS_FW_CFG_FILE, source_id * sizeof(uint64_t));
|
||||
|
||||
switch (source_id) {
|
||||
case ACPI_HEST_SRC_ID_SEA:
|
||||
/*
|
||||
* Notification Structure
|
||||
* Now only enable ARMv8 SEA notification type
|
||||
*/
|
||||
build_ghes_hw_error_notification(table_data, ACPI_GHES_NOTIFY_SEA);
|
||||
break;
|
||||
default:
|
||||
error_report("Not support this error source");
|
||||
abort();
|
||||
}
|
||||
/* Notification Structure */
|
||||
build_ghes_hw_error_notification(table_data, notify);
|
||||
|
||||
/* Error Status Block Length */
|
||||
build_append_int_noprefix(table_data, ACPI_GHES_MAX_RAW_DATA_LENGTH, 4);
|
||||
@ -369,7 +363,8 @@ void acpi_build_hest(GArray *table_data, GArray *hardware_errors,
|
||||
|
||||
/* Error Source Count */
|
||||
build_append_int_noprefix(table_data, ACPI_GHES_ERROR_SOURCE_COUNT, 4);
|
||||
build_ghes_v2(table_data, ACPI_HEST_SRC_ID_SEA, linker);
|
||||
build_ghes_v2(table_data, linker,
|
||||
ACPI_GHES_NOTIFY_SEA, ACPI_HEST_SRC_ID_SEA);
|
||||
|
||||
acpi_table_end(linker, &table);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user