From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:4864:20::341; helo=mail-wm1-x341.google.com; envelope-from=leif.lindholm@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D7C7D21B02822 for ; Thu, 17 Jan 2019 06:18:57 -0800 (PST) Received: by mail-wm1-x341.google.com with SMTP id d15so1233685wmb.3 for ; Thu, 17 Jan 2019 06:18:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=pDPfJLtiJLa8Smq1qmdSGmRF2KEHJPtHZI2GzoWZlvc=; b=Zxur1QdPwOwcbcFlqsJh4B9FxW6H/MHRu3zeOpimJqZ9Gu6o/L6F6F/i5O0T6+Ub5J ZVzCCv04YqcMdQ67oORRcawyvHyRUdsfaCXtgJ2tLm05vsQPXTloeT0ECcg46Z3T2Yd2 yo4KNK4kV/2l3S6z82TsA787hEAWrRTBkwsBk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=pDPfJLtiJLa8Smq1qmdSGmRF2KEHJPtHZI2GzoWZlvc=; b=RxBT/qpcgdvTXD2GFHcQqQanMSn4xgG94oseakaXaMzy+zVRj8imJ2Zb7iDgPqTSYC +WbTBr3O29kHTATf8dlZdqTf/zT+f59kueYNQeZGJ62K0wJP2UgLljYotVCJWonN0Y8y /Sp3G7BtHEQbzRCYgsL0yq5WUm9O1Jvr8P7+Rg27OGnfVSIQsujhPKelY47eGpnTLyS3 FGW/GK82y6U5gFLgagTlGrCyIqRhK3oNUsxyKnMsuS4IP5AeUrt0f5639nK2zrLzmhdE hiAMcKDjqPXVNFVNLIYJR6g1fmxMw8ZPIdSLXGXbZLHxhbIJH8+7VMmKDRPwYLKeLEbE zRzQ== X-Gm-Message-State: AJcUuke/ooa4RIpqU/fYOvQ2ixFkguMwU/31SSJFZP46CyeF6XVmVdHW dF9k3eojSOVylSUGmR/eZ2M8xA== X-Google-Smtp-Source: ALg8bN5o3OoQGgb/hZSfiW722gDf9mF7oAcgB3SZRyDm/jKcBVQf6RIUToVS9nX7APi2ZpEDizIsxQ== X-Received: by 2002:a1c:a755:: with SMTP id q82mr12395275wme.6.1547734735888; Thu, 17 Jan 2019 06:18:55 -0800 (PST) Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id 199sm43203552wmh.21.2019.01.17.06.18.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 Jan 2019 06:18:54 -0800 (PST) Date: Thu, 17 Jan 2019 14:18:53 +0000 From: Leif Lindholm To: Marcin Wojtas Cc: edk2-devel-01 , Ard Biesheuvel , nadavh@marvell.com, "jsd@semihalf.com" , Grzegorz Jaszczyk , Kostya Porotchkin Message-ID: <20190117141853.qioramxzdh2zaymh@bivouac.eciton.net> References: <1547723715-4562-1-git-send-email-mw@semihalf.com> <1547723715-4562-4-git-send-email-mw@semihalf.com> <20190117113305.muntfdgceho4safl@bivouac.eciton.net> MIME-Version: 1.0 In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) Subject: Re: [platforms: PATCH v3 03/12] Marvell/Library: Introduce MvGpioLib class X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Jan 2019 14:18:58 -0000 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Series pushed as 944fbb62d6..9b725b6ebb Thanks! On Thu, Jan 17, 2019 at 01:19:52PM +0100, Marcin Wojtas wrote: > Hi Leif, > > Sorry for omitting. I confirm the patch is: > Contributed-under: TianoCore Contribution Agreement 1.1 > > Will you add it (as well as remove class from the subject) or should I resubmit? > > Thanks, > Marcin > > czw., 17 sty 2019 o 12:33 Leif Lindholm napisaƂ(a): > > > > (Can drop the "class" from subject line) > > > > With that: > > Reviewed-by: Leif Lindholm > > > > On Thu, Jan 17, 2019 at 12:15:06PM +0100, Marcin Wojtas wrote: > > > Following patches will add two drivers that are capable > > > of producing the generic EMBEDDED_GPIO protocol. In order > > > to handle a situation, when the consumer module attempts > > > to locate and open a proper protocol, add a library > > > helper function. > > > > > > In order to ease description of used GPIO pins and controllers > > > of the Armada 7k8k platforms, add the common enum types. > > > > > > Signed-off-by: Marcin Wojtas > > > --- > > > Silicon/Marvell/Marvell.dec | 1 + > > > Silicon/Marvell/Library/MvGpioLib/MvGpioLib.inf | 32 +++++ > > > Silicon/Marvell/Include/Library/MvGpioLib.h | 68 ++++++++++ > > > Silicon/Marvell/Library/MvGpioLib/MvGpioLib.c | 132 ++++++++++++++++++++ > > > 4 files changed, 233 insertions(+) > > > create mode 100644 Silicon/Marvell/Library/MvGpioLib/MvGpioLib.inf > > > create mode 100644 Silicon/Marvell/Include/Library/MvGpioLib.h > > > create mode 100644 Silicon/Marvell/Library/MvGpioLib/MvGpioLib.c > > > > > > diff --git a/Silicon/Marvell/Marvell.dec b/Silicon/Marvell/Marvell.dec > > > index 616624e..ac922a0 100644 > > > --- a/Silicon/Marvell/Marvell.dec > > > +++ b/Silicon/Marvell/Marvell.dec > > > @@ -63,6 +63,7 @@ > > > ArmadaBoardDescLib|Include/Library/ArmadaBoardDescLib.h > > > ArmadaIcuLib|Include/Library/ArmadaIcuLib.h > > > ArmadaSoCDescLib|Include/Library/ArmadaSoCDescLib.h > > > + MvGpioLib|Include/Library/MvGpioLib.h > > > SampleAtResetLib|Include/Library/SampleAtResetLib.h > > > > > > [Protocols] > > > diff --git a/Silicon/Marvell/Library/MvGpioLib/MvGpioLib.inf b/Silicon/Marvell/Library/MvGpioLib/MvGpioLib.inf > > > new file mode 100644 > > > index 0000000..3bc54ce > > > --- /dev/null > > > +++ b/Silicon/Marvell/Library/MvGpioLib/MvGpioLib.inf > > > @@ -0,0 +1,32 @@ > > > +## @file > > > +# > > > +# Copyright (C) 2018, Marvell International Ltd. and its affiliates
> > > +# > > > +# This program and the accompanying materials are licensed and made available > > > +# under the terms and conditions of the BSD License which accompanies this > > > +# distribution. The full text of the license may be found at > > > +# http://opensource.org/licenses/bsd-license.php > > > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > > +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > > +# IMPLIED. > > > +# > > > +## > > > + > > > +[Defines] > > > + INF_VERSION = 0x0001001A > > > + BASE_NAME = MvGpioLib > > > + FILE_GUID = f4386b44-6bc2-4fa1-9989-8513bbb22692 > > > + MODULE_TYPE = BASE > > > + VERSION_STRING = 1.0 > > > + LIBRARY_CLASS = MvGpioLib > > > + > > > +[Sources] > > > + MvGpioLib.c > > > + > > > +[Packages] > > > + EmbeddedPkg/EmbeddedPkg.dec > > > + MdePkg/MdePkg.dec > > > + Silicon/Marvell/Marvell.dec > > > + > > > +[LibraryClasses] > > > + DebugLib > > > diff --git a/Silicon/Marvell/Include/Library/MvGpioLib.h b/Silicon/Marvell/Include/Library/MvGpioLib.h > > > new file mode 100644 > > > index 0000000..a14acdf > > > --- /dev/null > > > +++ b/Silicon/Marvell/Include/Library/MvGpioLib.h > > > @@ -0,0 +1,68 @@ > > > +/** > > > +* > > > +* Copyright (C) 2018, Marvell International Ltd. and its affiliates. > > > +* > > > +* This program and the accompanying materials are licensed and made available > > > +* under the terms and conditions of the BSD License which accompanies this > > > +* distribution. The full text of the license may be found at > > > +* http://opensource.org/licenses/bsd-license.php > > > +* > > > +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > > +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > > > +* > > > +**/ > > > +#ifndef __MV_GPIO_LIB_H__ > > > +#define __MV_GPIO_LIB_H__ > > > + > > > +#include > > > + > > > +typedef enum { > > > + MV_GPIO_DRIVER_TYPE_SOC_CONTROLLER, > > > + MV_GPIO_DRIVER_TYPE_PCA95XX, > > > +} MV_GPIO_DRIVER_TYPE; > > > + > > > +typedef enum { > > > + MV_GPIO_AP806_CONTROLLER0, > > > + MV_GPIO_CP0_CONTROLLER0, > > > + MV_GPIO_CP0_CONTROLLER1, > > > + MV_GPIO_CP1_CONTROLLER0, > > > + MV_GPIO_CP1_CONTROLLER1, > > > + MV_GPIO_CP2_CONTROLLER0, > > > + MV_GPIO_CP2_CONTROLLER1, > > > +} MV_GPIO_SOC_CONTROLLER_TYPE; > > > + > > > +typedef enum { > > > + PCA9505_ID, > > > + PCA9534_ID, > > > + PCA9535_ID, > > > + PCA9536_ID, > > > + PCA9537_ID, > > > + PCA9538_ID, > > > + PCA9539_ID, > > > + PCA9554_ID, > > > + PCA9555_ID, > > > + PCA9556_ID, > > > + PCA9557_ID, > > > + PCA95XX_MAX_ID, > > > +} MV_GPIO_EXPANDER_TYPE_PCA95XX; > > > + > > > +typedef struct { > > > + VENDOR_DEVICE_PATH Header; > > > + MV_GPIO_DRIVER_TYPE GpioDriverType; > > > + EFI_DEVICE_PATH_PROTOCOL End; > > > +} MV_GPIO_DEVICE_PATH; > > > + > > > +typedef struct { > > > + UINTN ControllerId; > > > + UINTN PinNumber; > > > + BOOLEAN ActiveHigh; > > > +} MV_GPIO_PIN; > > > + > > > +EFI_STATUS > > > +EFIAPI > > > +MvGpioGetProtocol ( > > > + IN MV_GPIO_DRIVER_TYPE GpioDriverType, > > > + IN OUT EMBEDDED_GPIO **GpioProtocol > > > + ); > > > + > > > +#endif // __MV_GPIO_LIB_H__ > > > diff --git a/Silicon/Marvell/Library/MvGpioLib/MvGpioLib.c b/Silicon/Marvell/Library/MvGpioLib/MvGpioLib.c > > > new file mode 100644 > > > index 0000000..a95d5ae > > > --- /dev/null > > > +++ b/Silicon/Marvell/Library/MvGpioLib/MvGpioLib.c > > > @@ -0,0 +1,132 @@ > > > +/** > > > +* > > > +* Copyright (C) 2018, Marvell International Ltd. and its affiliates. > > > +* > > > +* This program and the accompanying materials are licensed and made available > > > +* under the terms and conditions of the BSD License which accompanies this > > > +* distribution. The full text of the license may be found at > > > +* http://opensource.org/licenses/bsd-license.php > > > +* > > > +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > > +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > > > +* > > > +**/ > > > +#include > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > + > > > +#include > > > + > > > +/* > > > + * Check if the driver type matches the requested value. > > > + * In case of the success open the GPIO protocol and return. > > > + */ > > > +STATIC > > > +EFI_STATUS > > > +MvGpioFindMatchingDriver ( > > > + IN MV_GPIO_DRIVER_TYPE GpioDriverType, > > > + IN EFI_HANDLE HandleBuffer, > > > + IN EFI_DEVICE_PATH *DevicePath, > > > + IN OUT EMBEDDED_GPIO **GpioProtocol > > > + ) > > > +{ > > > + MV_GPIO_DEVICE_PATH *GpioDevicePath; > > > + EFI_STATUS Status; > > > + > > > + while (!IsDevicePathEndType (DevicePath)) { > > > + /* Check if GpioDriverType matches one found in the device path */ > > > + GpioDevicePath = (MV_GPIO_DEVICE_PATH *)DevicePath; > > > + if (GpioDevicePath->GpioDriverType != GpioDriverType) { > > > + DevicePath = NextDevicePathNode (DevicePath); > > > + continue; > > > + } > > > + > > > + /* > > > + * Open GpioProtocol. With EFI_OPEN_PROTOCOL_GET_PROTOCOL attribute > > > + * the consumer is not obliged to call CloseProtocol. > > > + */ > > > + Status = gBS->OpenProtocol (HandleBuffer, > > > + &gEmbeddedGpioProtocolGuid, > > > + (VOID **)GpioProtocol, > > > + gImageHandle, > > > + NULL, > > > + EFI_OPEN_PROTOCOL_GET_PROTOCOL); > > > + return Status; > > > + } > > > + > > > + return EFI_NOT_FOUND; > > > +} > > > + > > > +/* > > > + * Select desired protocol producer upon MV_GPIO_DRIVER_TYPE > > > + * field of driver's MV_GPIO_DEVICE_PATH. > > > + */ > > > +EFI_STATUS > > > +EFIAPI > > > +MvGpioGetProtocol ( > > > + IN MV_GPIO_DRIVER_TYPE GpioDriverType, > > > + IN OUT EMBEDDED_GPIO **GpioProtocol > > > + ) > > > +{ > > > + EFI_DEVICE_PATH *DevicePath; > > > + EFI_HANDLE *HandleBuffer; > > > + EFI_STATUS Status; > > > + UINTN HandleCount; > > > + UINTN Index; > > > + > > > + /* Locate Handles of all EMBEDDED_GPIO producers */ > > > + Status = gBS->LocateHandleBuffer (ByProtocol, > > > + &gEmbeddedGpioProtocolGuid, > > > + NULL, > > > + &HandleCount, > > > + &HandleBuffer); > > > + if (EFI_ERROR (Status)) { > > > + DEBUG ((DEBUG_ERROR, "%a: Unable to locate handles\n", __FUNCTION__)); > > > + return Status; > > > + } > > > + > > > + /* Iterate over all protocol producers */ > > > + for (Index = 0; Index < HandleCount; Index++) { > > > + /* Open device path protocol installed on each handle */ > > > + Status = gBS->OpenProtocol (HandleBuffer[Index], > > > + &gEfiDevicePathProtocolGuid, > > > + (VOID **)&DevicePath, > > > + gImageHandle, > > > + NULL, > > > + EFI_OPEN_PROTOCOL_GET_PROTOCOL); > > > + if (EFI_ERROR (Status)) { > > > + DEBUG ((DEBUG_ERROR, "%a: Unable to find DevicePath\n", __FUNCTION__)); > > > + continue; > > > + } > > > + > > > + /* > > > + * Check if the driver type matches the requested value. > > > + * In case of the success open the GPIO protocol and return. > > > + * If there is no match, repeat procedure with the next handle. > > > + */ > > > + Status = MvGpioFindMatchingDriver (GpioDriverType, > > > + HandleBuffer[Index], > > > + DevicePath, > > > + GpioProtocol); > > > + if (Status == EFI_NOT_FOUND) { > > > + continue; > > > + } else if (EFI_ERROR (Status)) { > > > + DEBUG ((DEBUG_ERROR, > > > + "%a: Unable to open GPIO protocol\n", > > > + __FUNCTION__)); > > > + } > > > + > > > + gBS->FreePool (HandleBuffer); > > > + > > > + return Status; > > > + } > > > + > > > + /* No matching GPIO protocol producer was found */ > > > + gBS->FreePool (HandleBuffer); > > > + > > > + return EFI_NOT_FOUND; > > > +} > > > -- > > > 2.7.4 > > >