From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com [40.107.92.92]) by mx.groups.io with SMTP id smtpd.web08.250.1623775714211599900 for ; Tue, 15 Jun 2021 09:48:34 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@os.amperecomputing.com header.s=selector2 header.b=NFxGidjD; spf=pass (domain: os.amperecomputing.com, ip: 40.107.92.92, mailfrom: nhi@os.amperecomputing.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GZbkT+HYCkqPvTQDBj1qYGqEqF4bsVyNMF6ooHklZik8Snr45v5SNI1rUUus8N2/E9vPVISM+xeof3arG2YH0t5rLhwkoy7bp6edsXXqUF5akPtVmFngBGEy1WyAJPRKhkVymbkBSlP3PSi5Ob3ais2Vi2S6FEc3d4MsR4ngub6Ds3KI0Ot151lEN0Y3of151WcXWpAMKEtGe+emNxCtf4O3IyyR6iv8XXjSTLBQYP4jj7yaOZfGvhXibcaHuFy341w1qNWWHexqmUqPCaxNzzvCPyO0CYb+1XuQVLeJEhRUg9JKbszCQi4dcE5iB22kGI3Owk2eW7A1bBfVI2ZyXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hE8ubf4k+7jVMf9H/YZ1xpRN/3e2UFQpPEIIF5PZphY=; b=S4RKR6EImpQeVvSHCK7fGQH0nawwYA/xenyo08C5CiJz/9+/N49HYN+CjIyFoSvQCh/frbvzsuyjQYpntRF23ANh1R9dpdfZtNtQBFUXqIHV31y0OOqqToMWjEvu2A/Z+2WAN/ef4FvwgyyjPFk6fibUa8nQSSykS1hTrnN9lBu1nuEHXKe0RWwakfHXl6gZK0PweMPwVgdnkjdm0T/8/7oqRyaRfG5N/tEUpksIO3rXFblzZoz8uOaJfdAy3gZ0rMSA827zroClU+/bpABk6CmI8IV+dem1jVFG4Mose4uzvIQMnmM7osbpuf00zEWMiavGuq00qjJnTayTyK+BAA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hE8ubf4k+7jVMf9H/YZ1xpRN/3e2UFQpPEIIF5PZphY=; b=NFxGidjDmwrgV05mLFNrAPyk8Ak2EYRB1A/erJ5KWbZTj/7C9GQhL/6XDcjb1LTQadZTqL5Vqqtz4bi53OK2jpY/gfe5138HuKeJ7TNfsZzeRdnpi03Hk69gIqwChda9yqs9ugdQ0uy7b5IMP7ECkWqgI/yfVmCFevYdgZviGdU= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=os.amperecomputing.com; Received: from DM6PR01MB5849.prod.exchangelabs.com (2603:10b6:5:205::20) by DM6PR01MB4732.prod.exchangelabs.com (2603:10b6:5:6d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.24; Tue, 15 Jun 2021 16:48:31 +0000 Received: from DM6PR01MB5849.prod.exchangelabs.com ([fe80::4d8d:74e3:6747:75a2]) by DM6PR01MB5849.prod.exchangelabs.com ([fe80::4d8d:74e3:6747:75a2%7]) with mapi id 15.20.4219.025; Tue, 15 Jun 2021 16:48:31 +0000 Subject: Re: [edk2-platforms][PATCH v2 08/32] AmpereAltraPkg: Add BootProgress support To: Leif Lindholm Cc: devel@edk2.groups.io, Quan Nguyen , Thang Nguyen , Chuong Tran , Phong Vo , Michael D Kinney , Ard Biesheuvel , Nate DeSimone References: <20210526100724.5359-1-nhi@os.amperecomputing.com> <20210526100724.5359-10-nhi@os.amperecomputing.com> <20210604232753.pc5gu5ggitiyqfqo@leviathan> From: "Nhi Pham" Message-ID: Date: Tue, 15 Jun 2021 23:48:21 +0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <20210604232753.pc5gu5ggitiyqfqo@leviathan> X-Originating-IP: [116.110.40.240] X-ClientProxiedBy: HK2PR06CA0021.apcprd06.prod.outlook.com (2603:1096:202:2e::33) To DM6PR01MB5849.prod.exchangelabs.com (2603:10b6:5:205::20) Return-Path: nhi@os.amperecomputing.com MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.1.7] (116.110.40.240) by HK2PR06CA0021.apcprd06.prod.outlook.com (2603:1096:202:2e::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.15 via Frontend Transport; Tue, 15 Jun 2021 16:48:28 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2c4aab1a-c8bd-4554-a6db-08d9301d682f X-MS-TrafficTypeDiagnostic: DM6PR01MB4732: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ISmtd/zcoV1nHGq+l46mjcuESPTwldzMcuix4K/SiHH1jzeFUX6/U1MWUrYuf1UF9t4AqOXWGCXDEiO2B4nEfzOSddq5jh3ec2tPCZIqDcBPUqC0aj5fnZN9eTMYrIzInldDFjvfaE7QUK9E2W4FVP1yk9z/23iMu4f8+f44TFqyC1QbIn7nSSkmVCcFup2qqI8d+GY42YM9tbrm6o1zq06LS0i+vDIEJ0gMD9nFMptaY/zwVLzKKyE3gK9ceOvp+oMMAUWt+ULKRI9Ghggy0gz2Fqk2DytTseAfK9zE/7SXxpUUoSBEAVxAzFI+0ptj3+iA//GtDbfoWVuItjwxQg0UplYR2NGZ/JpyQ/SLgC6XN/mtcFDes60JIeccwJk323oL0cXtUOS0OqPzUNUwYGrqNA6epEoGw1/0FTSsRMOM9mpjKsx6jXpVble8LMdfhgW5K5wD27Ip0u/SABpZAJzwUpakHNjoC9U0OZ6l9Ozw73YWYBzTShEOcaLmzcUn8KlnPdW3H5UCTMqGjUtRmyLUXx7xtFuVUN3smGh6a2aX+8RO6kPkyUb+592HJ3zPDStt1VkqBhPnV6te1aBNGZjrB5tsr79f0jCf/Ei1bA9n/vD6uRZQZuYFNgWuIuROo83dK+ImJR6c1xzpF24N8w7i3gP+ju9NGtv0x/RvvxUsk/5/w1FG9RxQ47MlHvxodRfdkbiXBWUo3cZ2oAgzwVS8F0yG8/5ZWCwMDbpmtfY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR01MB5849.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(396003)(39840400004)(366004)(376002)(346002)(86362001)(316002)(4326008)(8936002)(5660300002)(16576012)(66946007)(54906003)(83380400001)(31686004)(53546011)(66476007)(6666004)(66556008)(6916009)(30864003)(52116002)(16526019)(956004)(2616005)(8676002)(186003)(6486002)(478600001)(38350700002)(31696002)(38100700002)(2906002)(26005)(43740500002)(45980500001);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YnRYY1BBaVpkVk4rQ1dOZmNOWlcxQmFEWkw1Qk9yUnlJQWJrVEswVXpTWC95?= =?utf-8?B?N2JpdGRrRlhKT2s1MEI5LzMyZmo4OHc5TTQxUFhJR0xTZ1UwK3Y4WXk1MDFq?= =?utf-8?B?aWhqZ3ZUeHdRekc4YitnQUx0cG9tVFdZVkVhckJnT3gvSVp2dDlmWHd5aFQx?= =?utf-8?B?MVo5OEt2TDR3VSswL1VpZ2swUmJMNnhOMkVNeEJGbytBUURjVXdlb1VLQnIv?= =?utf-8?B?MXdOVzluSHplY05vSGdxRHFJckhmRUQ1OFBOZHYvbGcyK1ZBeUZmL3AvbzJz?= =?utf-8?B?RWM2SDdFWlJkeWJCQk5nb0hTcS9TSWVGZSszYjI4U1JuMEtmSnFISjk3RTlW?= =?utf-8?B?OTk5b0JGSVA5ZDVkZmhMMndZUTBzd3Z2RG4yczdteWR1clZ4azlzdHNBbTJV?= =?utf-8?B?WktWNTA1TWJYcjFJR3lSMU5SWXhRVGNWU1BtRzE3WG5TcGtaWXU4M0ovbkVE?= =?utf-8?B?bVo3Z3NxSkpDU1FRdXhTbGFVaVgweDkyR093QzIwUjZ0WjkrWUJkekFHOVVk?= =?utf-8?B?STl2WXlVaGdjTk1tOHFYVFcwSE8zVUxMM1hFMXNBb1lZd3J6K3NzcnB6dmN3?= =?utf-8?B?dkEwYVlkMTBJbmFjdm4yWHBvUTJ5VW03dDFWOEtUMTZVajRLRTdabFNYd1Bk?= =?utf-8?B?ZStSUVM1emZnM2JmWkxKUVVObzlPN1VTa3BtQ3MybWs4M1pjOGs4YUFjUEV0?= =?utf-8?B?QXZicnZWNG5VYmsxM085VzFxR0s5bTRPNSs3MUt3TitDM3FIbXFZejgzS3Az?= =?utf-8?B?RHNDNDloVVdhaVZJbFBISkltem1KbnBzejQ5VkRnVm16NmplTFhiV1VybXdY?= =?utf-8?B?S3JZNFpDQ29TMG5wNmlnY2Y4NDFLSHUyT2FoR3lSc0lqNktkdXZLcVZ5MlJl?= =?utf-8?B?NUZCVW5Ub0lQT0Z5U3VYeEZCWU1wQ3h3ZUR4cnY0bGx5OU0rYkk4YWc1NFJW?= =?utf-8?B?MzZTZDlacldySHVDRW1IRkw4ZjQ5VGZMRXp6ZVdSRVA0d2FiYk1LQ2hlazl5?= =?utf-8?B?OGVXMzY2cVljc3Fpa0hQU1BFOXl5L0pLeG5JNzlXeEVKTkVBMFRQTEwwWUx0?= =?utf-8?B?VmptRjZwSFAzR3hkOWR5c0dYS0xzNUE3dEM5TDJFMlBUZ3I4T2lMLzc3U1lD?= =?utf-8?B?bit6NG5BamM2dDlOL1NhUHl5ZlJ0NlFEVnNUKy8rT2t2bXdrVjkrNnVIUGJY?= =?utf-8?B?REJUR1grb3RoQWhVU0pab2hycFo4eG1WdENaYmk5UzBoUkJFY2tQUElkTWI5?= =?utf-8?B?SjE0eUFwdE81dmpEdVlQRXJlOXdibGtSVjFPMk1nY1pJeDdOSWV1TnZEMnRS?= =?utf-8?B?Und6S3JmVWFUbW1CS0FlV0hFZWFWQ3paaHZ6dGg2RXl6NkpyV0EvZ2ptTXQy?= =?utf-8?B?WVpOQmwwUmhaaE9mcmdUNkFyc0lURWY2em5TUzNYS0ZuMVIrWHljSGFtYzg3?= =?utf-8?B?QlVZTTFHNlh0ZloybnBSZWxVUDhnVGRaT3E4N1RVbFJNNVQxMlZGa2xxZy9o?= =?utf-8?B?c2ZiNE9udWVLZXNpblBNdzM0NXVNa2w5aUZVU0VFYXh3YldwUmR5cHVaU2hR?= =?utf-8?B?NmhBcm8vZ3lIQXRCOVBHck1SaGtPVWwxMS9Ed0VrMTVaOHhQcVdnSXQ0cjRm?= =?utf-8?B?NmV5SkhLTXI4a285TitxYmh3VUlqUlgxYkZqSDRiSWpLdDZVcE5lUm9EcWs5?= =?utf-8?B?OXJzN0x2dk8zZkZPUUtMZkRST2ZJS0tqdnYrN1JpUm1mbmRZd0lHMFQyNzR0?= =?utf-8?Q?fUmytk6MBE7rrSqyAs6+aZfecCuSS8L5f4l2/Dv?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2c4aab1a-c8bd-4554-a6db-08d9301d682f X-MS-Exchange-CrossTenant-AuthSource: DM6PR01MB5849.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2021 16:48:31.2942 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5zBZ+DdpBtdX1YxfJV9oZgnPhC14NqzHWjhTR7x6ZrAvd2nbY8XU1RwdGTslHUlr9egxCNkO1AdyqW7gfyYYSHFB80Y+p6XTVAScPqhjwGY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR01MB4732 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US On 6/5/21 06:27, Leif Lindholm wrote: > On Wed, May 26, 2021 at 17:07:00 +0700, Nhi Pham wrote: >> From: Quan Nguyen >> >> BootProgress will send 32-bit UEFI Status Code via doorbell to report >> its progress status. >> Currently support reporting Progress Status Code and Error Status Code >> only. Other types of Status Code are ignored. >> >> Cc: Thang Nguyen >> Cc: Chuong Tran >> Cc: Phong Vo >> Cc: Leif Lindholm >> Cc: Michael D Kinney >> Cc: Ard Biesheuvel >> Cc: Nate DeSimone >> >> Signed-off-by: Quan Nguyen > This looks like something that would be a good target to commonalise > between platforms in the future. But for now: Yes, I'm also interested in contributing this feature in the future as we need a standard mechanism for boot progress reporting. Best regards, Nhi > Reviewed-by: Leif Lindholm > > / > Leif > >> --- >> Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc | 2 + >> Platform/Ampere/JadePkg/Jade.fdf | 2 + >> Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.inf | 51 +++++ >> Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.inf | 49 +++++ >> Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.c | 211 ++++++++++++++++++++ >> Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.c | 210 +++++++++++++++++++ >> Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.uni | 16 ++ >> Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.uni | 18 ++ >> 8 files changed, 559 insertions(+) >> >> diff --git a/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc b/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc >> index 9f19f495fad2..9f75da6f05ad 100755 >> --- a/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc >> +++ b/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc >> @@ -529,6 +529,7 @@ [Components.common] >> } >> MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf >> MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf >> + Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.inf >> >> # >> # DXE Phase modules >> @@ -539,6 +540,7 @@ [Components.common] >> } >> MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf >> MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf >> + Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.inf >> >> # >> # PCD >> diff --git a/Platform/Ampere/JadePkg/Jade.fdf b/Platform/Ampere/JadePkg/Jade.fdf >> index 80a86d7c1156..1857296a8ea5 100755 >> --- a/Platform/Ampere/JadePkg/Jade.fdf >> +++ b/Platform/Ampere/JadePkg/Jade.fdf >> @@ -102,6 +102,7 @@ [FV.FVMAIN_COMPACT] >> INF Silicon/Ampere/AmpereAltraPkg/Drivers/ATFHobPei/ATFHobPeim.inf >> INF Silicon/Ampere/AmpereAltraPkg/Drivers/MemoryInitPeim/MemoryInitPeim.inf >> INF Silicon/Ampere/AmpereAltraPkg/Drivers/MmCommunicationPei/MmCommunicationPei.inf >> + INF Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.inf >> INF ArmPkg/Drivers/CpuPei/CpuPei.inf >> INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf >> INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf >> @@ -149,6 +150,7 @@ [FV.FvMain] >> INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf >> INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf >> INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf >> + INF Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.inf >> >> # >> # PI DXE Drivers producing Architectural Protocols (EFI Services) >> diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.inf b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.inf >> new file mode 100644 >> index 000000000000..2211a213a6df >> --- /dev/null >> +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.inf >> @@ -0,0 +1,51 @@ >> +## @file >> +# This module installs Boot Progress Dxe. >> +# >> +# This module registers report status code listener to report boot progress >> +# to SMpro. >> +# >> +# Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
>> +# >> +# SPDX-License-Identifier: BSD-2-Clause-Patent >> +# >> +## >> + >> +[Defines] >> + INF_VERSION = 0x0001001B >> + BASE_NAME = BootProgressDxe >> + MODULE_UNI_FILE = BootProgressDxe.uni >> + FILE_GUID = 6E12F248-F0C1-11EA-B37C-9798918A2163 >> + MODULE_TYPE = DXE_DRIVER >> + VERSION_STRING = 1.0 >> + ENTRY_POINT = BootProgressDxeEntryPoint >> + >> +# >> +# The following information is for reference only and not required by the build tools. >> +# >> +# VALID_ARCHITECTURES = AARCH64 >> +# >> + >> +[Sources] >> + BootProgressDxe.c >> + >> +[Packages] >> + MdeModulePkg/MdeModulePkg.dec >> + MdePkg/MdePkg.dec >> + Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec >> + >> +[LibraryClasses] >> + AmpereCpuLib >> + BaseLib >> + DebugLib >> + DxeServicesLib >> + SystemFirmwareInterfaceLib >> + UefiBootServicesTableLib >> + UefiDriverEntryPoint >> + UefiLib >> + UefiRuntimeServicesTableLib >> + >> +[Protocols] >> + gEfiRscHandlerProtocolGuid ## CONSUMES >> + >> +[Depex] >> + gEfiRscHandlerProtocolGuid >> diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.inf b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.inf >> new file mode 100644 >> index 000000000000..1dd0ec31ac37 >> --- /dev/null >> +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.inf >> @@ -0,0 +1,49 @@ >> +## @file >> +# Boot Progress Pei Module. >> +# >> +# Updates to SCP with Boot Progress information during boot. >> +# >> +# This module register report status code listener to collect boot progress >> +# information and keep SCP posted. >> +# >> +# Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
>> +# >> +# SPDX-License-Identifier: BSD-2-Clause-Patent >> +# >> +## >> + >> +[Defines] >> + INF_VERSION = 0x0001001B >> + BASE_NAME = BootProgressPeim >> + MODULE_UNI_FILE = BootProgressPeim.uni >> + FILE_GUID = 2E8A3B3E-F26C-11EA-BDE5-6726AD8F88BD >> + MODULE_TYPE = PEIM >> + VERSION_STRING = 1.0 >> + ENTRY_POINT = BootProgressPeiEntryPoint >> + >> +# >> +# The following information is for reference only and not required by the build tools. >> +# >> +# VALID_ARCHITECTURES = AARCH64 >> +# >> + >> +[Sources] >> + BootProgressPeim.c >> + >> +[Packages] >> + MdeModulePkg/MdeModulePkg.dec >> + MdePkg/MdePkg.dec >> + Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec >> + >> +[LibraryClasses] >> + BaseLib >> + DebugLib >> + PeiServicesLib >> + PeimEntryPoint >> + SystemFirmwareInterfaceLib >> + >> +[Ppis] >> + gEfiPeiRscHandlerPpiGuid ## CONSUMES >> + >> +[Depex] >> + gEfiPeiRscHandlerPpiGuid >> diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.c b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.c >> new file mode 100644 >> index 000000000000..f87a4d53179f >> --- /dev/null >> +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.c >> @@ -0,0 +1,211 @@ >> +/** @file >> + >> + This module installs Boot Progress Dxe that report boot progress to SMpro. >> + >> + This module registers report status code listener to report boot progress >> + to SMpro. >> + >> + Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
>> + >> + SPDX-License-Identifier: BSD-2-Clause-Patent >> + >> +**/ >> + >> +#include >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +typedef struct { >> + UINT8 Byte; >> + EFI_STATUS_CODE_VALUE Value; >> +} STATUS_CODE_TO_CHECKPOINT; >> + >> +enum BOOT_PROGRESS_STATE { >> + BOOT_NOTSTART = 0, >> + BOOT_START = 1, >> + BOOT_COMPLETE = 2, >> + BOOT_FAILED = 3, >> +}; >> + >> +UINT32 DxeProgressCode[] = { >> + (EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_ENTRY_POINT), // DXE Core is started >> + (EFI_COMPUTING_UNIT_CHIPSET | EFI_CHIPSET_PC_DXE_HB_INIT), // PCI host bridge initialization >> + (EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_HANDOFF_TO_NEXT), // Boot Device Selection (BDS) phase is started >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_BEGIN_CONNECTING_DRIVERS), // Driver connecting is started >> + (EFI_IO_BUS_PCI | EFI_IOB_PC_INIT), // PCI Bus initialization is started >> + (EFI_IO_BUS_PCI | EFI_IOB_PCI_HPC_INIT), // PCI Bus Hot Plug Controller Initialization >> + (EFI_IO_BUS_PCI | EFI_IOB_PCI_BUS_ENUM), // PCI Bus Enumeration >> + (EFI_IO_BUS_PCI | EFI_IOB_PCI_RES_ALLOC), // PCI Bus Request Resources >> + (EFI_IO_BUS_PCI | EFI_IOB_PC_ENABLE), // PCI Bus Assign Resources >> + (EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_PC_INIT), // Console Output devices connect >> + (EFI_PERIPHERAL_KEYBOARD | EFI_P_PC_INIT), // Console input devices connect >> + (EFI_IO_BUS_LPC | EFI_IOB_PC_INIT), // Super IO Initialization >> + (EFI_IO_BUS_USB | EFI_IOB_PC_INIT), // USB initialization is started >> + (EFI_IO_BUS_USB | EFI_IOB_PC_RESET), // USB Reset >> + (EFI_IO_BUS_USB | EFI_IOB_PC_DETECT), // USB Detect >> + (EFI_IO_BUS_USB | EFI_IOB_PC_ENABLE), // USB Enable >> + (EFI_IO_BUS_SCSI | EFI_IOB_PC_INIT), // SCSI initialization is started >> + (EFI_IO_BUS_SCSI | EFI_IOB_PC_RESET), // SCSI Reset >> + (EFI_IO_BUS_SCSI | EFI_IOB_PC_DETECT), // SCSI Detect >> + (EFI_IO_BUS_SCSI | EFI_IOB_PC_ENABLE), // SCSI Enable >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_VERIFYING_PASSWORD), // Setup Verifying Password >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_USER_SETUP), // Start of Setup >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_INPUT_WAIT), // Setup Input Wait >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT), // Ready To Boot event >> + (EFI_SOFTWARE_EFI_BOOT_SERVICE | EFI_SW_BS_PC_EXIT_BOOT_SERVICES), // Exit Boot Services event >> + (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_RS_PC_SET_VIRTUAL_ADDRESS_MAP), // Runtime Set Virtual Address MAP Begin >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_VIRTUAL_ADDRESS_CHANGE_EVENT), // Runtime Set Virtual Address MAP End >> + (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_RS_PC_RESET_SYSTEM), // System Reset >> + (EFI_IO_BUS_USB | EFI_IOB_PC_HOTPLUG), // USB hot plug >> + (EFI_IO_BUS_PCI | EFI_IOB_PC_HOTPLUG), // PCI bus hot plug >> + 0 // Must ended by 0 >> +}; >> + >> +UINT32 DxeErrorCode[] = { >> + (EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_EC_NO_ARCH), // Some of the Architectural Protocols are not available >> + (EFI_IO_BUS_PCI | EFI_IOB_EC_RESOURCE_CONFLICT), // PCI resource allocation error. Out of Resources >> + (EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_NOT_DETECTED), // No Console Output Devices are found >> + (EFI_PERIPHERAL_KEYBOARD | EFI_P_EC_NOT_DETECTED), // No Console Input Devices are found >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_INVALID_PASSWORD), // Invalid password >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_LOAD_ERROR), // Error loading Boot Option (LoadImage returned error) >> + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_FAILED), // Boot Option is failed (StartImage returned error) >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_UPDATE_FAIL), // Flash update is failed >> + (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_PS_EC_RESET_NOT_AVAILABLE), // Reset protocol is not available >> + 0 // Must end by 0 >> +}; >> + >> +EFI_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL; >> + >> +STATIC UINT8 mBootstate = BOOT_START; >> + >> +STATIC >> +BOOLEAN >> +StatusCodeFilter ( >> + UINT32 *Map, >> + EFI_STATUS_CODE_VALUE Value >> + ) >> +{ >> + UINTN Index = 0; >> + >> + while (Map[Index] != 0) { >> + if (Map[Index] == Value) { >> + return TRUE; >> + } >> + Index++; >> + } >> + return FALSE; >> +} >> + >> +/** >> + Report status code listener of Boot Progress Dxe. >> + >> + @param[in] CodeType Indicates the type of status code being reported. >> + @param[in] Value Describes the current status of a hardware or software entity. >> + This included information about the class and subclass that is used to >> + classify the entity as well as an operation. >> + @param[in] Instance The enumeration of a hardware or software entity within >> + the system. Valid instance numbers start with 1. >> + @param[in] CallerId This optional parameter may be used to identify the caller. >> + This parameter allows the status code driver to apply different rules to >> + different callers. >> + @param[in] Data This optional parameter may be used to pass additional data. >> + >> + @retval EFI_SUCCESS Status code is what we expected. >> + @retval EFI_UNSUPPORTED Status code not supported. >> + >> +**/ >> +EFI_STATUS >> +EFIAPI >> +BootProgressListenerDxe ( >> + IN EFI_STATUS_CODE_TYPE CodeType, >> + IN EFI_STATUS_CODE_VALUE Value, >> + IN UINT32 Instance, >> + IN EFI_GUID *CallerId, >> + IN EFI_STATUS_CODE_DATA *Data >> + ) >> +{ >> + BOOLEAN IsProgress = FALSE; >> + BOOLEAN IsError = FALSE; >> + >> + if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) { >> + IsProgress = StatusCodeFilter (DxeProgressCode, Value); >> + } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) { >> + IsError = StatusCodeFilter (DxeErrorCode, Value); >> + } else { >> + return EFI_SUCCESS; >> + } >> + >> + if (!IsProgress && !IsError) { >> + return EFI_SUCCESS; >> + } >> + >> + DEBUG (( >> + DEBUG_INFO, >> + "BootProgressDxe: CodeType=0x%X Value=0x%X Instance=0x%X CallerIdGuid=%g Data=%p\n", >> + CodeType, >> + Value, >> + Instance, >> + CallerId, >> + Data >> + )); >> + >> + if (IsError) { >> + mBootstate = BOOT_FAILED; >> + } else if (Value == (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT)) { >> + /* Set boot complete when reach to ReadyToBoot event */ >> + mBootstate = BOOT_COMPLETE; >> + } >> + >> + MailboxMsgSetBootProgress (0, mBootstate, Value); >> + >> + if (Value == (EFI_SOFTWARE_EFI_BOOT_SERVICE | EFI_SW_BS_PC_EXIT_BOOT_SERVICES) && >> + mRscHandlerProtocol != NULL) >> + { >> + mRscHandlerProtocol->Unregister (BootProgressListenerDxe); >> + } >> + >> + return EFI_SUCCESS; >> +} >> + >> + >> +/** >> + The module Entry Point of the Firmware Performance Data Table DXE driver. >> + >> + @param[in] ImageHandle The firmware allocated handle for the EFI image. >> + @param[in] SystemTable A pointer to the EFI System Table. >> + >> + @retval EFI_SUCCESS The entry point is executed successfully. >> + @retval Other Some error occurs when executing this entry point. >> + >> +**/ >> +EFI_STATUS >> +EFIAPI >> +BootProgressDxeEntryPoint ( >> + IN EFI_HANDLE ImageHandle, >> + IN EFI_SYSTEM_TABLE *SystemTable >> + ) >> +{ >> + EFI_STATUS Status; >> + >> + // >> + // Get Report Status Code Handler Protocol. >> + // >> + Status = gBS->LocateProtocol (&gEfiRscHandlerProtocolGuid, NULL, (VOID **)&mRscHandlerProtocol); >> + ASSERT_EFI_ERROR (Status); >> + >> + // >> + // Register report status code listener for OS Loader load and start. >> + // >> + if (!EFI_ERROR (Status)) { >> + Status = mRscHandlerProtocol->Register (BootProgressListenerDxe, TPL_HIGH_LEVEL); >> + } >> + ASSERT_EFI_ERROR (Status); >> + >> + return EFI_SUCCESS; >> +} >> diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.c b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.c >> new file mode 100644 >> index 000000000000..c677e27a00ce >> --- /dev/null >> +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.c >> @@ -0,0 +1,210 @@ >> +/** @file >> + >> + This module installs Boot Progress Pei to report boot progress to SMpro. >> + >> + This module registers report status code listener to report boot progress >> + to SMpro. >> + >> + Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
>> + >> + SPDX-License-Identifier: BSD-2-Clause-Patent >> + >> +**/ >> + >> +#include >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +enum BOOT_PROGRESS_STATE { >> + BOOT_NOTSTART = 0, >> + BOOT_START = 1, >> + BOOT_COMPLETE = 2, >> + BOOT_FAILED = 3, >> +}; >> + >> +UINT32 PeiProgressStatusCode[] = { >> + // Regular boot >> + (EFI_SOFTWARE_PEI_CORE | EFI_SW_PEI_CORE_PC_ENTRY_POINT), // PEI Core is started >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_POWER_ON_INIT), // Pre-memory CPU initialization is started >> + (EFI_SOFTWARE_PEI_SERVICE | EFI_SW_PS_PC_INSTALL_PEI_MEMORY), // Memory Installed >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_PC_INIT_BEGIN), // CPU post-memory initialization is started >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_CACHE_INIT), // CPU post-memory initialization. Cache initialization >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_AP_INIT), // CPU post-memory initialization. Application Processor(s) (AP) initialization >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_BSP_SELECT), // CPU post-memory initialization. Boot Strap Processor (BSP) selection >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_SMM_INIT), // CPU post-memory initialization. System Management Mode (SMM) initialization >> + // DXE IPL is started >> + (EFI_SOFTWARE_PEI_CORE | EFI_SW_PEI_CORE_PC_HANDOFF_TO_NEXT), // DXE IPL is started >> + // DXE Core is started >> + (EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_ENTRY_POINT), // DXE Core is started >> + // Recovery >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_RECOVERY_AUTO), // Recovery condition triggered by firmware (Auto recovery) >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_RECOVERY_USER), // Recovery condition triggered by user (Forced recovery) >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_RECOVERY_BEGIN), // Recovery process started >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_CAPSULE_LOAD), // Recovery firmware image is found >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_CAPSULE_START), // Recovery firmware image is loaded >> + // S3 >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_S3_BOOT_SCRIPT), // S3 Boot Script execution >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_OS_WAKE), // OS S3 wake vector call >> + 0 // Must end with 0 >> +}; >> + >> +UINT32 PeiErrorStatusCode[] = { >> + // Regular boot >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_INVALID_TYPE), // Memory initialization error. Invalid memory type >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_INVALID_SPEED), // Memory initialization error. Incompatible memory speed >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_SPD_FAIL), // Memory initialization error. SPD reading has failed >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_INVALID_SIZE), // Memory initialization error. Invalid memory size >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_MISMATCH), // Memory initialization error. Memory modules do not match >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_NONE_DETECTED), // Memory initialization error. No usable memory detected >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_NONE_USEFUL), // Memory initialization error. No usable memory detected >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_EC_NON_SPECIFIC), // Unspecified memory initialization error. >> + (EFI_SOFTWARE_PEI_CORE | EFI_SW_PEI_CORE_EC_MEMORY_NOT_INSTALLED), // Memory not installed >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_INVALID_TYPE), // Invalid CPU type >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_INVALID_SPEED), // Invalid CPU Speed >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_MISMATCH), // CPU mismatch >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_SELF_TEST), // CPU self test failed >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_CACHE), // possible CPU cache error >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_INTERNAL), // Internal CPU error >> + (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_EC_NON_SPECIFIC), // Internal CPU error >> + (EFI_SOFTWARE_PEI_SERVICE | EFI_SW_PS_EC_RESET_NOT_AVAILABLE), // reset PPI is not available >> + // Recovery >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_RECOVERY_PPI_NOT_FOUND), // Recovery PPI is not available >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_NO_RECOVERY_CAPSULE), // Recovery capsule is not found >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_INVALID_CAPSULE_DESCRIPTOR), // Invalid recovery capsule >> + // S3 Resume >> + (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_S3_RESUME_FAIL), // S3 Resume Failed >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_S3_RESUME_PPI_NOT_FOUND), // S3 Resume PPI not found >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_S3_BOOT_SCRIPT_ERROR), // S3 Resume Boot Script Error >> + (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_S3_OS_WAKE_ERROR), // S3 OS Wake Error >> + 0 >> +}; >> + >> +// Should always be BOOT_START when start >> +STATIC UINT8 mBootstate = BOOT_START; >> + >> +STATIC >> +BOOLEAN >> +StatusCodeFilter ( >> + UINT32 *Map, >> + EFI_STATUS_CODE_VALUE Value >> + ) >> +{ >> + UINTN Index = 0; >> + >> + while (Map[Index] != 0) { >> + if (Map[Index] == Value) { >> + return TRUE; >> + } >> + Index++; >> + } >> + >> + return FALSE; >> +} >> + >> +/** >> + Report status code listener for PEI. This is used to record the boot progress info >> + and report it to SMpro. >> + >> + @param[in] PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation. >> + @param[in] CodeType Indicates the type of status code being reported. >> + @param[in] Value Describes the current status of a hardware or software entity. >> + This included information about the class and subclass that is used to >> + classify the entity as well as an operation. >> + @param[in] Instance The enumeration of a hardware or software entity within >> + the system. Valid instance numbers start with 1. >> + @param[in] CallerId This optional parameter may be used to identify the caller. >> + This parameter allows the status code driver to apply different rules to >> + different callers. >> + @param[in] Data This optional parameter may be used to pass additional data. >> + >> + @retval EFI_SUCCESS Status code is what we expected. >> + @retval EFI_UNSUPPORTED Status code not supported. >> + >> +**/ >> +EFI_STATUS >> +EFIAPI >> +BootProgressListenerPei ( >> + IN CONST EFI_PEI_SERVICES **PeiServices, >> + IN EFI_STATUS_CODE_TYPE CodeType, >> + IN EFI_STATUS_CODE_VALUE Value, >> + IN UINT32 Instance, >> + IN CONST EFI_GUID *CallerId, >> + IN CONST EFI_STATUS_CODE_DATA *Data >> + ) >> +{ >> + BOOLEAN IsProgress = FALSE; >> + BOOLEAN IsError = FALSE; >> + >> + if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) { >> + IsProgress = StatusCodeFilter (PeiProgressStatusCode, Value); >> + } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) { >> + IsError = StatusCodeFilter (PeiErrorStatusCode, Value); >> + } else { >> + return EFI_SUCCESS; >> + } >> + >> + // No interested status found >> + if (!IsProgress && !IsError) { >> + return EFI_SUCCESS; >> + } >> + >> + DEBUG (( >> + DEBUG_INFO, >> + "BootProgressPeim: CodeType=0x%X Value=0x%X Instance=0x%X CallerIdGuid=%g Data=%p\n", >> + CodeType, >> + Value, >> + Instance, >> + CallerId, >> + Data >> + )); >> + >> + if (IsError) { >> + mBootstate = BOOT_FAILED; >> + } >> + >> + MailboxMsgSetBootProgress (0, mBootstate, Value); >> + >> + return EFI_SUCCESS; >> +} >> + >> +/** >> + Main entry for Boot Progress PEIM. >> + >> + This routine is to register report status code listener for Boot Progress PEIM. >> + >> + @param[in] FileHandle Handle of the file being invoked. >> + @param[in] PeiServices Pointer to PEI Services table. >> + >> + @retval EFI_SUCCESS Report status code listener is registered successfully. >> + >> +**/ >> +EFI_STATUS >> +EFIAPI >> +BootProgressPeiEntryPoint ( >> + IN EFI_PEI_FILE_HANDLE FileHandle, >> + IN CONST EFI_PEI_SERVICES **PeiServices >> + ) >> +{ >> + EFI_STATUS Status; >> + EFI_PEI_RSC_HANDLER_PPI *RscHandler; >> + >> + Status = PeiServicesLocatePpi ( >> + &gEfiPeiRscHandlerPpiGuid, >> + 0, >> + NULL, >> + (VOID **)&RscHandler >> + ); >> + ASSERT_EFI_ERROR (Status); >> + >> + if (!EFI_ERROR (Status)) { >> + Status = RscHandler->Register (BootProgressListenerPei); >> + } >> + ASSERT_EFI_ERROR (Status); >> + >> + return EFI_SUCCESS; >> +} >> diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.uni b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.uni >> new file mode 100644 >> index 000000000000..492e85404631 >> --- /dev/null >> +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressDxe/BootProgressDxe.uni >> @@ -0,0 +1,16 @@ >> +// >> +// This module installs Boot Progress Dxe that report boot progress to SMpro. >> +// >> +// This module registers report status code listener to report boot progress >> +// for SMpro. >> +// >> +// Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
>> +// >> +// SPDX-License-Identifier: BSD-2-Clause-Patent >> +// >> +// >> + >> + >> +#string STR_MODULE_ABSTRACT #language en-US "Installs Boot Progress Driver" >> + >> +#string STR_MODULE_DESCRIPTION #language en-US "This module registers report status code listener to collect and report boot progress to SMpro." >> diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.uni b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.uni >> new file mode 100644 >> index 000000000000..0371fc4f9a80 >> --- /dev/null >> +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/BootProgress/BootProgressPeim/BootProgressPeim.uni >> @@ -0,0 +1,18 @@ >> +// >> +// Boot Progress Pei Module. >> +// >> +// Updates to SCP with Boot Progress information during boot >> +// >> +// This module register report status code listener to collect boot progress >> +// information and keep SCP posted. >> +// >> +// Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
>> +// >> +// SPDX-License-Identifier: BSD-2-Clause-Patent >> +// >> +// >> + >> + >> +#string STR_MODULE_ABSTRACT #language en-US "Boot Progress Pei Module." >> + >> +#string STR_MODULE_DESCRIPTION #language en-US "Updates SCP with boot progress information during boot. This module register report status code listener to collect boot progress information and post to SCP." >> -- >> 2.17.1 >>