ShellPkg: Acpiview: Update MADT parser for TRBE interrupt

ACPI 6.5 introduces a new filed to the MADT GICC
structure to specify the TRBE interrupt. The TRBE
interrupt is a Processor Private interrupt (PPI)
and is used to specify a platform-specific
interrupt to signal TRBE events.

Therefore, update the MADT GICC structure parser
to parse the new TRBE interrupt field. Also, add
validations to check that the TRBE interrupt is
within the PPI interrupt range.

Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
Reviewed-by: Pierre Gondois  <pierre.gondois@arm.com>
This commit is contained in:
Sami Mujawar 2023-09-22 15:35:10 +01:00 committed by mergify[bot]
parent 50e8518276
commit 2b0d117b4b
1 changed files with 46 additions and 2 deletions

View File

@ -1,7 +1,7 @@
/** @file
MADT table parser
Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
Copyright (c) 2022, AMD Incorporated. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@ -97,6 +97,48 @@ ValidateSpeOverflowInterrupt (
}
}
/**
This function validates the TRBE Interrupt in the GICC.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
STATIC
VOID
EFIAPI
ValidateTrbeInterrupt (
IN UINT8 *Ptr,
IN VOID *Context
)
{
UINT16 TrbeInterrupt;
TrbeInterrupt = *(UINT16 *)Ptr;
// SPE not supported by this processor
if (TrbeInterrupt == 0) {
return;
}
if ((TrbeInterrupt < ARM_PPI_ID_MIN) ||
((TrbeInterrupt > ARM_PPI_ID_MAX) &&
(TrbeInterrupt < ARM_PPI_ID_EXTENDED_MIN)) ||
(TrbeInterrupt > ARM_PPI_ID_EXTENDED_MAX))
{
IncrementErrorCount ();
Print (
L"\nERROR: TRBE Interrupt ID of %d is not in the allowed PPI ID "
L"ranges of %d-%d or %d-%d (for GICv3.1 or later).",
TrbeInterrupt,
ARM_PPI_ID_MIN,
ARM_PPI_ID_MAX,
ARM_PPI_ID_EXTENDED_MIN,
ARM_PPI_ID_EXTENDED_MAX
);
}
}
/**
An ACPI_PARSER array describing the GICC Interrupt Controller Structure.
**/
@ -122,7 +164,9 @@ STATIC CONST ACPI_PARSER GicCParser[] = {
NULL },
{ L"Reserved", 1, 77, L"0x%x", NULL, NULL, NULL, NULL },
{ L"SPE overflow Interrupt", 2, 78, L"0x%x", NULL, NULL,
ValidateSpeOverflowInterrupt, NULL }
ValidateSpeOverflowInterrupt, NULL },
{ L"TRBE Interrupt", 2, 80, L"0x%x", NULL, NULL,
ValidateTrbeInterrupt, NULL }
};
/**