From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 827E674004C for ; Fri, 12 Jan 2024 12:00:46 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=DsSYSBT+p98mhvsj//Lnvqg/xZcvX0JrHel4ncp6Dnw=; c=relaxed/simple; d=groups.io; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:To:Cc:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type:Content-Transfer-Encoding; s=20140610; t=1705060845; v=1; b=SzxnwnD1sUOMtUJTj9OBmLZ8x+5Jvr71pSY317GxTRiW8UMxs1NZqwD3jyuC24lhLN55J+H+ 5SlLzn/Sk9nSKIztLwFH7pFvKcDS4I4U3eWTipf6ZcayY08uUh3394oJAgrKGbiX7cWkkSZq9sz 0t+PIz7biqC1ZmZmuqrValiY= X-Received: by 127.0.0.2 with SMTP id wm0gYY7687511xRPVRBPWRsV; Fri, 12 Jan 2024 04:00:45 -0800 X-Received: from mail-oo1-f47.google.com (mail-oo1-f47.google.com [209.85.161.47]) by mx.groups.io with SMTP id smtpd.web10.5477.1705060844408941603 for ; Fri, 12 Jan 2024 04:00:44 -0800 X-Received: by mail-oo1-f47.google.com with SMTP id 006d021491bc7-59612e4a21eso2271345eaf.3 for ; Fri, 12 Jan 2024 04:00:44 -0800 (PST) X-Gm-Message-State: xtA7oW1CMcpc9Esw3EsrluLdx7686176AA= X-Google-Smtp-Source: AGHT+IEiDcZD9BMU2A3tPWdfQ9Hsu1DDkuI8DC4oCppAFR5rQiXWZRjUgubVmD5vjFPzS5HD79Chql+yS0wtHqppMow= X-Received: by 2002:a4a:c7:0:b0:594:6f:f6d6 with SMTP id 190-20020a4a00c7000000b00594006ff6d6mr443709ooh.8.1705060841844; Fri, 12 Jan 2024 04:00:41 -0800 (PST) MIME-Version: 1.0 References: <20231221005427.13932-1-ndhillon@marvell.com> <20231221005427.13932-7-ndhillon@marvell.com> In-Reply-To: <20231221005427.13932-7-ndhillon@marvell.com> From: "Marcin Wojtas via groups.io" Date: Fri, 12 Jan 2024 13:00:31 +0100 Message-ID: Subject: Re: [edk2-devel] [edk2-platforms PATCH v2 6/8] Silicon/Marvell: Device tree driver To: devel@edk2.groups.io, ndhillon@marvell.com Cc: Leif Lindholm , Szymon Balcerak Precedence: Bulk 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,mw@semihalf.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=SzxnwnD1; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io +marcin.s.wojtas@gmail.com Hi Narinder, czw., 21 gru 2023 o 01:54 Narinder Dhillon napisa=C5= =82(a): > > From: Narinder Dhillon > > This patch adds a device tree driver that is used to read board > configuration information from a device tree. > > Signed-off-by: Narinder Dhillon > --- > .../Drivers/Fdt/FdtClientDxe/FdtClientDxe.c | 382 ++++++++++++++++++ > .../Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf | 43 ++ > .../Include/Protocol/FdtClient.h | 180 +++++++++ > 3 files changed, 605 insertions(+) > create mode 100644 Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe= .c > create mode 100644 Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe= .inf > create mode 100644 Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/Fd= tClient.h > > diff --git a/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.c b/Si= licon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.c > new file mode 100644 > index 0000000000..aa4f773458 > --- /dev/null > +++ b/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.c > @@ -0,0 +1,382 @@ > +/** @file > +* FDT client driver > +* > +* Copyright (c) 2016, Cavium Inc. All rights reserved.
> +* Copyright (c) 2016, Linaro Ltd. All rights reserved.
> +* > +* SPDX-License-Identifier: BSD-2-Clause-Patent > +* > +**/ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > + > +#include > + > +STATIC VOID *mDeviceTreeBase; > + > +STATIC > +EFI_STATUS > +GetNodeProperty ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN FDT_HANDLE Node, > + IN CONST CHAR8 *PropertyName, > + OUT CONST VOID **Prop, > + OUT UINT32 *PropSize OPTIONAL > + ) > +{ > + INT32 Len; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + ASSERT (Prop !=3D NULL); > + > + *Prop =3D fdt_getprop (mDeviceTreeBase, Node, PropertyName, &Len); > + if (*Prop =3D=3D NULL) { > + return EFI_NOT_FOUND; > + } > + > + if (PropSize !=3D NULL) { > + *PropSize =3D Len; > + } > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +SetNodeProperty ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN FDT_HANDLE Node, > + IN CONST CHAR8 *PropertyName, > + IN CONST VOID *Prop, > + IN UINT32 PropSize > + ) > +{ > + INT32 Ret; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + > + Ret =3D fdt_setprop (mDeviceTreeBase, Node, PropertyName, Prop, PropSi= ze); > + if (Ret !=3D 0) { > + return EFI_DEVICE_ERROR; > + } > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +EFIAPI > +FindCompatibleNode ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST CHAR8 *CompatibleString, > + IN FDT_HANDLE PrevNode, > + OUT FDT_HANDLE *Node > + ) > +{ > + FDT_HANDLE Offset; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + ASSERT (Node !=3D NULL); > + > + Offset =3D fdt_node_offset_by_compatible (mDeviceTreeBase, PrevNode, C= ompatibleString); > + > + if (Offset < 0) { > + return EFI_NOT_FOUND; > + } > + > + *Node =3D Offset; > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetOrInsertChosenNode ( > + IN FDT_CLIENT_PROTOCOL *This, > + OUT INT32 *Node > + ) > +{ > + INT32 NewNode; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + ASSERT (Node !=3D NULL); > + > + NewNode =3D fdt_path_offset (mDeviceTreeBase, "/chosen"); > + > + if (NewNode < 0) { > + NewNode =3D fdt_add_subnode (mDeviceTreeBase, 0, "/chosen"); > + } > + > + if (NewNode < 0) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + *Node =3D NewNode; > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetNodeDepth ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN FDT_HANDLE Node, > + OUT INT32 *Depth > +) > +{ > + *Depth =3D fdt_node_depth (mDeviceTreeBase, Node); > + > + if (*Depth < 0) { > + return EFI_NOT_FOUND; > + } > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetParentNode ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN FDT_HANDLE Node, > + OUT FDT_HANDLE *Parent > +) > +{ > + *Parent =3D fdt_parent_offset (mDeviceTreeBase, Node); > + > + if (*Parent < 0) { > + return EFI_NOT_FOUND; > + } > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetNode ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST CHAR8 *Path, > + OUT FDT_HANDLE *Node > +) > +{ > + *Node =3D fdt_path_offset (mDeviceTreeBase, Path); > + > + if (*Node < 0) { > + return EFI_NOT_FOUND; > + } > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetNodePath ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE Node, > + OUT CHAR8 *Path, > + IN INT32 Size > +) > +{ > + INT32 Result; > + > + Result =3D fdt_get_path (mDeviceTreeBase, Node, Path, Size); > + > + if (Result < 0) { > + return EFI_NOT_FOUND; > + } > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetNodeByPropertyValue ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE StartNode, > + IN CHAR8 *Property, > + IN VOID *Value, > + IN INT32 Size, > + OUT FDT_HANDLE *Node > +) > +{ > + INT32 Offset; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + ASSERT (Node !=3D NULL); > + > + Offset =3D fdt_node_offset_by_prop_value (mDeviceTreeBase, StartNode, > + Property, Value, > + Size); > + > + if (Offset < 0) { > + DEBUG ((DEBUG_ERROR, "Result: %d\n", Offset)); > + return EFI_NOT_FOUND; > + } > + > + *Node =3D Offset; > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetSubnodeByPropertyValue( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE Parent, > + IN CHAR8 *PropertyName, > + IN VOID *PropertyValue, > + IN INT32 PropertyLength, > + OUT FDT_HANDLE *Node > +) > +{ > + INT32 Offset; > + CONST VOID *Property; > + INT32 Length; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + ASSERT (Node !=3D NULL); > + > + Offset =3D fdt_first_subnode (mDeviceTreeBase, Parent); > + > + while (Offset > 0) { > + Property =3D fdt_getprop (mDeviceTreeBase, Offset, PropertyName, &Le= ngth); > + > + if ((Property !=3D NULL) && > + (PropertyLength =3D=3D Length) && > + (CompareMem (Property, PropertyValue, Length) =3D=3D 0)) { > + *Node =3D Offset; > + return EFI_SUCCESS; > + } > + > + Offset =3D fdt_next_subnode(mDeviceTreeBase, Offset); > + } > + > + return EFI_NOT_FOUND; > +} > + > +STATIC > +EFI_STATUS > +GetNodeByPHandle ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE PHandle, > + OUT FDT_HANDLE *Node > +) > +{ > + INT32 Offset; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + ASSERT (Node !=3D NULL); > + > + Offset =3D fdt_node_offset_by_phandle (mDeviceTreeBase, PHandle); > + > + if (Offset < 0) { > + DEBUG ((DEBUG_ERROR, "Result: %d\n", Offset)); > + return EFI_NOT_FOUND; > + } > + > + *Node =3D Offset; > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetFirstSubnode ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE Parent, > + OUT FDT_HANDLE *Node > +) > +{ > + INT32 Offset; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + ASSERT (Node !=3D NULL); > + > + Offset =3D fdt_first_subnode (mDeviceTreeBase, Parent); > + > + if (Offset < 0) { > + DEBUG ((DEBUG_ERROR, "Result: %d\n", Offset)); > + return EFI_NOT_FOUND; > + } > + > + *Node =3D Offset; > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > +GetNextSubnode ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE Subnode, > + OUT FDT_HANDLE *Next > +) > +{ > + INT32 Offset; > + > + ASSERT (mDeviceTreeBase !=3D NULL); > + ASSERT (Next !=3D NULL); > + > + Offset =3D fdt_next_subnode (mDeviceTreeBase, Subnode); > + > + if (Offset < 0) { > + DEBUG ((DEBUG_ERROR, "Result: %d\n", Offset)); > + return EFI_NOT_FOUND; > + } > + > + *Next =3D Offset; > + > + return EFI_SUCCESS; > +} > + > +STATIC FDT_CLIENT_PROTOCOL mFdtClientProtocol =3D { > + GetNodeProperty, > + SetNodeProperty, > + FindCompatibleNode, > + GetOrInsertChosenNode, > + GetNodeDepth, > + GetParentNode, > + GetNode, > + GetNodePath, > + GetNodeByPropertyValue, > + GetSubnodeByPropertyValue, > + GetNodeByPHandle, > + GetFirstSubnode, > + GetNextSubnode > +}; > + > +EFI_STATUS > +EFIAPI > +InitializeFdtClientDxe ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + VOID *Hob; > + VOID *DeviceTreeBase; > + > + Hob =3D GetFirstGuidHob (&gFdtHobGuid); > + > + if (Hob =3D=3D NULL) { > + return EFI_NOT_FOUND; > + } > + > + DeviceTreeBase =3D GET_GUID_HOB_DATA (Hob); > + mDeviceTreeBase =3D (VOID *)*(UINT64 *)DeviceTreeBase; > + if (fdt_check_header (mDeviceTreeBase)) { > + DEBUG ((DEBUG_ERROR, "No DTB found @ 0x%p\n", DeviceTreeBase)); > + return EFI_NOT_FOUND; > + } > + > + DEBUG ((DEBUG_INFO, "DTB @ 0x%p\n", mDeviceTreeBase)); > + > + return gBS->InstallMultipleProtocolInterfaces (&ImageHandle, > + &gFdtClientProtocolGuid, &mFdtCl= ientProtocol, > + NULL); > +} > diff --git a/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf b/= Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf > new file mode 100644 > index 0000000000..23bcf8810f > --- /dev/null > +++ b/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf > @@ -0,0 +1,43 @@ > +## @file > +# FDT client driver > +# > +# Copyright (c) 2016, Linaro Ltd. All rights reserved.
> +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D FdtClientDxe > + FILE_GUID =3D 9A871B00-1C16-4F61-8D2C-93B6654B5AD= 6 > + MODULE_TYPE =3D DXE_DRIVER > + VERSION_STRING =3D 1.0 > + ENTRY_POINT =3D InitializeFdtClientDxe > + > +[Sources] > + FdtClientDxe.c > + > +[Packages] > + Silicon/Marvell/MarvellSiliconPkg/MarvellSiliconPkg.dec > + EmbeddedPkg/EmbeddedPkg.dec > + MdeModulePkg/MdeModulePkg.dec > + MdePkg/MdePkg.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + FdtLib > + HobLib > + UefiBootServicesTableLib > + UefiDriverEntryPoint > + > +[Protocols] > + gFdtClientProtocolGuid ## PRODUCES > + > +[Guids] > + gFdtHobGuid > + gFdtTableGuid > + > +[Depex] > + TRUE > diff --git a/Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/FdtClient= .h b/Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/FdtClient.h > new file mode 100644 > index 0000000000..dd9af0bf8f > --- /dev/null > +++ b/Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/FdtClient.h > @@ -0,0 +1,180 @@ > +/** @file > + > + DISCLAIMER: the FDT_CLIENT_PROTOCOL introduced here is a work in progr= ess, > + and should not be used outside of the EDK II tree. > + > + Copyright (C) 2023 Marvell > + Copyright (c) 2016, Linaro Ltd. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef __FDT_CLIENT_H__ > +#define __FDT_CLIENT_H__ > + > +#define FDT_CLIENT_PROTOCOL_GUID { \ > + 0xE11FACA0, 0x4710, 0x4C8E, {0xA7, 0xA2, 0x01, 0xBA, 0xA2, 0x59, 0x1B,= 0x4C} \ > + } > + > +#define FdtToCpu32(Value) SwapBytes32(Value) > +#define CpuToFdt32(Value) SwapBytes32(Value) > + > +#define FdtToCpu64(Value) SwapBytes64(Value) > +#define CpuToFdt64(Value) SwapBytes64(Value) > + > +// > +// Protocol interface structure > +// > +typedef int FDT_HANDLE; > +#define FDT_START_HANDLE -1 > +typedef struct _FDT_CLIENT_PROTOCOL FDT_CLIENT_PROTOCOL; > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_NODE_PROPERTY) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN FDT_HANDLE Node, > + IN CONST CHAR8 *PropertyName, > + OUT CONST VOID **Prop, > + OUT UINT32 *PropSize OPTIONAL > + ); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_SET_NODE_PROPERTY) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN FDT_HANDLE Node, > + IN CONST CHAR8 *PropertyName, > + IN CONST VOID *Prop, > + IN UINT32 PropSize > + ); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_FIND_COMPATIBLE_NODE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST CHAR8 *CompatibleString, > + IN FDT_HANDLE PrevNode, > + OUT FDT_HANDLE *Node > + ); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_FIND_COMPATIBLE_NODE_PROPERTY) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST CHAR8 *CompatibleString, > + IN CONST CHAR8 *PropertyName, > + OUT CONST VOID **Prop, > + OUT UINT32 *PropSize OPTIONAL > + ); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_OR_INSERT_CHOSEN_NODE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + OUT FDT_HANDLE *Node > + ); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_NODE_DEPTH) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN FDT_HANDLE Node, > + OUT FDT_HANDLE *Depth > +); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_PARENT_NODE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN FDT_HANDLE Node, > + OUT FDT_HANDLE *Parent > +); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_NODE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST CHAR8 *Path, > + OUT FDT_HANDLE *Node > +); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_NODE_PATH) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE Node, > + OUT CHAR8 *Path, > + IN INT32 Size > +); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_NODE_BY_PROPERTY_VALUE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE StartNode, > + IN CHAR8 *Property, > + IN VOID *Value, > + IN INT32 Size, > + OUT FDT_HANDLE *Node > +); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_SUBNODE_BY_PROPERTY_VALUE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE Parent, > + IN CHAR8 *PropertyName, > + IN VOID *PropertyValue, > + IN INT32 PropertyLength, > + OUT FDT_HANDLE *Node > +); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_NODE_BY_PHANDLE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE PHandle, > + OUT FDT_HANDLE *Node > +); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_FIRST_SUBNODE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE Parent, > + OUT FDT_HANDLE *Node > + ); > + > +typedef > +EFI_STATUS > +(EFIAPI *FDT_CLIENT_GET_NEXT_SUBNODE) ( > + IN FDT_CLIENT_PROTOCOL *This, > + IN CONST FDT_HANDLE Subnode, > + OUT FDT_HANDLE *Next > + ); > + > +struct _FDT_CLIENT_PROTOCOL { > + FDT_CLIENT_GET_NODE_PROPERTY GetNodeProperty; > + FDT_CLIENT_SET_NODE_PROPERTY SetNodeProperty; > + > + FDT_CLIENT_FIND_COMPATIBLE_NODE FindCompatibleNode; > + > + FDT_CLIENT_GET_OR_INSERT_CHOSEN_NODE GetOrInsertChosenNode; > + > + FDT_CLIENT_GET_NODE_DEPTH GetNodeDepth; > + FDT_CLIENT_GET_PARENT_NODE GetParentNode; > + FDT_CLIENT_GET_NODE GetNode; > + FDT_CLIENT_GET_NODE_PATH GetNodePath; > + FDT_CLIENT_GET_NODE_BY_PROPERTY_VALUE GetNodeByPropertyValue; > + FDT_CLIENT_GET_SUBNODE_BY_PROPERTY_VALUE GetSubnodeByPropertyValue; > + FDT_CLIENT_GET_NODE_BY_PHANDLE GetNodeByPHandle; > + FDT_CLIENT_GET_FIRST_SUBNODE GetFirstSubnode; > + FDT_CLIENT_GET_NEXT_SUBNODE GetNextSubnode; > + Please make the namespace less generic, and use MARVELL_/MV_ prefixes - see other Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/*.h for reference. Best regards, Marcin -=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 (#113724): https://edk2.groups.io/g/devel/message/113724 Mute This Topic: https://groups.io/mt/103292514/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-