The interrupts-extended property in DT is arch specific. Move the current implementation and the way to decode the property to the Arm folder to prepare for other architecture support.
Suggested-by: Sunil V L <suni...@ventanamicro.com> Signed-off-by: Pierre Gondois <pierre.gond...@arm.com> --- .../FdtHwInfoParserLib/Arm/ArmFdtUtility.c | 85 +++++++++++++++++++ .../FdtHwInfoParserLib/FdtHwInfoParserLib.inf | 1 + .../Library/FdtHwInfoParserLib/FdtUtility.c | 71 ---------------- 3 files changed, 86 insertions(+), 71 deletions(-) create mode 100644 DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtUtility.c diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtUtility.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtUtility.c new file mode 100644 index 000000000000..21b1306e577d --- /dev/null +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtUtility.c @@ -0,0 +1,85 @@ +/** @file + Flattened device tree utility. + + Copyright (c) 2021, ARM Limited. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - Device tree Specification - Release v0.3 + - linux/Documentation/devicetree/bindings/interrupt-controller/arm%2Cgic.yaml + - linux//Documentation/devicetree/bindings/interrupt-controller/arm%2Cgic.yaml +**/ + +#include <FdtHwInfoParserInclude.h> +#include "FdtUtility.h" + +/** Get the interrupt Id of an interrupt described in a fdt. + + Data must describe a GIC interrupt. A GIC interrupt is on at least + 3 UINT32 cells. + This function DOES NOT SUPPORT extended SPI range and extended PPI range. + + @param [in] Data Pointer to the first cell of an "interrupts" property. + + @retval The interrupt id. +**/ +UINT32 +EFIAPI +FdtGetInterruptId ( + UINT32 CONST *Data + ) +{ + UINT32 IrqType; + UINT32 IrqId; + + ASSERT (Data != NULL); + + IrqType = fdt32_to_cpu (Data[IRQ_TYPE_OFFSET]); + IrqId = fdt32_to_cpu (Data[IRQ_NUMBER_OFFSET]); + + switch (IrqType) { + case DT_SPI_IRQ: + IrqId += SPI_OFFSET; + break; + + case DT_PPI_IRQ: + IrqId += PPI_OFFSET; + break; + + default: + ASSERT (0); + IrqId = 0; + } + + return IrqId; +} + +/** Get the ACPI interrupt flags of an interrupt described in a fdt. + + Data must describe a GIC interrupt. A GIC interrupt is on at least + 3 UINT32 cells. + + PPI interrupt cpu mask on bits [15:8] are ignored. + + @param [in] Data Pointer to the first cell of an "interrupts" property. + + @retval The interrupt flags (for ACPI). +**/ +UINT32 +EFIAPI +FdtGetInterruptFlags ( + UINT32 CONST *Data + ) +{ + UINT32 IrqFlags; + UINT32 AcpiIrqFlags; + + ASSERT (Data != NULL); + + IrqFlags = fdt32_to_cpu (Data[IRQ_FLAGS_OFFSET]); + + AcpiIrqFlags = DT_IRQ_IS_EDGE_TRIGGERED (IrqFlags) ? BIT0 : 0; + AcpiIrqFlags |= DT_IRQ_IS_ACTIVE_LOW (IrqFlags) ? BIT1 : 0; + + return AcpiIrqFlags; +} diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf index d3010af527c1..8e1ea100bd34 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf @@ -28,6 +28,7 @@ [Sources] Serial/SerialPortParser.h [Sources.ARM, Sources.AARCH64] + Arm/ArmFdtUtility.c Arm/ArmFdtHwInfoParser.c Arm/BootArch/ArmBootArchParser.c Arm/BootArch/ArmBootArchParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.c index 5314cf3808c2..bab228575938 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.c @@ -13,77 +13,6 @@ #include <FdtHwInfoParserInclude.h> #include "FdtUtility.h" -/** Get the interrupt Id of an interrupt described in a fdt. - - Data must describe a GIC interrupt. A GIC interrupt is on at least - 3 UINT32 cells. - This function DOES NOT SUPPORT extended SPI range and extended PPI range. - - @param [in] Data Pointer to the first cell of an "interrupts" property. - - @retval The interrupt id. -**/ -UINT32 -EFIAPI -FdtGetInterruptId ( - UINT32 CONST *Data - ) -{ - UINT32 IrqType; - UINT32 IrqId; - - ASSERT (Data != NULL); - - IrqType = fdt32_to_cpu (Data[IRQ_TYPE_OFFSET]); - IrqId = fdt32_to_cpu (Data[IRQ_NUMBER_OFFSET]); - - switch (IrqType) { - case DT_SPI_IRQ: - IrqId += SPI_OFFSET; - break; - - case DT_PPI_IRQ: - IrqId += PPI_OFFSET; - break; - - default: - ASSERT (0); - IrqId = 0; - } - - return IrqId; -} - -/** Get the ACPI interrupt flags of an interrupt described in a fdt. - - Data must describe a GIC interrupt. A GIC interrupt is on at least - 3 UINT32 cells. - - PPI interrupt cpu mask on bits [15:8] are ignored. - - @param [in] Data Pointer to the first cell of an "interrupts" property. - - @retval The interrupt flags (for ACPI). -**/ -UINT32 -EFIAPI -FdtGetInterruptFlags ( - UINT32 CONST *Data - ) -{ - UINT32 IrqFlags; - UINT32 AcpiIrqFlags; - - ASSERT (Data != NULL); - - IrqFlags = fdt32_to_cpu (Data[IRQ_FLAGS_OFFSET]); - - AcpiIrqFlags = DT_IRQ_IS_EDGE_TRIGGERED (IrqFlags) ? BIT0 : 0; - AcpiIrqFlags |= DT_IRQ_IS_ACTIVE_LOW (IrqFlags) ? BIT1 : 0; - - return AcpiIrqFlags; -} - /** Check whether a node has the input name. @param [in] Fdt Pointer to a Flattened Device Tree. -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#119646): https://edk2.groups.io/g/devel/message/119646 Mute This Topic: https://groups.io/mt/106770184/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-