From nobody Sun May 19 15:58:43 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+102912+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+102912+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1681324583; cv=none; d=zohomail.com; s=zohoarc; b=m3mlHXB5ezYRHf/I2QlepmS4j3KdcnchVZNanWH3EpDx6tiQWRgHjMm8J7dee4e483Va7/twSu0UFnROIIfpOA/ONxx/FKcMsflwJ2g1S2hzwu2egVugT6dcCfbInY9pB2348xc8QRbRgHltECFBZxDObhJrAnajC/eCtY1R45Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681324583; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=/sXmKjb+/kUfWHY4MoUSX6v1k+8Tse7VOSliR2IudT4=; b=hGDmvih+CrT6dS5k7m9PlrHLNPJAovaJrI5zhUqJP5MkPoxVcr4P/zf2pDRbnW5Z8vFBuhWWjJMHeud1+b+yAAgkPPNEvPpiCDfladrbKv4+N94B6OaNB4zIzjY3ijcfL5A6H4GR5/1kEtNr70u5W4DRFX7X6qdFrxDKzUrAk7Q= ARC-Authentication-Results: i=1; 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+102912+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1681324583188380.37883794756385; Wed, 12 Apr 2023 11:36:23 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id Q7zGYY1788612xs2DxVQcB6B; Wed, 12 Apr 2023 11:36:22 -0700 X-Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web11.228.1681324581152957426 for ; Wed, 12 Apr 2023 11:36:21 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10678"; a="324348856" X-IronPort-AV: E=Sophos;i="5.98,339,1673942400"; d="scan'208";a="324348856" X-Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2023 11:36:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10678"; a="1018834627" X-IronPort-AV: E=Sophos;i="5.98,339,1673942400"; d="scan'208";a="1018834627" X-Received: from bennyli1-mobl2.gar.corp.intel.com ([10.252.185.57]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2023 11:36:20 -0700 From: "Benny Lin" To: devel@edk2.groups.io Cc: Benny Lin , Andrew Fish , Leif Lindholm , Michael D Kinney Subject: [edk2-devel] [PATCH v2 1/3] Tianocore: Support FDT library. Date: Thu, 13 Apr 2023 02:36:04 +0800 Message-Id: <20230412183606.887-2-benny.lin@intel.com> In-Reply-To: <20230412183606.887-1-benny.lin@intel.com> References: <20230412183606.887-1-benny.lin@intel.com> MIME-Version: 1.0 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,benny.lin@intel.com X-Gm-Message-State: MfTWpHrPdWvql2lIGI4tKNrXx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1681324582; bh=ezwQLuPxY38/Im2/KEAsWz+w63l1w7dwR4MI5+sf0o4=; h=Cc:Date:From:Reply-To:Subject:To; b=HRf/qJf1JF6j0mHaVNzMUnuZ+3w9K6wB9HIn7ynG/1dCdBWWQ+cNZ7gNMjxB9H1N/fJ TK1JBGdzE2g2f6L9jywS02njnEflFGNU4blIKAzoXdyY+dcakjPTYLrhOmRFqCSDJ7Lw/ bEoqiaLNLF/Ve4aU7mPK3YHAMDzd1M/gN/I= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1681324583594100002 Content-Type: text/plain; charset="utf-8" From: Benny Lin REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4392 Add FDT support in EDK2 by submodule 3rd party libfdt (https://github.com/devicetree-org/pylibfdt/tree/main/libfdt) Add submodule libfdt and update ReadMe for the licence. Cc: Andrew Fish Cc: Leif Lindholm Cc: Michael D Kinney Signed-off-by: Benny Lin Reviewed-by: Leif Lindholm --- .gitmodules | 3 +++ MdePkg/Library/BaseFdtLib/libfdt | 1 + ReadMe.rst | 1 + 3 files changed, 5 insertions(+) diff --git a/.gitmodules b/.gitmodules index fe8a43be93..b1888c3488 100644 --- a/.gitmodules +++ b/.gitmodules @@ -26,3 +26,6 @@ [submodule "UnitTestFrameworkPkg/Library/SubhookLib/subhook"] path =3D UnitTestFrameworkPkg/Library/SubhookLib/subhook url =3D https://github.com/Zeex/subhook.git +[submodule "MdePkg/Library/BaseFdtLib/libfdt"] + path =3D MdePkg/Library/BaseFdtLib/libfdt + url =3D https://github.com/devicetree-org/pylibfdt.git diff --git a/MdePkg/Library/BaseFdtLib/libfdt b/MdePkg/Library/BaseFdtLib/l= ibfdt new file mode 160000 index 0000000000..cfff805481 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/libfdt @@ -0,0 +1 @@ +Subproject commit cfff805481bdea27f900c32698171286542b8d3c diff --git a/ReadMe.rst b/ReadMe.rst index 91b9cf3c5e..d46c534229 100644 --- a/ReadMe.rst +++ b/ReadMe.rst @@ -96,6 +96,7 @@ that are covered by additional licenses. - `UnitTestFrameworkPkg/Library/GoogleTestLib/googletest `__ - `UnitTestFrameworkPkg/Library/SubhookLib/subhook `__ - `RedfishPkg/Library/JsonLib/jansson `__ +- `MdePkg/Library/BaseFdtLib/libfdt `__ =20 The EDK II Project is composed of packages. The maintainers for each packa= ge are listed in `Maintainers.txt `__. --=20 2.39.1.windows.1 -=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 (#102912): https://edk2.groups.io/g/devel/message/102912 Mute This Topic: https://groups.io/mt/98225692/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 Sun May 19 15:58:43 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+102913+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+102913+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1681324584; cv=none; d=zohomail.com; s=zohoarc; b=DObEEtG9XDPAD8TnBcpmw+Qgo7U9cC8OFtGu9lWLSvbrFnSUCU28fMy7ugJBHgNKInlShfN3qQJ8eoD2fSlv//ZOwh1UKyFM+74PG5+WGmGWZAnWUF7gBRcF41hjBNncJnEWYK2GYX6Z9yY9mlHglEjz1lRFYgfrM5Tf3c5vIRs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681324584; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=mhMMpAJ+D3JFoTbt0RO4VwmVn0oHV/fsMP57sCnLN4w=; b=NFCm3u49mh0aeQ6c6HC1Jk1WrEGswkbcP+qA8I9MSSnVUdBksvVHabewNKxyASVtfRsWVInIUVpYN+ORLvVIRvo0HP+5Db1Jy28AXHLG0cV/Gig1XpWxCEuHkYQ8nD7l7zfLttNWfXOrA+Xte0KjX7Wx8NZx0EKStPUmHuRwIfQ= ARC-Authentication-Results: i=1; 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+102913+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1681324584449391.02371545242374; Wed, 12 Apr 2023 11:36:24 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id f5ObYY1788612xQSPWbVxTpX; Wed, 12 Apr 2023 11:36:24 -0700 X-Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web11.229.1681324583433149482 for ; Wed, 12 Apr 2023 11:36:23 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10678"; a="324348875" X-IronPort-AV: E=Sophos;i="5.98,339,1673942400"; d="scan'208";a="324348875" X-Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2023 11:36:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10678"; a="1018834634" X-IronPort-AV: E=Sophos;i="5.98,339,1673942400"; d="scan'208";a="1018834634" X-Received: from bennyli1-mobl2.gar.corp.intel.com ([10.252.185.57]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2023 11:36:21 -0700 From: "Benny Lin" To: devel@edk2.groups.io Cc: Benny Lin , Michael D Kinney , Liming Gao , Zhiguang Liu Subject: [edk2-devel] [PATCH v2 2/3] MdePkg: Support FDT library. Date: Thu, 13 Apr 2023 02:36:05 +0800 Message-Id: <20230412183606.887-3-benny.lin@intel.com> In-Reply-To: <20230412183606.887-1-benny.lin@intel.com> References: <20230412183606.887-1-benny.lin@intel.com> MIME-Version: 1.0 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,benny.lin@intel.com X-Gm-Message-State: g4rorPAKUusuxBo3qTvNkfvGx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1681324584; bh=NOFYHk+dWC7oVUrtmoYdimR35GPsyKnF5YfbPQIXzQU=; h=Cc:Date:From:Reply-To:Subject:To; b=GnVEnnJK8W/zWb9NjsnneHO/zJ3c4QrVpACLpR63j+Cl10QnoRYJodiL+IBwzURcCNv 2KNhmGxV7OUQrb8s3dIthCZ/ct5cv/7TMQ0oj8fGh60gA0a+PLVcsUxNc2fxV3pVtlzUy rPeRIBERnmP8FaDNyjcURtVYgWTDePQPApg= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1681324586377100011 Content-Type: text/plain; charset="utf-8" From: Benny Lin REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4392 Add FDT support in EDK2 by submodule 3rd party libfdt (https://github.com/devicetree-org/pylibfdt/tree/main/libfdt) 1. Correct the typo. 2. Remove no use definitions from LibFdtSupport.h. 3. Refer to LibcLib implementation by Pedro. Cc: Michael D Kinney Cc: Liming Gao Cc: Zhiguang Liu Signed-off-by: Benny Lin --- MdePkg/Include/Library/FdtLib.h | 300 ++++++++++++++++++++ MdePkg/Library/BaseFdtLib/BaseFdtLib.inf | 62 ++++ MdePkg/Library/BaseFdtLib/BaseFdtLib.uni | 14 + MdePkg/Library/BaseFdtLib/FdtLib.c | 284 ++++++++++++++++++ MdePkg/Library/BaseFdtLib/LibFdtSupport.h | 100 +++++++ MdePkg/Library/BaseFdtLib/LibFdtWrapper.c | 165 +++++++++++ MdePkg/Library/BaseFdtLib/limits.h | 10 + MdePkg/Library/BaseFdtLib/stdbool.h | 10 + MdePkg/Library/BaseFdtLib/stddef.h | 10 + MdePkg/Library/BaseFdtLib/stdint.h | 10 + MdePkg/Library/BaseFdtLib/stdlib.h | 10 + MdePkg/Library/BaseFdtLib/string.h | 10 + MdePkg/MdePkg.ci.yaml | 17 +- MdePkg/MdePkg.dec | 4 + MdePkg/MdePkg.dsc | 1 + 15 files changed, 1005 insertions(+), 2 deletions(-) diff --git a/MdePkg/Include/Library/FdtLib.h b/MdePkg/Include/Library/FdtLi= b.h new file mode 100644 index 0000000000..d1e67c773f --- /dev/null +++ b/MdePkg/Include/Library/FdtLib.h @@ -0,0 +1,300 @@ +/** @file + Flattened Device Tree Library. + + Copyright (c) 2023, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef FDT_LIB_H_ +#define FDT_LIB_H_ + +/// +/// Flattened Device Tree definition +/// +typedef struct { + UINT32 Magic; /* magic word FDT_MAGIC */ + UINT32 TotalSize; /* total size of DT block */ + UINT32 OffsetDtStruct; /* offset to structure */ + UINT32 OffsetDtStrings; /* offset to strings */ + UINT32 OffsetMemRsvmap; /* offset to memory reserve map */ + UINT32 Version; /* format version */ + UINT32 LastCompVersion; /* last compatible version */ + + /* version 2 fields below */ + UINT32 BootCpuidPhys; /* Which physical CPU id we're + booting on */ + /* version 3 fields below */ + UINT32 SizeDtStrings; /* size of the strings block */ + + /* version 17 fields below */ + UINT32 SizeDtStruct; /* size of the structure block */ +} FDT_HEADER; + +typedef struct { + UINT64 Address; + UINT64 Size; +} FDT_RESERVE_ENTRY; + +typedef struct { + UINT32 Tag; + CHAR8 Name[]; +} FDT_NODE_HEADER; + +typedef struct { + UINT32 Tag; + UINT32 Length; + UINT32 NameOffset; + CHAR8 Data[]; +} FDT_PROPERTY; + +#define FDT_GET_HEADER(Fdt, Field) FDT32_TO_CPU(((CONST FDT_HEADER *)(Fdt= ))->Field) + +#define FDT_MAGIC(Fdt) (FDT_GET_HEADER(Fdt, Magic)) +#define FDT_TOTAL_SIZE(Fdt) (FDT_GET_HEADER(Fdt, TotalSize)) +#define FDT_OFFSET_DT_STRUCT(Fdt) (FDT_GET_HEADER(Fdt, OffsetDtStruct)) +#define FDT_OFFSET_DT_STRINGS(Fdt) (FDT_GET_HEADER(Fdt, OffsetDtStrings)) +#define FDT_OFFSET_MEM_RSVMAP(Fdt) (FDT_GET_HEADER(Fdt, OffsetMemRsvmap)) +#define FDT_VERSION(Fdt) (FDT_GET_HEADER(Fdt, Version)) +#define FDT_LAST_COMP_VERSION(Fdt) (FDT_GET_HEADER(Fdt, LastCompVersion)) +#define FDT_BOOT_CPUID_PHYS(Fdt) (FDT_GET_HEADER(Fdt, BootCpuidPhys)) +#define FDT_SIZE_DT_STRINGS(Fdt) (FDT_GET_HEADER(Fdt, SizeDtStrings)) +#define FDT_SIZE_DT_STRUCT(Fdt) (FDT_GET_HEADER(Fdt, SizeDtStruct)) + +/** + Create a empty Flattened Device Tree. + + @param[in] Buffer The pointer to allocate a pool for FDT blob. + @param[in] BufferSize The BufferSize to the pool size. + + @return Zero for successfully, otherwise failed. + +**/ +RETURN_STATUS +EFIAPI +FdtCreateEmptyTree ( + IN VOID *Buffer, + IN UINTN BufferSize + ); + +/** + Returns a offset of next node from the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to previous node. + @param[in] Depth The depth to the level of tree hierarchy. + + @return The offset to next node offset. + +**/ +INT32 +EFIAPI +FdtNextNode ( + IN CONST VOID *Fdt, + IN INT32 Offset, + IN INT32 *Depth + ); + +/** + Returns a offset of first node under the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to previous node. + + @return The offset to next node offset. + +**/ +INT32 +EFIAPI +FdtFirstSubnode ( + IN CONST VOID *Fdt, + IN INT32 Offset + ); + +/** + Returns a offset of next node from the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to previous node. + + @return The offset to next node offset. + +**/ +INT32 +EFIAPI +FdtNextSubnode ( + IN CONST VOID *Fdt, + IN INT32 Offset + ); + +/** + Returns a offset of first node which includes the given name. + + @param[in] Fdt The pointer to FDT blob. + @param[in] ParentOffset The offset to the node which start find under. + @param[in] Name The name to search the node with the name. + @param[in] NameLength The length of the name to check only. + + @return The offset to node offset with given node name. + +**/ +INT32 +EFIAPI +FdtSubnodeOffsetNameLen ( + IN CONST VOID *Fdt, + IN INT32 ParentOffset, + IN CONST CHAR8 *Name, + IN INT32 NameLength + ); + +/** + Returns a offset of first node which includes the given property name an= d value. + + @param[in] Fdt The pointer to FDT blob. + @param[in] StartOffset The offset to the starting node to find. + @param[in] PropertyName The property name to search the node includin= g the named property. + @param[in] PropertyValue The property value to check the same property= value. + @param[in] PropertyLength The length of the value in PropertValue. + + @return The offset to node offset with given property. + +**/ +INT32 +EFIAPI +FdtNodeOffsetByPropValue ( + IN CONST VOID *Fdt, + IN INT32 StartOffset, + IN CONST CHAR8 *PropertyName, + IN CONST VOID *PropertyValue, + IN INT32 PropertyLength + ); + +/** + Returns a property with the given name from the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] NodeOffset The offset to the given node. + @param[in] Name The name to the property which need be searched + @param[in] Length The length to the size of the property found. + + @return The property to the structure of the found property. + +**/ +CONST FDT_PROPERTY * +EFIAPI +FdtGetProperty ( + IN CONST VOID *Fdt, + IN INT32 NodeOffset, + IN CONST CHAR8 *Name, + IN INT32 *Length + ); + +/** + Returns a offset of first property in the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to the node which need be searched. + + @return The offset to first property offset in the given node. + +**/ +INT32 +EFIAPI +FdtFirstPropertyOffset ( + IN CONST VOID *Fdt, + IN INT32 NodeOffset + ); + +/** + Returns a offset of next property from the given property. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to previous property. + + @return The offset to next property offset. + +**/ +INT32 +EFIAPI +FdtNextPropertyOffset ( + IN CONST VOID *Fdt, + IN INT32 Offset + ); + +/** + Returns a property from the given offset of the property. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to the given offset of the property. + @param[in] Length The length to the size of the property found. + + @return The property to the structure of the given property offset. + +**/ +CONST FDT_PROPERTY * +EFIAPI +FdtGetPropertyByOffset ( + IN CONST VOID *Fdt, + IN INT32 Offset, + IN INT32 *Length + ); + +/** + Returns a string by the given string offset. + + @param[in] Fdt The pointer to FDT blob. + @param[in] StrOffset The offset to the location in the strings bloc= k of FDT. + @param[in] Length The length to the size of string which need be= retrieved. + + @return The string to the given string offset. + +**/ +CONST CHAR8 * +EFIAPI +FdtGetString ( + IN CONST VOID *Fdt, + IN INT32 StrOffset, + IN INT32 *Length OPTIONAL + ); + +/** + Add a new node to the FDT. + + @param[in] Fdt The pointer to FDT blob. + @param[in] ParentOffset The offset to the node offset which want to ad= d in. + @param[in] Name The name to name the node. + + @return The offset to the new node. + +**/ +INT32 +EFIAPI +FdtAddSubnode ( + IN VOID *Fdt, + IN INT32 ParentOffset, + IN CONST CHAR8 *Name + ); + +/** + Add or modify a property in the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] NodeOffset The offset to the node offset which want to ad= d in. + @param[in] Name The name to name the property. + @param[in] Value The value to the property value. + @param[in] Length The length to the size of the property. + + @return Zero for successfully, otherwise failed. + +**/ +INT32 +EFIAPI +FdtSetProp ( + IN VOID *Fdt, + IN INT32 NodeOffset, + IN CONST CHAR8 *Name, + IN CONST VOID *Value, + IN UINT32 Length + ); + +#endif /* FDT_LIB_H_ */ diff --git a/MdePkg/Library/BaseFdtLib/BaseFdtLib.inf b/MdePkg/Library/Base= FdtLib/BaseFdtLib.inf new file mode 100644 index 0000000000..730e568ff6 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/BaseFdtLib.inf @@ -0,0 +1,62 @@ +## @file +# Flattened Device Tree Library. +# +# Copyright (c) 2023, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION =3D 0x0001001B + BASE_NAME =3D BaseFdtLib + MODULE_UNI_FILE =3D BaseFdtLib.uni + FILE_GUID =3D C64DCB01-B037-4FF6-9CF3-E8CEC206DE04 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D FdtLib + + DEFINE FDT_LIB_PATH =3D libfdt/libfdt + +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Sources] + FdtLib.c + LibFdtWrapper.c + # header Wrapper files + limits.h + stdbool.h + stddef.h + stdint.h + stdlib.h + string.h + + $(FDT_LIB_PATH)/fdt.c + $(FDT_LIB_PATH)/fdt.h + $(FDT_LIB_PATH)/fdt_addresses.c + $(FDT_LIB_PATH)/fdt_check.c + $(FDT_LIB_PATH)/fdt_empty_tree.c + $(FDT_LIB_PATH)/fdt_overlay.c + $(FDT_LIB_PATH)/fdt_ro.c + $(FDT_LIB_PATH)/fdt_rw.c + $(FDT_LIB_PATH)/fdt_strerror.c + $(FDT_LIB_PATH)/fdt_sw.c + $(FDT_LIB_PATH)/fdt_wip.c + $(FDT_LIB_PATH)/libfdt.h + $(FDT_LIB_PATH)/libfdt_env.h + $(FDT_LIB_PATH)/libfdt_internal.h + +[Packages] + MdePkg/MdePkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + +[BuildOptions] + MSFT:*_*_IA32_CC_FLAGS =3D /wd4146 /wd4245 + MSFT:*_*_X64_CC_FLAGS =3D /wd4146 /wd4244 /wd4245 /wd4267 + diff --git a/MdePkg/Library/BaseFdtLib/BaseFdtLib.uni b/MdePkg/Library/Base= FdtLib/BaseFdtLib.uni new file mode 100644 index 0000000000..3f7e45ea6f --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/BaseFdtLib.uni @@ -0,0 +1,14 @@ +// /** @file +// Flattened Device Tree Library. +// +// Copyright (c) 2023, Intel Corporation. All rights reserved.
+// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + + +#string STR_MODULE_ABSTRACT #language en-US "Instance of FDT L= ibrary" + +#string STR_MODULE_DESCRIPTION #language en-US "This module provi= des FDT Library implementation." + diff --git a/MdePkg/Library/BaseFdtLib/FdtLib.c b/MdePkg/Library/BaseFdtLib= /FdtLib.c new file mode 100644 index 0000000000..877c832c50 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/FdtLib.c @@ -0,0 +1,284 @@ +/** @file + Flattened Device Tree Library. + + Copyright (c) 2023, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +/** + Create a empty Flattened Device Tree. + + @param[in] Buffer The pointer to allocate a pool for FDT blob. + @param[in] BufferSize The BufferSize to the pool size. + + @return Zero for successfully, otherwise failed. + +**/ +INT32 +EFIAPI +FdtCreateEmptyTree ( + IN VOID *Buffer, + IN UINT32 BufferSize + ) +{ + return fdt_create_empty_tree (Buffer, (int)BufferSize); +} + +/** + Returns a offset of next node from the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to previous node. + @param[in] Depth The depth to the level of tree hierarchy. + + @return The offset to next node offset. + +**/ +INT32 +EFIAPI +FdtNextNode ( + IN CONST VOID *Fdt, + IN INT32 Offset, + IN INT32 *Depth + ) +{ + return fdt_next_node (Fdt, Offset, Depth); +} + +/** + Returns a offset of first node under the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to previous node. + + @return The offset to next node offset. + +**/ +INT32 +EFIAPI +FdtFirstSubnode ( + IN CONST VOID *Fdt, + IN INT32 Offset + ) +{ + return fdt_first_subnode (Fdt, Offset); +} + +/** + Returns a offset of next node from the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to previous node. + + @return The offset to next node offset. + +**/ +INT32 +EFIAPI +FdtNextSubnode ( + IN CONST VOID *Fdt, + IN INT32 Offset + ) +{ + return fdt_next_subnode (Fdt, Offset); +} + +/** + Returns a offset of first node which includes the given name. + + @param[in] Fdt The pointer to FDT blob. + @param[in] ParentOffset The offset to the node which start find under. + @param[in] Name The name to search the node with the name. + @param[in] NameLength The length of the name to check only. + + @return The offset to node offset with given node name. + +**/ +INT32 +EFIAPI +FdtSubnodeOffsetNameLen ( + IN CONST VOID *Fdt, + IN INT32 ParentOffset, + IN CONST CHAR8 *Name, + IN INT32 NameLength + ) +{ + return fdt_subnode_offset_namelen (Fdt, ParentOffset, Name, NameLength); +} + +/** + Returns a offset of first node which includes the given property name an= d value. + + @param[in] Fdt The pointer to FDT blob. + @param[in] StartOffset The offset to the starting node to find. + @param[in] PropertyName The property name to search the node includin= g the named property. + @param[in] PropertyValue The property value to check the same property= value. + @param[in] PropertyLength The length of the value in PropertValue. + + @return The offset to node offset with given property. + +**/ +INT32 +EFIAPI +FdtNodeOffsetByPropValue ( + IN CONST VOID *Fdt, + IN INT32 StartOffset, + IN CONST CHAR8 *PropertyName, + IN CONST VOID *PropertyValue, + IN INT32 PropertyLength + ) +{ + return fdt_node_offset_by_prop_value (Fdt, StartOffset, PropertyName, Pr= opertyValue, PropertyLength); +} + +/** + Returns a property with the given name from the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] NodeOffset The offset to the given node. + @param[in] Name The name to the property which need be searched + @param[in] Length The length to the size of the property found. + + @return The property to the structure of the found property. + +**/ +CONST struct fdt_property * +EFIAPI +FdtGetProperty ( + IN CONST VOID *Fdt, + IN INT32 NodeOffset, + IN CONST CHAR8 *Name, + IN INT32 *Length + ) +{ + return fdt_get_property (Fdt, NodeOffset, Name, Length); +} + +/** + Returns a offset of first property in the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] NodeOffset The offset to the node which need be searched. + + @return The offset to first property offset in the given node. + +**/ +INT32 +EFIAPI +FdtFirstPropertyOffset ( + IN CONST VOID *Fdt, + IN INT32 NodeOffset + ) +{ + return fdt_first_property_offset (Fdt, NodeOffset); +} + +/** + Returns a offset of next property from the given property. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to previous property. + + @return The offset to next property offset. + +**/ +INT32 +EFIAPI +FdtNextPropertyOffset ( + IN CONST VOID *Fdt, + IN INT32 Offset + ) +{ + return fdt_next_property_offset (Fdt, Offset); +} + +/** + Returns a property from the given offset of the property. + + @param[in] Fdt The pointer to FDT blob. + @param[in] Offset The offset to the given offset of the property. + @param[in] Length The length to the size of the property found. + + @return The property to the structure of the given property offset. + +**/ +CONST struct fdt_property * +EFIAPI +FdtGetPropertyByOffset ( + IN CONST VOID *Fdt, + IN INT32 Offset, + IN INT32 *Length + ) +{ + return fdt_get_property_by_offset (Fdt, Offset, Length); +} + +/** + Returns a string by the given string offset. + + @param[in] Fdt The pointer to FDT blob. + @param[in] StrOffset The offset to the location in the strings bloc= k of FDT. + @param[in] Length The length to the size of string which need be= retrieved. + + @return The string to the given string offset. + +**/ +CONST CHAR8 * +EFIAPI +FdtGetString ( + IN CONST VOID *Fdt, + IN INT32 StrOffset, + IN INT32 *Length OPTIONAL + ) +{ + return fdt_get_string (Fdt, StrOffset, Length); +} + +/** + Add a new node to the FDT. + + @param[in] Fdt The pointer to FDT blob. + @param[in] ParentOffset The offset to the node offset which want to ad= d in. + @param[in] Name The name to name the node. + + @return The offset to the new node. + +**/ +INT32 +EFIAPI +FdtAddSubnode ( + IN VOID *Fdt, + IN INT32 ParentOffset, + IN CONST CHAR8 *Name + ) +{ + return fdt_add_subnode (Fdt, ParentOffset, Name); +} + +/** + Add or modify a property in the given node. + + @param[in] Fdt The pointer to FDT blob. + @param[in] NodeOffset The offset to the node offset which want to ad= d in. + @param[in] Name The name to name the property. + @param[in] Value The value to the property value. + @param[in] Length The length to the size of the property. + + @return Zero for successfully, otherwise failed. + +**/ +INT32 +EFIAPI +FdtSetProp ( + IN VOID *Fdt, + IN INT32 NodeOffset, + IN CONST CHAR8 *Name, + IN CONST VOID *Value, + IN UINT32 Length + ) +{ + return fdt_setprop (Fdt, NodeOffset, Name, Value, (int)Length); +} diff --git a/MdePkg/Library/BaseFdtLib/LibFdtSupport.h b/MdePkg/Library/Bas= eFdtLib/LibFdtSupport.h new file mode 100644 index 0000000000..92d7bf0946 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/LibFdtSupport.h @@ -0,0 +1,100 @@ +/** @file + Root include file of C runtime library to support building the third-par= ty + libfdt library. + + Copyright (c) 2023, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef FDT_LIB_SUPPORT_H_ +#define FDT_LIB_SUPPORT_H_ + +#include +#include +#include + +typedef UINT8 uint8_t; +typedef UINT16 uint16_t; +typedef INT32 int32_t; +typedef UINT32 uint32_t; +typedef UINT64 uint64_t; +typedef UINTN uintptr_t; +typedef UINTN size_t; +typedef BOOLEAN bool; + +#define true (1 =3D=3D 1) +#define false (1 =3D=3D 0) + +// +// Definitions for global constants used by libfdt library routines +// +#define INT_MAX 0x7FFFFFFF /* Maximum (signed) int value */ +#define INT32_MAX 0x7FFFFFFF /* Maximum (signed) int32 value */ +#define UINT32_MAX 0xFFFFFFFF /* Maximum unsigned int32 value */ +#define ULONG_MAX 0xFFFFFFFF /* Maximum unsigned long value */ + +// +// Function prototypes of libfdt Library routines +// +void * +memset ( + void *, + int, + size_t + ); + +int +memcmp ( + const void *, + const void *, + size_t + ); + +int +strcmp ( + const char *, + const char * + ); + +char * +strchr ( + const char *, + int + ); + +char * +strrchr ( + const char *, + int + ); + +unsigned long +strtoul ( + const char *, + char **, + int + ); + +char * +strcpy ( + char *strDest, + const char *strSource + ); + +// +// Macros that directly map functions to BaseLib, BaseMemoryLib, and Debug= Lib functions +// +#define memcpy(dest, source, count) CopyMem(dest,source, (UINTN)(c= ount)) +#define memset(dest, ch, count) SetMem(dest, (UINTN)(count),(U= INT8)(ch)) +#define memchr(buf, ch, count) ScanMem8(buf, (UINTN)(count),(= UINT8)ch) +#define memcmp(buf1, buf2, count) (int)(CompareMem(buf1, buf2, (= UINTN)(count))) +#define memmove(dest, source, count) CopyMem(dest, source, (UINTN)(= count)) +#define strlen(str) (size_t)(AsciiStrLen(str)) +#define strnlen(str, count) (size_t)(AsciiStrnLenS(str, co= unt)) +#define strncpy(strDest, strSource, count) AsciiStrnCpyS(strDest, MAX_STR= ING_SIZE, strSource, (UINTN)count) +#define strcat(strDest, strSource) AsciiStrCatS(strDest, MAX_STRI= NG_SIZE, strSource) +#define strcmp(string1, string2, count) (int)(AsciiStrCmp(string1, str= ing2)) +#define strncmp(string1, string2, count) (int)(AsciiStrnCmp(string1, st= ring2, (UINTN)(count))) + +#endif /* FDT_LIB_SUPPORT_H_ */ diff --git a/MdePkg/Library/BaseFdtLib/LibFdtWrapper.c b/MdePkg/Library/Bas= eFdtLib/LibFdtWrapper.c new file mode 100644 index 0000000000..50b533a2b0 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/LibFdtWrapper.c @@ -0,0 +1,165 @@ +/** @file + Root include file of C runtime library to support building the third-par= ty + libfdt library. + + Copyright (c) 2023, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "LibFdtSupport.h" + +char * +strchr ( + const char *Str, + int Char + ) +{ + char *S; + + S =3D (char *)Str; + + for ( ; ; S++) { + if (*S =3D=3D Char) { + return S; + } + + if (*S =3D=3D '\0') { + return NULL; + } + } +} + +char * +strrchr ( + const char *Str, + int Char + ) +{ + char *S, *last; + + S =3D (char *)Str; + last =3D NULL; + + for ( ; ; S++) { + if (*S =3D=3D Char) { + last =3D S; + } + + if (*S =3D=3D '\0') { + return last; + } + } +} + +STATIC +int +__isspace ( + int ch + ) +{ + // basic ASCII ctype.h:isspace(). Not efficient + return ch =3D=3D '\r' || ch =3D=3D '\n' || ch =3D=3D ' ' || ch =3D=3D '\= t' || ch =3D=3D '\v' || ch =3D=3D '\f'; +} + +unsigned long +strtoul ( + const char *Nptr, + char **EndPtr, + int Base + ) +{ + BOOLEAN Negate; + BOOLEAN Overflow; + unsigned long Val; + + Negate =3D FALSE; + Overflow =3D FALSE; + Val =3D 0; + + // Reject bad numeric bases + if ((Base < 0) || (Base =3D=3D 1) || (Base > 36)) { + return 0; + } + + // Skip whitespace + while (__isspace (*Nptr)) { + Nptr++; + } + + // Check for + or - prefixes + if (*Nptr =3D=3D '-') { + Negate =3D TRUE; + Nptr++; + } else if (*Nptr =3D=3D '+') { + Nptr++; + } + + // Consume the start, autodetecting base if needed + if ((Nptr[0] =3D=3D '0') && ((Nptr[1] =3D=3D 'x') || (Nptr[1] =3D=3D 'X'= )) && ((Base =3D=3D 0) || (Base =3D=3D 16))) { + // Hex + Nptr +=3D 2; + Base =3D 16; + } else if ((Nptr[0] =3D=3D '0') && ((Nptr[1] =3D=3D 'b') || (Nptr[1] =3D= =3D 'B')) && ((Base =3D=3D 0) || (Base =3D=3D 2))) { + // Binary (standard pending C23) + Nptr +=3D 2; + Base =3D 2; + } else if ((Nptr[0] =3D=3D '0') && ((Base =3D=3D 0) || (Base =3D=3D 8)))= { + // Octal + Nptr++; + Base =3D 8; + } else { + if (Base =3D=3D 0) { + // Assume decimal + Base =3D 10; + } + } + + while (TRUE) { + int Digit; + char C; + unsigned long NewVal; + + C =3D *Nptr; + Digit =3D -1; + + if ((C >=3D '0') && (C <=3D '9')) { + Digit =3D C - '0'; + } else if ((C >=3D 'a') && (C <=3D 'z')) { + Digit =3D C - 'a' + 10; + } else if ((C >=3D 'A') && (C <=3D 'Z')) { + Digit =3D C - 'A' + 10; + } + + if ((Digit =3D=3D -1) || (Digit >=3D Base)) { + // Note that this case also handles the \0 + if (EndPtr) { + *EndPtr =3D (char *)Nptr; + } + + break; + } + + NewVal =3D Val * Base + Digit; + + if (NewVal < Val) { + // Overflow + Overflow =3D TRUE; + } + + Val =3D NewVal; + + Nptr++; + } + + if (Negate) { + Val =3D -Val; + } + + if (Overflow) { + Val =3D ULONG_MAX; + } + + // TODO: We're lacking errno here. + return Val; +} diff --git a/MdePkg/Library/BaseFdtLib/limits.h b/MdePkg/Library/BaseFdtLib= /limits.h new file mode 100644 index 0000000000..f6cf8d5702 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/limits.h @@ -0,0 +1,10 @@ +/** @file + Include file to support building the third-party libfdt library. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + diff --git a/MdePkg/Library/BaseFdtLib/stdbool.h b/MdePkg/Library/BaseFdtLi= b/stdbool.h new file mode 100644 index 0000000000..f6cf8d5702 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/stdbool.h @@ -0,0 +1,10 @@ +/** @file + Include file to support building the third-party libfdt library. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + diff --git a/MdePkg/Library/BaseFdtLib/stddef.h b/MdePkg/Library/BaseFdtLib= /stddef.h new file mode 100644 index 0000000000..f6cf8d5702 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/stddef.h @@ -0,0 +1,10 @@ +/** @file + Include file to support building the third-party libfdt library. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + diff --git a/MdePkg/Library/BaseFdtLib/stdint.h b/MdePkg/Library/BaseFdtLib= /stdint.h new file mode 100644 index 0000000000..f6cf8d5702 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/stdint.h @@ -0,0 +1,10 @@ +/** @file + Include file to support building the third-party libfdt library. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + diff --git a/MdePkg/Library/BaseFdtLib/stdlib.h b/MdePkg/Library/BaseFdtLib= /stdlib.h new file mode 100644 index 0000000000..f6cf8d5702 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/stdlib.h @@ -0,0 +1,10 @@ +/** @file + Include file to support building the third-party libfdt library. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + diff --git a/MdePkg/Library/BaseFdtLib/string.h b/MdePkg/Library/BaseFdtLib= /string.h new file mode 100644 index 0000000000..f6cf8d5702 --- /dev/null +++ b/MdePkg/Library/BaseFdtLib/string.h @@ -0,0 +1,10 @@ +/** @file + Include file to support building the third-party libfdt library. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + diff --git a/MdePkg/MdePkg.ci.yaml b/MdePkg/MdePkg.ci.yaml index 6ba85ebe61..f039daccdb 100644 --- a/MdePkg/MdePkg.ci.yaml +++ b/MdePkg/MdePkg.ci.yaml @@ -2,7 +2,7 @@ # CI configuration for MdePkg # # Copyright (c) Microsoft Corporation -# Copyright (c) 2020, Intel Corporation. All rights reserved.
+# Copyright (c) 2023, Intel Corporation. All rights reserved.
# Copyright (c) 2021, Arm Limited. All rights reserved.
# Copyright (c) 2023, Loongson Technology Corporation Limited. All rights = reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent @@ -67,7 +67,8 @@ "Include/Library/PcdLib.h", "Include/Library/SafeIntLib.h", "Include/Protocol/DebugSupport.h", - "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c" + "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c", + "Library/BaseFdtLib" ] }, ## options defined ci/Plugin/CompilerPlugin @@ -164,5 +165,17 @@ "ExtendWords": [], # words to extend to the dictionary f= or this package "IgnoreStandardPaths": [], # Standard Plugin defined paths that = should be ignore "AdditionalIncludePaths": [] # Additional paths to spell check (wi= ldcards supported) + }, + # options defined in .pytool/Plugin/UncrustifyCheck + "UncrustifyCheck": { + "IgnoreFiles": [ + "Library/BaseFdtLib/libfdt", + "Library/BaseFdtLib/limits.h", + "Library/BaseFdtLib/stdbool.h", + "Library/BaseFdtLib/stddef.h", + "Library/BaseFdtLib/stdint.h", + "Library/BaseFdtLib/stdlib.h", + "Library/BaseFdtLib/string.h" + ] } } diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index e70182bf7f..9804a7a6bd 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -289,6 +289,10 @@ # ArmTrngLib|Include/Library/ArmTrngLib.h =20 + ## @libraryclass Provides APIs for third-party library libfdt. + # + FdtLib|Include/Library/FdtLib.h + [LibraryClasses.IA32, LibraryClasses.X64, LibraryClasses.AARCH64] ## @libraryclass Provides services to generate random number. # diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index 152c02991a..b38c863812 100644 --- a/MdePkg/MdePkg.dsc +++ b/MdePkg/MdePkg.dsc @@ -137,6 +137,7 @@ MdePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf =20 MdePkg/Library/JedecJep106Lib/JedecJep106Lib.inf + MdePkg/Library/BaseFdtLib/BaseFdtLib.inf =20 [Components.IA32, Components.X64, Components.ARM, Components.AARCH64] # --=20 2.39.1.windows.1 -=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 (#102913): https://edk2.groups.io/g/devel/message/102913 Mute This Topic: https://groups.io/mt/98225694/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 Sun May 19 15:58:43 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+102914+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+102914+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1681324585; cv=none; d=zohomail.com; s=zohoarc; b=M8KmON/AwVUwgfxQC72cS3qh96V387v7u9xEW7+RaDrDFQk+DmWb7eCYoroGLScyxL5fHw2zct3+1RLu4Ijf1CXrq9ShhHfF9ZrrM1clqv9T3dNo+qec+tsiPJ1GqNSSyLZDBOHElflLw1mcCAeASuDfvBNCGTiPvrSUzSJEncI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681324585; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=B1SWFiuxdipmZSzBwMx8azDvY+4ewlkGj7+ZqwkNIYc=; b=jbz3+DYiN00V50HSi/G3gMpmWTlJSOkresnWkoMhiNdXpa6Q28JxSDpBIfJ9czefsyPWUk7J8pdxHew2vLs62MO9HWlEE2gALdxilQDX6vlBOjLQ+7rYk1lk3cwKkMBq9lHyefppxl3QSGuWh6nANBMaQ/lKP3eDy9ar6mc3oTE= ARC-Authentication-Results: i=1; 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+102914+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1681324585393455.1433435198378; Wed, 12 Apr 2023 11:36:25 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id A80HYY1788612xRgPeuAJEDs; Wed, 12 Apr 2023 11:36:25 -0700 X-Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web11.229.1681324583433149482 for ; Wed, 12 Apr 2023 11:36:24 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10678"; a="324348904" X-IronPort-AV: E=Sophos;i="5.98,339,1673942400"; d="scan'208";a="324348904" X-Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2023 11:36:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10678"; a="1018834639" X-IronPort-AV: E=Sophos;i="5.98,339,1673942400"; d="scan'208";a="1018834639" X-Received: from bennyli1-mobl2.gar.corp.intel.com ([10.252.185.57]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2023 11:36:22 -0700 From: "Benny Lin" To: devel@edk2.groups.io Cc: Benny Lin , Sean Brogan , Michael Kubacki , Michael D Kinney , Liming Gao Subject: [edk2-devel] [PATCH v2 3/3] .pytool: Support FDT library. Date: Thu, 13 Apr 2023 02:36:06 +0800 Message-Id: <20230412183606.887-4-benny.lin@intel.com> In-Reply-To: <20230412183606.887-1-benny.lin@intel.com> References: <20230412183606.887-1-benny.lin@intel.com> MIME-Version: 1.0 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,benny.lin@intel.com X-Gm-Message-State: LOijczYzkq0cVQwVJQXWOYBTx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1681324585; bh=Rmln5PGXDlRIsJS1t62BvR4A2LMf85neSai4drwStpw=; h=Cc:Date:From:Reply-To:Subject:To; b=pw/dlRByd/5lvQ3F2+YvZMBhDkRGR8gOrGh2Kw3CVW20iATSJzqbFO/ROSp31tU+Nnx wNZ6hcORsSi3Z9nBmmIIRRuAOppokiEKwOah5fyF4N53Hw5Zn4ixf5JfA1OFUBU1tktX/ r/TRlpEe436q0p/ijgRs/k61w3NCSriyIeE= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1681324586382100012 Content-Type: text/plain; charset="utf-8" From: Benny Lin REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4392 Add FDT support in EDK2 by submodule 3rd party libfdt (https://github.com/devicetree-org/pylibfdt/tree/main/libfdt) Add RequiredSubmodule object for CI setting. Cc: Sean Brogan Cc: Michael Kubacki Cc: Michael D Kinney Cc: Liming Gao Signed-off-by: Benny Lin --- .pytool/CISettings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.pytool/CISettings.py b/.pytool/CISettings.py index e3f44add58..2fb99f2a17 100644 --- a/.pytool/CISettings.py +++ b/.pytool/CISettings.py @@ -195,6 +195,8 @@ class Settings(CiBuildSettingsManager, UpdateSettingsMa= nager, SetupSettingsManag "RedfishPkg/Library/JsonLib/jansson", False)) rs.append(RequiredSubmodule( "UnitTestFrameworkPkg/Library/SubhookLib/subhook", False)) + rs.append(RequiredSubmodule( + "MdePkg/Library/BaseFdtLib/libfdt", False)) return rs =20 def GetName(self): --=20 2.39.1.windows.1 -=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 (#102914): https://edk2.groups.io/g/devel/message/102914 Mute This Topic: https://groups.io/mt/98225695/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-