From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web09.7286.1646740533317725953 for ; Tue, 08 Mar 2022 03:55:33 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: rohit.mathew@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E824DD6E; Tue, 8 Mar 2022 03:55:32 -0800 (PST) Received: from usa.arm.com (unknown [10.57.71.120]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 4A27F3FA5D; Tue, 8 Mar 2022 03:55:32 -0800 (PST) From: rohit.mathew@arm.com To: devel@edk2.groups.io Cc: Ard Biesheuvel , Sami Mujawar Subject: [edk2-platforms][PATCH V1 1/1] ArmPlatformPkg/PrePeiCore: Explicitly invoke constructor for SEC phase Date: Tue, 8 Mar 2022 11:55:25 +0000 Message-Id: <20220308115525.30481-1-rohit.mathew@arm.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable PrePeiCore's CEntry function calls DebugLib library's print API before the library is initialized. So, invoke the constructor in the SEC phase to call into initialization functions associated with libraries linked with this particular module. This change is essential to initialize uart for SEC. Signed-off-by: Rohit Mathew --- ArmPlatformPkg/PrePeiCore/PrePeiCore.h | 11 ++++++++++- ArmPlatformPkg/PrePeiCore/PrePeiCore.c | 9 +++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) Link to github branch with the patches in this series - https://github.com/rohit-arm/edk2/tree/sec_constructor_issue diff --git a/ArmPlatformPkg/PrePeiCore/PrePeiCore.h b/ArmPlatformPkg/PreP= eiCore/PrePeiCore.h index 0345dd7bdd2a..d2491aa586ee 100644 --- a/ArmPlatformPkg/PrePeiCore/PrePeiCore.h +++ b/ArmPlatformPkg/PrePeiCore/PrePeiCore.h @@ -1,7 +1,7 @@ /** @file Main file supporting the transition to PEI Core in Normal World for Ve= rsatile Express =20 - Copyright (c) 2011, ARM Limited. All rights reserved. + Copyright (c) 2011-2022, ARM Limited. All rights reserved. =20 SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -73,4 +73,13 @@ PeiCommonExceptionEntry ( IN UINTN LR ); =20 +/* + * Constructor for SEC phase + */ +VOID +EFIAPI +ProcessLibraryConstructorList ( + VOID + ); + #endif diff --git a/ArmPlatformPkg/PrePeiCore/PrePeiCore.c b/ArmPlatformPkg/PreP= eiCore/PrePeiCore.c index 6dd9bcdea24f..b5f7d2f05b1e 100644 --- a/ArmPlatformPkg/PrePeiCore/PrePeiCore.c +++ b/ArmPlatformPkg/PrePeiCore/PrePeiCore.c @@ -1,7 +1,7 @@ /** @file Main file supporting the transition to PEI Core in Normal World for Ve= rsatile Express =20 - Copyright (c) 2011-2014, ARM Limited. All rights reserved. + Copyright (c) 2011-2022, ARM Limited. All rights reserved. =20 SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -86,7 +86,12 @@ CEntryPoint ( ArmEnableVFP (); } =20 - // Note: The MMU will be enabled by MemoryPeim. Only the primary core = will have the MMU on. + // In the Sec phase, explicitly invoke the library constructors. This = helps + // the DebugPrint library to be initialized before it is used by subse= quent + // code executed in the sec phase. + ProcessLibraryConstructorList(); + + //Note: The MMU will be enabled by MemoryPeim. Only the primary core w= ill have the MMU on. =20 // If not primary Jump to Secondary Main if (ArmPlatformIsPrimaryCore (MpId)) { --=20 2.25.1