Message ID | 64a31a09fe6b11bebad1c592ad20071a9d93fee5.1721630625.git.mchehab+huawei@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add ACPI CPER firmware first error injection for Arm Processor | expand |
On Mon, 22 Jul 2024 08:45:55 +0200 Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote: > From: Jonathan Cameron <Jonathan.Cameron@huawei.com> > > Add error notification to GHES v2 using the GPIO source. > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> > --- > hw/acpi/ghes.c | 8 ++++++-- > include/hw/acpi/ghes.h | 1 + > 2 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c > index e9511d9b8f71..5b8bc6eeb437 100644 > --- a/hw/acpi/ghes.c > +++ b/hw/acpi/ghes.c > @@ -34,8 +34,8 @@ > /* The max size in bytes for one error block */ > #define ACPI_GHES_MAX_RAW_DATA_LENGTH (1 * KiB) > > -/* Now only support ARMv8 SEA notification type error source */ > -#define ACPI_GHES_ERROR_SOURCE_COUNT 1 > +/* Support ARMv8 SEA notification type error source and GPIO interrupt. */ > +#define ACPI_GHES_ERROR_SOURCE_COUNT 2 > > /* Generic Hardware Error Source version 2 */ > #define ACPI_GHES_SOURCE_GENERIC_ERROR_V2 10 > @@ -327,6 +327,9 @@ static void build_ghes_v2(GArray *table_data, int source_id, BIOSLinker *linker) > */ > build_ghes_hw_error_notification(table_data, ACPI_GHES_NOTIFY_SEA); > break; > + case ACPI_HEST_SRC_ID_GPIO: > + build_ghes_hw_error_notification(table_data, ACPI_GHES_NOTIFY_GPIO); > + break; > default: > error_report("Not support this error source"); > abort(); > @@ -370,6 +373,7 @@ void acpi_build_hest(GArray *table_data, BIOSLinker *linker, > /* 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, ACPI_HEST_SRC_ID_GPIO, linker); > > acpi_table_end(linker, &table); > } > diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h > index 674f6958e905..4f1ab1a73a06 100644 > --- a/include/hw/acpi/ghes.h > +++ b/include/hw/acpi/ghes.h > @@ -58,6 +58,7 @@ enum AcpiGhesNotifyType { > > enum { > ACPI_HEST_SRC_ID_SEA = 0, > + ACPI_HEST_SRC_ID_GPIO = 1, is it defined by some spec, or just a made up number? > /* future ids go here */ > ACPI_HEST_SRC_ID_RESERVED, > };
Em Tue, 30 Jul 2024 10:40:28 +0200 Igor Mammedov <imammedo@redhat.com> escreveu: > > diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h > > index 674f6958e905..4f1ab1a73a06 100644 > > --- a/include/hw/acpi/ghes.h > > +++ b/include/hw/acpi/ghes.h > > @@ -58,6 +58,7 @@ enum AcpiGhesNotifyType { > > > > enum { > > ACPI_HEST_SRC_ID_SEA = 0, > > + ACPI_HEST_SRC_ID_GPIO = 1, > is it defined by some spec, or just a made up number? I don't know. Maybe Jonathan or Shiju knows better, as the original patch came from them, but I didn't find any parts of the ACPI spec defining the values for source ID. Checking at build_ghes_v2() implementation, this is used on two places: 1. as GHESv2 source ID: /* * Type: * Generic Hardware Error Source version 2(GHESv2 - Type 10) */ build_append_int_noprefix(table_data, ACPI_GHES_SOURCE_GENERIC_ERROR_V2, 2); /* Source Id */ build_append_int_noprefix(table_data, source_id, 2); /* Related Source Id */ build_append_int_noprefix(table_data, 0xffff, 2); as an address offset: address_offset = table_data->len; /* Error Status Address */ build_append_gas(table_data, AML_AS_SYSTEM_MEMORY, 0x40, 0, 4 /* QWord access */, 0); bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, address_offset + GAS_ADDR_OFFSET, sizeof(uint64_t), ACPI_GHES_ERRORS_FW_CFG_FILE, source_id * sizeof(uint64_t)); So, if I had to guess, I'd say that this was made up, in a way that the size of the table will fit just two sources, starting from zero. So, I'll change the code to just: enum { ACPI_HEST_SRC_ID_SEA = 0, ACPI_HEST_SRC_ID_GPIO, /* future ids go here */ ACPI_HEST_SRC_ID_RESERVED, }; To remove the false impression that this could be originated from the spec. Thanks, Mauro
On Thu, 1 Aug 2024 14:56:37 +0200 Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote: > Em Tue, 30 Jul 2024 10:40:28 +0200 > Igor Mammedov <imammedo@redhat.com> escreveu: > > > > diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h > > > index 674f6958e905..4f1ab1a73a06 100644 > > > --- a/include/hw/acpi/ghes.h > > > +++ b/include/hw/acpi/ghes.h > > > @@ -58,6 +58,7 @@ enum AcpiGhesNotifyType { > > > > > > enum { > > > ACPI_HEST_SRC_ID_SEA = 0, > > > + ACPI_HEST_SRC_ID_GPIO = 1, > > is it defined by some spec, or just a made up number? > > I don't know. Maybe Jonathan or Shiju knows better, as the original patch > came from them, but I didn't find any parts of the ACPI spec defining the > values for source ID. > > Checking at build_ghes_v2() implementation, this is used on two places: > > 1. as GHESv2 source ID: > /* > * Type: > * Generic Hardware Error Source version 2(GHESv2 - Type 10) > */ > build_append_int_noprefix(table_data, ACPI_GHES_SOURCE_GENERIC_ERROR_V2, 2); > /* Source Id */ > build_append_int_noprefix(table_data, source_id, 2); > /* Related Source Id */ > build_append_int_noprefix(table_data, 0xffff, 2); > > as an address offset: > > address_offset = table_data->len; > /* Error Status Address */ > build_append_gas(table_data, AML_AS_SYSTEM_MEMORY, 0x40, 0, > 4 /* QWord access */, 0); > bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, > address_offset + GAS_ADDR_OFFSET, sizeof(uint64_t), > ACPI_GHES_ERRORS_FW_CFG_FILE, source_id * sizeof(uint64_t)); > > So, if I had to guess, I'd say that this was made up, in a way that > the size of the table will fit just two sources, starting from zero. > > So, I'll change the code to just: > > enum { > ACPI_HEST_SRC_ID_SEA = 0, > ACPI_HEST_SRC_ID_GPIO, LGTM. The naming is perhaps not ideal but the scheme predates my involvement so I'm not sure of the reasoning. Could change it to QEMU_ACPI... to make it really really clear these aren't an ACPI spec thing, but may not be worth it. J > /* future ids go here */ > ACPI_HEST_SRC_ID_RESERVED, > }; > > To remove the false impression that this could be originated from the > spec. > > Thanks, > Mauro >
diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index e9511d9b8f71..5b8bc6eeb437 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -34,8 +34,8 @@ /* The max size in bytes for one error block */ #define ACPI_GHES_MAX_RAW_DATA_LENGTH (1 * KiB) -/* Now only support ARMv8 SEA notification type error source */ -#define ACPI_GHES_ERROR_SOURCE_COUNT 1 +/* Support ARMv8 SEA notification type error source and GPIO interrupt. */ +#define ACPI_GHES_ERROR_SOURCE_COUNT 2 /* Generic Hardware Error Source version 2 */ #define ACPI_GHES_SOURCE_GENERIC_ERROR_V2 10 @@ -327,6 +327,9 @@ static void build_ghes_v2(GArray *table_data, int source_id, BIOSLinker *linker) */ build_ghes_hw_error_notification(table_data, ACPI_GHES_NOTIFY_SEA); break; + case ACPI_HEST_SRC_ID_GPIO: + build_ghes_hw_error_notification(table_data, ACPI_GHES_NOTIFY_GPIO); + break; default: error_report("Not support this error source"); abort(); @@ -370,6 +373,7 @@ void acpi_build_hest(GArray *table_data, BIOSLinker *linker, /* 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, ACPI_HEST_SRC_ID_GPIO, linker); acpi_table_end(linker, &table); } diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index 674f6958e905..4f1ab1a73a06 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -58,6 +58,7 @@ enum AcpiGhesNotifyType { enum { ACPI_HEST_SRC_ID_SEA = 0, + ACPI_HEST_SRC_ID_GPIO = 1, /* future ids go here */ ACPI_HEST_SRC_ID_RESERVED, };