From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:400c:c0c::244; helo=mail-wr0-x244.google.com; envelope-from=leif.lindholm@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wr0-x244.google.com (mail-wr0-x244.google.com [IPv6:2a00:1450:400c:c0c::244]) (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 D86D2210E1298 for ; Mon, 18 Jun 2018 09:47:25 -0700 (PDT) Received: by mail-wr0-x244.google.com with SMTP id e18-v6so17575121wrs.5 for ; Mon, 18 Jun 2018 09:47:25 -0700 (PDT) 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:in-reply-to:user-agent; bh=dw1DpXB5VOvKUkqkoP1uEvOb1POtfr3md5/4EFE9BUI=; b=OgyZM58rQ9+K5qj5DnXw38CoL09tnBD9mbOLycPiHFm5eEGqquYUvcv05EcwmIylSi 0RHHGfcpAtL/ecWWFF/HScdWpWn1NO7AjlOcfb7yUOzQwJZcP6Q5bVqf6Fm7fIcAwqWv 57qPKdGRQq3IGt4Y9a8H0ps7ParfA+c/G6bM0= 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:in-reply-to:user-agent; bh=dw1DpXB5VOvKUkqkoP1uEvOb1POtfr3md5/4EFE9BUI=; b=gpHBL2RQn8uPuX28Oap4yXPt5u8qkAH+GNN/nTo98WFWT08vAu87xY7uVCJGgPkLMc CbhvtQNjFrKfip8d7ioY5U83ulxkp7MvdOWSdvudzNtDpJ9hH3JVr1NBufaRCvLbZwfz btWEWkrwipvA9xg1WRFey00RlTMr+g0eOsBLvpu3EkoPGYuRDRP+Dj6TvLQhtyRD3isT L//UtJF5Qtuh/wxNYWHvIRKaOSg6FzWZ/+klfxUmXmKj+8mz1lqfG8bxL2k0BPoeGmis aWan0k7yYptqkKLNC7iuuoiNI/F82zcx6/jSHDZKMoeZmlTrkvIqof6DJzqE/n5VbzDv PJOA== X-Gm-Message-State: APt69E0Cqar77j39RVLMRERsO78DfhPhQo6OrBxjyD2uKSTeThN0flGD lpxGIdzLV30MEltvr2m+TIdBsA== X-Google-Smtp-Source: ADUXVKInF9mLAirE3SjnBvO88SMQMPhCIGl/OAmdD2tIN3IWfn//WGM/oVo5LVg6oB9aeQCCOCNTLA== X-Received: by 2002:adf:93c6:: with SMTP id 64-v6mr10951954wrp.119.1529340444377; Mon, 18 Jun 2018 09:47:24 -0700 (PDT) Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id k36-v6sm30494867wrc.20.2018.06.18.09.47.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 18 Jun 2018 09:47:23 -0700 (PDT) Date: Mon, 18 Jun 2018 17:47:21 +0100 From: Leif Lindholm To: Marcin Wojtas Cc: edk2-devel@lists.01.org, ard.biesheuvel@linaro.org, nadavh@marvell.com, jinghua@marvell.com, jsd@semihalf.com, jaz@semihalf.com Message-ID: <20180618164721.2i6qyv4zxmz6isoz@bivouac.eciton.net> References: <1529266325-18371-1-git-send-email-mw@semihalf.com> <1529266325-18371-24-git-send-email-mw@semihalf.com> MIME-Version: 1.0 In-Reply-To: <1529266325-18371-24-git-send-email-mw@semihalf.com> User-Agent: NeoMutt/20170113 (1.7.2) Subject: Re: [platforms: PATCH v2 23/25] Marvell/Drivers: MvBoardDesc: Extend protocol with I2C support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jun 2018 16:47:26 -0000 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sun, Jun 17, 2018 at 10:12:03PM +0200, Marcin Wojtas wrote: > Introduce new callback that can provide information > about I2C controllers to the I2c driver. > > Extend ArmadaBoardDescLib with new structure MV_BOARD_I2C_DESC, > for holding board specific data. In further steps it should > be extended and replace PCD I2C devices' representation with the > appropriate structures. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Marcin Wojtas Reviewed-by: Leif Lindholm > --- > Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf | 1 + > Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h | 8 +++ > Silicon/Marvell/Include/Protocol/BoardDesc.h | 8 +++ > Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c | 66 ++++++++++++++++++++ > 4 files changed, 83 insertions(+) > > diff --git a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf > index dea99fd..41f72d6 100644 > --- a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf > +++ b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.inf > @@ -58,6 +58,7 @@ > > [Pcd] > gMarvellTokenSpaceGuid.PcdComPhyDevices > + gMarvellTokenSpaceGuid.PcdI2cControllersEnabled > gMarvellTokenSpaceGuid.PcdPciEAhci > gMarvellTokenSpaceGuid.PcdPciESdhci > gMarvellTokenSpaceGuid.PcdPciEXhci > diff --git a/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h b/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > index b11fa9d..ee8e06e 100644 > --- a/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > +++ b/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > @@ -25,6 +25,14 @@ typedef struct { > } MV_BOARD_COMPHY_DESC; > > // > +// I2C devices per-board description > +// > +typedef struct { > + MV_SOC_I2C_DESC *SoC; > + UINTN I2cDevCount; > +} MV_BOARD_I2C_DESC; > + > +// > // MDIO devices per-board description > // > typedef struct { > diff --git a/Silicon/Marvell/Include/Protocol/BoardDesc.h b/Silicon/Marvell/Include/Protocol/BoardDesc.h > index 55297f5..1d57a16 100644 > --- a/Silicon/Marvell/Include/Protocol/BoardDesc.h > +++ b/Silicon/Marvell/Include/Protocol/BoardDesc.h > @@ -50,6 +50,13 @@ EFI_STATUS > > typedef > EFI_STATUS > +(EFIAPI *MV_BOARD_DESC_I2C_GET) ( > + IN MARVELL_BOARD_DESC_PROTOCOL *This, > + IN OUT MV_BOARD_I2C_DESC **I2cDesc > + ); > + > +typedef > +EFI_STATUS > (EFIAPI *MV_BOARD_DESC_MDIO_GET) ( > IN MARVELL_BOARD_DESC_PROTOCOL *This, > IN OUT MV_BOARD_MDIO_DESC **MdioDesc > @@ -99,6 +106,7 @@ VOID > struct _MARVELL_BOARD_DESC_PROTOCOL { > MV_BOARD_DESC_AHCI_GET BoardDescAhciGet; > MV_BOARD_DESC_COMPHY_GET BoardDescComPhyGet; > + MV_BOARD_DESC_I2C_GET BoardDescI2cGet; > MV_BOARD_DESC_MDIO_GET BoardDescMdioGet; > MV_BOARD_DESC_PP2_GET BoardDescPp2Get; > MV_BOARD_DESC_SDMMC_GET BoardDescSdMmcGet; > diff --git a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > index 5dfc559..39dc06c 100644 > --- a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > +++ b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > @@ -100,6 +100,71 @@ MvBoardDescComPhyGet ( > > STATIC > EFI_STATUS > +MvBoardDescI2cGet ( > + IN MARVELL_BOARD_DESC_PROTOCOL *This, > + IN OUT MV_BOARD_I2C_DESC **I2cDesc > + ) > +{ > + UINT8 *I2cDeviceEnabled; > + UINTN I2cCount, I2cDeviceEnabledSize, I2cIndex, Index; > + MV_BOARD_I2C_DESC *BoardDesc; > + MV_SOC_I2C_DESC *SoCDesc; > + EFI_STATUS Status; > + > + /* Get SoC data about all available I2C controllers */ > + Status = ArmadaSoCDescI2cGet (&SoCDesc, &I2cCount); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + /* > + * Obtain table with enabled I2C controllers > + * which is represented as an array of UINT8 values > + * (0x0 - disabled, 0x1 enabled). > + */ > + I2cDeviceEnabled = PcdGetPtr (PcdI2cControllersEnabled); > + if (I2cDeviceEnabled == NULL) { > + /* No I2C on platform */ > + return EFI_SUCCESS; > + } > + > + I2cDeviceEnabledSize = PcdGetSize (PcdI2cControllersEnabled); > + > + /* Check if PCD with I2C controllers is correctly defined */ > + if (I2cDeviceEnabledSize > I2cCount) { > + DEBUG ((DEBUG_ERROR, > + "%a: Wrong PcdI2cControllersEnabled format\n", > + __FUNCTION__)); > + return EFI_INVALID_PARAMETER; > + } > + > + /* Allocate and fill board description */ > + BoardDesc = AllocateZeroPool (I2cDeviceEnabledSize * sizeof (MV_BOARD_I2C_DESC)); > + if (BoardDesc == NULL) { > + DEBUG ((DEBUG_ERROR, "%a: Cannot allocate memory\n", __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES; > + } > + > + I2cIndex = 0; > + for (Index = 0; Index < I2cDeviceEnabledSize; Index++) { > + if (!I2cDeviceEnabled[Index]) { > + DEBUG ((DEBUG_INFO, "%a: Skip I2c controller %d\n", __FUNCTION__, Index)); > + continue; > + } > + > + BoardDesc[I2cIndex].SoC = &SoCDesc[Index]; > + I2cIndex++; > + } > + > + BoardDesc->I2cDevCount = I2cIndex; > + > + *I2cDesc = BoardDesc; > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > MvBoardDescMdioGet ( > IN MARVELL_BOARD_DESC_PROTOCOL *This, > IN OUT MV_BOARD_MDIO_DESC **MdioDesc > @@ -491,6 +556,7 @@ MvBoardDescInitProtocol ( > { > BoardDescProtocol->BoardDescAhciGet = MvBoardDescAhciGet; > BoardDescProtocol->BoardDescComPhyGet = MvBoardDescComPhyGet; > + BoardDescProtocol->BoardDescI2cGet = MvBoardDescI2cGet; > BoardDescProtocol->BoardDescMdioGet = MvBoardDescMdioGet; > BoardDescProtocol->BoardDescPp2Get = MvBoardDescPp2Get; > BoardDescProtocol->BoardDescSdMmcGet = MvBoardDescSdMmcGet; > -- > 2.7.4 >