public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Ard Biesheuvel" <ardb@kernel.org>
To: edk2-devel-groups-io <devel@edk2.groups.io>,
	Pierre <pierre.gondois@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>,
	Sami Mujawar <sami.mujawar@arm.com>
Subject: Re: [edk2-devel] [PATCH v3 2/8] DynamicTablesPkg: FdtHwInfoParserLib: Parse Pmu info
Date: Sat, 29 Jan 2022 16:33:35 +0100	[thread overview]
Message-ID: <CAMj1kXH-aFtQ3ti2zx3g8CYJ8CizW6EDz=D6GAoOQVUFya95TQ@mail.gmail.com> (raw)
In-Reply-To: <20220128154103.20752-3-Pierre.Gondois@arm.com>

On Fri, 28 Jan 2022 at 16:41, PierreGondois <pierre.gondois@arm.com> wrote:
>
> From: Pierre Gondois <Pierre.Gondois@arm.com>
>
> Parse the Pmu interrupts if a pmu compatible node is present,
> and populate the MADT GicC structure accordingly.
>
> Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
> ---
>
> Notes:
>     v3:
>      - New patch. [Pierre]
>
>  .../FdtHwInfoParserLib/Gic/ArmGicCParser.c    | 131 +++++++++++++++++-
>  .../FdtHwInfoParserLib/Gic/ArmGicCParser.h    |   8 +-
>  2 files changed, 135 insertions(+), 4 deletions(-)
>
> diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.c
> index b4e6729a4ab2..961607378449 100644
> --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.c
> +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.c
> @@ -1,13 +1,14 @@
>  /** @file
>    Arm Gic cpu parser.
>
> -  Copyright (c) 2021, ARM Limited. All rights reserved.<BR>
> +  Copyright (c) 2021 - 2022, Arm Limited. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
>
>    @par Reference(s):
>    - linux/Documentation/devicetree/bindings/arm/cpus.yaml
>    - linux/Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml
>    - linux/Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.yaml
> +  - linux/Documentation/devicetree/bindings/arm/pmu.yaml
>  **/
>
>  #include "FdtHwInfoParser.h"
> @@ -34,6 +35,21 @@ STATIC CONST COMPATIBILITY_INFO  CpuCompatibleInfo = {
>    CpuCompatibleStr
>  };
>
> +/** Pmu compatible strings.
> +
> +  Any other "compatible" value is not supported by this module.
> +*/
> +STATIC CONST COMPATIBILITY_STR  PmuCompatibleStr[] = {
> +  { "arm,armv8-pmuv3" }
> +};
> +
> +/** COMPATIBILITY_INFO structure for the PmuCompatibleStr.
> +*/
> +CONST COMPATIBILITY_INFO  PmuCompatibleInfo = {
> +  ARRAY_SIZE (PmuCompatibleStr),
> +  PmuCompatibleStr
> +};
> +
>  /** Parse a "cpu" node.
>
>    @param [in]  Fdt              Pointer to a Flattened Device Tree (Fdt).
> @@ -639,6 +655,110 @@ GicCv3IntcNodeParser (
>    return EFI_SUCCESS;
>  }
>
> +/** Parse a Pmu compatible node, extracting Pmu information.
> +
> +  This function modifies a CM_OBJ_DESCRIPTOR object.
> +  The following CM_ARM_GICC_INFO fields are patched:
> +    - PerformanceInterruptGsiv;
> +
> +  @param [in]       Fdt              Pointer to a Flattened Device Tree (Fdt).
> +  @param [in]       GicIntcNode      Offset of a Gic compatible
> +                                     interrupt-controller node.
> +  @param [in, out]  GicCCmObjDesc    The CM_ARM_GICC_INFO to patch.
> +
> +  @retval EFI_SUCCESS             The function completed successfully.
> +  @retval EFI_ABORTED             An error occurred.
> +  @retval EFI_INVALID_PARAMETER   Invalid parameter.
> +**/
> +STATIC
> +EFI_STATUS
> +EFIAPI
> +GicCPmuNodeParser (
> +  IN      CONST VOID               *Fdt,
> +  IN            INT32              GicIntcNode,
> +  IN  OUT       CM_OBJ_DESCRIPTOR  *GicCCmObjDesc
> +  )
> +{
> +  EFI_STATUS        Status;
> +  INT32             IntCells;
> +  INT32             PmuNode;
> +  UINT32            PmuNodeCount;
> +  UINT32            PmuIrq;
> +  UINT32            Index;
> +  CM_ARM_GICC_INFO  *GicCInfo;
> +  CONST UINT8       *Data;
> +  INT32             DataSize;
> +
> +  if (GicCCmObjDesc == NULL) {
> +    ASSERT (0);
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  GicCInfo = (CM_ARM_GICC_INFO *)GicCCmObjDesc->Data;
> +  PmuNode  = 0;
> +
> +  // Count the number of pmu nodes.
> +  Status = FdtCountCompatNodeInBranch (
> +             Fdt,
> +             0,
> +             &PmuCompatibleInfo,
> +             &PmuNodeCount
> +             );
> +  if (EFI_ERROR (Status)) {
> +    ASSERT (0);

If you use ASSERT_EFI_ERROR() here, you at least get the type of error
as DEBUG output, whereas ASSERT(0) does not give any context
whatsoever.

> +    return Status;
> +  }
> +
> +  if (PmuNodeCount == 0) {
> +    return EFI_NOT_FOUND;
> +  }
> +
> +  Status = FdtGetNextCompatNodeInBranch (
> +             Fdt,
> +             0,
> +             &PmuCompatibleInfo,
> +             &PmuNode
> +             );
> +  if (EFI_ERROR (Status)) {
> +    ASSERT (0);

Same here

> +    if (Status == EFI_NOT_FOUND) {
> +      // Should have found the node.
> +      Status = EFI_ABORTED;
> +    }
> +  }
> +
> +  // Get the number of cells used to encode an interrupt.
> +  Status = FdtGetInterruptCellsInfo (Fdt, GicIntcNode, &IntCells);
> +  if (EFI_ERROR (Status)) {
> +    ASSERT (0);

and here

> +    return Status;
> +  }
> +
> +  Data = fdt_getprop (Fdt, PmuNode, "interrupts", &DataSize);
> +  if ((Data == NULL) || (DataSize != (IntCells * sizeof (UINT32)))) {
> +    // If error or not 1 interrupt.
> +    ASSERT (0);
> +    return EFI_ABORTED;
> +  }
> +
> +  PmuIrq = FdtGetInterruptId ((CONST UINT32 *)Data);
> +
> +  // Only supports PPI 23 for now.
> +  // According to BSA 1.0 s3.6 PPI assignments, PMU IRQ ID is 23. A non BSA
> +  // compliant system may assign a different IRQ for the PMU, however this
> +  // is not implemented for now.
> +  if (PmuIrq != BSA_PMU_IRQ) {
> +    ASSERT (0);
> +    return EFI_ABORTED;
> +  }
> +
> +  for (Index = 0; Index < GicCCmObjDesc->Count; Index++) {
> +    GicCInfo[Index].PerformanceInterruptGsiv = PmuIrq;
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
>  /** CM_ARM_GICC_INFO parser function.
>
>    This parser expects FdtBranch to be the "\cpus" node node.
> @@ -649,7 +769,7 @@ GicCv3IntcNodeParser (
>      UINT32  AcpiProcessorUid;                 // {Populated}
>      UINT32  Flags;                            // {Populated}
>      UINT32  ParkingProtocolVersion;           // {default = 0}
> -    UINT32  PerformanceInterruptGsiv;         // {default = 0}
> +    UINT32  PerformanceInterruptGsiv;         // {Populated}
>      UINT64  ParkedAddress;                    // {default = 0}
>      UINT64  PhysicalBaseAddress;              // {Populated}
>      UINT64  GICV;                             // {Populated}
> @@ -764,6 +884,13 @@ ArmGicCInfoParser (
>      goto exit_handler;
>    }
>
> +  // Parse the Pmu Interrupt.
> +  Status = GicCPmuNodeParser (Fdt, IntcNode, NewCmObjDesc);
> +  if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {
> +    ASSERT (0);

and here

> +    goto exit_handler;

shouldn't this be CamelCase?

> +  }
> +
>    // Add all the CmObjs to the Configuration Manager.
>    Status = AddMultipleCmObj (FdtParserHandle, NewCmObjDesc, 0, NULL);
>    if (EFI_ERROR (Status)) {
> diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.h
> index 2a0f966bf0c2..fd980484a28d 100644
> --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.h
> +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.h
> @@ -1,7 +1,7 @@
>  /** @file
>    Arm Gic cpu parser.
>
> -  Copyright (c) 2021, ARM Limited. All rights reserved.<BR>
> +  Copyright (c) 2021 - 2022, Arm Limited. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
>
>    @par Reference(s):
> @@ -12,6 +12,10 @@
>  #ifndef ARM_GICC_PARSER_H_
>  #define ARM_GICC_PARSER_H_
>
> +/* According to BSA 1.0 s3.6 PPI assignments, PMU IRQ ID is 23.
> +*/
> +#define BSA_PMU_IRQ  23
> +
>  /** CM_ARM_GICC_INFO parser function.
>
>    This parser expects FdtBranch to be the "\cpus" node node.
> @@ -22,7 +26,7 @@
>      UINT32  AcpiProcessorUid;                 // {Populated}
>      UINT32  Flags;                            // {Populated}
>      UINT32  ParkingProtocolVersion;           // {default = 0}
> -    UINT32  PerformanceInterruptGsiv;         // {default = 0}
> +    UINT32  PerformanceInterruptGsiv;         // {Populated}
>      UINT64  ParkedAddress;                    // {default = 0}
>      UINT64  PhysicalBaseAddress;              // {Populated}
>      UINT64  GICV;                             // {Populated}
> --
> 2.25.1
>
>
>
> ------------
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#86169): https://edk2.groups.io/g/devel/message/86169
> Mute This Topic: https://groups.io/mt/88746969/1131722
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub [ardb@kernel.org]
> ------------
>
>

  reply	other threads:[~2022-01-29 15:33 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-28 15:40 [PATCH v3 0/8] Add ACPI support for Kvmtool PierreGondois
2022-01-28 15:40 ` [PATCH v3 1/8] DynamicTablesPkg: Print specifier macro for CM_OBJECT_ID PierreGondois
2022-01-28 15:40 ` [PATCH v3 2/8] DynamicTablesPkg: FdtHwInfoParserLib: Parse Pmu info PierreGondois
2022-01-29 15:33   ` Ard Biesheuvel [this message]
2022-01-28 15:40 ` [PATCH v3 3/8] DynamicTablesPkg: AcpiSsdtPcieLibArm: Fix _PRT description PierreGondois
2022-01-29 15:52   ` Ard Biesheuvel
2022-01-29 18:20     ` Marc Zyngier
2022-01-31 12:59       ` PierreGondois
2022-01-31 13:52         ` Marc Zyngier
2022-01-31 14:54           ` Ard Biesheuvel
2022-01-28 15:40 ` [PATCH v3 4/8] ArmVirtPkg: Add cspell exceptions PierreGondois
2022-01-28 15:41 ` [PATCH v3 5/8] ArmVirtPkg/Kvmtool: Add DSDT ACPI table PierreGondois
2022-01-31 15:17   ` [edk2-devel] " Rebecca Cran
2022-01-31 15:21     ` Sami Mujawar
2022-02-01 16:55       ` PierreGondois
2022-02-01 16:56         ` Ard Biesheuvel
2022-02-01 16:56           ` Ard Biesheuvel
2022-02-01 16:56           ` Ard Biesheuvel
2022-02-01 17:02             ` PierreGondois
2022-02-01 17:04               ` Ard Biesheuvel
2022-02-01 17:07                 ` PierreGondois
2022-01-28 15:41 ` [PATCH v3 6/8] ArmVirtPkg/Kvmtool: Add Configuration Manager PierreGondois
2022-01-28 15:41 ` [PATCH v3 7/8] ArmVirtPkg/Kvmtool: Enable ACPI support PierreGondois
2022-01-28 15:41 ` [PATCH v3 8/8] ArmVirtPkg/Kvmtool: Enable Acpiview PierreGondois

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAMj1kXH-aFtQ3ti2zx3g8CYJ8CizW6EDz=D6GAoOQVUFya95TQ@mail.gmail.com' \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox