From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: None (no SPF record) identity=mailfrom; client-ip=2a00:1450:4010:c07::244; helo=mail-lf0-x244.google.com; envelope-from=mw@semihalf.com; receiver=edk2-devel@lists.01.org Received: from mail-lf0-x244.google.com (mail-lf0-x244.google.com [IPv6:2a00:1450:4010:c07::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 BAA0721123872 for ; Fri, 8 Jun 2018 08:35:04 -0700 (PDT) Received: by mail-lf0-x244.google.com with SMTP id n15-v6so20685360lfn.10 for ; Fri, 08 Jun 2018 08:35:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7kg46wpudGnuKXZ9+WzIHAIOutj8O3Eax3yMW0qzr/4=; b=zkUgJFUHGZKhIEb9Q1QRB6hOo+ioWPyAPMW2Egc4+1qkWKAwbmjEAfr8DQ45frKwOj KllZKB+/zYE/WUiVaELM858iWKwe0VPBnz6IvJd/+irCni99n9D0TyLvDGzafIZ86HD/ 4NGK1TpS6W4jYN7bnZ3PT74fxZWs6IiFFkYiYk7EU1ueuw+hrontl2M3RF8eR7VjKZQ0 NSBv7Mj0v6QwutgfX6OYFrxnO3BUmLwYy1ncVgE67O267S5N79kJwaYf9hiDtXuuttx3 kKiBnBNKU1zrP92CGuelqk0p9T+kAulMr2XOD6ucjzFHNx+NyK1KKnYS/0vYj2sr5Og7 WmWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7kg46wpudGnuKXZ9+WzIHAIOutj8O3Eax3yMW0qzr/4=; b=VUKv1jWwsfHQAYrQ1drc4jyG/i6a+Fl9XOnQZCf0O1WzuA/54kiQeVElVN5GU9ZfAL aKOSMcAsrQ3h9ctlWEei3rjgPjtaFA5xZb0e3eXfhO/ttZ82O82sHBLpUbMLMPFqfjOt ARAyxAXXBFr/QeKDaL42iTaZC/HrcXnCE6SjdpVnrv2/H2Fs0FgMFc8YQGQV8I47wpxV f0dDOmimkcLr0pMm7oza+nucW+z/lxCh96eJ8+pafyBkDBOeEgjZGGfZN0mNp8XgLJLJ 1UdEYlStq9spQ/JRJEi1FVE/4f3rcHKB3JfvNDOrx9cRnPOFDC3dpy9eSUV6Woc8HBj3 vAiA== X-Gm-Message-State: APt69E3se4ySpOX1PrciLVtjoTmWOBXW00oNtj67TMncGPEAaWCpYEq+ vSnPeNRNeaLLzMODYH2GuCDS4+qnfr0= X-Google-Smtp-Source: ADUXVKIXfMmwTHHJiFj9UMAV6l3+1r4xVCA4WHwRaSYEQaaDW0qDDWa82y6wZ4ryOXBXmJYdsJtFug== X-Received: by 2002:a2e:129d:: with SMTP id 29-v6mr5136446ljs.102.1528472102713; Fri, 08 Jun 2018 08:35:02 -0700 (PDT) Received: from gilgamesh.semihalf.com (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id v79-v6sm7355396lfd.32.2018.06.08.08.35.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 08 Jun 2018 08:35:02 -0700 (PDT) From: Marcin Wojtas To: edk2-devel@lists.01.org Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org, nadavh@marvell.com, jinghua@marvell.com, mw@semihalf.com, jsd@semihalf.com, jaz@semihalf.com Date: Fri, 8 Jun 2018 17:34:15 +0200 Message-Id: <1528472063-1660-18-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1528472063-1660-1-git-send-email-mw@semihalf.com> References: <1528472063-1660-1-git-send-email-mw@semihalf.com> Subject: [platforms PATCH 17/25] Marvell/Library: ComPhyLib: Switch library to use MARVELL_BOARD_DESC 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: Fri, 08 Jun 2018 15:35:05 -0000 MvComPhyLib library used to get Armada7k8k SerDes multiplexing controller description from hardcoded values stored in the header file MvHwDescLib.h. As a result it is very hard to support other Armada SoC families with this library. This patch updates the library, so that it can obtain the description from newly introduced MARVELL_BOARD_DESC protocol, and removes the dependency on the hardcoded structures. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Marcin Wojtas Reviewed-by: Hua Jing --- Silicon/Marvell/Include/Library/MvHwDescLib.h | 39 ----------- Silicon/Marvell/Library/ComPhyLib/ComPhyLib.c | 74 ++++++++++++-------- 2 files changed, 45 insertions(+), 68 deletions(-) diff --git a/Silicon/Marvell/Include/Library/MvHwDescLib.h b/Silicon/Marvell/Include/Library/MvHwDescLib.h index 9f383f4..423ca17 100644 --- a/Silicon/Marvell/Include/Library/MvHwDescLib.h +++ b/Silicon/Marvell/Include/Library/MvHwDescLib.h @@ -35,8 +35,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef __MVHWDESCLIB_H__ #define __MVHWDESCLIB_H__ -#include - // // Helper macros // @@ -45,20 +43,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define MVHW_DEV_ENABLED(type, index) (type ## DeviceTable[index]) // -// CommonPhy devices description template definition -// -#define MVHW_MAX_COMPHY_DEVS 4 - -typedef struct { - UINT8 ComPhyDevCount; - UINTN ComPhyBaseAddresses[MVHW_MAX_COMPHY_DEVS]; - UINTN ComPhyHpipe3BaseAddresses[MVHW_MAX_COMPHY_DEVS]; - UINTN ComPhyLaneCount[MVHW_MAX_COMPHY_DEVS]; - UINTN ComPhyMuxBitCount[MVHW_MAX_COMPHY_DEVS]; - MV_COMPHY_CHIP_TYPE ComPhyChipType[MVHW_MAX_COMPHY_DEVS]; -} MVHW_COMPHY_DESC; - -// // I2C devices description template definition // #define MVHW_MAX_I2C_DEVS 4 @@ -79,29 +63,6 @@ typedef struct { } MVHW_MDIO_DESC; // -// Platform description of CommonPhy devices -// -#define MVHW_CP0_COMPHY_BASE 0xF2441000 -#define MVHW_CP0_HPIPE3_BASE 0xF2120000 -#define MVHW_CP0_COMPHY_LANES 6 -#define MVHW_CP0_COMPHY_MUX_BITS 4 -#define MVHW_CP1_COMPHY_BASE 0xF4441000 -#define MVHW_CP1_HPIPE3_BASE 0xF4120000 -#define MVHW_CP1_COMPHY_LANES 6 -#define MVHW_CP1_COMPHY_MUX_BITS 4 - -#define DECLARE_A7K8K_COMPHY_TEMPLATE \ -STATIC \ -MVHW_COMPHY_DESC mA7k8kComPhyDescTemplate = {\ - 2,\ - { MVHW_CP0_COMPHY_BASE, MVHW_CP1_COMPHY_BASE },\ - { MVHW_CP0_HPIPE3_BASE, MVHW_CP1_HPIPE3_BASE },\ - { MVHW_CP0_COMPHY_LANES, MVHW_CP1_COMPHY_LANES },\ - { MVHW_CP0_COMPHY_MUX_BITS, MVHW_CP1_COMPHY_MUX_BITS },\ - { MvComPhyTypeCp110, MvComPhyTypeCp110 }\ -} - -// // Platform description of I2C devices // #define MVHW_CP0_I2C0_BASE 0xF2701000 diff --git a/Silicon/Marvell/Library/ComPhyLib/ComPhyLib.c b/Silicon/Marvell/Library/ComPhyLib/ComPhyLib.c index b03bc35..8555c4c 100644 --- a/Silicon/Marvell/Library/ComPhyLib/ComPhyLib.c +++ b/Silicon/Marvell/Library/ComPhyLib/ComPhyLib.c @@ -34,9 +34,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "ComPhyLib.h" #include -#include - -DECLARE_A7K8K_COMPHY_TEMPLATE; CHAR16 * TypeStringTable [] = {L"unconnected", L"PCIE0", L"PCIE1", L"PCIE2", L"PCIE3", L"SATA0", L"SATA1", L"SATA2", L"SATA3", @@ -182,22 +179,20 @@ VOID InitComPhyConfig ( IN OUT CHIP_COMPHY_CONFIG *ChipConfig, IN OUT PCD_LANE_MAP *LaneData, - IN UINT8 Id + IN MV_BOARD_COMPHY_DESC *Desc ) { - MVHW_COMPHY_DESC *Desc = &mA7k8kComPhyDescTemplate; - - ChipConfig->ChipType = Desc->ComPhyChipType[Id]; - ChipConfig->ComPhyBaseAddr = Desc->ComPhyBaseAddresses[Id]; - ChipConfig->Hpipe3BaseAddr = Desc->ComPhyHpipe3BaseAddresses[Id]; - ChipConfig->LanesCount = Desc->ComPhyLaneCount[Id]; - ChipConfig->MuxBitCount = Desc->ComPhyMuxBitCount[Id]; - ChipConfig->ChipId = Id; + ChipConfig->ChipType = Desc->SoC->ComPhyChipType; + ChipConfig->ComPhyBaseAddr = Desc->SoC->ComPhyBaseAddress; + ChipConfig->Hpipe3BaseAddr = Desc->SoC->ComPhyHpipe3BaseAddress; + ChipConfig->LanesCount = Desc->SoC->ComPhyLaneCount; + ChipConfig->MuxBitCount = Desc->SoC->ComPhyMuxBitCount; + ChipConfig->ChipId = Desc->SoC->ComPhyId; /* * Below macro contains variable name concatenation (used to form PCD's name). */ - switch (Id) { + switch (ChipConfig->ChipId) { case 0: GetComPhyPcd (LaneData, 0); break; @@ -219,32 +214,49 @@ MvComPhyInit ( ) { EFI_STATUS Status; - CHIP_COMPHY_CONFIG ChipConfig[MVHW_MAX_COMPHY_DEVS], *PtrChipCfg; - PCD_LANE_MAP LaneData[MVHW_MAX_COMPHY_DEVS]; + CHIP_COMPHY_CONFIG *ChipConfig, *PtrChipCfg; + MARVELL_BOARD_DESC_PROTOCOL *BoardDescProtocol; + MV_BOARD_COMPHY_DESC *ComPhyBoardDesc; + PCD_LANE_MAP *LaneData; UINT32 Lane, MaxComphyCount; - UINT8 *ComPhyDeviceTable, Index; + UINT8 Index; /* Obtain table with enabled ComPhy devices */ - ComPhyDeviceTable = (UINT8 *)PcdGetPtr (PcdComPhyDevices); - if (ComPhyDeviceTable == NULL) { - DEBUG ((DEBUG_ERROR, "Missing PcdComPhyDevices\n")); - return EFI_INVALID_PARAMETER; + Status = gBS->LocateProtocol (&gMarvellBoardDescProtocolGuid, + NULL, + (VOID **)&BoardDescProtocol); + if (EFI_ERROR (Status)) { + return Status; + } + + Status = BoardDescProtocol->BoardDescComPhyGet (BoardDescProtocol, + &ComPhyBoardDesc); + if (EFI_ERROR (Status)) { + return Status; } - if (PcdGetSize (PcdComPhyDevices) > MVHW_MAX_COMPHY_DEVS) { - DEBUG ((DEBUG_ERROR, "Wrong PcdComPhyDevices format\n")); - return EFI_INVALID_PARAMETER; + ChipConfig = AllocateZeroPool (ComPhyBoardDesc->ComPhyDevCount * + sizeof (CHIP_COMPHY_CONFIG)); + if (ChipConfig == NULL) { + DEBUG ((DEBUG_ERROR, "%a: Cannot allocate memory\n", __FUNCTION__)); + BoardDescProtocol->BoardDescFree (ComPhyBoardDesc); + return EFI_OUT_OF_RESOURCES; + } + + LaneData = AllocateZeroPool (ComPhyBoardDesc->ComPhyDevCount * + sizeof (PCD_LANE_MAP)); + if (ChipConfig == NULL) { + DEBUG ((DEBUG_ERROR, "%a: Cannot allocate memory\n", __FUNCTION__)); + BoardDescProtocol->BoardDescFree (ComPhyBoardDesc); + FreePool (ChipConfig); + return EFI_OUT_OF_RESOURCES; } /* Initialize enabled chips */ - for (Index = 0; Index < PcdGetSize (PcdComPhyDevices); Index++) { - if (!MVHW_DEV_ENABLED (ComPhy, Index)) { - DEBUG ((DEBUG_ERROR, "Skip ComPhy chip %d\n", Index)); - continue; - } + for (Index = 0; Index < ComPhyBoardDesc->ComPhyDevCount; Index++) { PtrChipCfg = &ChipConfig[Index]; - InitComPhyConfig(PtrChipCfg, LaneData, Index); + InitComPhyConfig (PtrChipCfg, LaneData, &ComPhyBoardDesc[Index]); /* Get the count of the SerDes of the specific chip */ MaxComphyCount = PtrChipCfg->LanesCount; @@ -275,5 +287,9 @@ MvComPhyInit ( PtrChipCfg->Init (PtrChipCfg); } + BoardDescProtocol->BoardDescFree (ComPhyBoardDesc); + FreePool (ChipConfig); + FreePool (LaneData); + return EFI_SUCCESS; } -- 2.7.4