From nobody Sat May 18 19:48:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+105266+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+105266+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1684944218170396.44410559955645; Wed, 24 May 2023 09:03:38 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id niyMYY1788612xXVxMgKwLiw; Wed, 24 May 2023 09:03:37 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.124]) by mx.groups.io with SMTP id smtpd.web11.1182.1684888862967790625 for ; Tue, 23 May 2023 17:41:03 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ER3jpYRxASklb0r2F7GqyUHG1EnfhCx2+pHTOFjug5Qn+MlU4jCe4QbfL3KsxAJJd4J2eKpitDph8stnHh7oqxyNg7H9hCvYjRxIIVeTV865SkaKZuWkuEx43s+z2lK2ULUM9SzLL1rWOMB6Llmf0Ky0o7dwOgtnC1LsZU7FOmgYTqAtqvzDvYz6f8/YQWzCZlhsMraessoIkXP/NAJz/JcbJgf3qD7UplsXL+Vd4SrNxq1miKFRhHDFuS2HYkwEve43fI1yvUqDjJM+rG28QZQlZXkoE60p8XFHotrP/jdwSpv5vp1VofKt/7bDA9ha5JlvjYNqxL48PJwWge4NzQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=g3mQTLOCiiC/Z/zavaCQCw5lNaxF1S6jwV0mqhbQGOw=; b=Gm8pPRCWf9dnT1c8YxihFg7zO1gkx6Q4h+cX3+BPoMgvbDVoBSJWzBQ0nvVg1+EMiroN4QkUTR1KademYG1w/4MS+6eDNPQnjyCdYpasmzxXqqHJWFyb39fUmIhJNRnxva4VSdYQKXTw/OVGZVfDuoSVmjaBg+XkXtwK+h7vjOMh6bC9jYbRszLeK7R6kNcKGDxuqadG6q2PN+3qiJBd+oUu0oj1IPenq/Owm3o2drCVdBXgvufCSGCv/4wGkQddaWg9czdLyT+SVICvHtnQPFsJX6V+wxrDen6yRUalXTasPgIAqbfUD9mQK4Y1feVYo9fo/kZ+/tRM50PhyxfthA== 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 X-Received: from PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) by MW6PR01MB8270.prod.exchangelabs.com (2603:10b6:303:241::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.28; Wed, 24 May 2023 00:41:00 +0000 X-Received: from PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1]) by PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1%6]) with mapi id 15.20.6411.019; Wed, 24 May 2023 00:41:00 +0000 From: "Minh Nguyen via groups.io" To: devel@edk2.groups.io CC: patches@amperecomputing.com, quic_llindhol@quicinc.com, ardb+tianocore@kernel.org, nhi@os.amperecomputing.com, minhnguyen1@os.amperecomputing.com Subject: [edk2-devel] [edk2-platforms][PATCH 1/4] JadePkg: Correct PCD names for SMBIOS Type 0 Date: Wed, 24 May 2023 07:40:34 +0700 Message-ID: <20230524004037.39269-2-minhnguyen1@os.amperecomputing.com> In-Reply-To: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> References: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> X-ClientProxiedBy: SI2P153CA0021.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::20) To PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR01MB8048:EE_|MW6PR01MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 7728056d-fddc-4bef-a488-08db5bef8bb2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: ByfP38+xcaUFHP4OmJAINfU2cmHESAM2JiZbHUlwmsLReO2fToKQyQD69IOL5e8fSh4uQvza8Luq0iDnV6solVGvicehxBVrluuF4jzcLRfvHsdzbU8VI99l6nnqb+6/ElFuqgLzy2oUOoUTeGqEyeyJQUoI29zpeieC9/Xz5X6s6Fqg/4Y6I+AyAEPWW8NguZiTMjVAp6fZ7PFtCAdO82udbNhCS44ZkHbialO4Ak7JRsutAh4KLrnIgIFzK7/T6fHVcxeck2TMVcM/nVI5pJbC3JfpynhqsIM/QfSrf00elrMgtYeOvUkeekWS0ZSbse+IWeNdjvOK4oTlDn4P4SaB+Fw51jaqcocL2QB76KhSkSDgI7T/epA7188yBHOr9lfYBMehZ3GDrvbvOebtJBm5ik8LFd4GIWajAGsPeRLm5Q8/8df1rf/RLMW1J16s8p7Juumzq0W07uiz8SgLXgwmGK0hKgungMvrb7aVIiavewZqNO40UajhzZshXeUhkfRdBjSaYE5BCJgsD1f/EJmGW+hmykdllHkljE8jv6NRh9LO2SndbMamJNw6BNIL9d0PxuZSDkeRWUPRvMIvcbO+kghttY4ALYzH4v9JLdPCcAzVl5SF7r3Id3fbrQ0F X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?q6218bik49Z95qI4FdBnme/nsqibQfJXhqBClZ0jpp3/QHvEFS4hC8GaAI72?= =?us-ascii?Q?djo9DcapB6lrnuAo0uDIb0QFwB7f7Lo7FszfRoXtb0Yafw3sNNCGPrHTXjgQ?= =?us-ascii?Q?iePRcOxOgC04lqBzxSC6t598Qhti+VVuc4HM0RoJWdJskTCnWDIbJxVWGPOR?= =?us-ascii?Q?Rei6LSqFUvQlR0VXRpKa/SeuezU959MboeFn0ERM6H2r5nk/KktIoUeYUOJU?= =?us-ascii?Q?nQkOuv3oAtOEX0zIKXJt+2Cc77HXoJdZjrOgwq83qhFbbmioA9UbXD1gf/g/?= =?us-ascii?Q?vZZrQeiTAeZaOPLPFQ+FWZF8LHtAT/UMDi6Ou36pD/PJp8zWZUj3yGCE3mju?= =?us-ascii?Q?qn0Tj/dBRGb0dBaKwKWEPzRi3QgCAhMHyqEse0cSE6xb8MRN59EZPSfH/iNr?= =?us-ascii?Q?WC/valeeT7fG64CuarMAvCXp2W1nVoWLSftEHO+leLtE4a/u8LobAA+ypiFy?= =?us-ascii?Q?vh8Ddg73Btm+h2Hc7ID2mlDfz9yUvDS6Zm46D5zwIG74gFiMrffRBZHOgGzS?= =?us-ascii?Q?dkANc9JRkyqoUpQifylJiFczteJxMrAbNKSAAL2BcJ5dbS8D+WysfneOgERV?= =?us-ascii?Q?9usiLEF8ERejmUGr2SYbg3RpcX1Chy8Di+uuKjraqO32H3WXjXtlQn/ggT4x?= =?us-ascii?Q?mjFxTzk0D8fR/TNphXWzXMt5FLjdjNHwWneN5NZLrwoAL0ETW/VvziChcA4L?= =?us-ascii?Q?dj+h5yCE84Hr3OoOybhg+IUluTicJE0wOByMhV0aZP0KWvRf0KTe5YT3LvZX?= =?us-ascii?Q?4lMfcbNHHC4gMAoa+DP0WcuzxLH1kGtW9uqr+lST3veGJroZDUXuMsWivwHc?= =?us-ascii?Q?Hss0lGvIeD5CVoj+sD38+0X1/1L8qqgXl0WeMmaczg8Ax7JKHYYonJGFsTKc?= =?us-ascii?Q?NrRfPKBjtXN8ugRDwzbfy7b/pUeualcWInt5+RCA1c2Bm3zZ46r7BcI+Dw+C?= =?us-ascii?Q?9rRqc6jRKAZhDvZxYi9KzgSAgsIe9FCp785d1VrrkrTRbcnbqgkBAmG7rXz5?= =?us-ascii?Q?INcIpK12D0XSKJrisKmOKO90SOWZqb1gYRxCWsrOXj2+pMScyRehyY3xwChZ?= =?us-ascii?Q?WWQ8kpXlVOxMfcyq3c9TupWEVbSqJCLbCIMiWsCJum/TOSGjCzg7KMd4Cdmn?= =?us-ascii?Q?PKgLQ++dySZTgWZnkT+MEj1Y7feNwkc6y5zzyu1DnyWmPyHsVCqutvHEPAyb?= =?us-ascii?Q?wL86xWNbMZLcXCn0JZW3oehYJH74QesmMRlApmrjBZe62P5W6aCUdK1BfxS6?= =?us-ascii?Q?M+hEIu5lvexm/8d6lGusX/bLJXCR2sJ0TK7KCqQ0XzP2FH8r2lFzW3i4brvl?= =?us-ascii?Q?9/jZrAso1RLpQ1FXlOT1HQNOkMHoLCoiySAaa8KPpOPAZNDnRZpV0hXOyDZz?= =?us-ascii?Q?fWedWNXz7CH54HXAZ31cep9EeI47cIZAoK9FIKg0iJOvRnHm0mt8+b88IhuR?= =?us-ascii?Q?MmDTdtq8a7y0DTrMkbEwu3Kysa27yl0DwxUXMPmkLheWzF1HMLj5OlaLVx0y?= =?us-ascii?Q?vXh7K+MzSotXoHgEP/Uf+Si8qRUAHA2ijtCi6cdJRBK1K2QvaZ4D1Tv5CLlM?= =?us-ascii?Q?j2tqekLZzRxhqmZoXNwcx1IC8Ye3UP6GT1G9XVggf3rZfTf19WkgpmGqGgRV?= =?us-ascii?Q?yu3cvD+Om7oGGNeK8u6icgtVNbBNoAZS/qv39DLo+X3x?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7728056d-fddc-4bef-a488-08db5bef8bb2 X-MS-Exchange-CrossTenant-AuthSource: PH0PR01MB8048.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2023 00:41:00.5266 (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: GFlTGEWg9M+Dr3UgCP2VNRgaNdQvICNTnbtsP3ly00HtwiAIxUD3WgksW2c/t3aWzGvJaUnqvJOsgvcPLGmIe7sU/KS8E048yCF9DD3/NfHE0eEkl8HYs4duZVXFQIfF X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR01MB8270 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,minhnguyen1@os.amperecomputing.com X-Gm-Message-State: ooUPl01Gmc007ZcZINlfCTF5x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1684944217; bh=oKwr8jDIjYKUtK2zFc277NQE8N5ZXv5oPEc1CKBGGjM=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=arADg6ga4dQc4+WzKm+UdVSDSOdAfi5vQbZHRk4rLhXjlNBLsyHoRmrgY0eou/6/b3k 1p8veKnMih8uio6Crg5nGScAXgCIE16UclhvLefff/pOXT8zjeqaF6sfO/nO/axgv1VPT UJTkHCsJJqeKeBfmHqvx3xZRL4AdJm5+cvI= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1684944218809100008 Content-Type: text/plain; charset="utf-8" This corrects "PcdSmbiosTables1MajorVersion" and "PcdSmbiosTables1MinorVersion" of SMBIOS Type 1, these PCDs should be for Type 0. Signed-off-by: Minh Nguyen --- Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec | = 14 ++++---------- Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf | = 6 +++--- Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c | = 6 +++--- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec b/Silicon= /Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec index 625a9b2b1e89..eeaf8cf87435 100644 --- a/Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec +++ b/Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec @@ -1,6 +1,6 @@ ## @file # -# Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
+# Copyright (c) 2020 - 2023, Ampere Computing LLC. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -64,19 +64,13 @@ [PcdsFixedAtBuild] gAmpereTokenSpaceGuid.PcdPmproDbBaseReg|0x100001540000|UINT64|0x00000004 =20 # - # SMBIOS Type 1 Pcd + # SMBIOS Type 0 Pcd # - gAmpereTokenSpaceGuid.PcdSmbiosTables1MajorVersion|0|UINT8|0x00000005 - gAmpereTokenSpaceGuid.PcdSmbiosTables1MinorVersion|0|UINT8|0x00000006 + gAmpereTokenSpaceGuid.PcdSmbiosTables0MajorVersion|0|UINT8|0x00000005 + gAmpereTokenSpaceGuid.PcdSmbiosTables0MinorVersion|0|UINT8|0x00000006 =20 [PcdsFixedAtBuild, PcdsDynamic, PcdsDynamicEx] # # Firmware Volume Pcds # gAmpereTokenSpaceGuid.PcdFvBlockSize|0|UINT32|0xB0000001 - - # - # SMBIOS, default or template values - # - # SMBIOS Type 0 - BIOS Information - gAmpereTokenSpaceGuid.PcdSmbiosTables0BiosReleaseDate|"MM/DD/YYYY"|VOID*= |0xB0000002 # Must follow this MM/DD/YYYY SMBIOS date format diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.inf b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfor= mDxe.inf index a70af6faa212..77148b417b0f 100644 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf @@ -1,6 +1,6 @@ ## @file # -# Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
+# Copyright (c) 2020 - 2023, Ampere Computing LLC. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -40,8 +40,8 @@ [Protocols] [Pcd] # Type 0 gAmpereTokenSpaceGuid.PcdSmbiosTables0BiosReleaseDate - gAmpereTokenSpaceGuid.PcdSmbiosTables1MajorVersion - gAmpereTokenSpaceGuid.PcdSmbiosTables1MinorVersion + gAmpereTokenSpaceGuid.PcdSmbiosTables0MajorVersion + gAmpereTokenSpaceGuid.PcdSmbiosTables0MinorVersion gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString =20 gArmTokenSpaceGuid.PcdFdSize diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformD= xe.c index add89f5978d6..32735496ecdc 100644 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c @@ -1,6 +1,6 @@ /** @file =20 - Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.
+ Copyright (c) 2020 - 2023, Ampere Computing LLC. All rights reserved.
=20 SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -790,7 +790,7 @@ GetBiosVerMajor ( VOID ) { - return (PcdGet8 (PcdSmbiosTables1MajorVersion)); + return (PcdGet8 (PcdSmbiosTables0MajorVersion)); } =20 STATIC @@ -799,7 +799,7 @@ GetBiosVerMinor ( VOID ) { - return (PcdGet8 (PcdSmbiosTables1MinorVersion)); + return (PcdGet8 (PcdSmbiosTables0MinorVersion)); } =20 STATIC --=20 2.39.0 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105266): https://edk2.groups.io/g/devel/message/105266 Mute This Topic: https://groups.io/mt/99111897/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sat May 18 19:48:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+105267+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+105267+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1684944217627307.64164223382033; Wed, 24 May 2023 09:03:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id Z06HYY1788612xg5ClIiSrgr; Wed, 24 May 2023 09:03:37 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.123]) by mx.groups.io with SMTP id smtpd.web10.1189.1684888868854927589 for ; Tue, 23 May 2023 17:41:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mCuaAZhO4HeUHJiTlm+cCUDm4npvWHz07xbM/mtbNcd+QLvbzOknXhRGPyJUyvOUlwXasUkKUOEqW4jwrtxUYhQ6O7j5CJrBImUodqAQTnwdByBfSp0Dd0QfGn3UVG36cGcaU09A37GDaXRztWSs1cZ4HfSyooziGepDUy0mHg2RRhyqoqHLeKSJlRa88xFIzbORvBCpF4GYMVxrwVhXRXYdAYP7oiy7Gln2tPUrq6WILIhhHTJb4j6xdBqwDBy9GfkjR9WllY+ZxPyquf+B+fMMKaT1aEyD8yPICylOrS2g3JWA1PjpY14L90p8i/1fEc/gLH1ou8FE5LCn/fjKdw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ud/eI3SF7Ujw2QBzPj1kZh74vzJBys+m5uw7ppRlOXk=; b=VMJ1S9VgEpLbmRWTjt1aev6UyWxjRfp0VvMdrDN8w0xXLuFXAzPsVXuUUOfj+3DmDM4pNGCJV8vrNnF/RG3Y4EPZyG65dwnM/e14IA0v8nsr7FIXtUtEwS8A/GiSdJ72L0E2rjqpF18+iAe1MpwbU2gh/iL2rd1OPEvBWaG6RL3S9OUYB3LyqBGk1rmJ92jxdat+Xc1VHuNQATcXKg92sEcT6IuEpxVLvKca8zRzbhfS9ZEJXw+bBYwTA09G036ygL/csXmYtUO9rUBN8PWtNavgWxchH4kCpXve83M6SLQca0Thn8TDiar3Z8hKu1EXxxQgdHKU4s1xUjWePScZLA== 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 X-Received: from PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) by MW6PR01MB8270.prod.exchangelabs.com (2603:10b6:303:241::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.28; Wed, 24 May 2023 00:41:03 +0000 X-Received: from PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1]) by PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1%6]) with mapi id 15.20.6411.019; Wed, 24 May 2023 00:41:03 +0000 From: "Minh Nguyen via groups.io" To: devel@edk2.groups.io CC: patches@amperecomputing.com, quic_llindhol@quicinc.com, ardb+tianocore@kernel.org, nhi@os.amperecomputing.com, minhnguyen1@os.amperecomputing.com Subject: [edk2-devel] [edk2-platforms][PATCH 2/4] JadePkg: Leverage ArmPkg/Smbios (Type 0, 1, 2, 3, 13, 32) Date: Wed, 24 May 2023 07:40:35 +0700 Message-ID: <20230524004037.39269-3-minhnguyen1@os.amperecomputing.com> In-Reply-To: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> References: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> X-ClientProxiedBy: SI2P153CA0021.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::20) To PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR01MB8048:EE_|MW6PR01MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: a630f222-9a5b-493e-09c7-08db5bef8d30 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: WUq2bLWfK7bFPZFU2mTWjQqnyhzx73aBdmS3eU1Fg/rYS+cTuTJiWyW33fhCwzFNksc4yjvruzlPU5nH/dxI/lzT/gxnm32DYNsjCNhhNdfYyQePutxdwlxJ3EmbluHDuDcH2xvRgc2XJpOMPJJqIB8KOTdf+jlR/uHZ/Nr7bTlwbc+ifj9jY2bma3IxfGkTkO82yhPVp6ovSn1IEIVnis/YjmS0gqMOCA4UVsbM4AKtvFORFrk/o+E+fkBdCBXXD16WWvMdzWzlkMEdMptIjrqmalNJ8/E1HBfqjHDNuU3d3E+ebCUPf4rdGzdUmn92LEgepx0mz8zG5Cb9gJSJ/debz/P/2ef0wJDg73mAbuVQMECmk8AeckOyil+NxSijTMOpAlD0c03hmBOmmkdFY8mqVYsIA/suneFw9OHMrfgU8WBwCBZn2119919kI1EymvSnAnnyGScYnLrKkXWnkj76U8o7u9mr0fNqCijoZPrKUFB31lO9A6/IkxoLDtHF+2YdhyVMVQzRyhTRGZjBfJoQkwj63AgZtqzD16YLgxXa/YLfa7qQ2lPx3HWYh4x5EoJTS/VGW7bAE7KmLqlzx6upj3wuda9zKFMfxtGS3BM= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?u7BdpbaQAxL1RN7yKhWZ6PU4INfvCQT62GQgyqHTJb+ERWf0fofZ1cEK9+mf?= =?us-ascii?Q?XFdMafuHjmJi6+TSbF6rgQ6nln5cBqW+FsbFfRSRiB0uc8EvMs2zdI3l/Hg0?= =?us-ascii?Q?N5lSN32viN0ZCfbqL9MnTN6PY3cIilRPFE82U5pu975dTGFSKnb1BDPQvqYV?= =?us-ascii?Q?NlBmLYrUVYq/c+z8takvHA9H6Vlg+katEJHDMAjo7zVyPmwTTdjQaKqXArHK?= =?us-ascii?Q?ymnnSWdP4tkEIqpO28+Gjen5Pnvgo11N4kpTz2ObH/pcjReo2yqSC3JT0EVH?= =?us-ascii?Q?QyWl5+PO6qB0xPuiGjSkiz2JD4BxVESe9BrXPZoWS0YB6AFOthdkZtprpzeJ?= =?us-ascii?Q?mMr/RibRDjV2xQfe/PHTn2IF/bha8CNJBpJV4EGzC3poCm1l7GBgH6FJwLCG?= =?us-ascii?Q?pznKMfxO7Dyod6QU36OILM/jUCWdEKFV/oS0yr8ul3f9NNA8m2VOpM8qgZys?= =?us-ascii?Q?HKy7jvFvhAEQkeERJ+VzsGtKMhCgkMLLeWTkjwjtX/kGLVJBW8tDIE0KUPcL?= =?us-ascii?Q?R7eQgyENz8iLbU0f3wNXgE3m4YjRUd6oL1i2i2i9bql0EHwZE7Rmij1eY0UI?= =?us-ascii?Q?YHKIhq0H/meIhrxewaCAujlEPkqGfhj+c1xrEcK7vFX5sib/unVS3RasDxim?= =?us-ascii?Q?TRyr8bsbYE1gwMi8fKi+VCOzi+mEwqmdunu8Wy8op0axLgxXPuK9BBzIcZSp?= =?us-ascii?Q?xJ1N7vXGrWD/qKgXzGhh6GpSfTNJU63ayBK2f8DK6D2u9tJFVzW2bJdRIgxu?= =?us-ascii?Q?/XKwQAhma1nLntDAREPzZt1XgRAor4yq5akc2yjNF8LqlexTpyeoxr+8K1PH?= =?us-ascii?Q?Gwyto2jtVC2ydMJp4NtfbA/BpeIgmNBJK+pzA6BUdQdrzSwVzPq7V3CdsNA2?= =?us-ascii?Q?o03HLBMFpaBxowjk8b50/bLUFeExaME1VAbnMpVa1zAzGJT4+wvjJoe9zV+0?= =?us-ascii?Q?l3J7aq+uLfqDX7/Xz80wJ5H1MsFODFulFt5cjpDPNw3homnzUx1j8vdttX0B?= =?us-ascii?Q?pPKGsnfuJR/teia3QWks1uYcpRcue4nnP8WcqbyDn52mZqYREQIW/bjKexF0?= =?us-ascii?Q?aTCJsipFV5RWEvhCEOXqV1ODYVHPRE+LW1m3Uz1lbtxmVL4WUet8KZGec4lh?= =?us-ascii?Q?tZXqYXtPSY6vUA9/wqPex/sZormeVQFxmCK+dA/JCxrgdykpU7b/SyA3eA+W?= =?us-ascii?Q?2KVMSMVR9eupk56HndtsnxQ2OIpjiGpCT8h7NUCqiNgyynOZoJxuBOk8eKw4?= =?us-ascii?Q?zjdwVbTAxNKHoS7ghMNs0EKcofe267h/zgWPS441BStGfRvyIfvSpqPYCwKp?= =?us-ascii?Q?EWRQBKtOJuQrRfXfdMT4MgnQLzHvF/euST0KxjDyVHqm1YnuBcHGOwk+xK6W?= =?us-ascii?Q?iP2CCQjgqWjImjHOc3tswnOpPfBqcekNd3gFd7XfL0xpTPX6dokDO1ZDh05+?= =?us-ascii?Q?gqAFMvydfX2nw4XOcoZeCnHYM3TT12u/vU6ZiqOp1lYkv+enPKf481X+mM+l?= =?us-ascii?Q?oSxAAgIZJ3CRSCQDm702H3ORJu5yX3Vk2XER1SbB7S8MKirZgTYrKkeotjBa?= =?us-ascii?Q?dTmpVFK7Zr+dmu0ZhDy//UojmnWG/lLPKvvEbn1PekYzY/N2kol87eYzrUYt?= =?us-ascii?Q?j1gt87fV9VYqy6yDeK9R5cUixRM3hslNuIfYfy6dBLh1?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: a630f222-9a5b-493e-09c7-08db5bef8d30 X-MS-Exchange-CrossTenant-AuthSource: PH0PR01MB8048.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2023 00:41:03.1144 (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: sGiCXxFHTtY6scJuiZsgtPjeM0+/Z62H0D5/z0Mp7J/bGmeysWnQyKymbXUOnE18tGA+MB3tbNyM0J7hzgv72aa2HsRlVXMyrePm2ITKKaCEPS8ocyLRgwCHhUx7tvla X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR01MB8270 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,minhnguyen1@os.amperecomputing.com X-Gm-Message-State: vRqSCplYsByNGhgk9dvUMW0Cx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1684944217; bh=D4ARWEidVs8FBiQ3tF4n3adDQHQBz/e3h+5pt3PyuxQ=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=FLN3DZtE4AZCGFO0RXoNuW7cwZKMuXAWxQLaddVCaZycbm3fvZ/ocdCTmX3L0BkL1nx pg8kX/zEYFWUnx6wIDy7n6mLt7qjPpnmV+XTkY4DPmKWOX4lB3ryRCVcchdNK+0T4E/p2 4BwEsh+M0rrCUHRidGlRciub+EBOJe6ser0= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1684944218895100011 Content-Type: text/plain; charset="utf-8" This implementation helps SMBIOS Table (Type 0, 1, 2, 3, 13, 32) of Altra and AltraMax platform to utilize framework from ArmPkg. Signed-off-by: Minh Nguyen --- Platform/Ampere/JadePkg/Jade.dsc | = 7 +- Platform/Ampere/JadePkg/Jade.fdf | = 1 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf | = 10 - Platform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.inf | = 15 +- Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h | = 22 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c | = 470 -------------------- Platform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.c | = 246 +++++++++- Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLibCommon.c | = 42 ++ 8 files changed, 326 insertions(+), 487 deletions(-) diff --git a/Platform/Ampere/JadePkg/Jade.dsc b/Platform/Ampere/JadePkg/Jad= e.dsc index f14d286cdfb8..2f530740140d 100644 --- a/Platform/Ampere/JadePkg/Jade.dsc +++ b/Platform/Ampere/JadePkg/Jade.dsc @@ -117,8 +117,8 @@ [PcdsFixedAtBuild.common] gArmTokenSpaceGuid.PcdProcessorManufacturer|L"Ampere(R)" gArmTokenSpaceGuid.PcdProcessorVersion|L"Ampere(R) Altra(R) Processor" =20 - gAmpereTokenSpaceGuid.PcdSmbiosTables1MajorVersion|$(MAJOR_VER) - gAmpereTokenSpaceGuid.PcdSmbiosTables1MinorVersion|$(MINOR_VER) + gAmpereTokenSpaceGuid.PcdSmbiosTables0MajorVersion|$(MAJOR_VER) + gAmpereTokenSpaceGuid.PcdSmbiosTables0MinorVersion|$(MINOR_VER) =20 # Clearing BIT0 in this PCD prevents installing a 32-bit SMBIOS entry po= int, # if the entry point version is >=3D 3.0. AARCH64 OSes cannot assume the @@ -137,8 +137,6 @@ [PcdsFixedAtBuild.common] !endif =20 [PcdsDynamicDefault.common.DEFAULT] - # SMBIOS Type 0 - BIOS Information - gAmpereTokenSpaceGuid.PcdSmbiosTables0BiosReleaseDate|"MM/DD/YYYY" =20 [PcdsPatchableInModule] # @@ -181,6 +179,7 @@ [Components.common] MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf ArmPkg/Universal/Smbios/ProcessorSubClassDxe/ProcessorSubClassDxe.inf + ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxe.inf Platform/Ampere/JadePkg/Drivers/SmbiosMemInfoDxe/SmbiosMemInfoDxe.inf =20 # diff --git a/Platform/Ampere/JadePkg/Jade.fdf b/Platform/Ampere/JadePkg/Jad= e.fdf index a578d05330ec..7795f0e11115 100644 --- a/Platform/Ampere/JadePkg/Jade.fdf +++ b/Platform/Ampere/JadePkg/Jade.fdf @@ -347,6 +347,7 @@ [FV.FvMain] INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf INF Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.= inf INF ArmPkg/Universal/Smbios/ProcessorSubClassDxe/ProcessorSubClassDxe.inf + INF ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxe.inf INF Platform/Ampere/JadePkg/Drivers/SmbiosMemInfoDxe/SmbiosMemInfoDxe.inf =20 # diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.inf b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfor= mDxe.inf index 77148b417b0f..549aa38b1774 100644 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf @@ -28,7 +28,6 @@ [LibraryClasses] BaseLib BaseMemoryLib DebugLib - HobLib MemoryAllocationLib UefiBootServicesTableLib UefiDriverEntryPoint @@ -38,16 +37,7 @@ [Protocols] gEfiSmbiosProtocolGuid ## CONSUMED =20 [Pcd] - # Type 0 - gAmpereTokenSpaceGuid.PcdSmbiosTables0BiosReleaseDate - gAmpereTokenSpaceGuid.PcdSmbiosTables0MajorVersion - gAmpereTokenSpaceGuid.PcdSmbiosTables0MinorVersion - gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString - gArmTokenSpaceGuid.PcdFdSize =20 -[Guids] - gPlatformInfoHobGuid - [Depex] gEfiSmbiosProtocolGuid diff --git a/Platform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.inf b/Pl= atform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.inf index b67ce01fb27f..9d1a0b7e9e06 100644 --- a/Platform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.inf +++ b/Platform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.inf @@ -1,7 +1,7 @@ #/** @file # OemMiscLib.inf # -# Copyright (c) 2021, Ampere Computing LLC. All rights reserved. +# Copyright (c) 2021 - 2023, Ampere Computing LLC. All rights reserved. # Copyright (c) 2021, NUVIA Inc. All rights reserved. # Copyright (c) 2018, Hisilicon Limited. All rights reserved. # Copyright (c) 2018, Linaro Limited. All rights reserved. @@ -27,6 +27,7 @@ [Packages] MdeModulePkg/MdeModulePkg.dec MdePkg/MdePkg.dec Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec + Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec =20 [LibraryClasses] AmpereCpuLib @@ -34,3 +35,15 @@ [LibraryClasses] BaseLib BaseMemoryLib DebugLib + +[FixedPcd] + gArmTokenSpaceGuid.PcdSystemMemoryBase + gAmpereTokenSpaceGuid.PcdSmbiosTables0MajorVersion + gAmpereTokenSpaceGuid.PcdSmbiosTables0MinorVersion + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString + +[Guids] + gZeroGuid + +[Depex] + TRUE diff --git a/Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h b= /Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h index 94944cbe3abe..c425ed4431da 100644 --- a/Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h +++ b/Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h @@ -160,6 +160,28 @@ GetNumberOfConfiguredCPMs ( UINT8 SocketId ); =20 +/** + Get version of SCP. + + @param[out] ScpVer Pointer to contain version of SCP value. +**/ +VOID +EFIAPI +GetScpVersion ( + UINT8 **ScpVer + ); + +/** + Get date of build release for SCP. + + @param[out] ScpBuild Pointer to contain date of build release for SC= P. +**/ +VOID +EFIAPI +GetScpBuild ( + UINT8 **ScpBuild + ); + /** Set the number of configured CPM per socket. =20 diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformD= xe.c index 32735496ecdc..448912f146ec 100644 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c @@ -8,63 +8,19 @@ =20 #include =20 -#include #include #include #include #include -#include #include #include #include #include =20 -// Type0 Data -#define VENDOR_TEMPLATE "Ampere(R)\0" -#define BIOS_VERSION_TEMPLATE "TianoCore 0.00.00000000 (SYS: 0.00.00000000= )\0" -#define RELEASE_DATE_TEMPLATE "MM/DD/YYYY\0" - -#define TYPE0_ADDITIONAL_STRINGS \ - VENDOR_TEMPLATE /* Vendor */ \ - BIOS_VERSION_TEMPLATE /* BiosVersion */ \ - RELEASE_DATE_TEMPLATE /* BiosReleaseDate */ - -// Type1 Data -#define MANUFACTURER_TEMPLATE "Ampere(R)\0" -#define PRODUCT_NAME_TEMPLATE "Mt. Jade\0" -#define SYS_VERSION_TEMPLATE "PR010\0" -#define SERIAL_TEMPLATE "123456789ABCDEFF123456789ABCDEFF\0" -#define SKU_TEMPLATE "FEDCBA9876543211FEDCBA9876543211\0" -#define FAMILY_TEMPLATE "Altra\0" - -#define TYPE1_ADDITIONAL_STRINGS \ - MANUFACTURER_TEMPLATE /* Manufacturer */ \ - PRODUCT_NAME_TEMPLATE /* Product Name */ \ - SYS_VERSION_TEMPLATE /* Version */ \ - SERIAL_TEMPLATE /* Serial Number */ \ - SKU_TEMPLATE /* SKU Number */ \ - FAMILY_TEMPLATE /* Family */ - -#define TYPE2_ADDITIONAL_STRINGS \ - MANUFACTURER_TEMPLATE /* Manufacturer */ \ - PRODUCT_NAME_TEMPLATE /* Product Name */ \ - "EVT2\0" /* Version */ \ - "Serial Not Set\0" /* Serial */ \ - "Base of Chassis\0" /* board location */ \ - "FF\0" /* Version */ \ - "FF\0" /* Version */ - #define CHASSIS_VERSION_TEMPLATE "None \0" #define CHASSIS_SERIAL_TEMPLATE "Serial Not Set \0" #define CHASSIS_ASSET_TAG_TEMPLATE "Asset Tag Not Set \0" =20 -#define TYPE3_ADDITIONAL_STRINGS \ - MANUFACTURER_TEMPLATE /* Manufacturer */ \ - CHASSIS_VERSION_TEMPLATE /* Version */ \ - CHASSIS_SERIAL_TEMPLATE /* Serial */ \ - CHASSIS_ASSET_TAG_TEMPLATE /* Asset Tag */ \ - SKU_TEMPLATE /* SKU Number */ - #define TYPE8_ADDITIONAL_STRINGS \ "VGA1 - Rear VGA Connector\0" \ "DB-15 Male (VGA) \0" @@ -75,9 +31,6 @@ #define TYPE11_ADDITIONAL_STRINGS \ "www.amperecomputing.com\0" =20 -#define TYPE13_ADDITIONAL_STRINGS \ - "en|US|iso8859-1\0" - #define TYPE41_ADDITIONAL_STRINGS \ "Onboard VGA\0" =20 @@ -94,26 +47,6 @@ // the SMBIOS specification (section 6.2, version 3.0) // #pragma pack(1) -typedef struct { - SMBIOS_TABLE_TYPE0 Base; - CHAR8 Strings[sizeof (TYPE0_ADDITIONAL_STRINGS)]; -} ARM_TYPE0; - -typedef struct { - SMBIOS_TABLE_TYPE1 Base; - CHAR8 Strings[sizeof (TYPE1_ADDITIONAL_STRINGS)]; -} ARM_TYPE1; - -typedef struct { - SMBIOS_TABLE_TYPE2 Base; - CHAR8 Strings[sizeof (TYPE2_ADDITIONAL_STRINGS)]; -} ARM_TYPE2; - -typedef struct { - SMBIOS_TABLE_TYPE3 Base; - CHAR8 Strings[sizeof (TYPE3_ADDITIONAL_STRINGS)]; -} ARM_TYPE3; - typedef struct { SMBIOS_TABLE_TYPE8 Base; CHAR8 Strings[sizeof (TYPE8_ADDITIONAL_STRINGS)]; @@ -129,11 +62,6 @@ typedef struct { CHAR8 Strings[sizeof (TYPE11_ADDITIONAL_STRINGS)]; } ARM_TYPE11; =20 -typedef struct { - SMBIOS_TABLE_TYPE13 Base; - CHAR8 Strings[sizeof (TYPE13_ADDITIONAL_STRINGS)]; -} ARM_TYPE13; - typedef struct { SMBIOS_TABLE_TYPE41 Base; CHAR8 Strings[sizeof (TYPE41_ADDITIONAL_STRINGS)]; @@ -141,125 +69,6 @@ typedef struct { =20 #pragma pack() =20 -// Type 0 BIOS information -STATIC ARM_TYPE0 mArmDefaultType0 =3D { - { - { // Header - EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE0), // UINT8 Length, The length of the= structure's string-set is not included. - SMBIOS_HANDLE_PI_RESERVED, - }, - - ADDITIONAL_STR_INDEX_1, // SMBIOS_TABLE_STRING Vendor - ADDITIONAL_STR_INDEX_2, // SMBIOS_TABLE_STRING BiosVersion - 0, // UINT16 BiosSegment - ADDITIONAL_STR_INDEX_3, // SMBIOS_TABLE_STRING BiosReleaseDa= te - 0, // UINT8 BiosSize - - // MISC_BIOS_CHARACTERISTICS BiosCharacteristics - { - 0,0,0,0,0,0, - 1, // PCI supported - 0, - 1, // PNP supported - 0, - 1, // BIOS upgradable - 0, 0, 0, - 0, // Boot from CD - 1, // selectable boot - }, - - // BIOSCharacteristicsExtensionBytes[2] - { - 0, - 0, - }, - - 0, // UINT8 SystemBiosMajorRelease - 0, // UINT8 SystemBiosMinorRelease - - // If the system does not have field upgradeable embedded controller - // firmware, the value is 0FFh - 0xFF, // UINT8 EmbeddedControllerFirmwareMajorRel= ease - 0xFF // UINT8 EmbeddedControllerFirmwareMinorRel= ease - }, - - // Text strings (unformatted area) - TYPE0_ADDITIONAL_STRINGS -}; - -// Type 1 System information -STATIC ARM_TYPE1 mArmDefaultType1 =3D { - { - { // Header - EFI_SMBIOS_TYPE_SYSTEM_INFORMATION, - sizeof (SMBIOS_TABLE_TYPE1), - SMBIOS_HANDLE_PI_RESERVED, - }, - - ADDITIONAL_STR_INDEX_1, = // Manufacturer - ADDITIONAL_STR_INDEX_2, = // Product Name - ADDITIONAL_STR_INDEX_3, = // Version - ADDITIONAL_STR_INDEX_4, = // Serial Number - { 0x12345678, 0x9ABC, 0xDEFF, { 0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF= F }}, // UUID - SystemWakeupTypePowerSwitch, = // Wakeup type - ADDITIONAL_STR_INDEX_5, = // SKU Number - ADDITIONAL_STR_INDEX_6, = // Family - }, - - // Text strings (unformatted) - TYPE1_ADDITIONAL_STRINGS -}; - -// Type 2 Baseboard -STATIC ARM_TYPE2 mArmDefaultType2 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE2), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // Manufacturer - ADDITIONAL_STR_INDEX_2, // Product Name - ADDITIONAL_STR_INDEX_3, // Version - ADDITIONAL_STR_INDEX_4, // Serial - 0, // Asset tag - {1}, // motherboard, not replaceable - ADDITIONAL_STR_INDEX_5, // location of board - 0xFFFF, // chassis handle - BaseBoardTypeMotherBoard, - 0, - {0}, - }, - TYPE2_ADDITIONAL_STRINGS -}; - -// Type 3 Enclosure -STATIC CONST ARM_TYPE3 mArmDefaultType3 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE3), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // Manufacturer - MiscChassisTypeRackMountChassis, // Rack-mounted chassis - ADDITIONAL_STR_INDEX_2, // version - ADDITIONAL_STR_INDEX_3, // serial - ADDITIONAL_STR_INDEX_4, // asset tag - ChassisStateUnknown, // boot chassis state - ChassisStateSafe, // power supply state - ChassisStateSafe, // thermal state - ChassisSecurityStatusNone, // security state - {0,0,0,0}, // OEM defined - 2, // 2U height - 2, // number of power cords - 0, // no contained elements - 3, // ContainedElementRecordLength; - }, - TYPE3_ADDITIONAL_STRINGS -}; - // Type 8 Port Connector Information STATIC CONST ARM_TYPE8 mArmDefaultType8Vga =3D { { @@ -611,22 +420,6 @@ STATIC ARM_TYPE11 mArmDefaultType11 =3D { TYPE11_ADDITIONAL_STRINGS }; =20 -// Type 13 BIOS Language Information -STATIC ARM_TYPE13 mArmDefaultType13 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE13), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - 1, - 0, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - 1, - }, - TYPE13_ADDITIONAL_STRINGS -}; - // Type 24 Hardware Security STATIC SMBIOS_TABLE_TYPE24 mArmDefaultType24 =3D { { // SMBIOS_STRUCTURE Hdr @@ -637,17 +430,6 @@ STATIC SMBIOS_TABLE_TYPE24 mArmDefaultType24 =3D { 0 }; =20 -// Type 32 System Boot Information -STATIC SMBIOS_TABLE_TYPE32 mArmDefaultType32 =3D { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE32), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - {0, 0, 0, 0, 0, 0}, - 0 -}; - // Type 38 IPMI Device Information STATIC SMBIOS_TABLE_TYPE38 mArmDefaultType38 =3D { { // SMBIOS_STRUCTURE Hdr @@ -694,9 +476,6 @@ STATIC SMBIOS_TABLE_TYPE42 mArmDefaultType42 =3D { =20 STATIC CONST VOID *DefaultCommonTables[] =3D { - &mArmDefaultType0, - &mArmDefaultType1, - &mArmDefaultType2, &mArmDefaultType8Vga, &mArmDefaultType8USBFront, &mArmDefaultType8USBRear, @@ -714,9 +493,7 @@ STATIC CONST VOID *DefaultCommonTables[] =3D &mArmDefaultType9Sk1NvmeM2Slot1, &mArmDefaultType9Sk1NvmeM2Slot2, &mArmDefaultType11, - &mArmDefaultType13, &mArmDefaultType24, - &mArmDefaultType32, &mArmDefaultType38, &mArmDefaultType41, &mArmDefaultType42, @@ -728,80 +505,6 @@ typedef struct { CHAR8 DigitStr[3]; // example "01", Smbios date format, month } MonthStringDig; =20 -STATIC MonthStringDig MonthMatch[12] =3D { - { "Jan", "01" }, - { "Feb", "02" }, - { "Mar", "03" }, - { "Apr", "04" }, - { "May", "05" }, - { "Jun", "06" }, - { "Jul", "07" }, - { "Aug", "08" }, - { "Sep", "09" }, - { "Oct", "10" }, - { "Nov", "11" }, - { "Dec", "12" } -}; - -STATIC -VOID -ConstructBuildDate ( - OUT CHAR8 *DateBuf - ) -{ - UINTN i; - - // GCC __DATE__ format is "Feb 2 1996" - // If the day of the month is less than 10, it is padded with a space on= the left - CHAR8 *BuildDate =3D __DATE__; - - // SMBIOS spec date string: MM/DD/YYYY - CHAR8 SmbiosDateStr[sizeof (RELEASE_DATE_TEMPLATE)] =3D { 0 }; - - SmbiosDateStr[sizeof (RELEASE_DATE_TEMPLATE) - 1] =3D '\0'; - - SmbiosDateStr[2] =3D '/'; - SmbiosDateStr[5] =3D '/'; - - // Month - for (i =3D 0; i < sizeof (MonthMatch) / sizeof (MonthMatch[0]); i++) { - if (AsciiStrnCmp (&BuildDate[0], MonthMatch[i].MonthNameStr, AsciiStrL= en (MonthMatch[i].MonthNameStr)) =3D=3D 0) { - CopyMem (&SmbiosDateStr[0], MonthMatch[i].DigitStr, AsciiStrLen (Mon= thMatch[i].DigitStr)); - break; - } - } - - // Day - CopyMem (&SmbiosDateStr[3], &BuildDate[4], 2); - if (BuildDate[4] =3D=3D ' ') { - // day is less then 10, SAPCE filed by compiler, SMBIOS requires 0 - SmbiosDateStr[3] =3D '0'; - } - - // Year - CopyMem (&SmbiosDateStr[6], &BuildDate[7], 4); - - CopyMem (DateBuf, SmbiosDateStr, AsciiStrLen (RELEASE_DATE_TEMPLATE)); -} - -STATIC -UINT8 -GetBiosVerMajor ( - VOID - ) -{ - return (PcdGet8 (PcdSmbiosTables0MajorVersion)); -} - -STATIC -UINT8 -GetBiosVerMinor ( - VOID - ) -{ - return (PcdGet8 (PcdSmbiosTables0MinorVersion)); -} - STATIC UINTN GetStringPackSize ( @@ -881,148 +584,6 @@ UpdateStringPack ( return EFI_SUCCESS; } =20 -STATIC -EFI_STATUS -UpdateSmbiosType0 ( - PLATFORM_INFO_HOB *PlatformHob - ) -{ - EFI_STATUS Status =3D EFI_SUCCESS; - MISC_BIOS_CHARACTERISTICS_EXTENSION *MiscExt =3D NULL; - CHAR8 *ReleaseDateBuf =3D NULL; - CHAR8 *PcdReleaseDate =3D NULL; - CHAR8 AsciiVersion[32]; - UINTN Index; - CHAR8 BiosVersionStr[128]; - CHAR8 *StringPack; - CHAR8 SizeOfFirmwareVer; - UINT16 *FirmwareVersionPcdPtr; - - // - // Update Type0 information - // - - ReleaseDateBuf =3D &mArmDefaultType0.Strings[0] - + sizeof (VENDOR_TEMPLATE) - 1 - + sizeof (BIOS_VERSION_TEMPLATE) - 1; - PcdReleaseDate =3D (CHAR8 *)PcdGetPtr (PcdSmbiosTables0BiosReleaseDate); - - if (AsciiStrnCmp (PcdReleaseDate, RELEASE_DATE_TEMPLATE, AsciiStrLen (RE= LEASE_DATE_TEMPLATE)) =3D=3D 0) { - // If PCD is still template date MM/DD/YYYY, use compiler date - ConstructBuildDate (ReleaseDateBuf); - } else { - // PCD is updated somehow, use PCD date - CopyMem (ReleaseDateBuf, PcdReleaseDate, AsciiStrLen (PcdReleaseDate)); - } - - if (PcdGet32 (PcdFdSize) < SIZE_16MB) { - mArmDefaultType0.Base.BiosSize =3D (PcdGet32 (PcdFdSize) / SIZE_64KB) = - 1; - - mArmDefaultType0.Base.ExtendedBiosSize.Size =3D 0; - mArmDefaultType0.Base.ExtendedBiosSize.Unit =3D 0; - } else { - // Need to update Extended BIOS ROM Size - mArmDefaultType0.Base.BiosSize =3D 0xFF; - - // As a reminder - ASSERT (FALSE); - } - - // Type0 BIOS Characteristics Extension Byte 1 - MiscExt =3D (MISC_BIOS_CHARACTERISTICS_EXTENSION *)&(mArmDefaultType0.Ba= se.BIOSCharacteristicsExtensionBytes); - - MiscExt->BiosReserved.AcpiIsSupported =3D 1; - - // Type0 BIOS Characteristics Extension Byte 2 - MiscExt->SystemReserved.BiosBootSpecIsSupported =3D 1; - MiscExt->SystemReserved.FunctionKeyNetworkBootIsSupported =3D 1; - MiscExt->SystemReserved.UefiSpecificationSupported =3D 1; - - // Type0 BIOS Release - // Decide another way: If the system does not support the use of this - // field, the value is 0FFh - mArmDefaultType0.Base.SystemBiosMajorRelease =3D GetBiosVerMajor (); - mArmDefaultType0.Base.SystemBiosMinorRelease =3D GetBiosVerMinor (); - - // - // Format of PcdFirmwareVersionString is - // "(MAJOR_VER).(MINOR_VER).(BUILD) Build YYYY.MM.DD", we only need - // "(MAJOR_VER).(MINOR_VER).(BUILD)" showed in Bios version. Using - // space character to determine this string. Another case uses null - // character to end while loop. - // - SizeOfFirmwareVer =3D 0; - FirmwareVersionPcdPtr =3D (UINT16 *)PcdGetPtr (PcdFirmwareVersionString); - while (*FirmwareVersionPcdPtr !=3D ' ' && *FirmwareVersionPcdPtr !=3D '\= 0') { - SizeOfFirmwareVer++; - FirmwareVersionPcdPtr++; - } - - AsciiSPrint ( - BiosVersionStr, - sizeof (BiosVersionStr), - "TianoCore %.*s (SYS: %a.%a)", - SizeOfFirmwareVer, - PcdGetPtr (PcdFirmwareVersionString), - PlatformHob->SmPmProVer, - PlatformHob->SmPmProBuild - ); - StringPack =3D mArmDefaultType0.Strings; - - UpdateStringPack (StringPack, BiosVersionStr, ADDITIONAL_STR_INDEX_2); - - /* Update SMBIOS Type 0 EC Info */ - CopyMem ( - (VOID *)&AsciiVersion, - (VOID *)&PlatformHob->SmPmProVer, - sizeof (PlatformHob->SmPmProVer) - ); - /* The AsciiVersion is formated as "major.minor" */ - for (Index =3D 0; Index < (UINTN)AsciiStrLen (AsciiVersion); Index++) { - if (AsciiVersion[Index] =3D=3D '.') { - AsciiVersion[Index] =3D '\0'; - break; - } - } - - mArmDefaultType0.Base.EmbeddedControllerFirmwareMajorRelease =3D - (UINT8)AsciiStrDecimalToUintn (AsciiVersion); - mArmDefaultType0.Base.EmbeddedControllerFirmwareMinorRelease =3D - (UINT8)AsciiStrDecimalToUintn (AsciiVersion + Index + 1); - - return Status; -} - -STATIC -EFI_STATUS -InstallType3Structure ( - IN EFI_SMBIOS_PROTOCOL *Smbios - ) -{ - EFI_STATUS Status =3D EFI_SUCCESS; - EFI_SMBIOS_HANDLE SmbiosHandle; - - ASSERT (Smbios !=3D NULL); - - SmbiosHandle =3D ((EFI_SMBIOS_TABLE_HEADER*) &mArmDefaultType3)->Handle; - Status =3D Smbios->Add ( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *)&mArmDefaultType3 - ); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "adding SMBIOS type 3 failed\n")); - // stop adding rather than continuing - return Status; - } - - // Save this handle to type 2 table - mArmDefaultType2.Base.ChassisHandle =3D SmbiosHandle; - - return Status; -} - /** Install a whole table worth of structures =20 @@ -1060,31 +621,6 @@ InstallStructures ( return EFI_SUCCESS; } =20 -STATIC -VOID -UpdateSmbiosInfo ( - VOID - ) -{ - VOID *Hob; - PLATFORM_INFO_HOB *PlatformHob; - - /* Get the Platform HOB */ - Hob =3D GetFirstGuidHob (&gPlatformInfoHobGuid); - ASSERT (Hob !=3D NULL); - if (Hob =3D=3D NULL) { - return; - } - - PlatformHob =3D (PLATFORM_INFO_HOB *)GET_GUID_HOB_DATA (Hob); - - // - // Update Type0 information - // - UpdateSmbiosType0 (PlatformHob); - -} - /** Install all structures from the DefaultTables structure =20 @@ -1100,12 +636,6 @@ InstallAllStructures ( =20 ASSERT (Smbios !=3D NULL); =20 - // Update SMBIOS Tables - UpdateSmbiosInfo (); - - // Install Type 3 table - InstallType3Structure (Smbios); - // Install Tables Status =3D InstallStructures (Smbios, DefaultCommonTables); ASSERT_EFI_ERROR (Status); diff --git a/Platform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.c b/Plat= form/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.c index 6f5869b1ef1c..0604bf351c89 100644 --- a/Platform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.c +++ b/Platform/Ampere/JadePkg/Library/OemMiscLib/OemMiscLib.c @@ -1,7 +1,7 @@ /** @file * OemMiscLib.c * -* Copyright (c) 2021, Ampere Computing LLC. All rights reserved. +* Copyright (c) 2021 - 2023, Ampere Computing LLC. All rights reserved. * Copyright (c) 2021, NUVIA Inc. All rights reserved. * Copyright (c) 2018, Hisilicon Limited. All rights reserved. * Copyright (c) 2018, Linaro Limited. All rights reserved. @@ -10,6 +10,7 @@ * **/ =20 +#include #include #include #include @@ -17,10 +18,21 @@ #include #include #include +#include +#include #include +#include +#include + +#define PROCESSOR_VERSION_ALTRA L"Ampere(R) Altra(R) Processor" +#define PROCESSOR_VERSION_ALTRA_MAX L"Ampere(R) Altra(R) Max Processor" =20 #define MHZ_SCALE_FACTOR 1000000 =20 +#define SCP_VERSION_STRING_MAX_LENGTH 32 + +#define OEM_DEFAULT_INFORMATION L"To Be Filled By O.E.M." + UINT32 GetCacheConfig ( IN UINT32 CacheLevel, @@ -216,6 +228,74 @@ OemIsProcessorPresent ( return FALSE; } =20 +/** + Update the firmware version in SMBIOS Type 0. + This is the combination of UEFI and Ampere system firmware version. + +**/ +VOID +UpdateFirmwareVersionString ( + OUT CHAR16 *Version + ) +{ + UINT8 UnicodeStrLen; + UINT8 FirmwareVersionStrLen; + UINT8 FirmwareVersionStrSize; + UINT8 *ScpVersion; + UINT8 *ScpBuild; + CHAR16 UnicodeStr[SMBIOS_STRING_MAX_LENGTH * sizeof (CHAR16)]; + CHAR16 *FirmwareVersionPcdPtr; + + FirmwareVersionStrLen =3D 0; + ZeroMem (UnicodeStr, sizeof (UnicodeStr)); + FirmwareVersionPcdPtr =3D (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVersionS= tring); + FirmwareVersionStrSize =3D SMBIOS_STRING_MAX_LENGTH * sizeof (CHAR16); + + // + // Format of PcdFirmwareVersionString is + // "(MAJOR_VER).(MINOR_VER).(BUILD) Build YYYY.MM.DD", we only need + // "(MAJOR_VER).(MINOR_VER).(BUILD)" showed in BIOS version. Using + // space character to determine this string. Another case uses null + // character to end while loop. + // + while (*FirmwareVersionPcdPtr !=3D ' ' && *FirmwareVersionPcdPtr !=3D '\= 0') { + FirmwareVersionStrLen++; + FirmwareVersionPcdPtr++; + } + + FirmwareVersionPcdPtr =3D (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVersionSt= ring); + UnicodeStrLen =3D FirmwareVersionStrLen * sizeof (CHAR16); + CopyMem (UnicodeStr, FirmwareVersionPcdPtr, UnicodeStrLen); + + GetScpVersion (&ScpVersion); + GetScpBuild (&ScpBuild); + if ((ScpVersion =3D=3D NULL) || (ScpBuild =3D=3D NULL)) { + DEBUG (( + DEBUG_ERROR, + "%a:%d: Fail to get SMpro/PMpro information\n", + __func__, + __LINE__ + )); + UnicodeSPrint ( + Version, + FirmwareVersionStrSize, + L"TianoCore %.*s (SYS: 0.00.00000000)", + FirmwareVersionStrLen, + (UINT16 *)UnicodeStr + ); + } else { + UnicodeSPrint ( + Version, + FirmwareVersionStrSize, + L"TianoCore %.*s (SYS: %a.%a)", + FirmwareVersionStrLen, + (UINT16 *)UnicodeStr, + ScpVersion, + ScpBuild + ); + } +} + /** Updates the HII string for the specified field. =20 @param HiiHandle The HII handle. @@ -230,7 +310,91 @@ OemUpdateSmbiosInfo ( IN OEM_MISC_SMBIOS_HII_STRING_FIELD Field ) { - return; + EFI_STRING UnicodeString; + UINT8 StringLength; + + StringLength =3D SMBIOS_STRING_MAX_LENGTH * sizeof (CHAR16); + UnicodeString =3D AllocatePool (StringLength); + if (UnicodeString =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "%a:%d: There is not enough memory remaining to satisfy the request\= n", + __func__, + __LINE__)); + + goto Exit; + } + + switch (Field) { + case ProductNameType01: + case SystemManufacturerType01: + case VersionType01: + case SerialNumType01: + case SkuNumberType01: + UnicodeSPrint ( + UnicodeString, + StringLength, + OEM_DEFAULT_INFORMATION + ); + break; + + case FamilyType01: + UnicodeSPrint ( + UnicodeString, + StringLength, + IsAc01Processor () ? L"Altra\0" : L"Altra Max\0" + ); + break; + + case ProductNameType02: + case AssetTagType02: + case VersionType02: + case SerialNumberType02: + case BoardManufacturerType02: + UnicodeSPrint ( + UnicodeString, + StringLength, + OEM_DEFAULT_INFORMATION + ); + break; + + case ChassisLocationType02: + UnicodeSPrint ( + UnicodeString, + StringLength, + L"Base of Chassis" + ); + break; + + case SerialNumberType03: + case VersionType03: + case ManufacturerType03: + case AssetTagType03: + case SkuNumberType03: + UnicodeSPrint ( + UnicodeString, + StringLength, + OEM_DEFAULT_INFORMATION + ); + break; + + case BiosVersionType00: + UpdateFirmwareVersionString (UnicodeString); + break; + + default: + UnicodeSPrint ( + UnicodeString, + StringLength, + L"Not Specified" + ); + } + + // Update string value for respective token. + HiiSetString (HiiHandle, TokenToUpdate, UnicodeString, NULL); + +Exit: + FreePool (UnicodeString); } =20 /** Fetches the Type 32 boot information status. @@ -323,3 +487,81 @@ OemGetChassisNumPowerCords ( { return 2; } + +/** Fetches the BIOS release. + + @return The BIOS release. +**/ +UINT16 +EFIAPI +OemGetBiosRelease ( + VOID + ) +{ + UINT16 BiosRelease; + + BiosRelease =3D (UINT16)(((PcdGet8 (PcdSmbiosTables0MajorVersion)) << 8) + | PcdGet8 (PcdSmbiosTables0MinorVersion)); + + return BiosRelease; +} + +/** + Fetches the embedded controller firmware release. + + @return UINT16 The embedded controller firmware release. +**/ +UINT16 +EFIAPI +OemGetEmbeddedControllerFirmwareRelease ( + VOID + ) +{ + CHAR8 AsciiScpVer[SCP_VERSION_STRING_MAX_LENGTH]; + UINT8 *ScpVer =3D NULL; + UINT8 Index; + UINT16 FirmwareRelease; + + GetScpVersion (&ScpVer); + if (ScpVer =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "%a:%d: Fail to get SMpro/PMpro information\n", + __func__, + __LINE__)); + + return 0xFFFF; + } + + CopyMem ((VOID *)AsciiScpVer, (VOID *)ScpVer, AsciiStrLen ((CHAR8 *)ScpV= er)); + /* The AsciiVersion is formated as "major.minor" */ + for (Index =3D 0; Index < (UINTN)AsciiStrLen (AsciiScpVer); Index++) { + if (AsciiScpVer[Index] =3D=3D '.') { + AsciiScpVer[Index] =3D '\0'; + break; + } + } + + FirmwareRelease =3D ((UINT8)AsciiStrDecimalToUintn (AsciiScpVer) << 8) + + (UINT8)AsciiStrDecimalToUintn (AsciiScpVer + Index += 1); + + return FirmwareRelease; +} + +/** + Fetches the system UUID. + + @param[out] SystemUuid The pointer to the buffer to store the System= UUID. +**/ +VOID +EFIAPI +OemGetSystemUuid ( + OUT GUID *SystemUuid + ) +{ + if (SystemUuid =3D=3D NULL) { + return; + } + + CopyGuid (SystemUuid, &gZeroGuid); +} diff --git a/Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLi= bCommon.c b/Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLib= Common.c index 919d9d77b25c..853ab5543f11 100644 --- a/Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLibCommon= .c +++ b/Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLibCommon= .c @@ -513,6 +513,48 @@ GetNumberOfConfiguredCPMs ( return Count; } =20 +/** + Get version of SCP. + + @param[out] ScpVer Pointer to contain version of SCP value. +**/ +VOID +EFIAPI +GetScpVersion ( + UINT8 **ScpVer + ) +{ + PLATFORM_INFO_HOB *PlatformHob; + + PlatformHob =3D GetPlatformHob (); + if (PlatformHob !=3D NULL) { + *ScpVer =3D (UINT8 *)PlatformHob->SmPmProVer; + } else { + *ScpVer =3D NULL; + } +} + +/** + Get date of build release for SCP. + + @param[out] ScpBuild Pointer to contain date of build release for SC= P. +**/ +VOID +EFIAPI +GetScpBuild ( + UINT8 **ScpBuild + ) +{ + PLATFORM_INFO_HOB *PlatformHob; + + PlatformHob =3D GetPlatformHob (); + if (PlatformHob !=3D NULL) { + *ScpBuild =3D (UINT8 *)PlatformHob->SmPmProBuild; + } else { + *ScpBuild =3D NULL; + } +} + /** Set the number of configured CPM per socket. =20 --=20 2.39.0 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105267): https://edk2.groups.io/g/devel/message/105267 Mute This Topic: https://groups.io/mt/99111898/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sat May 18 19:48:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+105268+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+105268+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1684944216881975.5264072395189; Wed, 24 May 2023 09:03:36 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id sN32YY1788612xG7BWScaUAQ; Wed, 24 May 2023 09:03:36 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.112]) by mx.groups.io with SMTP id smtpd.web11.1187.1684888870300025463 for ; Tue, 23 May 2023 17:41:10 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aQEpvD2gWEi1yGcp4UbNjDfkF+EqVu9I+J+48IKyK41m/+h8bcPe4lxm7+Mmt0xaiCBPRxTNRFaD37ObgWDwA36xrj5JQInuxhah/phbDCOzkUt5xtNDAj+xPE2pC+8FQi8c/OOd/1SSva4omCM9jmccTxt1AcqMoAQQ3gGwf9v9b9MfwGMyOfbErEOwEAfT3nZCTEsgLJPGdqLvvSQCYDLFyNyW9tRziWgNAEu5R9GxqP3vGOMcsmDEy6nIvq/Ezu8O9ZrmX6eDSAC5dLqUIDIXNlkKrW+ufg+6jhvzWedYGD8LFSK62Mh4dn4JdCgIm0nMD8mhoh6fzU4ngkY6pA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BaPO3X45KQSQG4XSfJy/PBuZ0asMhIuBktw8FK0WZvU=; b=kG19menfY4xyMxZ8gvC+H4N3EGVWopaJMP6SCErS3FzVBLt9n0sd9jw+hNReQlLIAnU5DxqSO79OIYAVtlIe2bS7OWV/i4hQWcw/BNbMQ6XTkYJ9TXRMzuUmhzMzQiSeJ/brmrkRjAaR1YphiJrK2hydq2lXwe7lESTyl7Y+eOHbhrJoLzl6vZCLyCCOVSRDJS3OuJA1mmoSMNJ+w69PeOFEKxKnbBbQNXS0ecuNcKcivd9QHdIbMpn8AidpC67rK78V+b0QobfmBsyvoPrtZl5HUlAsE2VKretZCMoI1+m9kAEVvEimPFZyXP3lZEDx3aYiM4/ELEB7e7yvHux5Uw== 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 X-Received: from PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) by MW6PR01MB8270.prod.exchangelabs.com (2603:10b6:303:241::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.28; Wed, 24 May 2023 00:41:05 +0000 X-Received: from PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1]) by PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1%6]) with mapi id 15.20.6411.019; Wed, 24 May 2023 00:41:05 +0000 From: "Minh Nguyen via groups.io" To: devel@edk2.groups.io CC: patches@amperecomputing.com, quic_llindhol@quicinc.com, ardb+tianocore@kernel.org, nhi@os.amperecomputing.com, minhnguyen1@os.amperecomputing.com Subject: [edk2-devel] [edk2-platforms][PATCH 3/4] JadePkg: Refactor SmbiosPlatformDxe Date: Wed, 24 May 2023 07:40:36 +0700 Message-ID: <20230524004037.39269-4-minhnguyen1@os.amperecomputing.com> In-Reply-To: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> References: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> X-ClientProxiedBy: SI2P153CA0021.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::20) To PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR01MB8048:EE_|MW6PR01MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 7c40862d-1358-425c-d444-08db5bef8e90 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: tPSKzXFyilOYShQZulTNYesxbDxSq86FdIxZAgHJK16i8wo9f1iwynSPODaE4ARj1UIHQ89uoFgjIhKO5KnoapUoiXHcRJS06pk7WUlLh7fVh63xSrZOe9vMzz6NHq3FkRlfRKnmE8RG2glN2sWSpqJWy7vKikRSirKBtUrk29qNhZvhLAhf/lQent9qTqELJYCLgCaOmylTbV1AHsOIunI6+FkMs+JjB14lFivsOgHBjooCh9kEiGo05wQAAqXPIjBWddyhgc/EpfV8iyUhJVKF4iHOL4nFlI3H5VGs/HFDsh47UDhvFg9Urfct5eXosR+mLir4H+9UKeCptz7zaI7z/D/KPTl/Zf7FMBNE70/ePhGth/WeVCCG2k750IIbyU2R5Lb83qm1+IXtg8eKsrYsGhxW1uepIclMQpXApDqLBFfBCPEpU27cveDFN9v7bqnq2Gz/fSVdvB/Isqn4cmCz+ojwksVIgfDZxvSSvfEK+lAzFHj4eUM8MrFPpt7Jg7G9sUuV4MYi+09PGMZpbTXnLkTXqtxyZ3QbQhraG9RhNS459m7Fw1F4/XdxCQeqWIUA3caJXAIfh4TKHjcFYiUmqKTZ0tNUBHPAKo11LItIux9Qw8C+fZ8H0UskHKgItmUneo4sZDQ9omvg7DK80g== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VNRlKjiLGcfPZE90Bdm433fy4tZ9s61g/wOHA/n/f4o+avj/mwoRJuIqNZYB?= =?us-ascii?Q?NgvvphCWFlnGmRGv5I034y0M8+A6dHMaIfZ4TXJqLmgHekIrZrHLRrUHbs2G?= =?us-ascii?Q?jsXiflk3WaAwDHawydF3IRV1o1c9WhuD4RZkv0NWrpv9b4NZu7Fbj0S1XXg8?= =?us-ascii?Q?om3eYtrgcfwSSk2YTwckBENwAG2tJAtnM7HycwqLK5UjaiBbgAnY/jRkjdgj?= =?us-ascii?Q?8tpW5FUAC1ZyZQbOEvTw9ZbkbPN/G0n4C6SUZI2DKZ13DNO8ip8vtyKtsnob?= =?us-ascii?Q?4YnSyHfbXQsiPes3rOayIisRiJOS0hlfAnLq1RcMiPf0nOrYBNNV73urFzCJ?= =?us-ascii?Q?T2+eE7A1phZWhvhS41FE94L3Zqp7zGgQWfOV9xpmZYnLrhPBRSaNWSfcUWyn?= =?us-ascii?Q?i6kHcM0Acw3R0aax/pNC0/kHAO+ZsKAxKklXEw67dkVhRwC8jWjKPHx3QeHB?= =?us-ascii?Q?GPcmRXLCG2PFUNFnZ90gSA1yrUJiI244ddCVMhF0iC8XwG48xP1Xczai4cL3?= =?us-ascii?Q?0Ob7OIzykW24W8OM+/bDxlLYwm4PTwSY3gZBbNSGiJqRp83x1yMWh6FNXKI7?= =?us-ascii?Q?tLSqzAsMvxrnonYlWJq/HVxqX2bz83Dgt7pIW/W5hNIccE6hdNH8aRb/fB6y?= =?us-ascii?Q?sDsAagM/zQEHi5bR7gW1C43r06W80fhgV3MJK4hP2JLNF7BhQ+Ag9O+bV12o?= =?us-ascii?Q?pjp/unhprQG9Lq79mhiurP03ECh9/IBy/ojZ1iz/vKChz5wx7wtR+RWBiQDf?= =?us-ascii?Q?0srG31WGckNKyd7jX/sV0MvUyY+OEmih35BfIYU8pPALmynApSKpUGONVWcS?= =?us-ascii?Q?R0Pf8sXsuwWSNsPXHEzdHbnHowH28PCWyDrWQAspb3xtrhUFL0Q3pfvDk8FT?= =?us-ascii?Q?sqSDx2Hme44sQLIMyp2O6Ax6jfDjSmvd8IPU+NiMjGDcb0hyjQzfoSDeyvu/?= =?us-ascii?Q?p8YDKEP608gZboLFWHjZBfVYINfeHxkuuzYeiPBPqqjFYrDPf0LlimZCoai4?= =?us-ascii?Q?egp9KVTdr+01lfazTxdv3d5GVWZ9agptll0Z5iqBh3167ij+Q76NzWO8Jq7Q?= =?us-ascii?Q?gjlFOuMjYWlbs/Mxg5mSQUOcBkT7Oo9oFn4sv/yipGq62RDfhag1kgfMFI3K?= =?us-ascii?Q?UJAK/Y/R0Ao6R33idUGcPcrjH0RiAc8kewkBhc0D9OvtLZr788Qi4szgvHYN?= =?us-ascii?Q?2/XuCzuAE1+/qgXbI6psrykDXgoMNzCn0kaRo3xjjncR0wnpITBSbJ+r0lza?= =?us-ascii?Q?Yfn+UlCCjuFY5x0cjtT1Rnjer0OnxO2aAPSiAoKf02pMJezby7iYCm7L7Eaf?= =?us-ascii?Q?JfkPofyjWv/h6hhx2D8+q6GqRxvY0hPhknkO5J3HqwNy+N6hV/ISrbchET/d?= =?us-ascii?Q?jBEUvfZsZKwU2PCYNY1PSyeqga0aUO5jc3Kci2QVxosUmUmJe4PTCyTxFtKR?= =?us-ascii?Q?jhFuE9RTRUxSZr2/vuhxtBl3O6z26Xgz0FsNaII00WXVXLyGsvdY5SZUIYbQ?= =?us-ascii?Q?1ZSeusFEY9HCVZZb2dIeQzzPt8keBcGcbhFrAODccBOQ0B0UgImqtxC0KIpe?= =?us-ascii?Q?Ef9HadZ5Nxt/0NzOioPOnkZ2CithrfMAsEqjRIDLthCytTEtoB0bYTFDGUfY?= =?us-ascii?Q?ERpzrNTR9gtp1ii64hdvGfIPROip06Tww1Dxlx+JUsJE?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c40862d-1358-425c-d444-08db5bef8e90 X-MS-Exchange-CrossTenant-AuthSource: PH0PR01MB8048.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2023 00:41:05.4386 (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: jU9l4J62Tjpsfrb+YzciWUtMFpDZLQEB4HNgFc9/G05hCpVehSY/1UaNA+FTvBozMgqMqI53Sd/PVSA4LbR9q+GVJN7OceRTufySipi4yaThiYyepf1a6jLiooJkfUEw X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR01MB8270 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,minhnguyen1@os.amperecomputing.com X-Gm-Message-State: dqSbUKJMsTDPLLlLHMYSu1w4x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1684944216; bh=DjSkQRAGkrz3LS+8Y9wFIH9uVD8TpBn7hi0/ZnsKLvA=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=WTLKl+FBypz0QM+eHqlyVERmv0UxYfg+bXuB5ksKVvuwNCL+oUId6oHWK4hVGZ6emR9 X8v4QyqEsbFfFCKp4+jygUusD7Bo7NPWmTGtOOrquPdeCL3GGyUbvobDwYf0vkvp45Ipi HNV17Pc09AgdQf7Nl7yiPMLMm7R1qnf4Nao= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1684944218873100010 Content-Type: text/plain; charset="utf-8" This refactor is derrived from ArmPkg/SMBIOS and customize to adapt with platform. These changes help to separate each Type of SMBIOS table into individual modules. It makes the structure of SmbiosPlatformDxe module clear and easier to add new type of table. Signed-off-by: Minh Nguyen --- Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf = | 27 +- Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.h = | 201 ++++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c = | 1083 ++++++++------------ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeDataTab= le.c | 72 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPortConne= ctorData.c | 142 +++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPortConne= ctorFunction.c | 57 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSystemSlo= tData.c | 268 +++++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSystemSlo= tFunction.c | 58 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemString= Data.c | 42 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemString= Function.c | 57 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/PlatformHardwareS= ecurityData.c | 42 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/PlatformHardwareS= ecurityFunction.c | 57 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/PlatformIpmiDevic= eData.c | 46 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/PlatformIpmiDevic= eFunction.c | 39 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnboardDe= vicesExtendedData.c | 47 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnboardDe= vicesExtendedFunction.c | 57 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeStrings= .uni | 21 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPortConne= ctor.uni | 22 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSystemSlo= t.uni | 20 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemString= .uni | 11 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnboardDe= vicesExtended.uni | 10 + 21 files changed, 1735 insertions(+), 644 deletions(-) diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.inf b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfor= mDxe.inf old mode 100644 new mode 100755 index 549aa38b1774..83ff918fc42d --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf @@ -15,7 +15,22 @@ [Defines] ENTRY_POINT =3D SmbiosPlatformDxeEntry =20 [Sources] + SmbiosPlatformDxe.h SmbiosPlatformDxe.c + SmbiosPlatformDxeDataTable.c + SmbiosPlatformDxeStrings.uni + Type08/PlatformPortConnectorData.c + Type08/PlatformPortConnectorFunction.c + Type09/PlatformSystemSlotData.c + Type09/PlatformSystemSlotFunction.c + Type11/PlatformOemStringData.c + Type11/PlatformOemStringFunction.c + Type24/PlatformHardwareSecurityData.c + Type24/PlatformHardwareSecurityFunction.c + Type38/PlatformIpmiDeviceData.c + Type38/PlatformIpmiDeviceFunction.c + Type41/PlatformOnboardDevicesExtendedData.c + Type41/PlatformOnboardDevicesExtendedFunction.c =20 [Packages] ArmPkg/ArmPkg.dec @@ -25,19 +40,23 @@ [Packages] Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec =20 [LibraryClasses] + AmpereCpuLib BaseLib BaseMemoryLib DebugLib + HiiLib MemoryAllocationLib + NVParamLib + #IOExpanderLib UefiBootServicesTableLib UefiDriverEntryPoint UefiLib =20 [Protocols] - gEfiSmbiosProtocolGuid ## CONSUMED + gEfiSmbiosProtocolGuid ## CONSUMED =20 -[Pcd] - gArmTokenSpaceGuid.PcdFdSize +[Guids] + gCpuConfigFormSetGuid =20 [Depex] - gEfiSmbiosProtocolGuid + TRUE diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.h b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformD= xe.h new file mode 100644 index 000000000000..df7d44ffecb6 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.h @@ -0,0 +1,201 @@ +/** @file + Header file for the SmbiosPlatformDxe Driver. + + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+ Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015, Linaro Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef SMBIOS_PLATFORM_DXE_H_ +#define SMBIOS_PLATFORM_DXE_H_ + +#include +#include + +#define NULL_TERMINATED_TYPE 0xFF +#define NULL_TERMINATED_TOKEN 0xFFFF + +#define END_OF_SMBIOS_TABLE_TYPE 127 +#define SMBIOS_UNICODE_STRING_MAX_LENGTH (SMBIOS_STRING_MAX_LENGTH * sizeo= f (CHAR16)) + +typedef enum { + ADDITIONAL_STR_INDEX_1 =3D 1, + ADDITIONAL_STR_INDEX_2, + ADDITIONAL_STR_INDEX_3, + ADDITIONAL_STR_INDEX_4, + ADDITIONAL_STR_INDEX_5, + ADDITIONAL_STR_INDEX_6, + ADDITIONAL_STR_INDEX_7, + ADDITIONAL_STR_INDEX_8, + ADDITIONAL_STR_INDEX_9, + ADDITIONAL_STR_INDEX_MAX +} ADDITIONAl_STR_INDEX; + +// +// Data table entry update function. +// +typedef EFI_STATUS (EFIAPI SMBIOS_PLATFORM_DXE_DATA_FUNCTION)( + IN VOID *RecordData, + IN VOID *StrToken +); + +#pragma pack(1) +// +// Data table entry definition. +// +typedef struct { + // + // Intermediate input data for SMBIOS record + // + VOID *RecordData; + VOID *StrToken; + SMBIOS_PLATFORM_DXE_DATA_FUNCTION *Function; +} SMBIOS_PLATFORM_DXE_DATA_TABLE; + +typedef struct { + UINT16 TokenArray[ADDITIONAL_STR_INDEX_MAX]; + UINT8 TokenLen; +} STR_TOKEN_INFO; +#pragma pack() + +// +// SMBIOS table extern definitions. +// +#define SMBIOS_PLATFORM_DXE_TABLE_EXTERNS(SMBIOS_TYPE, BASE_NAME) \ +extern SMBIOS_TYPE BASE_NAME ## Data[]; \ +extern STR_TOKEN_INFO BASE_NAME ## StrToken[]; \ +extern SMBIOS_PLATFORM_DXE_DATA_FUNCTION BASE_NAME ## Function; + +// +// SMBIOS data table entries. +// +// This is used to define tables for structure pointer, functions and +// string Tokens in order to iterate through the list of tables, populate +// them and add them into the system. +#define SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION(BASE_NAME) \ +{ \ + BASE_NAME ## Data, \ + BASE_NAME ## StrToken, \ + BASE_NAME ## Function \ +} + +// +// Global definition macros. +// +#define SMBIOS_PLATFORM_DXE_TABLE_DATA(SMBIOS_TYPE, BASE_NAME) \ + SMBIOS_TYPE BASE_NAME ## Data[] + +#define SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA(BASE_NAME) \ + STR_TOKEN_INFO BASE_NAME ## StrToken[] + +#define SMBIOS_PLATFORM_DXE_TABLE_FUNCTION(BASE_NAME) \ + EFI_STATUS EFIAPI BASE_NAME ## Function( \ + IN VOID *RecordData, \ + IN VOID *StrToken \ + ) + +/** + Adds an SMBIOS record. + + @param Buffer The data for the SMBIOS record. + The format of the record is determined by + EFI_SMBIOS_TABLE_HEADER.Type. The size of= the + formatted area is defined by EFI_SMBIOS_T= ABLE_HEADER.Length + and either followed by a double-null (0x0= 000) or a set + of null terminated strings and a null. + @param SmbiosHandle A unique handle will be assigned to the S= MBIOS record + if not NULL. + + @retval EFI_SUCCESS Record was added. + @retval EFI_OUT_OF_RESOURCES Record was not added due to lack of syste= m resources. + @retval EFI_ALREADY_STARTED The SmbiosHandle passed in was already in= use. + @retval EFI_INVALID_PARAMETER Buffer is NULL. +**/ +EFI_STATUS +SmbiosPlatformDxeAddRecord ( + IN UINT8 *Buffer, + IN OUT EFI_SMBIOS_HANDLE *SmbiosHandle OPTIONAL + ); + +/** + Fetches a list of the specified SMBIOS Table types. + + @param[in] SmbiosType The type of table to fetch. + @param[out] HandleArray The array of handles. + @param[out] HandleCount Number of handles in the array. +**/ +VOID +SmbiosPlatformDxeGetLinkTypeHandle ( + IN UINT8 SmbiosType, + OUT SMBIOS_HANDLE **HandleArray, + OUT UINTN *HandleCount + ); + +/** + Create SMBIOS Table Record with additional strings. + + @param[out] TableRecord Table Record is created. + @param[in] InputData Input Table from Data Table. + @param[in] TableTypeSize Size of Table with specified type. + @param[in] StrToken Pointer to Token of additional strings in HI= I Database. +**/ +VOID +SmbiosPlatformDxeCreateTable ( + OUT VOID **TableRecord, + IN VOID **InputData, + IN UINT8 TableTypeSize, + IN STR_TOKEN_INFO *StrToken + ); + +/** + Save default strings of HII Database in case multiple tables with the sa= me type using + these data for setting additional strings. After using, default strings = will be set + back again in HII Database for other tables with the same type to use. + + @param[in] StrToken Pointer to Token of additional strings in HII D= atabase. + + @retval EFI_SUCCESS Saved default strings of HII Database successfu= lly. + Other Failed to save default strings of HII Database. +**/ +EFI_STATUS +SmbiosPlatformDxeSaveHiiDefaultString ( + IN STR_TOKEN_INFO *StrToken + ); + +/** + Restore default strings of HII Database after using for setting addition= al strings. + + @param[in] StrToken Pointer to Token of additional strings in HII D= atabase. + + @retval EFI_SUCCESS Restore default strings off HII Database succes= sfully. + Other Failed to restore default strings of HII Databa= se. +**/ +EFI_STATUS +SmbiosPlatformDxeRestoreHiiDefaultString ( + IN STR_TOKEN_INFO *StrToken + ); + +// +// Data Table Array +// +extern SMBIOS_PLATFORM_DXE_DATA_TABLE mSmbiosPlatformDxeDataTable[]; + +// +// Data Table Array Entries +// +extern UINTN mSmbiosPlatformDxeDataTableEntries; + +// +// HII Database Handle +// +extern EFI_HII_HANDLE mSmbiosPlatformDxeHiiHandle; + +extern UINT8 SmbiosPlatformDxeStrings[]; + +#endif // SMBIOS_PLATFORM_DXE_H_ diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformD= xe.c index 448912f146ec..faa49cf9ca6b 100644 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c @@ -1,657 +1,46 @@ /** @file + This driver parses the mSmbiosPlatformDxeDataTable structure + and reports any generated data using SMBIOS protocol. =20 - Copyright (c) 2020 - 2023, Ampere Computing LLC. All rights reserved.
+ Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ =20 + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+ Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015, Linaro Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent =20 **/ =20 -#include - -#include #include #include #include +#include #include #include #include -#include =20 -#define CHASSIS_VERSION_TEMPLATE "None \0" -#define CHASSIS_SERIAL_TEMPLATE "Serial Not Set \0" -#define CHASSIS_ASSET_TAG_TEMPLATE "Asset Tag Not Set \0" +#include "SmbiosPlatformDxe.h" =20 -#define TYPE8_ADDITIONAL_STRINGS \ - "VGA1 - Rear VGA Connector\0" \ - "DB-15 Male (VGA) \0" +#define SIZE_OF_HII_DATABASE_DEFAULT_STRINGS \ +ADDITIONAL_STR_INDEX_MAX * SMBIOS_UNICODE_STRING_MAX_LENGTH =20 -#define TYPE9_ADDITIONAL_STRINGS \ - "Socket 0 Riser 1 x32 - Slot 1\0" +STATIC EFI_HANDLE mSmbiosPlatformDxeImageHandle; +STATIC EFI_STRING mDefaultHiiDatabaseStr; +STATIC EFI_SMBIOS_PROTOCOL *mPlatformDxeSmbios =3D NULL; =20 -#define TYPE11_ADDITIONAL_STRINGS \ - "www.amperecomputing.com\0" - -#define TYPE41_ADDITIONAL_STRINGS \ - "Onboard VGA\0" - -#define ADDITIONAL_STR_INDEX_1 0x01 -#define ADDITIONAL_STR_INDEX_2 0x02 -#define ADDITIONAL_STR_INDEX_3 0x03 -#define ADDITIONAL_STR_INDEX_4 0x04 -#define ADDITIONAL_STR_INDEX_5 0x05 -#define ADDITIONAL_STR_INDEX_6 0x06 - -// -// Type definition and contents of the default SMBIOS table. -// This table covers only the minimum structures required by -// the SMBIOS specification (section 6.2, version 3.0) -// -#pragma pack(1) -typedef struct { - SMBIOS_TABLE_TYPE8 Base; - CHAR8 Strings[sizeof (TYPE8_ADDITIONAL_STRINGS)]; -} ARM_TYPE8; - -typedef struct { - SMBIOS_TABLE_TYPE9 Base; - CHAR8 Strings[sizeof (TYPE9_ADDITIONAL_STRINGS)]; -} ARM_TYPE9; - -typedef struct { - SMBIOS_TABLE_TYPE11 Base; - CHAR8 Strings[sizeof (TYPE11_ADDITIONAL_STRINGS)]; -} ARM_TYPE11; - -typedef struct { - SMBIOS_TABLE_TYPE41 Base; - CHAR8 Strings[sizeof (TYPE41_ADDITIONAL_STRINGS)]; -} ARM_TYPE41; - -#pragma pack() - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8Vga =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortConnectorTypeDB15Female, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortTypeOther, // ExternalConnectorType; - PortTypeVideoPort, // PortType; - }, - "VGA1 - Rear VGA Connector\0" \ - "DB-15 Male (VGA)\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8USBFront =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortConnectorTypeUsb, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortTypeOther, // ExternalConnectorType; - PortTypeUsb, // PortType; - }, - "Front Panel USB 3.0\0" \ - "USB\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8USBRear =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortConnectorTypeUsb, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortTypeOther, // ExternalConnectorType; - PortTypeUsb, // PortType; - }, - "Rear Panel USB 3.0\0" \ - "USB\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8NetRJ45 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortConnectorTypeRJ45, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortConnectorTypeRJ45, // ExternalConnectorType; - PortTypeNetworkPort, // PortType; - }, - "RJ1 - BMC RJ45 Port\0" \ - "RJ45 Connector\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8NetOcp =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortTypeOther, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortTypeOther, // ExternalConnectorType; - PortTypeNetworkPort, // PortType; - }, - "OCP1 - OCP NIC 3.0 Connector\0" \ - "OCP NIC 3.0\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8Uart =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortTypeOther, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortConnectorTypeDB9Female, // ExternalConnectorType; - PortTypeSerial16550Compatible, // PortType; - }, - "UART1 - BMC UART5 Connector\0" \ - "DB-9 female\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk0RiserX32Slot1 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth16X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 0, - 0, - 0, - }, - "S0 Riser 1 x32 - Slot 1\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk0RiserX32Slot2 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 4, - 0, - 0, - }, - "S0 Riser x32 - Slot 2\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk0RiserX32Slot3 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 5, - 0, - 0, - }, - "S0 Riser x32 - Slot 3\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1RiserX24Slot1 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 7, - 0, - 0, - }, - "S1 Riser x24 - Slot 1\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1RiserX24Slot2 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 8, - 0, - 0, - }, - "S1 Riser x24 - Slot 2\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1RiserX24Slot3 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 9, - 0, - 0, - }, - "S1 Riser x24 - Slot 3\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1RiserX8Slot1 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 8, - 0, - 0, - }, - "S1 Riser x8 - Slot 1\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk0OcpNic =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth16X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 1, - 0, - 0, - }, - "S0 OCP NIC 3.0\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1NvmeM2Slot1 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth4X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 5, - 0, - 0, - }, - "S1 NVMe M.2 - Slot 1\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1NvmeM2Slot2 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth4X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 5, - 0, - 0, - }, - "S1 NVMe M.2 - Slot 2\0" -}; - -// Type 11 OEM Strings -STATIC ARM_TYPE11 mArmDefaultType11 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_OEM_STRINGS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE11), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1 - }, - TYPE11_ADDITIONAL_STRINGS -}; - -// Type 24 Hardware Security -STATIC SMBIOS_TABLE_TYPE24 mArmDefaultType24 =3D { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_HARDWARE_SECURITY, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE24), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - 0 -}; - -// Type 38 IPMI Device Information -STATIC SMBIOS_TABLE_TYPE38 mArmDefaultType38 =3D { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_IPMI_DEVICE_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE38), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - IPMIDeviceInfoInterfaceTypeSSIF, - 0x20, - 0x20, - 0xFF, - 0x20 -}; - -// Type 41 Onboard Devices Extended Information -STATIC ARM_TYPE41 mArmDefaultType41 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION, - sizeof (SMBIOS_TABLE_TYPE41), - SMBIOS_HANDLE_PI_RESERVED, - }, - 1, - 0x83, // OnBoardDeviceExtendedTypeVideo, Enabled - 1, - 4, - 2, - 0, - }, - TYPE41_ADDITIONAL_STRINGS -}; - -// Type 42 System Boot Information -STATIC SMBIOS_TABLE_TYPE42 mArmDefaultType42 =3D { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE, - sizeof (SMBIOS_TABLE_TYPE42), - SMBIOS_HANDLE_PI_RESERVED, - }, - MCHostInterfaceTypeOemDefined, - 4, - {0xFF, 0, 0, 0} -}; - -STATIC CONST VOID *DefaultCommonTables[] =3D -{ - &mArmDefaultType8Vga, - &mArmDefaultType8USBFront, - &mArmDefaultType8USBRear, - &mArmDefaultType8NetRJ45, - &mArmDefaultType8NetOcp, - &mArmDefaultType8Uart, - &mArmDefaultType9Sk0RiserX32Slot1, - &mArmDefaultType9Sk0RiserX32Slot2, - &mArmDefaultType9Sk0RiserX32Slot3, - &mArmDefaultType9Sk1RiserX24Slot1, - &mArmDefaultType9Sk1RiserX24Slot2, - &mArmDefaultType9Sk1RiserX24Slot3, - &mArmDefaultType9Sk1RiserX8Slot1, - &mArmDefaultType9Sk0OcpNic, - &mArmDefaultType9Sk1NvmeM2Slot1, - &mArmDefaultType9Sk1NvmeM2Slot2, - &mArmDefaultType11, - &mArmDefaultType24, - &mArmDefaultType38, - &mArmDefaultType41, - &mArmDefaultType42, - NULL -}; - -typedef struct { - CHAR8 MonthNameStr[4]; // example "Jan", Compiler build date, month - CHAR8 DigitStr[3]; // example "01", Smbios date format, month -} MonthStringDig; - -STATIC -UINTN -GetStringPackSize ( - CHAR8 *StringPack - ) -{ - UINTN StrCount; - CHAR8 *StrStart; - - if ((*StringPack =3D=3D 0) && (*(StringPack + 1) =3D=3D 0)) { - return 0; - } - - // String section ends in double-null (0000h) - for (StrCount =3D 0, StrStart =3D StringPack; - ((*StrStart !=3D 0) || (*(StrStart + 1) !=3D 0)); StrStart++, StrCo= unt++) - { - } - - return StrCount + 2; // Included the double NULL -} - -// Update String at String number to String Pack -EFI_STATUS -UpdateStringPack ( - CHAR8 *StringPack, - CHAR8 *String, - UINTN StringNumber - ) -{ - CHAR8 *StrStart; - UINTN StrIndex; - UINTN InputStrLen; - UINTN TargetStrLen; - UINTN BufferSize; - CHAR8 *Buffer; - - StrStart =3D StringPack; - for (StrIndex =3D 1; StrIndex < StringNumber; StrStart++) { - // A string ends in 00h - if (*StrStart =3D=3D 0) { - StrIndex++; - } - // String section ends in double-null (0000h) - if ((*StrStart =3D=3D 0) && (*(StrStart + 1) =3D=3D 0)) { - return EFI_NOT_FOUND; - } - } - - if (*StrStart =3D=3D 0) { - StrStart++; - } - - InputStrLen =3D AsciiStrLen (String); - TargetStrLen =3D AsciiStrLen (StrStart); - BufferSize =3D GetStringPackSize (StrStart + TargetStrLen + 1); - - // Replace the String if length matched - // OR this is the last string - if (InputStrLen =3D=3D TargetStrLen || (BufferSize =3D=3D 0)) { - CopyMem (StrStart, String, InputStrLen); - } - // Otherwise, buffer is needed to apply new string - else { - Buffer =3D AllocateZeroPool (BufferSize); - if (Buffer =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - CopyMem (Buffer, StrStart + TargetStrLen + 1, BufferSize); - CopyMem (StrStart, String, InputStrLen + 1); - CopyMem (StrStart + InputStrLen + 1, Buffer, BufferSize); - - FreePool (Buffer); - } - - return EFI_SUCCESS; -} - -/** - Install a whole table worth of structures - - @param Smbios SMBIOS protocol. - @param DefaultTables A pointer to the default SMBIOS table stru= cture. -**/ -EFI_STATUS -InstallStructures ( - IN EFI_SMBIOS_PROTOCOL *Smbios, - IN CONST VOID *DefaultTables[] - ) -{ - EFI_STATUS Status =3D EFI_SUCCESS; - EFI_SMBIOS_HANDLE SmbiosHandle; - UINTN TableIndex; - - ASSERT (Smbios !=3D NULL); - - for (TableIndex =3D 0; DefaultTables[TableIndex] !=3D NULL; TableIndex++= ) { - SmbiosHandle =3D ((EFI_SMBIOS_TABLE_HEADER *)DefaultTables[TableIndex]= )->Handle; - Status =3D Smbios->Add ( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *)DefaultTables[TableIndex] - ); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: adding %d failed\n", __FUNCTION__, TableIn= dex)); - - // stop adding rather than continuing - return Status; - } - } - - return EFI_SUCCESS; -} - -/** - Install all structures from the DefaultTables structure - - @param Smbios SMBIOS protocol - -**/ -EFI_STATUS -InstallAllStructures ( - IN EFI_SMBIOS_PROTOCOL *Smbios - ) -{ - EFI_STATUS Status =3D EFI_SUCCESS; - - ASSERT (Smbios !=3D NULL); - - // Install Tables - Status =3D InstallStructures (Smbios, DefaultCommonTables); - ASSERT_EFI_ERROR (Status); - - return Status; -} +EFI_HII_HANDLE mSmbiosPlatformDxeHiiHandle; =20 /** - Installs SMBIOS information for ARM platforms - - @param ImageHandle Module's image handle - @param SystemTable Pointer of EFI_SYSTEM_TABLE + Standard EFI driver point. This driver parses the mSmbiosPlatformDataTab= le + structure and reports any generated data using SMBIOS protocol. =20 - @retval EFI_SUCCESS Smbios data successfully installed - @retval Other Smbios data was not installed + @param ImageHandle Handle for the image of this driver. + @param SystemTable Pointer to the EFI System Table. =20 + @retval EFI_SUCCESS The data was successfully stored. + EFI_OUT_OF_RESOURCES There is no remaining memory to satisfy the= request. **/ EFI_STATUS EFIAPI @@ -660,24 +49,438 @@ SmbiosPlatformDxeEntry ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_SMBIOS_PROTOCOL *Smbios; + UINTN Index; + EFI_STATUS Status; + + mSmbiosPlatformDxeImageHandle =3D ImageHandle; + + // + // Allocate buffer to save default strings of HII Database + // + mDefaultHiiDatabaseStr =3D AllocateZeroPool (SIZE_OF_HII_DATABASE_DEFAUL= T_STRINGS); + if (mDefaultHiiDatabaseStr =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] HII Database String allocates memory resource failed.\n", + __func__, + __LINE__ + )); + return EFI_OUT_OF_RESOURCES; + } =20 // - // Find the SMBIOS protocol + // Locate SMBIOS protocol and get HII Database Handle // Status =3D gBS->LocateProtocol ( &gEfiSmbiosProtocolGuid, NULL, - (VOID **)&Smbios + (VOID **)&mPlatformDxeSmbios ); - if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Could not locate SMBIOS protocol. %r\n", + __func__, + __LINE__, + Status + )); return Status; } =20 - Status =3D InstallAllStructures (Smbios); - DEBUG ((DEBUG_ERROR, "SmbiosPlatform install - %r\n", Status)); + mSmbiosPlatformDxeHiiHandle =3D HiiAddPackages ( + &gEfiCallerIdGuid, + mSmbiosPlatformDxeImageHandle, + SmbiosPlatformDxeStrings, + NULL + ); + if (mSmbiosPlatformDxeHiiHandle =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + // + // Iterate through all Data Tables of each Type and call + // function pointer to create and add Table accordingly + // + for (Index =3D 0; Index < mSmbiosPlatformDxeDataTableEntries; Index++) { + Status =3D (*mSmbiosPlatformDxeDataTable[Index].Function)( + mSmbiosPlatformDxeDataTable[Index].RecordData, + mSmbiosPlatformDxeDataTable[Index].StrToken + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Could not install SMBIOS Table Type%d. %r\n", + __func__, + __LINE__, + ((EFI_SMBIOS_TABLE_HEADER *)(mSmbiosPlatformDxeDataTable[Index].Re= cordData))->Type, + Status + )); + } + } + + // + // Free buffer after all Tables were installed + // + FreePool (mDefaultHiiDatabaseStr); + + return Status; +} + +/** + Adds an SMBIOS record. + + @param Buffer The data for the SMBIOS record. + The format of the record is determined by + EFI_SMBIOS_TABLE_HEADER.Type. The size of= the + formatted area is defined by EFI_SMBIOS_T= ABLE_HEADER.Length + and either followed by a double-null (0x0= 000) or a set + of null terminated strings and a null. + @param SmbiosHandle A unique handle will be assigned to the S= MBIOS record + if not NULL. + + @retval EFI_SUCCESS Record was added. + @retval EFI_OUT_OF_RESOURCES Record was not added due to lack of syste= m resources. + @retval EFI_ALREADY_STARTED The SmbiosHandle passed in was already in= use. + @retval EFI_INVALID_PARAMETER Buffer is NULL. +**/ +EFI_STATUS +SmbiosPlatformDxeAddRecord ( + IN UINT8 *Buffer, + IN OUT EFI_SMBIOS_HANDLE *SmbiosHandle OPTIONAL + ) +{ + EFI_STATUS Status; + EFI_SMBIOS_HANDLE Handle; + + if (Buffer =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Buffer is NULL - Invalid parameter. %r\n", + __func__, + __LINE__ + )); + return EFI_INVALID_PARAMETER; + } + + Handle =3D SMBIOS_HANDLE_PI_RESERVED; + if (SmbiosHandle !=3D NULL) { + Handle =3D *SmbiosHandle; + } + + Status =3D mPlatformDxeSmbios->Add ( + mPlatformDxeSmbios, + NULL, + &Handle, + (EFI_SMBIOS_TABLE_HEADER *)Buffer + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] SMBIOS Type%d Table Log Failed! %r\n", + __func__, + __LINE__, + ((EFI_SMBIOS_TABLE_HEADER *)Buffer)->Type, + Status + )); + } + if (SmbiosHandle !=3D NULL) { + *SmbiosHandle =3D Handle; + } + + return Status; +} + +/** + Fetches the number of handles of the specified SMBIOS type. + + @param SmbiosType The type of SMBIOS record to look for. + + @retval UINTN The number of handles. +**/ +STATIC +UINTN +GetHandleCount ( + IN UINT8 SmbiosType + ) +{ + UINTN HandleCount; + EFI_STATUS Status; + EFI_SMBIOS_HANDLE SmbiosHandle; + EFI_SMBIOS_TABLE_HEADER *Record; + + HandleCount =3D 0; + SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; + // Iterate through entries to get the number + do { + Status =3D mPlatformDxeSmbios->GetNext ( + mPlatformDxeSmbios, + &SmbiosHandle, + &SmbiosType, + &Record, + NULL + ); + + if (Status =3D=3D EFI_SUCCESS) { + HandleCount++; + } + } while (Status !=3D EFI_NOT_FOUND); + + return HandleCount; +} + +/** + Fetches a list of the specified SMBIOS Table types. + + @param[in] SmbiosType The type of table to fetch. + @param[out] HandleArray The array of handles. + @param[out] HandleCount Number of handles in the array. +**/ +VOID +SmbiosPlatformDxeGetLinkTypeHandle ( + IN UINT8 SmbiosType, + OUT SMBIOS_HANDLE **HandleArray, + OUT UINTN *HandleCount + ) +{ + UINTN Index; + EFI_STATUS Status; + EFI_SMBIOS_HANDLE SmbiosHandle; + EFI_SMBIOS_TABLE_HEADER *Record; + + if (SmbiosType > END_OF_SMBIOS_TABLE_TYPE) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Invalid SMBIOS Type.\n", + __func__, + __LINE__ + )); + } + + *HandleCount =3D GetHandleCount (SmbiosType); + *HandleArray =3D AllocateZeroPool (sizeof (SMBIOS_HANDLE) * (*HandleCoun= t)); + if (*HandleArray =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] HandleArray allocates memory resource failed.\n", + __func__, + __LINE__ + )); + *HandleCount =3D 0; + return; + } + + SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; + + for (Index =3D 0; Index < (*HandleCount); Index++) { + Status =3D mPlatformDxeSmbios->GetNext ( + mPlatformDxeSmbios, + &SmbiosHandle, + &SmbiosType, + &Record, + NULL + ); + + if (Status =3D=3D EFI_SUCCESS) { + (*HandleArray)[Index] =3D Record->Handle; + } else { + // It should never reach here + ASSERT (FALSE); + break; + } + } +} + +/** + Create SMBIOS Table Record with additional strings. + + @param[out] TableRecord Table Record is created. + @param[in] InputData Input Table from Data Table. + @param[in] TableTypeSize Size of Table with specified type. + @param[in] StrToken Pointer to Token of additional strings in HI= I Database. +**/ +VOID +SmbiosPlatformDxeCreateTable ( + OUT VOID **TableRecord, + IN VOID **InputData, + IN UINT8 TableTypeSize, + IN STR_TOKEN_INFO *StrToken + ) +{ + CHAR8 *StrStart; + UINT8 TableSize; + UINT8 SmbiosAdditionalStrLen; + UINT8 Index; + EFI_STRING SmbiosAdditionalStr; + + if (*InputData =3D=3D NULL || + StrToken =3D=3D NULL || + TableTypeSize < sizeof (EFI_SMBIOS_TABLE_HEADER) + ) + { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Invalid parameter to create SMBIOS Table\n", + __func__, + __LINE__ + )); + return; + } + + // + // Calculate size of Table. + // + if (StrToken->TokenLen !=3D 0) { + TableSize =3D TableTypeSize + 1; // Last byte is Null-terminated for T= able with Null-terminated additional strings + for (Index =3D 0; Index < StrToken->TokenLen; Index++) { + SmbiosAdditionalStr =3D HiiGetPackageString ( + &gEfiCallerIdGuid, + StrToken->TokenArray[Index], + NULL + ); + TableSize +=3D StrLen (SmbiosAdditionalStr) + 1; + FreePool (SmbiosAdditionalStr); + } + } else { + TableSize =3D TableTypeSize + 1 + 1; // Double-null for Table with no = additional strings + } + + // + // Allocate Table and copy strings from + // HII Database for additional strings. + // + *TableRecord =3D AllocateZeroPool (TableSize); + if (*TableRecord =3D=3D NULL) { + return; + } + CopyMem (*TableRecord, *InputData, TableTypeSize); + StrStart =3D (CHAR8 *)(*TableRecord + TableTypeSize); + for (Index =3D 0; Index < StrToken->TokenLen; Index++) { + SmbiosAdditionalStr =3D HiiGetPackageString ( + &gEfiCallerIdGuid, + StrToken->TokenArray[Index], + NULL + ); + SmbiosAdditionalStrLen =3D StrLen (SmbiosAdditionalStr) + 1; + UnicodeStrToAsciiStrS ( + SmbiosAdditionalStr, + StrStart, + SmbiosAdditionalStrLen + ); + FreePool (SmbiosAdditionalStr); + StrStart +=3D SmbiosAdditionalStrLen; + } +} + +/** + Save default strings of HII Database in case multiple tables with the sa= me type using + these data for setting additional strings. After using, default strings = will be set + back again in HII Database by using SmbiosPlatformDxeRestoreHiiDefaultSt= ring function + for other tables with the same type to use. Before saving HII Database d= efault strings, + buffer for saving need to be available. Otherwise, that means a certain = SMBIOS Table used + this function but forget using SmbiosPlatformDxeRestoreHiiDefaultString = function to free + buffer for other Tables to use so this check is for that purpose. + + @param[in] StrToken Pointer to Token of additional strings in HII D= atabase. + + @retval EFI_SUCCESS Saved default strings of HII Database successfu= lly. + Other Failed to save default strings of HII Database. +**/ +EFI_STATUS +SmbiosPlatformDxeSaveHiiDefaultString ( + IN STR_TOKEN_INFO *StrToken + ) +{ + UINT8 Index; + UINT8 HiiDatabaseStrLen; + EFI_STRING HiiDatabaseStr; + + if (StrToken =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Invalid String Tokens\n", + __func__, + __LINE__ + )); + return EFI_INVALID_PARAMETER; + } + + // + // Start saving HII Default Strings + // + for (Index =3D 0; Index < StrToken->TokenLen; Index++) { + ASSERT (IsZeroBuffer ((VOID *)&mDefaultHiiDatabaseStr[Index * SMBIOS_S= TRING_MAX_LENGTH], SMBIOS_UNICODE_STRING_MAX_LENGTH - 1)); + HiiDatabaseStr =3D HiiGetPackageString ( + &gEfiCallerIdGuid, + StrToken->TokenArray[Index], + NULL + ); + HiiDatabaseStrLen =3D (StrLen (HiiDatabaseStr) + 1) * sizeof (CHAR16); + ASSERT (HiiDatabaseStrLen <=3D SMBIOS_UNICODE_STRING_MAX_LENGTH); + UnicodeSPrint ( + (CHAR16 *)&mDefaultHiiDatabaseStr[Index * SMBIOS_STRING_MAX_LENGTH], + HiiDatabaseStrLen, + HiiDatabaseStr + ); + FreePool (HiiDatabaseStr); + } + + return EFI_SUCCESS; +} + +/** + Restore default strings of HII Database after using for setting addition= al strings. + + @param[in] StrToken Pointer to Token of additional strings in HII D= atabase. + + @retval EFI_SUCCESS Restore default strings off HII Database succes= sfully. + Other Failed to restore default strings of HII Databa= se. +**/ +EFI_STATUS +SmbiosPlatformDxeRestoreHiiDefaultString ( + IN STR_TOKEN_INFO *StrToken + ) +{ + UINT8 Index; + EFI_STATUS Status; + + if (StrToken =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Invalid String Tokens\n", + __func__, + __LINE__ + )); + return EFI_INVALID_PARAMETER; + } + + for (Index =3D 0; Index < StrToken->TokenLen; Index++) { + if (IsZeroBuffer ((VOID *)&mDefaultHiiDatabaseStr[Index * SMBIOS_STRIN= G_MAX_LENGTH], SMBIOS_UNICODE_STRING_MAX_LENGTH - 1)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Default strings were not saved previously so failed to= restore default strings.\n", + __func__, + __LINE__ + )); + return EFI_INVALID_PARAMETER; + } + + Status =3D HiiSetString ( + mSmbiosPlatformDxeHiiHandle, + StrToken->TokenArray[Index], + (EFI_STRING)&mDefaultHiiDatabaseStr[Index * SMBIOS_STRING_M= AX_LENGTH], + NULL + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Failed to restore default strings\n", + __func__, + __LINE__ + )); + return Status; + } + ZeroMem ((VOID *)&mDefaultHiiDatabaseStr[Index * SMBIOS_STRING_MAX_LEN= GTH], SMBIOS_UNICODE_STRING_MAX_LENGTH - 1); + } =20 return Status; } diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxeDataTable.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Smbios= PlatformDxeDataTable.c new file mode 100644 index 000000000000..84a4962d33fc --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeDa= taTable.c @@ -0,0 +1,72 @@ +/** @file + This file provides SMBIOS Type. + + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+ Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015, Linaro Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE8, + PlatformPortConnector + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE9, + PlatformSystemSlot + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE9, + PlatformOemString + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE24, + PlatformHardwareSecurity + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE38, + PlatformIpmiDevice + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE41, + PlatformOnboardDevicesExtended + ) + +SMBIOS_PLATFORM_DXE_DATA_TABLE mSmbiosPlatformDxeDataTable[] =3D { + // Type8 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformPortConnector + ), + // Type9 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformSystemSlot + ), + // Type11 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformOemString + ), + // Type24 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformHardwareSecurity + ), + // Type38 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformIpmiDevice + ), + // Type41 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformOnboardDevicesExtended + ) +}; + +// +// Number of Data Table entries. +// +UINTN mSmbiosPlatformDxeDataTableEntries =3D ARRAY_SIZE (mSmbiosPlatformDx= eDataTable); diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/Platf= ormPortConnectorData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/= Type08/PlatformPortConnectorData.c new file mode 100644 index 000000000000..d2db29159a09 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPort= ConnectorData.c @@ -0,0 +1,142 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 8 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE8, PlatformPortConnector)= =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortConnectorTypeDB15Female, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortTypeOther, // External Connector Ty= pe + PortTypeVideoPort // Port Type + }, + { // Table 2 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortConnectorTypeUsb, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortTypeOther, // External Connector Ty= pe + PortTypeUsb // Port Type + }, + { // Table 3 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortConnectorTypeUsb, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortTypeOther, // External Connector Ty= pe + PortTypeUsb // Port Type + }, + { // Table 4 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortConnectorTypeRJ45, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortConnectorTypeRJ45, // External Connector Ty= pe + PortTypeNetworkPort // Port Type + }, + { // Table 5 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortTypeOther, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortTypeOther, // External Connector Ty= pe + PortTypeNetworkPort // Port Type + }, + { // Table 6 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortTypeOther, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortConnectorTypeDB9Female, // External Connector Ty= pe + PortTypeSerial16550Compatible // Port Type + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformPortConnector) =3D { + { = // Table 1 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_1), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_1) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 2 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_2), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_2) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 3 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_3), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_3) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 4 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_4), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_4) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 5 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_5), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_5) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 6 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_6), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_6) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/Platf= ormPortConnectorFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatform= Dxe/Type08/PlatformPortConnectorFunction.c new file mode 100644 index 000000000000..dbf272ce4d34 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPort= ConnectorFunction.c @@ -0,0 +1,57 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 8) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformPortConnector) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE8 *InputData; + SMBIOS_TABLE_TYPE8 *Type8Record; + + InputData =3D (SMBIOS_TABLE_TYPE8 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type8Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE8), + InputStrToken + ); + if (Type8Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type8Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type8Record); + return Status; + } + + FreePool (Type8Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/Platf= ormSystemSlotData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Typ= e09/PlatformSystemSlotData.c new file mode 100644 index 000000000000..5e9bbc1b00a6 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSyst= emSlotData.c @@ -0,0 +1,268 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 9 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE9, PlatformSystemSlot) = =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 1, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 5, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 2 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth16X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 2, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 0, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 3 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageUnavailable, // Current Usage + SlotLengthLong, // Slot Length + 3, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 4, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 4 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 4, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 9, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 5 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 5, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 7, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 6 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 6, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 7, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 7 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 7, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 8, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 8 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth16X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 8, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 1, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 9 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth4X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthShort, // Slot Length + 9, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 5, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 10 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth4X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthShort, // Slot Length + 10, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 5, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformSystemSlot) =3D { + { // Table 1 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_1) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table 2 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_2) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table 3 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_3) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table 4 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_4) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table 5 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_5) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table 6 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_6) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table 7 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_7) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table 8 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_8) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table 9 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_9) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 10 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_10) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/Platf= ormSystemSlotFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe= /Type09/PlatformSystemSlotFunction.c new file mode 100644 index 000000000000..e91b0eb1cc71 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSyst= emSlotFunction.c @@ -0,0 +1,58 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 9) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformSystemSlot) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE9 *InputData; + SMBIOS_TABLE_TYPE9 *Type9Record; + + InputData =3D (SMBIOS_TABLE_TYPE9 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type9Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE9), + InputStrToken + ); + if (Type9Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type9Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type9Record); + return Status; + } + + FreePool (Type9Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/Platf= ormOemStringData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type= 11/PlatformOemStringData.c new file mode 100644 index 000000000000..183432440e13 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemS= tringData.c @@ -0,0 +1,42 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 11 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE11, PlatformOemString) = =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_OEM_STRINGS, // Type + sizeof (SMBIOS_TABLE_TYPE11), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1 // String Count + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformOemString) =3D { + { // Table 1 + { // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_STRING_1) + }, + ADDITIONAL_STR_INDEX_1 // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/Platf= ormOemStringFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/= Type11/PlatformOemStringFunction.c new file mode 100644 index 000000000000..a1611a7d5b04 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemS= tringFunction.c @@ -0,0 +1,57 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 11) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformOemString) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE11 *InputData; + SMBIOS_TABLE_TYPE11 *Type11Record; + + InputData =3D (SMBIOS_TABLE_TYPE11 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type11Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE11), + InputStrToken + ); + if (Type11Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type11Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type11Record); + return Status; + } + + FreePool (Type11Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/Platf= ormHardwareSecurityData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformD= xe/Type24/PlatformHardwareSecurityData.c new file mode 100644 index 000000000000..a6c7b3686e2e --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/PlatformHard= wareSecurityData.c @@ -0,0 +1,42 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 19 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE24, PlatformHardwareSecur= ity) =3D { + { // Table 1 + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_HARDWARE_SECURITY, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE24), // UINT8 Length + SMBIOS_HANDLE_PI_RESERVED, + }, + 0 + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformHardwareSecurity) =3D { + { // Table 1 + { // Tokens array + NULL_TERMINATED_TOKEN + }, + 0 // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/Platf= ormHardwareSecurityFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatf= ormDxe/Type24/PlatformHardwareSecurityFunction.c new file mode 100644 index 000000000000..0b6593da1488 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/PlatformHard= wareSecurityFunction.c @@ -0,0 +1,57 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 24) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformHardwareSecurity) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE24 *InputData; + SMBIOS_TABLE_TYPE24 *Type24Record; + + InputData =3D (SMBIOS_TABLE_TYPE24 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type24Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE24), + InputStrToken + ); + if (Type24Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type24Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type24Record); + return Status; + } + + FreePool (Type24Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/Platf= ormIpmiDeviceData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Typ= e38/PlatformIpmiDeviceData.c new file mode 100644 index 000000000000..d4b4212e5cd3 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/PlatformIpmi= DeviceData.c @@ -0,0 +1,46 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 38 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE38, PlatformIpmiDevice) = =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_IPMI_DEVICE_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE38), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + IPMIDeviceInfoInterfaceTypeSSIF, // Interface Type + 0x20, // IPMI Specification Revis= ion + 0x20, // I2C Slave Address + 0xFF, // NV Storage Device Address + 0x20, // Base Address + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformIpmiDevice) =3D { + { // Table 1 + { // Tokens array + NULL_TERMINATED_TOKEN + }, + 0 // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/Platf= ormIpmiDeviceFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe= /Type38/PlatformIpmiDeviceFunction.c new file mode 100644 index 000000000000..cda255a034ad --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/PlatformIpmi= DeviceFunction.c @@ -0,0 +1,39 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 38) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformIpmiDevice) { + EFI_STATUS Status; + SMBIOS_TABLE_TYPE38 *InputData; + + InputData =3D (SMBIOS_TABLE_TYPE38 *)RecordData; + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)InputData, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + InputData++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/Platf= ormOnboardDevicesExtendedData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPla= tformDxe/Type41/PlatformOnboardDevicesExtendedData.c new file mode 100644 index 000000000000..3855cfc4dc57 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnbo= ardDevicesExtendedData.c @@ -0,0 +1,47 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 41 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE41, PlatformOnboardDevice= sExtended) =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE41), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Reference D= esignation + 0x83, // Device Type + 1, // Device Type= Instance + 4, // Segment Gro= up Number + 2, // Bus Number + 0 // Device Func= tion Number + }, + { // Null-termin= ated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformOnboardDevicesExtended) =3D= { + { = // Table 1 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_ONBOARD_DEVICES_EXTENDED_DEVICE_TYPE_= INSTANCE) + }, + ADDITIONAL_STR_INDEX_1 = // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/Platf= ormOnboardDevicesExtendedFunction.c b/Platform/Ampere/JadePkg/Drivers/Smbio= sPlatformDxe/Type41/PlatformOnboardDevicesExtendedFunction.c new file mode 100644 index 000000000000..4bc7e4547785 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnbo= ardDevicesExtendedFunction.c @@ -0,0 +1,57 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 41) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformOnboardDevicesExtended) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE41 *InputData; + SMBIOS_TABLE_TYPE41 *Type41Record; + + InputData =3D (SMBIOS_TABLE_TYPE41 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type41Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE41), + InputStrToken + ); + if (Type41Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type41Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type41Record); + return Status; + } + + FreePool (Type41Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxeStrings.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Smbios= PlatformDxeStrings.uni new file mode 100644 index 000000000000..c8176e31ab45 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeSt= rings.uni @@ -0,0 +1,21 @@ +/** @file + * Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + * + * Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ * Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ * Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+ * Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ * Copyright (c) 2015, Linaro Limited. All rights reserved.
+ * SPDX-License-Identifier: BSD-2-Clause-Patent + * +**/ + + +/=3D# + +#langdef en-US "English" + +#include "Type08/PlatformPortConnector.uni" +#include "Type09/PlatformSystemSlot.uni" +#include "Type11/PlatformOemString.uni" +#include "Type41/PlatformOnboardDevicesExtended.uni" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/Platf= ormPortConnector.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Ty= pe08/PlatformPortConnector.uni new file mode 100644 index 000000000000..7a373f048594 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPort= Connector.uni @@ -0,0 +1,22 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_1 #= language en-US "VGA1 - Rear VGA Connector" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_1 #= language en-US "DB-15 Male (VGA)" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_2 #= language en-US "Front Panel USB 3.0" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_2 #= language en-US "USB" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_3 #= language en-US "Rear Panel USB 3.0" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_3 #= language en-US "USB" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_4 #= language en-US "RJ1 - BMC RJ45 Port" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_4 #= language en-US "RJ45 Connector" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_5 #= language en-US "OCP1 - OCP NIC 3.0 Connector" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_5 #= language en-US "OCP NIC 3.0" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_6 #= language en-US "UART1 - BMC UART5 Connector" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_6 #= language en-US "DB-9 female" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/Platf= ormSystemSlot.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type0= 9/PlatformSystemSlot.uni new file mode 100644 index 000000000000..b1722e14e511 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSyst= emSlot.uni @@ -0,0 +1,20 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_1 #language en-US "S0 = Riser x32 - Slot 1" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_2 #language en-US "S0 = Riser x32 - Slot 2" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_3 #language en-US "S0 = Riser x32 - Slot 3" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_4 #language en-US "S1 = Riser x24 - Slot 1" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_5 #language en-US "S1 = Riser x24 - Slot 2" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_6 #language en-US "S1 = Riser x24 - Slot 3" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_7 #language en-US "S1 = Riser x8 - Slot 1" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_8 #language en-US "S0 = OCP NIC 3.0" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_9 #language en-US "S0 = NVMe M.2 - Slot 1" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_10 #language en-US "S0 = NVMe M.2 - Slot 2" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/Platf= ormOemString.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11= /PlatformOemString.uni new file mode 100644 index 000000000000..ede9f24aabe7 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemS= tring.uni @@ -0,0 +1,11 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_STRING_1 #language en-US "www.amperecomputing.c= om" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/Platf= ormOnboardDevicesExtended.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatf= ormDxe/Type41/PlatformOnboardDevicesExtended.uni new file mode 100644 index 000000000000..868e06236636 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnbo= ardDevicesExtended.uni @@ -0,0 +1,10 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_ONBOARD_DEVICES_EXTENDED_DEVICE_TYPE_INSTANCE #l= anguage en-US "Onboard VGA" --=20 2.39.0 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105268): https://edk2.groups.io/g/devel/message/105268 Mute This Topic: https://groups.io/mt/99111899/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sat May 18 19:48:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+105269+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+105269+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1684944218529441.0861417263253; Wed, 24 May 2023 09:03:38 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id vv2oYY1788612xTggnrD56k4; Wed, 24 May 2023 09:03:38 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.131]) by mx.groups.io with SMTP id smtpd.web11.1188.1684888871018629771 for ; Tue, 23 May 2023 17:41:11 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Zif3nZJ6e7NYsoFm8wsi+PUaAHeMOLhBK34VWpa/XsAM51WlTfdeZNLl39cYjEaiXj8HtPrAcEKgf+tjOh45zMW54uNYNiDE8JtUyXHykSEf+2Wk8o8u0XpTWCW4PpSUpEK5XEKHifVEYEiP5KdWnDR/r8k1btrLLl/dFnK3qJfDTnQeDeo8C05AYpBNGjKBIJtMVDwu6px05kAHdM8Ni6P7AVgJ5EDjdv1UQLt2Bq0xhHaZZFKuSOw01YyX3ReB+ttev/m1ByO7RooPadxuK3ny7mGEEv6RwvK63kOcFylAaNxpFxdRJgIN3VW0Yd/5OeJY1pfn1zAYZotGEM3R0Q== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JHVuf6iGwdEyZ3bYAsHycB4JPLIG8cfsiFopIcpnRqE=; b=QZIn5N6uU/V8371b9HaIYzUNE/cTuFEyWn5XS9Q4NwAgyTrWAfX0tC94ExPXK6ZXpQdW8BWHcS4VXO6CfFg3WOx56j3R28l0k5miqfhfrN4EX7qRrKRHjaT9CgXP70pX4jDPlvt3RPl3kDmVGT5C6NaNbLcKuXpXOM6ZFKcfaQ2jW5jiixo4fJPsuGBfZT92SYDGbLLV9Culiyb7z0fiue4zmWZvOrLYXUmpXj5X7nIOT6oClQd7k9bpF/FiiC5zMJbX0UZ8PXByNu9qd8vf6VWoUY+O1Az4qmiR1KFJUukCxxfvuo5cDKFP8t/Eb41rBycA2QqIhAfPvcTpRKfyAg== 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 X-Received: from PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) by MW6PR01MB8270.prod.exchangelabs.com (2603:10b6:303:241::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.28; Wed, 24 May 2023 00:41:07 +0000 X-Received: from PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1]) by PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1%6]) with mapi id 15.20.6411.019; Wed, 24 May 2023 00:41:07 +0000 From: "Minh Nguyen via groups.io" To: devel@edk2.groups.io CC: patches@amperecomputing.com, quic_llindhol@quicinc.com, ardb+tianocore@kernel.org, nhi@os.amperecomputing.com, minhnguyen1@os.amperecomputing.com Subject: [edk2-devel] [edk2-platforms][PATCH 4/4] JadePkg: Add support SMBIOS Table Type 16, 17, 19 Date: Wed, 24 May 2023 07:40:37 +0700 Message-ID: <20230524004037.39269-5-minhnguyen1@os.amperecomputing.com> In-Reply-To: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> References: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> X-ClientProxiedBy: SI2P153CA0021.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::20) To PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR01MB8048:EE_|MW6PR01MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 0363d1d8-dead-44d7-9ec5-08db5bef8ff1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: gmLfrGTeJAk8f9mkrqc8FbgSd8KXbOSo40rKZ9enlwIgu//HU5wm+vWHEvSh1rt1Tj26yU5uJ9wJ+8F7SjDg2h3hY/yZv6XkGXcy40HhmwlSdkVtMXkUu6lkva5G4wLY8po+YtVIKQ43ND8DaA4PoF/SJ/910iHl+Bve3ULDRArr1OLYhtivIksZsT/dO0gDVdhVL2hFQ8tvoyF1kCg35jDDXTOweO0u3w2Fx7Mg1zqV2MRGI2WZChxD2iF/NWJ7qAFGrh9l6eeOC67scw8Y0s8V8Vljfrlrr1bjPuKtzK+aH2TzkxS+mls5Bg8Tg/j5W2YkCnYN7PtArlYRqZb2OKuDvav5I0o6vHrraVTIeMqHRJsksDt4chp477bGGOMtbUNuLVS3w/lbzcwThr6r0ANw5LaZQcdwVBMx8hNpsAyzAIEmWsf8KFLkd7LZImk1iezTd/Ey7M6xjrx4QYpr12GylRM2CEOHFRE0ZNldalJbYA+x1ZnxD3ve3bvUWmkjKBNtB+oKUjjlnP489vL4KgbBLo01ZYt7hXS8OeMfCOQsele+NeFsGCv5wDBcRjv/R+HSaVwcVGtdxDwCABJWrCgyLGfbV2RjIyhb9ZRN4BIU4WREWrpX2SaBwFlqqRgK X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tWQWlG+8jDyGAEH/ph+KBuDANaNQQeUvrw9GxcFc1+xAlaDp2SVpuryC2UU9?= =?us-ascii?Q?EloR9d3/Jf4gBk5yAW6uJ1PmF7lecigXcEjEZIN4IiptadSaOA1lt/l2mroi?= =?us-ascii?Q?fBm7hkXNXejh0z1M6MXNMtDhAmD5ATwPacTkIPgY2yd3vrziEFgHfsg64uRE?= =?us-ascii?Q?UuaiowjbCwGQ1iSqreuBx0DI2teGza8SwJ+TxxUew3ygt4PUEgFNdTUQrteH?= =?us-ascii?Q?kJFMkaW2PgLlAB+dVx3hTqQLV3Pd5olEs/IbOi/IL9wAy1SE3GtGcW3iP2uK?= =?us-ascii?Q?2SAcgevcYr1HiGSkCuOwf+V7el81iCw4zKHRJX6RfjLgT4UTtfAbczC0faHy?= =?us-ascii?Q?jXcby9QCVvLRCED7fiuSnXC0cV9C2ew/KHh/ZfUKMxzBOt/0WXLtp6lnmLYF?= =?us-ascii?Q?Hoi40a7mUd47c/YhdVgKIiWbdHOp29eiprfaIDJ2uKWNH8SH+PDm+T5MRX/J?= =?us-ascii?Q?9lk09B03Ld/j1QkbM6r/EfIRvegDkU95IdAKX3EKmyUyQJnAlo7132OLEsR0?= =?us-ascii?Q?zDNUOn978pVeLjYUxSyOhBx70QxWu6Vne41yRjiUsq4968B74K++MOT6uSkb?= =?us-ascii?Q?+jtkZp9EYtb3ws8WCSszBNBbeTusrTBE5+rYFX6778nB2p3OozsaJDem1qUh?= =?us-ascii?Q?Yso3LiM33EXRmUFGyjPwXk9JtezC8lDH1EabbzNqVv6KpTURWmwKjazTb0Vl?= =?us-ascii?Q?dlcP98SaxG13zU0FAOdgwqYHfiqc6Vh1ma2EdJBkwCtq1MmwdO8MS6HYjUY4?= =?us-ascii?Q?5BlQ2hvxyZvBbzFIpjQ9YSY+kjB+6s24PjfCYSR4bW/AVVvYVxBH5n1icBvK?= =?us-ascii?Q?PWvsk3RxD50Dk+40/9Ard4iCi9IalGDhp+2s+JYgWqRzFIHX0iHHFAtE9RVw?= =?us-ascii?Q?q4aU7Ti9toCPeddoab6fBAbmtcl0H/WKduz8ZG9UgatAS5yrGWeqdHuwzdiY?= =?us-ascii?Q?d+y+Br6JPs7Vfh5FgGf+pK0eFAYZookGoUrEE9daQiRPqa5mQTl7H6Ll0oVe?= =?us-ascii?Q?BfG355QIS+JrG/wjnMNt2Ib2LqOjwAhjQ4SXa3U+TjPK3cBTf7G8/aAXqO+D?= =?us-ascii?Q?rPzEzcl84OCtOulLI3fAagcYrlqEY5FfRG7a+uEIsR6EHvcITzWwe8ONh2kR?= =?us-ascii?Q?z6lwDAamDI3DjMhwiur2PtRUmqECab7K0oeaEx0XjK34HCZtaEX7VB7JDXe+?= =?us-ascii?Q?AS0R3M5e17YnPYOR9yDZLGII1UFOfHDumndfIQNmMxXaMDlExvEm3ulIC1L1?= =?us-ascii?Q?nWB7J7iv0bavWcq5LheF3WYhT/0hNgL/KHB+qGRwB3H0fNFqTe++zjossC4H?= =?us-ascii?Q?84JZVwkdQXLpcUBVLFqLeO2boOinj/TP6L7TYn7dJYoEw0MhL80IlaRlwJFn?= =?us-ascii?Q?2qB0GwFOQxnZ4GdBTqMDiOs6zvxnnflK2JxxAbv1BihyAZRNTT0UkkQU5cTc?= =?us-ascii?Q?hvgLRUWWzcSWsRtSZujnckZ8CzNA0BhKdBjhpja21JWRl6N8HRUH1Kg2pkmS?= =?us-ascii?Q?lo4eCZHRJH7nDY/kqWY82P0xufiiFACnnpbSCJQmPGa9NhBY8yn6/kgIwfUS?= =?us-ascii?Q?GSZW9uvKID0QnWu4cqV4XNiHbw6IHYpreTnGubiCOqYsw0qz9zFGZyfazoq0?= =?us-ascii?Q?D2R5VGOcb7c2QM0ZyxM1Ys6oUiBzsitlT3hSUB/QqY9P?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0363d1d8-dead-44d7-9ec5-08db5bef8ff1 X-MS-Exchange-CrossTenant-AuthSource: PH0PR01MB8048.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2023 00:41:07.7314 (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: 7yZ8vM0G5UyYOzYC6L4BJq3u3rh2kzEithhWYnktFoEpu7Bc6OfvD2KEXnXzBT4STrZl6g4XoK+FHoYTMQG765v0fjUP0vY9lKNTg99l3qq/IpU03f02qBkNxdc+iM17 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR01MB8270 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,minhnguyen1@os.amperecomputing.com X-Gm-Message-State: pyuWMRGFsr9b3fxsQlywFuNix1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1684944218; bh=ArFmpcOaLpHGoqG1yLSFUrO0reoC5KLjyRy8gFNoSWI=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=iw3f0QMDp+lvx4/kwbSIh6PiWgtOWqv8yQDLBNuy9dIHy3TExtYQIbRuA0P2sQ1JF7D KCJWFETOFVS27ZNtyz7tGhzp7FzxQS5RyNRosRZcCKZB+kbO9zbnueBxM0Obs7ovFruQC cM5JbuyB2Dn6SPGyIe50fnYubboyarWgCr4= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1684944219008100014 Content-Type: text/plain; charset="utf-8" This adds support SMBIOS Tables Type 16, 17, 19 for information of Physical Memory, Memory Device and Memory Array Mapped Address. Signed-off-by: Minh Nguyen --- Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf = | 6 + Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h = | 24 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeDataTab= le.c | 26 +- Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type16/PlatformPhysicalM= emoryArrayData.c | 48 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type16/PlatformPhysicalM= emoryArrayFunction.c | 44 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/PlatformMemoryDev= iceData.c | 63 +++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/PlatformMemoryDev= iceFunction.c | 475 ++++++++++++++++++++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type19/PlatformMemoryArr= ayMappedAddressData.c | 47 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type19/PlatformMemoryArr= ayMappedAddressFunction.c | 150 +++++++ Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLibCommon.c = | 42 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeStrings= .uni | 1 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/PlatformMemoryDev= ice.uni | 16 + 12 files changed, 941 insertions(+), 1 deletion(-) diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.inf b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfor= mDxe.inf index 83ff918fc42d..13ae38de01f8 100755 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf @@ -25,6 +25,12 @@ [Sources] Type09/PlatformSystemSlotFunction.c Type11/PlatformOemStringData.c Type11/PlatformOemStringFunction.c + Type16/PlatformPhysicalMemoryArrayData.c + Type16/PlatformPhysicalMemoryArrayFunction.c + Type17/PlatformMemoryDeviceData.c + Type17/PlatformMemoryDeviceFunction.c + Type19/PlatformMemoryArrayMappedAddressData.c + Type19/PlatformMemoryArrayMappedAddressFunction.c Type24/PlatformHardwareSecurityData.c Type24/PlatformHardwareSecurityFunction.c Type38/PlatformIpmiDeviceData.c diff --git a/Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h b= /Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h index c425ed4431da..9b4f2c1e325c 100644 --- a/Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h +++ b/Silicon/Ampere/AmpereAltraPkg/Include/Library/AmpereCpuLib.h @@ -6,6 +6,8 @@ =20 **/ =20 +#include + #ifndef AMPERE_CPU_LIB_H_ #define AMPERE_CPU_LIB_H_ =20 @@ -182,6 +184,28 @@ GetScpBuild ( UINT8 **ScpBuild ); =20 +/** + Get information of DIMM List. + + @param[out] DimmList Pointer contains information of DIMM List. +**/ +VOID +EFIAPI +GetDimmList ( + PLATFORM_DIMM_LIST **DimmList + ); + +/** + Get information of DRAM. + + @param[out] DramInfo Pointer contains information of DRAM. +**/ +VOID +EFIAPI +GetDramInfo ( + PLATFORM_DRAM_INFO **DramInfo + ); + /** Set the number of configured CPM per socket. =20 diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxeDataTable.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Smbios= PlatformDxeDataTable.c index 84a4962d33fc..de5b9b83fb78 100644 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeDa= taTable.c +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeDa= taTable.c @@ -23,9 +23,21 @@ SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( PlatformSystemSlot ) SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( - SMBIOS_TABLE_TYPE9, + SMBIOS_TABLE_TYPE11, PlatformOemString ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE16, + PlatformPhysicalMemoryArray + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE17, + PlatformMemoryDevice + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE19, + PlatformMemoryArrayMappedAddress + ) SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( SMBIOS_TABLE_TYPE24, PlatformHardwareSecurity @@ -52,6 +64,18 @@ SMBIOS_PLATFORM_DXE_DATA_TABLE mSmbiosPlatformDxeDataTab= le[] =3D { SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( PlatformOemString ), + //Type16 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformPhysicalMemoryArray + ), + //Type17 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformMemoryDevice + ), + //Type19 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformMemoryArrayMappedAddress + ), // Type24 SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( PlatformHardwareSecurity diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type16/Platf= ormPhysicalMemoryArrayData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatfo= rmDxe/Type16/PlatformPhysicalMemoryArrayData.c new file mode 100644 index 000000000000..3c0e6a2ce9a0 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type16/PlatformPhys= icalMemoryArrayData.c @@ -0,0 +1,48 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 16 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE16, PlatformPhysicalMemor= yArray) =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, // Type + sizeof (SMBIOS_TABLE_TYPE16), // Length + SMBIOS_HANDLE_PI_RESERVED, // Handle + }, + MemoryArrayLocationSystemBoard, // Location + MemoryArrayUseSystemMemory, // Use + MemoryErrorCorrectionMultiBitEcc, // Memory Error Correction + 0x80000000, // Maximum Capacity + 0xFFFE, // Memory Error Information H= andle + 0x10, // Number Of Memory Device + 0x40000000000ULL // Extended Maximum Capacity + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformPhysicalMemoryArray) =3D { + { // Table 1 + { // Tokens array + NULL_TERMINATED_TOKEN + }, + 0 // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type16/Platf= ormPhysicalMemoryArrayFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPl= atformDxe/Type16/PlatformPhysicalMemoryArrayFunction.c new file mode 100644 index 000000000000..772fa02cc256 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type16/PlatformPhys= icalMemoryArrayFunction.c @@ -0,0 +1,44 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 16) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformPhysicalMemoryArray) { + UINT8 Index; + EFI_STATUS Status; + SMBIOS_TABLE_TYPE16 *InputData; + + for (Index =3D 0; Index < GetNumberOfSupportedSockets (); Index++) { + InputData =3D (SMBIOS_TABLE_TYPE16 *)RecordData; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)InputData, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + InputData++; + } + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/Platf= ormMemoryDeviceData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/T= ype17/PlatformMemoryDeviceData.c new file mode 100644 index 000000000000..2b2c2fc3b4df --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/PlatformMemo= ryDeviceData.c @@ -0,0 +1,63 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 17 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE17, PlatformMemoryDevice)= =3D { + { // Table 1 + { // Hdr + EFI_SMBIOS_TYPE_MEMORY_DEVICE, // Type + sizeof (SMBIOS_TABLE_TYPE17), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + 0xFFFF, // Memory Array Handle + 0xFFFE, // Memory Error Information Handle + 72, // Total Width + 64, // Data Width + 0, // Size + 0x09, // Form Factor + 1, // Device Set + ADDITIONAL_STR_INDEX_1, // Device Locator + ADDITIONAL_STR_INDEX_2, // Bank Locator + MemoryTypeDdr4, // Memory Type + {}, // Type Detail + 0, // Speed + ADDITIONAL_STR_INDEX_3, // Manufacturer + ADDITIONAL_STR_INDEX_4, // Serial + ADDITIONAL_STR_INDEX_5, // Asset Tag + ADDITIONAL_STR_INDEX_6, // Part Number + 0, // Attributes + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformMemoryDevice) =3D { + { // Tab= le 1 + { // Tok= ens array + STRING_TOKEN (STR_PLATFORM_DXE_MEMORY_DEVICE_DEVICE_LOCATOR), + STRING_TOKEN (STR_PLATFORM_DXE_MEMORY_DEVICE_BANK_LOCATOR), + STRING_TOKEN (STR_PLATFORM_DXE_MEMORY_DEVICE_MANUFACTURER), + STRING_TOKEN (STR_PLATFORM_DXE_MEMORY_DEVICE_SERIAL_NUMBER), + STRING_TOKEN (STR_PLATFORM_DXE_MEMORY_DEVICE_ASSET_TAG), + STRING_TOKEN (STR_PLATFORM_DXE_MEMORY_DEVICE_PART_NUMBER) + }, + ADDITIONAL_STR_INDEX_6 // Siz= e of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/Platf= ormMemoryDeviceFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformD= xe/Type17/PlatformMemoryDeviceFunction.c new file mode 100644 index 000000000000..d15e4d40a01c --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/PlatformMemo= ryDeviceFunction.c @@ -0,0 +1,475 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +#define NULL_TERMINATED_ID 0xFF + +#define ASCII_SPACE_CHARACTER_CODE 0x20 +#define ASCII_TILDE_CHARACTER_CODE 0x7E + +#define SPD_PARITY_BIT_MASK 0x80 +#define SPD_MEMORY_TYPE_OFFSET 0x02 +#define SPD_CONTINUATION_CHARACTER 0x7F + +#define DDR2_SPD_MANUFACTURER_MEMORY_TYPE 0x08 +#define DDR2_SPD_MANUFACTURER_ID_CODE_LENGTH 8 +#define DDR2_SPD_MANUFACTURER_ID_CODE_OFFSET 64 +#define DDR2_SPD_MANUFACTURER_PART_NUMBER_OFFSET 73 +#define DDR2_SPD_MANUFACTURER_SERIAL_NUMBER_OFFSET 95 + +#define DDR3_SPD_MANUFACTURER_MEMORY_TYPE 0x0B +#define DDR3_SPD_MANUFACTURER_ID_BANK_OFFSET 117 +#define DDR3_SPD_MANUFACTURER_ID_CODE_OFFSET 118 +#define DDR3_SPD_MANUFACTURER_PART_NUMBER_OFFSET 128 +#define DDR3_SPD_MANUFACTURER_SERIAL_NUMBER_OFFSET 122 + +#define DDR4_SPD_MANUFACTURER_MEMORY_TYPE 0x0C +#define DDR4_SPD_MANUFACTURER_ID_BANK_OFFSET 320 +#define DDR4_SPD_MANUFACTURER_ID_CODE_OFFSET 321 +#define DDR4_SPD_MANUFACTURER_PART_NUMBER_OFFSET 329 +#define DDR4_SPD_MANUFACTURER_SERIAL_NUMBER_OFFSET 325 + +#define PRINTABLE_CHARACTER(Character) \ + (Character >=3D ASCII_SPACE_CHARACTER_CODE) && (Character <=3D ASCII_TIL= DE_CHARACTER_CODE) ? \ + Character : ASCII_SPACE_CHARACTER_CODE + +typedef enum { + DEVICE_LOCATOR_TOKEN_INDEX =3D 0, + BANK_LOCATOR_TOKEN_INDEX, + MANUFACTURER_TOKEN_INDEX, + SERIAL_NUMBER_TOKEN_INDEX, + ASSET_TAG_TOKEN_INDEX, + PART_NUMBER_TOKEN_INDEX +} MEMORY_DEVICE_TOKEN_INDEX; + +#pragma pack(1) +typedef struct { + UINT8 VendorId; + CHAR16 *ManufacturerString; +} JEDEC_MF_ID; +#pragma pack() + +JEDEC_MF_ID Bank0Table[] =3D { + { 0x01, L"AMD\0" }, + { 0x04, L"Fujitsu\0" }, + { 0x07, L"Hitachi\0" }, + { 0x89, L"Intel\0" }, + { 0x10, L"NEC\0" }, + { 0x97, L"Texas Instrument\0" }, + { 0x98, L"Toshiba\0" }, + { 0x1C, L"Mitsubishi\0" }, + { 0x1F, L"Atmel\0" }, + { 0x20, L"STMicroelectronics\0" }, + { 0xA4, L"IBM\0" }, + { 0x2C, L"Micron Technology\0" }, + { 0xAD, L"SK Hynix\0" }, + { 0xB0, L"Sharp\0" }, + { 0xB3, L"IDT\0" }, + { 0x3E, L"Oracle\0" }, + { 0xBF, L"SST\0" }, + { 0x40, L"ProMos/Mosel\0" }, + { 0xC1, L"Infineon\0" }, + { 0xC2, L"Macronix\0" }, + { 0x45, L"SanDisk\0" }, + { 0xCE, L"Samsung\0" }, + { 0xDA, L"Winbond\0" }, + { 0xE0, L"LG Semi\0" }, + { 0x62, L"Sanyo\0" }, + { NULL_TERMINATED_ID, L"Undefined\0" } +}; + +JEDEC_MF_ID Bank1Table[] =3D { + { 0x98, L"Kingston\0" }, + { 0xBA, L"PNY\0" }, + { 0x4F, L"Transcend\0" }, + { 0x7A, L"Apacer\0" }, + { NULL_TERMINATED_ID, L"Undefined\0" } +}; + +JEDEC_MF_ID Bank2Table[] =3D { + { 0x9E, L"Corsair\0" }, + { 0xFE, L"Elpida\0" }, + { NULL_TERMINATED_ID, L"Undefined\0" } +}; + +JEDEC_MF_ID Bank3Table[] =3D { + { 0x0B, L"Nanya\0" }, + { 0x94, L"Mushkin\0" }, + { 0x25, L"Kingmax\0" }, + { NULL_TERMINATED_ID, L"Undefined\0" } +}; + +JEDEC_MF_ID Bank4Table[] =3D { + { 0xB0, L"OCZ\0" }, + { 0xCB, L"A-DATA\0" }, + { 0xCD, L"G Skill\0" }, + { 0xEF, L"Team\0" }, + { NULL_TERMINATED_ID, L"Undefined\0" } +}; + +JEDEC_MF_ID Bank5Table[] =3D { + { 0x02, L"Patriot\0" }, + { 0x9B, L"Crucial\0" }, + { 0x51, L"Qimonda\0" }, + { 0x57, L"AENEON\0" }, + { 0xF7, L"Avant\0" }, + { NULL_TERMINATED_ID, L"Undefined\0" } +}; + +JEDEC_MF_ID Bank6Table[] =3D { + { 0x34, L"Super Talent\0" }, + { 0xD3, L"Silicon Power\0" }, + { NULL_TERMINATED_ID, L"Undefined\0" } +}; + +JEDEC_MF_ID Bank7Table[] =3D { + { NULL_TERMINATED_ID, L"Undefined\0" } +}; + +JEDEC_MF_ID *ManufacturerJedecIdBankTable[] =3D { + Bank0Table, + Bank1Table, + Bank2Table, + Bank3Table, + Bank4Table, + Bank5Table, + Bank6Table, + Bank7Table +}; + +VOID +UpdateManufacturer ( + IN UINT8 *SpdData, + IN UINT16 ManufacturerToken + ) +{ + UINTN Index; + UINT8 VendorId; + UINT8 MemType; + UINT8 NumberOfJedecIdBankTables; + JEDEC_MF_ID *IdTblPtr =3D NULL; + + MemType =3D SpdData[SPD_MEMORY_TYPE_OFFSET]; + switch (MemType) { + case DDR2_SPD_MANUFACTURER_MEMORY_TYPE: + for (Index =3D 0; Index < DDR2_SPD_MANUFACTURER_ID_CODE_LENGTH; Index+= +) { + VendorId =3D SpdData[DDR2_SPD_MANUFACTURER_ID_CODE_OFFSET + Index]; + if (VendorId !=3D SPD_CONTINUATION_CHARACTER) { + break; + } + } + break; + + case DDR3_SPD_MANUFACTURER_MEMORY_TYPE: + Index =3D SpdData[DDR3_SPD_MANUFACTURER_ID_BANK_OFFSET] & (~SPD_PARITY= _BIT_MASK); // Remove parity bit + VendorId =3D SpdData[DDR4_SPD_MANUFACTURER_ID_CODE_OFFSET]; + break; + + case DDR4_SPD_MANUFACTURER_MEMORY_TYPE: + Index =3D SpdData[DDR4_SPD_MANUFACTURER_ID_BANK_OFFSET] & (~SPD_PARITY= _BIT_MASK); // Remove parity bit + VendorId =3D SpdData[DDR4_SPD_MANUFACTURER_ID_CODE_OFFSET]; + break; + + default: // Not supported + return; + } + + NumberOfJedecIdBankTables =3D ARRAY_SIZE (ManufacturerJedecIdBankTable) = - 1; // Exclude NULL-terminated table + if (Index > NumberOfJedecIdBankTables) { + Index =3D NumberOfJedecIdBankTables; + } + IdTblPtr =3D ManufacturerJedecIdBankTable[Index]; + + // Search in Manufacturer table and update vendor name accordingly in HI= I Database + while (IdTblPtr->VendorId !=3D NULL_TERMINATED_ID) { + if (IdTblPtr->VendorId =3D=3D VendorId) { + HiiSetString (mSmbiosPlatformDxeHiiHandle, ManufacturerToken, IdTblP= tr->ManufacturerString, NULL); + break; + } + IdTblPtr++; + } +} + +VOID +UpdateSerialNumber ( + IN UINT8 *SpdData, + IN UINT16 SerialNumberToken + ) +{ + UINT8 MemType; + UINTN Offset; + CHAR16 SerialNumberStr[SMBIOS_UNICODE_STRING_MAX_LENGTH]; + + MemType =3D SpdData[SPD_MEMORY_TYPE_OFFSET]; + switch (MemType) { + case DDR2_SPD_MANUFACTURER_MEMORY_TYPE: + Offset =3D DDR2_SPD_MANUFACTURER_SERIAL_NUMBER_OFFSET; + break; + + case DDR3_SPD_MANUFACTURER_MEMORY_TYPE: + Offset =3D DDR3_SPD_MANUFACTURER_SERIAL_NUMBER_OFFSET; + break; + + case DDR4_SPD_MANUFACTURER_MEMORY_TYPE: + Offset =3D DDR4_SPD_MANUFACTURER_SERIAL_NUMBER_OFFSET; + break; + + default: // Not supported + return; + } + + UnicodeSPrint ( + SerialNumberStr, + sizeof (SerialNumberStr), + L"%02X%02X%02X%02X", + SpdData[Offset], + SpdData[Offset + 1], + SpdData[Offset + 2], + SpdData[Offset + 3] + ); + HiiSetString (mSmbiosPlatformDxeHiiHandle, SerialNumberToken, SerialNumb= erStr, NULL); +} + +VOID +UpdatePartNumber ( + IN UINT8 *SpdData, + IN UINT16 PartNumberToken + ) +{ + UINT8 MemType; + UINTN Offset; + CHAR16 PartNumberStr[SMBIOS_UNICODE_STRING_MAX_LENGTH]; + + MemType =3D SpdData[SPD_MEMORY_TYPE_OFFSET]; + switch (MemType) { + case DDR2_SPD_MANUFACTURER_MEMORY_TYPE: + Offset =3D DDR2_SPD_MANUFACTURER_PART_NUMBER_OFFSET; + break; + + case DDR3_SPD_MANUFACTURER_MEMORY_TYPE: + Offset =3D DDR3_SPD_MANUFACTURER_PART_NUMBER_OFFSET; + break; + + case DDR4_SPD_MANUFACTURER_MEMORY_TYPE: + Offset =3D DDR4_SPD_MANUFACTURER_PART_NUMBER_OFFSET; + break; + + default: // Not supported + return; + } + + UnicodeSPrint ( + PartNumberStr, + sizeof (PartNumberStr), + L"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", + PRINTABLE_CHARACTER (SpdData[Offset]), + PRINTABLE_CHARACTER (SpdData[Offset + 1]), + PRINTABLE_CHARACTER (SpdData[Offset + 2]), + PRINTABLE_CHARACTER (SpdData[Offset + 3]), + PRINTABLE_CHARACTER (SpdData[Offset + 4]), + PRINTABLE_CHARACTER (SpdData[Offset + 5]), + PRINTABLE_CHARACTER (SpdData[Offset + 6]), + PRINTABLE_CHARACTER (SpdData[Offset + 7]), + PRINTABLE_CHARACTER (SpdData[Offset + 8]), + PRINTABLE_CHARACTER (SpdData[Offset + 9]), + PRINTABLE_CHARACTER (SpdData[Offset + 10]), + PRINTABLE_CHARACTER (SpdData[Offset + 11]), + PRINTABLE_CHARACTER (SpdData[Offset + 12]), + PRINTABLE_CHARACTER (SpdData[Offset + 13]), + PRINTABLE_CHARACTER (SpdData[Offset + 14]), + PRINTABLE_CHARACTER (SpdData[Offset + 15]), + PRINTABLE_CHARACTER (SpdData[Offset + 16]), + PRINTABLE_CHARACTER (SpdData[Offset + 17]) + ); + HiiSetString (mSmbiosPlatformDxeHiiHandle, PartNumberToken, PartNumberSt= r, NULL); +} + +/** + This function adds SMBIOS Table (Type 17) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformMemoryDevice) { + UINT8 Index; + UINT8 SlotIndex; + UINTN HandleCount; + UINTN MemorySize; + UINT16 *HandleArray; + CHAR16 UnicodeStr[SMBIOS_UNICODE_STRING_MAX_LENGTH]; + EFI_STATUS Status; + SMBIOS_HANDLE MemoryArrayHandle; + PLATFORM_DIMM *Dimm; + STR_TOKEN_INFO *InputStrToken; + PLATFORM_DIMM_LIST *DimmList; + PLATFORM_DRAM_INFO *DramInfo; + SMBIOS_TABLE_TYPE17 *InputData; + SMBIOS_TABLE_TYPE17 *Type17Record; + + HandleCount =3D 0; + HandleArray =3D NULL; + + GetDimmList (&DimmList); + if (DimmList =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Failed to get Dimm List\n", + __func__, + __LINE__ + )); + return EFI_NOT_FOUND; + } + + GetDramInfo (&DramInfo); + if (DramInfo =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Failed to get DRAM Information\n", + __func__, + __LINE__ + )); + return EFI_NOT_FOUND; + } + + SmbiosPlatformDxeGetLinkTypeHandle ( + EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, + &HandleArray, + &HandleCount + ); + if (HandleArray =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + if (HandleCount !=3D GetNumberOfSupportedSockets ()) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Failed to get Memory Array Handle\n", + __func__, + __LINE__ + )); + FreePool (HandleArray); + return EFI_NOT_FOUND; + } + + for (Index =3D 0; Index < GetNumberOfSupportedSockets (); Index++) { + InputData =3D (SMBIOS_TABLE_TYPE17 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + MemoryArrayHandle =3D HandleArray[Index]; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + for (SlotIndex =3D 0; SlotIndex < DimmList->BoardDimmSlots; SlotInde= x++) { + // + // Prepare additional strings for SMBIOS Table. + // + Dimm =3D &DimmList->Dimm[SlotIndex]; + if (Dimm->NodeId !=3D Index) { + continue; + } + + Status =3D SmbiosPlatformDxeSaveHiiDefaultString (InputStrToken); + if (EFI_ERROR (Status)) { + FreePool (HandleArray); + return Status; + } + if (Dimm->Info.DimmStatus =3D=3D DIMM_INSTALLED_OPERATIONAL) { + UpdateManufacturer (Dimm->SpdData.Data, InputStrToken->TokenArra= y[MANUFACTURER_TOKEN_INDEX]); + UpdateSerialNumber (Dimm->SpdData.Data, InputStrToken->TokenArra= y[SERIAL_NUMBER_TOKEN_INDEX]); + UpdatePartNumber (Dimm->SpdData.Data, InputStrToken->TokenArray[= PART_NUMBER_TOKEN_INDEX]); + } + UnicodeSPrint (UnicodeStr, sizeof (UnicodeStr), L"Socket %d DIMM %= d", Index, SlotIndex); + HiiSetString (mSmbiosPlatformDxeHiiHandle, InputStrToken->TokenArr= ay[DEVICE_LOCATOR_TOKEN_INDEX], UnicodeStr, NULL); + UnicodeSPrint (UnicodeStr, sizeof (UnicodeStr), L"Bank %d", SlotIn= dex); + HiiSetString (mSmbiosPlatformDxeHiiHandle, InputStrToken->TokenArr= ay[BANK_LOCATOR_TOKEN_INDEX], UnicodeStr, NULL); + UnicodeSPrint (UnicodeStr, sizeof (UnicodeStr), L"Array %d Asset T= ag %d", Index, SlotIndex); + HiiSetString (mSmbiosPlatformDxeHiiHandle, InputStrToken->TokenArr= ay[ASSET_TAG_TOKEN_INDEX], UnicodeStr, NULL); + + // + // Create Table and fill up information. + // + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type17Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE17), + InputStrToken + ); + if (Type17Record =3D=3D NULL) { + FreePool (HandleArray); + return EFI_OUT_OF_RESOURCES; + } + + if (Dimm->Info.DimmStatus =3D=3D DIMM_INSTALLED_OPERATIONAL) { + MemorySize =3D Dimm->Info.DimmSize * 1024; + if (MemorySize >=3D 0x7FFF) { + Type17Record->Size =3D 0x7FFF; + Type17Record->ExtendedSize =3D MemorySize; + } else { + Type17Record->Size =3D (UINT16)MemorySize; + Type17Record->ExtendedSize =3D 0; + } + + Type17Record->MemoryType =3D 0x1A; // DDR4 + Type17Record->Speed =3D (UINT16)DramInfo->M= axSpeed; + Type17Record->ConfiguredMemoryClockSpeed =3D (UINT16)DramInfo->M= axSpeed; + Type17Record->Attributes =3D Dimm->Info.DimmNrRa= nk & 0x0F; + Type17Record->ConfiguredVoltage =3D 1200; + Type17Record->MinimumVoltage =3D 1140; + Type17Record->MaximumVoltage =3D 1260; + Type17Record->DeviceSet =3D 0; // None + + if (Dimm->Info.DimmType =3D=3D UDIMM || Dimm->Info.DimmType =3D= =3D SODIMM) { + Type17Record->TypeDetail.Unbuffered =3D 1; // BIT 14: unregist= ered + } else if (Dimm->Info.DimmType =3D=3D RDIMM + || Dimm->Info.DimmType =3D=3D LRDIMM + || Dimm->Info.DimmType =3D=3D RSODIMM) + { + Type17Record->TypeDetail.Registered =3D 1; // BIT 13: register= ed + } + /* FIXME: Determine if need to set technology to NVDIMM-* when s= upported */ + Type17Record->MemoryTechnology =3D 0x3; // DRAM + } + // Update Type 16 handle + Type17Record->MemoryArrayHandle =3D MemoryArrayHandle; + + // + // Add Table record and free pool. + // + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type17Record, NULL= ); + if (EFI_ERROR (Status)) { + FreePool (HandleArray); + FreePool (Type17Record); + return Status; + } + + FreePool (Type17Record); + Status =3D SmbiosPlatformDxeRestoreHiiDefaultString (InputStrToken= ); + if (EFI_ERROR (Status)) { + FreePool (HandleArray); + return Status; + } + } + + InputData++; + InputStrToken++; + } + } + FreePool (HandleArray); + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type19/Platf= ormMemoryArrayMappedAddressData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosP= latformDxe/Type19/PlatformMemoryArrayMappedAddressData.c new file mode 100644 index 000000000000..d14099ae8852 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type19/PlatformMemo= ryArrayMappedAddressData.c @@ -0,0 +1,47 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 19 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE19, PlatformMemoryArrayMa= ppedAddress) =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS, // Type + sizeof (SMBIOS_TABLE_TYPE19), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + 0xFFFFFFFF, // Starting Address + 0xFFFFFFFF, // Ending Address + 0xFFFF, // Memory Array Handle + 1, // Partition Width + 0x0, // Extended Starting A= ddress + 0x0 // Extended Ending Add= ress + }, + { // Null-terminated tab= le + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformMemoryArrayMappedAddress) = =3D { + { // Table 1 + { // Tokens array + NULL_TERMINATED_TOKEN + }, + 0 // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type19/Platf= ormMemoryArrayMappedAddressFunction.c b/Platform/Ampere/JadePkg/Drivers/Smb= iosPlatformDxe/Type19/PlatformMemoryArrayMappedAddressFunction.c new file mode 100644 index 000000000000..c57eaef26bf5 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type19/PlatformMemo= ryArrayMappedAddressFunction.c @@ -0,0 +1,150 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 19) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformMemoryArrayMappedAddress) { + UINT8 Index; + UINT8 SlotIndex; + UINT8 MemRegionIndex; + UINTN HandleCount; + UINTN MemorySize; + UINT16 *HandleArray; + EFI_STATUS Status; + PLATFORM_DIMM *Dimm; + STR_TOKEN_INFO *InputStrToken; + PLATFORM_DIMM_LIST *DimmList; + PLATFORM_DRAM_INFO *DramInfo; + SMBIOS_TABLE_TYPE19 *InputData; + SMBIOS_TABLE_TYPE19 *Type19Record; + + HandleCount =3D 0; + HandleArray =3D NULL; + + GetDimmList (&DimmList); + if (DimmList =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Failed to get Dimm List\n", + __func__, + __LINE__ + )); + return EFI_NOT_FOUND; + } + + GetDramInfo (&DramInfo); + if (DramInfo =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Failed to get DRAM Information\n", + __func__, + __LINE__ + )); + return EFI_NOT_FOUND; + } + + SmbiosPlatformDxeGetLinkTypeHandle ( + EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, + &HandleArray, + &HandleCount + ); + if (HandleArray =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + if (HandleCount !=3D GetNumberOfSupportedSockets ()) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Failed to get Memory Array Handle\n", + __func__, + __LINE__ + )); + FreePool (HandleArray); + return EFI_NOT_FOUND; + } + + for (Index =3D 0; Index < GetNumberOfSupportedSockets (); Index++) { + InputData =3D (SMBIOS_TABLE_TYPE19 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + // + // Calculate memory size + // + for (SlotIndex =3D 0; SlotIndex < DimmList->BoardDimmSlots; SlotInde= x++) { + Dimm =3D &DimmList->Dimm[SlotIndex]; + if (Dimm->NodeId !=3D Index) { + continue; + } + + if (Dimm->Info.DimmStatus =3D=3D DIMM_INSTALLED_OPERATIONAL) { + MemorySize =3D Dimm->Info.DimmSize * 1024; + } + } + + // + // Create Table and fill up information + // + for (MemRegionIndex =3D 0; MemRegionIndex < DramInfo->NumRegion; Mem= RegionIndex++) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type19Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE19), + InputStrToken + ); + if (Type19Record =3D=3D NULL) { + FreePool (HandleArray); + return EFI_OUT_OF_RESOURCES; + } + + if (DramInfo->NvdRegion[MemRegionIndex] > 0 + || DramInfo->Socket[MemRegionIndex] !=3D Index) + { + continue; + } + + Type19Record->ExtendedStartingAddress =3D DramInfo->Base[MemRegion= Index]; + Type19Record->ExtendedEndingAddress =3D DramInfo->Base[MemRegion= Index] + + DramInfo->Size[MemRegionIn= dex] -1; + if (MemorySize !=3D 0) { + Type19Record->PartitionWidth =3D (DramInfo->Size[MemRegionIndex]= - 1) / MemorySize + 1; + } + Type19Record->MemoryArrayHandle =3D HandleArray[Index]; + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type19Record, NULL= ); + if (EFI_ERROR (Status)) { + FreePool (HandleArray); + FreePool (Type19Record); + return Status; + } + + FreePool (Type19Record); + } + + InputData++; + InputStrToken++; + } + } + FreePool (HandleArray); + + return Status; +} diff --git a/Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLi= bCommon.c b/Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLib= Common.c index 853ab5543f11..0d72853e3d5f 100644 --- a/Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLibCommon= .c +++ b/Silicon/Ampere/AmpereAltraPkg/Library/AmpereCpuLib/AmpereCpuLibCommon= .c @@ -555,6 +555,48 @@ GetScpBuild ( } } =20 +/** + Get information of DIMM List. + + @param[out] DimmList Pointer contains information of DIMM List. +**/ +VOID +EFIAPI +GetDimmList ( + PLATFORM_DIMM_LIST **DimmList + ) +{ + PLATFORM_INFO_HOB *PlatformHob; + + PlatformHob =3D GetPlatformHob (); + if (PlatformHob !=3D NULL) { + *DimmList =3D &PlatformHob->DimmList; + } else { + *DimmList =3D NULL; + } +} + +/** + Get information of DRAM. + + @param[out] DramInfo Pointer contains information of DRAM. +**/ +VOID +EFIAPI +GetDramInfo ( + PLATFORM_DRAM_INFO **DramInfo + ) +{ + PLATFORM_INFO_HOB *PlatformHob; + + PlatformHob =3D GetPlatformHob (); + if (PlatformHob !=3D NULL) { + *DramInfo =3D &PlatformHob->DramInfo; + } else { + *DramInfo =3D NULL; + } +} + /** Set the number of configured CPM per socket. =20 diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxeStrings.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Smbios= PlatformDxeStrings.uni index c8176e31ab45..83a76202d614 100644 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeSt= rings.uni +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeSt= rings.uni @@ -18,4 +18,5 @@ #include "Type08/PlatformPortConnector.uni" #include "Type09/PlatformSystemSlot.uni" #include "Type11/PlatformOemString.uni" +#include "Type17/PlatformMemoryDevice.uni" #include "Type41/PlatformOnboardDevicesExtended.uni" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/Platf= ormMemoryDevice.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Typ= e17/PlatformMemoryDevice.uni new file mode 100644 index 000000000000..012bc241f78a --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type17/PlatformMemo= ryDevice.uni @@ -0,0 +1,16 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_MEMORY_DEVICE_DEVICE_LOCATOR #language en-US "N= ot set" +#string STR_PLATFORM_DXE_MEMORY_DEVICE_BANK_LOCATOR #language en-US "N= ot set" +#string STR_PLATFORM_DXE_MEMORY_DEVICE_MANUFACTURER #language en-US "N= ot set" +#string STR_PLATFORM_DXE_MEMORY_DEVICE_SERIAL_NUMBER #language en-US "N= ot set" +#string STR_PLATFORM_DXE_MEMORY_DEVICE_ASSET_TAG #language en-US "N= ot set" +#string STR_PLATFORM_DXE_MEMORY_DEVICE_PART_NUMBER #language en-US "N= ot set" --=20 2.39.0 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105269): https://edk2.groups.io/g/devel/message/105269 Mute This Topic: https://groups.io/mt/99111900/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-