[edk2-devel] [PATCH v0] Platform/NXP: Add Dynamic Acpi for layerscape platforms

Sami Mujawar sami.mujawar at arm.com
Tue Jan 19 14:37:33 UTC 2021


Hi Leif,

Please find my response inline marked [SAMI].

Regards,

Sami Mujawar

-----Original Message-----
From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Leif Lindholm via groups.io
Sent: 18 January 2021 04:56 PM
To: Vikas Singh <vikas.singh at puresoftware.com>
Cc: devel at edk2.groups.io; Sami Mujawar <Sami.Mujawar at arm.com>; Meenakshi Aggarwal (meenakshi.aggarwal at nxp.com) <meenakshi.aggarwal at nxp.com>; Paul Yang <Paul.Yang at arm.com>; Augustine Philips <Augustine.Philips at arm.com>; Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud at arm.com>; V Sethi (v.sethi at nxp.com) <v.sethi at nxp.com>; arokia.samy <arokia.samy at puresoftware.com>; Kuldip Dwivedi <kuldip.dwivedi at puresoftware.com>; Ard Biesheuvel <Ard.Biesheuvel at arm.com>; Vikas Singh <vikas.singh at nxp.com>
Subject: Re: [edk2-devel] [PATCH v0] Platform/NXP: Add Dynamic Acpi for layerscape platforms

+Sami,

On Sat, Jan 16, 2021 at 10:15:41 +0530, Vikas Singh wrote:
> On Sun, Jan 10, 2021 at 8:56 AM Leif Lindholm <leif at nuviainc.com> wrote:
> >
> > On Tue, Dec 29, 2020 at 12:55:58 +0530, Vikas Singh wrote:
> > > These changes intend to add
> >
> > Hopefully they actually do.
> >
> > > - Common Configuration Manager (CM) for all fsl platforms.
> > > - Platform headers consumed by CM for LX2160ARDB.
> > > - Clk dsdt properties for LX2160ARDB.
> >
> > This sounds like (at least) three patches.
> >
> Leif, I plan to disintegrate the complete changes into 2 patch set's
> and will be sharing this series early next week.
> set1: Add Common Configuration Manager (CM) for all fsl platforms and
> headers consumed by CM for LX2160ARDB.
> set2: Add platform specific DSDT generator and Clk dsdt properties for
> LX2160ARDB.

This sounds sensible.

> > >
> > > Signed-off-by: Vikas Singh <vikas.singh at puresoftware.com>
> > > ---
> > >  .../ConfigurationManager/ConfigurationManager.dec  |  24 +
> > >  .../ConfigurationManager.dsc.inc                   |  21 +
> > >  .../ConfigurationManagerDxe/ConfigurationManager.c | 709 +++++++++++++++++++++
> > >  .../ConfigurationManagerDxe/ConfigurationManager.h | 229 +++++++
> > >  .../ConfigurationManagerDxe.inf                    |  52 ++
> > >  .../Include/PlatformAcpiTableGenerator.h           |  20 +
> > >  Platform/NXP/Env.cshrc                             |  73 +++
> > >  .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl   |  40 ++
> > >  .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl  |  15 +
> > >  .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf      |  39 ++
> > >  .../PlatformAcpiDsdtLib/RawDsdtGenerator.c         | 146 +++++
> > >  .../AcpiTablesInclude/PlatformAcpiLib.h            |  24 +
> > >  Platform/NXP/LX2160aRdbPkg/Include/Platform.h      | 244 +++++++
> > >  Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec       |   6 +-
> > >  Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc       |  30 +
> > >  Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf       |  12 +
> > >  Platform/NXP/build.sh                              | 121 ++++
> > >  17 files changed, 1804 insertions(+), 1 deletion(-)
> > >  create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManager.dec
> > >  create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManager.dsc.inc
> > >  create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c
> > >  create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h
> > >  create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf
> > >  create mode 100644 Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGenerator.h
> > >  create mode 100755 Platform/NXP/Env.cshrc
> > >  create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl
> > >  create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl
> > >  create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf
> > >  create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c
> > >  create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h
> > >  create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h
> > >  create mode 100755 Platform/NXP/build.sh
> > >

> > > diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h
> > > new file mode 100644
> > > index 0000000..cf09ef9
> > > --- /dev/null
> > > +++ b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h
> > > @@ -0,0 +1,229 @@
> > > +/** @file
> > > +  Configuration Manager headers
> > > +
> > > +  Copyright 2020 NXP
> > > +  Copyright 2020 Puresoftware Ltd
> > > +
> > > +  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > +
> > > +  @par Glossary:
> > > +    - Cm or CM   - Configuration Manager
> > > +    - Obj or OBJ - Object
> > > +**/
> > > +
> > > +#ifndef CONFIGURATION_MANAGER_H__
> > > +#define CONFIGURATION_MANAGER_H__
> > > +
> > > +#include <Platform.h>
> > > +#include <PlatformAcpiTableGenerator.h>
> > > +
> > > +/** The configuration manager version
> > > +*/
> > > +#define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (0, 0)
> > > +
> > > +/** The OEM ID
> > > +*/
> > > +#define CFG_MGR_OEM_ID    { 'N', 'X', 'P', ' ', ' ', ' ' }
> > > +
> > > +/** A helper macro for populating the GIC CPU information
> > > + */
> > > +#define GICC_ENTRY(                                                   \
> > > +    CPUInterfaceNumber,                                               \
> > > +    Mpidr,                                                            \
> > > +    PmuIrq,                                                           \
> > > +    VGicIrq,                                                          \
> > > +    EnergyEfficiency                                                  \
> > > +    ) {                                                               \
> > > +  CPUInterfaceNumber,       /* UINT32  CPUInterfaceNumber         */  \
> > > +  CPUInterfaceNumber,       /* UINT32  AcpiProcessorUid           */  \
> > > +  EFI_ACPI_6_2_GIC_ENABLED, /* UINT32  Flags                      */  \
> > > +  0,                        /* UINT32  ParkingProtocolVersion     */  \
> > > +  PmuIrq,                   /* UINT32  PerformanceInterruptGsiv   */  \
> > > +  0,                        /* UINT64  ParkedAddress              */  \
> > > +  GICC_BASE,                /* UINT64  PhysicalBaseAddress        */  \
> > > +  GICV_BASE,                /* UINT64  GICV                       */  \
> > > +  GICH_BASE,                /* UINT64  GICH                       */  \
> > > +  VGicIrq,                  /* UINT32  VGICMaintenanceInterrupt   */  \
> > > +  0,                        /* UINT64  GICRBaseAddress            */  \
> > > +  Mpidr,                    /* UINT64  MPIDR                      */  \
> > > +  EnergyEfficiency          /* UINT8   ProcessorPowerEfficiency   */  \
> > > +}
> > > +
> > > +/** A helper macro for returning configuration manager objects
> > > +*/
> > > +#define HANDLE_CM_OBJECT(ObjId, CmObjectId, Object, ObjectCount)      \
> > > +  case ObjId: {                                                       \
> > > +    CmObject->ObjectId = CmObjectId;                                  \
> > > +    CmObject->Size = sizeof (Object);                                 \
> > > +    CmObject->Data = (VOID*)&Object;                                  \
> > > +    CmObject->Count = ObjectCount;                                    \
> > > +    DEBUG ((                                                          \
> > > +      DEBUG_INFO,                                                     \
> > > +      #CmObjectId ": Ptr = 0x%p, Size = %d, Count = %d\n",            \
> > > +      CmObject->Data,                                                 \
> > > +      CmObject->Size,                                                 \
> > > +      CmObject->Count                                                 \
> > > +      ));                                                             \
> > > +    break;                                                            \
> > > +  }
> >
> > This is code obfuscation. Please don't invent your own programming
> > languages. In C, the case, the start bracket, the break and the end
> > bracket always go inline.
> > The rest would be better as a static helper function than a macro.
> >
> Leif, changes are in accordance with :
> https://raw.githubusercontent.com/tianocore-docs/Docs/master/Specifications/CCS_2_1_Draft.pdf

Do you mean 5.5.2.1:
Functional macros are generally discouraged.
?

> and in reference to :
> https://github.com/tianocore/edk2-platforms/blob/master/Platform/ARM/JunoPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h#L94

Clearly I was asleep at the wheel when reviewing that set.

So let me state unambiguously:
Hiding *gotos* away in a header macro turns the language into
something other than C.

Sami: please rewrite the referenced code in a way that does not
obfuscate the program flow.
[SAMI] I will submit a patch that removes the macros and uses static functions. 
[/SAMI]

Vikas: please submit a v2 that does not obfuscate the program flow.

> > > +/** The number of ACPI tables to install
> > > +*/
> > > +#define PLAT_ACPI_TABLE_COUNT   6
> >
> > This feels suboptimal.
> > Could this be calculated at run- or compile time?
> >
> Leif, I plan to chnage like this : PLAT_ACPI_TABLE_COUNT =
> CM_MANDATORY_TBLS + OEM_ACPI_TBLS
> Here CM_MANDATORY_TBLS must be known to CM upfront and is fixed as per
> thr CM's implementation (min tables needed to boot any os).
> OEM_ACPI_TBLS should be coming form platforms headers only.
> Unfortunately this can not be done at runtime /compile time.

OK. This is still an improvement over direct hard-coding.

> > > diff --git a/Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGenerator.h b/Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGenerator.h
> > > new file mode 100644
> > > index 0000000..da3c571
> > > --- /dev/null
> > > +++ b/Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGenerator.h
> > > @@ -0,0 +1,20 @@
> > > +/** @file
> > > +  Acpi Table generator headers
> > > +
> > > +  Copyright 2020 NXP
> > > +  Copyright 2020 Puresoftware Ltd
> > > +
> > > +  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > +
> > > +**/
> > > +
> > > +#ifndef PLATFORM_ACPI_TABLE_GENERATOR_H_
> > > +#define PLATFORM_ACPI_TABLE_GENERATOR_H_
> > > +
> > > +typedef enum PlatAcpiTableId {
> > > +  EPlatAcpiTableIdReserved = 0x0000,             ///< Reserved
> > > +  EPlatAcpiTableIdDsdt,
> > > +  EPlatAcpiTableIdMax
> > > +} EPLAT_ACPI_TABLE_ID;
> >
> > Where does the EPlat prefix come from? What does it stand for?
> >
> Leif, this will be corrected.
> e.g: EPlatAcpiTableIdReserved -> PlatAcpiTableIdReserved
> These Id's will be used by OEM/platforms defined generators etc.

Makes sense.

> > > +
> > > +#endif

Best Regards,

Leif








-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#70545): https://edk2.groups.io/g/devel/message/70545
Mute This Topic: https://groups.io/mt/79415929/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list