From nobody Thu May 2 20:48:44 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+54826+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+54826+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1582678715; cv=none; d=zohomail.com; s=zohoarc; b=YQhJtjUgCyhVUlFY1sep5V/yaAMwakcjjE1XNOw4hZ/VNhszdDdsCqRsxVvQB8rKixMypU3cb4HB2vlRkOyi5tpYBWqs/v1yeUBJX6XbfWFvKEnNoKjdPvBKo+71sRXeUtUrpJJEKJzqCAvDaVgRpYcDMmZtNJwFFsVlMxzrLP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1582678715; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=qMgd12Xn5T6UfBOX0xuk5Dof7Q4Pej7KqeUJOoP7rvI=; b=YV3jl6WLyQTQpTSyVbyoppRN0gVXX3GKZUmDvF0PZ7KMZJYQeCGreJ8rEwCGUkmLD/uChPGRLIcLHLvdQlnm4SQv+fpx+HRPJBvGfOPKpEY7jWyrOQv4Kle3uopZltBekr/qF2W+MwMVWEP9Hi83ANkiNS61TGLT4NGpTim4l0c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+54826+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1582678715444452.91302578921386; Tue, 25 Feb 2020 16:58:35 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id W5FeYY1788612x5kaTnsQvWa; Tue, 25 Feb 2020 16:58:34 -0800 X-Received: from mga17.intel.com (mga17.intel.com []) by mx.groups.io with SMTP id smtpd.web09.710.1582678713433964717 for ; Tue, 25 Feb 2020 16:58:34 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Feb 2020 16:58:33 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,486,1574150400"; d="scan'208";a="231217114" X-Received: from paagyema-desk2.amr.corp.intel.com ([10.7.159.149]) by orsmga008.jf.intel.com with ESMTP; 25 Feb 2020 16:58:32 -0800 From: "Agyeman, Prince" To: devel@edk2.groups.io Cc: Chasel Chiu , Nate DeSimone Subject: [edk2-devel] [edk2-platforms] [PATCH 1/2] CoffeelakeSiliconPkg: Add Missing GUID Date: Tue, 25 Feb 2020 16:58:31 -0800 Message-Id: In-Reply-To: References: MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: 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,prince.agyeman@intel.com X-Gm-Message-State: cUbj8i4lThwr7IYSOiUbqJ2Ex1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1582678714; bh=nJtfQQ4jT5n0M2ud9iEqj4hcb+bopphoYd6FQ6NLuMY=; h=Cc:Date:From:Reply-To:Subject:To; b=mC2M10OzsCS0d9dxMYkR9hRYUYgbotJ37PQ6jMR7ksM2mHRtxuKCnCpIPjQnPPaGbX4 64LfhR9CssUwTsmL4dchOtCBAN2GUUPRihPJwQ0pZoOtxeN9VglBQd1mei2Fpcr0MwXTN MoIfce61myOJzoEm+B78L1cD5v0R8fGuZG0= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Added missing GUID gEfiMemoryTypeInformationGuid to PeiPolicyUpdateLib.inf to fix VS2017 build issue Cc: Chasel Chiu Cc: Nate DeSimone Signed-off-by: Prince Agyeman Reviewed-by: Nate DeSimone --- .../Policy/Library/PeiPolicyUpdateLib/PeiPolicyUpdateLib.inf | 1 + 1 file changed, 1 insertion(+) diff --git a/Platform/Intel/WhiskeylakeOpenBoardPkg/Policy/Library/PeiPolic= yUpdateLib/PeiPolicyUpdateLib.inf b/Platform/Intel/WhiskeylakeOpenBoardPkg/= Policy/Library/PeiPolicyUpdateLib/PeiPolicyUpdateLib.inf index e95c1b15c5..478e2d0512 100644 --- a/Platform/Intel/WhiskeylakeOpenBoardPkg/Policy/Library/PeiPolicyUpdate= Lib/PeiPolicyUpdateLib.inf +++ b/Platform/Intel/WhiskeylakeOpenBoardPkg/Policy/Library/PeiPolicyUpdate= Lib/PeiPolicyUpdateLib.inf @@ -271,3 +271,4 @@ [Guids] gTianoLogoGuid ## CONSUMES gSiConfigGuid ## CONSUMES + gEfiMemoryTypeInformationGuid ## CONSUMES --=20 2.19.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 (#54826): https://edk2.groups.io/g/devel/message/54826 Mute This Topic: https://groups.io/mt/71545949/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 Thu May 2 20:48:44 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+54827+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+54827+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1582678715; cv=none; d=zohomail.com; s=zohoarc; b=hL26jtZIiDmsVZmBdIlE4mYu647HOH2OGmik0kuXQOfMvO/uqQ/JzJsr94gGWyCroSnLwD6R2F2ow5gc3ohL8PXy7AQwqEmmnAESdC3wkpMeRKhMqUjl6pt+QGuyhdgUB+bp8pGtcqtHAxQI3bjtSuMAuBn00LEGBLGgcXIeX0E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1582678715; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=B3lNCriEKCS0sLiUR5JkCM2ZO4CgjsQX/KOprZamsJ8=; b=IptK1BNoQbzTUDkV7CfKUeUcBJ0JeR/8uxGYINz4/S7bAmfUj37ufRxPRkMrhPp5idvwcxnAI5GiUTYn44HMD4/U0wl6S+fpw6YavYm/4R3Tp2hHBztL04YbuZoVHtYuaUBIlKWFKTbQMypR6+as5R+ckj2Sm6ddLohbjPB1JVk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+54827+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1582678715980377.15569672970935; Tue, 25 Feb 2020 16:58:35 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id mtusYY1788612xLDGjmi21fC; Tue, 25 Feb 2020 16:58:35 -0800 X-Received: from mga17.intel.com (mga17.intel.com []) by mx.groups.io with SMTP id smtpd.web09.710.1582678713433964717 for ; Tue, 25 Feb 2020 16:58:34 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Feb 2020 16:58:33 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,486,1574150400"; d="scan'208";a="231217116" X-Received: from paagyema-desk2.amr.corp.intel.com ([10.7.159.149]) by orsmga008.jf.intel.com with ESMTP; 25 Feb 2020 16:58:32 -0800 From: "Agyeman, Prince" To: devel@edk2.groups.io Cc: Chasel Chiu , Nate DeSimone Subject: [edk2-devel] [edk2-platforms] [PATCH 2/2] CoffeelakeSiliconPkg: Add Missing Library Date: Tue, 25 Feb 2020 16:58:32 -0800 Message-Id: In-Reply-To: References: MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: 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,prince.agyeman@intel.com X-Gm-Message-State: bfmIArBvRX8o3rmKwAPIRAQqx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1582678715; bh=c3pcqovRcMNbIvYvqOTMKPyR3xfH3xOJ9sdTb/vDH/s=; h=Cc:Date:From:Reply-To:Subject:To; b=F8fU5uJ3RO05ofr1M2bLwnQhWxRlN8CGQJ7lrmKYhs4jXUwRB2U0tnsxcno9NH7hrtw yEVQAcVnrxSFwC3krwQEmH52HemxMKKFS64ao0X+It+jArhKh2AE3VGSPDUmuXww62vau hjorPQaG2tmAqcr70vCqCR5nX7CYPmfsGbw= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2408 Added GbeMdiLib implementation and added additional registers definitions needed by GbeMdilib. This fixes the linker errors seen during VS2017 builds Cc: Chasel Chiu Cc: Nate DeSimone Signed-off-by: Prince Agyeman Reviewed-by: Chasel Chiu Reviewed-by: Nate DeSimone --- .../Pch/Include/Library/GbeMdiLib.h | 53 ++- .../Pch/Include/Register/PchRegsLan.h | 14 +- .../Library/PeiDxeSmmGbeMdiLib/GbeMdiLib.c | 391 ++++++++++++++++++ .../PeiDxeSmmGbeMdiLib/PeiDxeSmmGbeMdiLib.inf | 32 ++ .../Pch/PchInit/Smm/PchInitSmm.inf | 1 + .../CoffeelakeSiliconPkg/SiPkgCommonLib.dsc | 4 +- 6 files changed, 492 insertions(+), 3 deletions(-) create mode 100644 Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/PeiDxeSm= mGbeMdiLib/GbeMdiLib.c create mode 100644 Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/PeiDxeSm= mGbeMdiLib/PeiDxeSmmGbeMdiLib.inf diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Include/Library/GbeMdiL= ib.h b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Include/Library/GbeMdiLib.h index a6ce032eba..280dee411f 100644 --- a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Include/Library/GbeMdiLib.h +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Include/Library/GbeMdiLib.h @@ -21,7 +21,7 @@ - Registers / bits of new devices introduced in a PCH generation will be= just named as "_PCH_" without [generation_name] inserted. =20 - Copyright (c) 2019 Intel Corporation. All rights reserved.
+ Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved.
=20 SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -29,7 +29,35 @@ #ifndef _GBE_MDI_LIB_H_ #define _GBE_MDI_LIB_H_ =20 + +#define GBE_MAX_LOOP_TIME 4000 +#define GBE_ACQUIRE_MDIO_DELAY 50 +#define GBE_MDI_SET_PAGE_DELAY 4000 // 4 mSec delay after setting page + + +// +// Custom Mode Control PHY Address 01, Page 769, Register 16 +// +#define R_PHY_MDI_PAGE_769_REGISETER_16_CMC 0x0010 +// +// Custom Mode Control +// Page 769, Register 16, BIT 10 +// 0 - normal MDIO frequency access +// 1 - reduced MDIO frequency access (slow mdio) +// required for read during cable disconnect +// +#define B_PHY_MDI_PAGE_769_REGISETER_16_CMC_MDIO_FREQ_ACCESS BIT10 + // +// LAN PHY MDI settings +// +#define B_PHY_MDI_READY BIT28 +#define B_PHY_MDI_READ BIT27 +#define B_PHY_MDI_WRITE BIT26 +// +// PHY SPECIFIC registers +// +#define B_PHY_MDI_PHY_ADDRESS_02 BIT22 // // PHY GENERAL registers // Registers 0 to 15 are defined by the specification @@ -37,8 +65,22 @@ // #define B_PHY_MDI_PHY_ADDRESS_01 BIT21 #define B_PHY_MDI_PHY_ADDRESS_MASK (BIT25 | BIT24 | BIT23 | BIT22 | BIT= 21) +// +// PHY Identifier Register 2 +// Bits [15:10] - PHY ID Number - The PHY identifier composed of bits 3= through 18 +// of the Organizationally Unique Identi= fier (OUI) +// Bits [9:4] - Device Model Number +// Bits [3:0] - Device Revision Number +// +#define R_PHY_MDI_GENEREAL_REGISTER_03_PHY_IDENTIFIER_2 0x00030000 + #define MDI_REG_SHIFT(x) (x << 16) +#define B_PHY_MDI_PHY_REGISTER_MASK (BIT20 | BIT19 | BIT= 18 | BIT17 | BIT16) +#define R_PHY_MDI_PHY_REG_SET_ADDRESS 0x00110000 // Used a= fter new page setting #define R_PHY_MDI_PHY_REG_DATA_READ_WRITE 0x00120000 +#define R_PHY_MDI_PHY_REG_SET_PAGE 0x001F0000 + +// // LAN PHY MDI registers and bits // =20 @@ -131,6 +173,7 @@ =20 **/ VOID +EFIAPI GbeMdiForceMACtoSMB ( IN UINT32 GbeBar ); @@ -144,6 +187,7 @@ GbeMdiForceMACtoSMB ( @retval EFI_TIMEOUT **/ EFI_STATUS +EFIAPI GbeMdiWaitReady ( IN UINT32 GbeBar ); @@ -160,6 +204,7 @@ GbeMdiWaitReady ( @retval EFI_TIMEOUT **/ EFI_STATUS +EFIAPI GbeMdiAcquireMdio ( IN UINT32 GbeBar ); @@ -170,6 +215,7 @@ GbeMdiAcquireMdio ( @param [in] GbeBar GbE MMIO space **/ VOID +EFIAPI GbeMdiReleaseMdio ( IN UINT32 GbeBar ); @@ -186,6 +232,7 @@ GbeMdiReleaseMdio ( @retval EFI_DEVICE_ERROR Returned if both attermps of setting page fail= ed **/ EFI_STATUS +EFIAPI GbeMdiSetPage ( IN UINT32 GbeBar, IN UINT32 Page @@ -200,6 +247,7 @@ GbeMdiSetPage ( @return EFI_STATUS **/ EFI_STATUS +EFIAPI GbeMdiSetRegister ( IN UINT32 GbeBar, IN UINT32 Register @@ -219,6 +267,7 @@ GbeMdiSetRegister ( @retval EFI_INVALID_PARAMETER If Phy Address or Register validaton fail= ed **/ EFI_STATUS +EFIAPI GbeMdiRead ( IN UINT32 GbeBar, IN UINT32 PhyAddress, @@ -239,6 +288,7 @@ GbeMdiRead ( @retval EFI_INVALID_PARAMETER If Phy Address or Register validaton fail= ed **/ EFI_STATUS +EFIAPI GbeMdiWrite ( IN UINT32 GbeBar, IN UINT32 PhyAddress, @@ -257,6 +307,7 @@ GbeMdiWrite ( @return EFI_INVALID_PARAMETER When GbeBar is incorrect **/ EFI_STATUS +EFIAPI GbeMdiGetLanPhyRevision ( IN UINT32 GbeBar, OUT UINT16 *LanPhyRevision diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Include/Register/PchReg= sLan.h b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Include/Register/PchRegsLan= .h index f649873f67..8efc9fad09 100644 --- a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Include/Register/PchRegsLan.h +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Include/Register/PchRegsLan.h @@ -30,7 +30,7 @@ - RegisterName: Full register name. =20 - Copyright (c) 2019 Intel Corporation. All rights reserved.
+ Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved.
=20 SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -49,6 +49,17 @@ #define R_LAN_CFG_PMCS 0xCC #define B_LAN_CFG_PMCS_PS (BIT1 | BIT0) #define V_LAN_CFG_PMCS_PS0 0x00 +#define R_LAN_MEM_CSR_CTRL 0 +#define B_LAN_MEM_CSR_CTRL_LANPHYPC_OVERRIDE BIT16 +#define B_LAN_MEM_CSR_CTRL_LANPHYPC_VAL BIT17 +#define R_LAN_MEM_CSR_CTRL_EXT 0x0018 +#define B_LAN_MEM_CSR_CTRL_EXT_LPCD BIT2 +#define B_LAN_MEM_CSR_CTRL_EXT_FORCE_SMB BIT11 +#define R_LAN_MEM_CSR_MDIC 0x0020 +#define B_LAN_MEM_CSR_MDIC_RB BIT28 +#define B_LAN_MEM_CSR_MDIC_DATA 0xFFFF +#define R_LAN_MEM_CSR_EXTCNF_CTRL 0x0F00 +#define B_LAN_MEM_CSR_EXTCNF_CTRL_SWFLAG BIT5 #define R_LAN_MEM_CSR_RAL 0x5400 #define R_LAN_MEM_CSR_RAH 0x5404 #define B_LAN_MEM_CSR_RAH_RAH 0x0000FFFF @@ -56,3 +67,4 @@ #define B_LAN_MEM_CSR_WUC_APME BIT0 =20 #endif + diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/PeiDxeSmmGbeMdi= Lib/GbeMdiLib.c b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/PeiDxeSmmG= beMdiLib/GbeMdiLib.c new file mode 100644 index 0000000000..e5aa10de3b --- /dev/null +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/PeiDxeSmmGbeMdiLib/Gbe= MdiLib.c @@ -0,0 +1,391 @@ +/** @file + Gbe MDI Library. + All function in this library is available for PEI, DXE, and SMM, + But do not support UEFI RUNTIME environment call. + + Copyright (c) 2020 Intel Corporation. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +@par Specification Reference: +**/ + +#include +#include +#include +#include +#include +#include +#include +#include + + +/** + Validates both Phy Address and Regster. + + @param [in] PhyAddress + @param [in] PhyRegister + + @retval BOOLEAN TRUE Validation passed + FALSE If the data is not within its range + +**/ +BOOLEAN +EFIAPI +IsPhyAddressRegisterValid ( + IN UINT32 PhyAddress, + IN UINT32 PhyRegister + ) +{ + if (((PhyAddress & (~B_PHY_MDI_PHY_ADDRESS_MASK)) !=3D 0) || ((PhyRegist= er & (~B_PHY_MDI_PHY_REGISTER_MASK)) !=3D 0)) { + DEBUG ((DEBUG_ERROR, "IsPhyAddressRegisterValid validation failed! Phy= Address: 0x%08X PhyRegister: 0x%08X \n", PhyAddress, PhyRegister)); + return FALSE; + } + return TRUE; +} + +/** + Change Extended Device Control Register BIT 11 to 1 which + forces the interface between the MAC and the Phy to be on SMBus. + Cleared on the assertion of PCI reset. + + @param [in] GbeBar GbE MMIO space + +**/ +VOID +EFIAPI +GbeMdiForceMacToSmb ( + IN UINT32 GbeBar + ) +{ + MmioOr32 (GbeBar + R_LAN_MEM_CSR_CTRL_EXT, B_LAN_MEM_CSR_CTRL_EXT_FORCE_= SMB); +} + +/** + Test for MDIO operation complete. + + @param [in] GbeBar GbE MMIO space + + @retval EFI_SUCCESS + @retval EFI_TIMEOUT +**/ +EFI_STATUS +EFIAPI +GbeMdiWaitReady ( + IN UINT32 GbeBar + ) +{ + UINT32 Count; + + for (Count =3D 0; Count < GBE_MAX_LOOP_TIME; ++Count) { + if (MmioRead32 (GbeBar + R_LAN_MEM_CSR_MDIC) & B_LAN_MEM_CSR_MDIC_RB) { + return EFI_SUCCESS; + } + MicroSecondDelay (GBE_ACQUIRE_MDIO_DELAY); + } + DEBUG ((DEBUG_ERROR, "GbeMdiWaitReady Timeout reached. MDIO operation fa= iled to complete in %d micro seconds\n", GBE_MAX_LOOP_TIME * GBE_ACQUIRE_MD= IO_DELAY)); + return EFI_TIMEOUT; +} + +/** + Acquire MDIO software semaphore. + + 1. Ensure that MBARA offset F00h [5] =3D 1b + 2. Poll MBARA offset F00h [5] up to 200ms + + @param [in] GbeBar GbE MMIO space + + @retval EFI_SUCCESS + @retval EFI_TIMEOUT +**/ +EFI_STATUS +EFIAPI +GbeMdiAcquireMdio ( + IN UINT32 GbeBar + ) +{ + UINT32 ExtCnfCtrl; + UINT32 Count; + + MmioOr32 (GbeBar + R_LAN_MEM_CSR_EXTCNF_CTRL, B_LAN_MEM_CSR_EXTCNF_CTRL_= SWFLAG); + for (Count =3D 0; Count < GBE_MAX_LOOP_TIME; ++Count) { + ExtCnfCtrl =3D MmioRead32 (GbeBar + R_LAN_MEM_CSR_EXTCNF_CTRL); + if (ExtCnfCtrl & B_LAN_MEM_CSR_EXTCNF_CTRL_SWFLAG) { + return EFI_SUCCESS; + } + MicroSecondDelay (GBE_ACQUIRE_MDIO_DELAY); + } + DEBUG ((DEBUG_ERROR, "GbeMdiAcquireMdio Timeout. Unable to acquire MDIO = Semaphore in %d micro seconds\n", GBE_MAX_LOOP_TIME * GBE_ACQUIRE_MDIO_DELA= Y)); + return EFI_TIMEOUT; +} + +/** + Release MDIO software semaphore by clearing MBARA offset F00h [5] + + @param [in] GbeBar GbE MMIO space +**/ +VOID +EFIAPI +GbeMdiReleaseMdio ( + IN UINT32 GbeBar + ) +{ + ASSERT (MmioRead32 (GbeBar + R_LAN_MEM_CSR_EXTCNF_CTRL) & B_LAN_MEM_CSR_= EXTCNF_CTRL_SWFLAG); + MmioAnd32 (GbeBar + R_LAN_MEM_CSR_EXTCNF_CTRL, (UINT32) ~B_LAN_MEM_CSR_E= XTCNF_CTRL_SWFLAG); + ASSERT ((MmioRead32 (GbeBar + R_LAN_MEM_CSR_EXTCNF_CTRL) & B_LAN_MEM_CSR= _EXTCNF_CTRL_SWFLAG) =3D=3D 0); +} + +/** + Sets page on MDI + Page setting is attempted twice. + If first attempt failes MAC and the Phy are force to be on SMBus. + + Waits 4 mSec after page setting + + @param [in] GbeBar GbE MMIO space + @param [in] Data Value to write in lower 16bits. + + @retval EFI_SUCCESS Page setting was successfull + @retval EFI_DEVICE_ERROR Returned if both attermps of setting page fail= ed +**/ +EFI_STATUS +EFIAPI +GbeMdiSetPage ( + IN UINT32 GbeBar, + IN UINT32 Page + ) +{ + EFI_STATUS Status; + + MmioWrite32 (GbeBar + R_LAN_MEM_CSR_MDIC, (~B_PHY_MDI_READY) & (B_PHY_MD= I_WRITE | B_PHY_MDI_PHY_ADDRESS_01 | R_PHY_MDI_PHY_REG_SET_PAGE | ((Page * = 32) & 0xFFFF))); + + Status =3D GbeMdiWaitReady (GbeBar); + + if (Status =3D=3D EFI_TIMEOUT) { + DEBUG ((DEBUG_INFO, "GbeMdiSetPage Timeout reached. Forcing the interf= ace between the MAC and the Phy to be on SMBus\n")); + GbeMdiForceMacToSmb (GbeBar); + // + // Retry page setting + // + MmioWrite32 (GbeBar + R_LAN_MEM_CSR_MDIC, (~B_PHY_MDI_READY) & (B_PHY_= MDI_WRITE | B_PHY_MDI_PHY_ADDRESS_01 | R_PHY_MDI_PHY_REG_SET_PAGE | ((Page = * 32) & 0xFFFF))); + Status =3D GbeMdiWaitReady (GbeBar); + if (Status =3D=3D EFI_TIMEOUT) { + DEBUG ((DEBUG_ERROR, "GbeMdiSetPage retry page setting failed!\n")); + return EFI_DEVICE_ERROR; + } + } + + // + // Delay required for page to set properly + // + MicroSecondDelay (GBE_MDI_SET_PAGE_DELAY); + + return Status; +} + +/** + Sets Register in current page. + + @param [in] GbeBar GbE MMIO space + @param [in] register Register number valid only in lower 16 Bits + + @return EFI_STATUS +**/ +EFI_STATUS +EFIAPI +GbeMdiSetRegister ( + IN UINT32 GbeBar, + IN UINT32 Register + ) +{ + MmioWrite32 (GbeBar + R_LAN_MEM_CSR_MDIC, (~B_PHY_MDI_READY) & (B_PHY_MD= I_WRITE | B_PHY_MDI_PHY_ADDRESS_01 | R_PHY_MDI_PHY_REG_SET_ADDRESS | (Regis= ter & 0xFFFF))); + return GbeMdiWaitReady (GbeBar); +} + +/** + Perform MDI write. + + @param [in] GbeBar GbE MMIO space + @param [in] PhyAddress Phy Address General - 02 or Specific - 01 + @param [in] PhyRegister Phy Register + @param [in] WriteData Value to write in lower 16bits. + + @retval EFI_SUCCESS Based on response from GbeMdiWaitReady + @retval EFI_TIMEOUT Based on response from GbeMdiWaitReady + @retval EFI_INVALID_PARAMETER If Phy Address or Register validaton fail= ed +**/ +EFI_STATUS +EFIAPI +GbeMdiWrite ( + IN UINT32 GbeBar, + IN UINT32 PhyAddress, + IN UINT32 PhyRegister, + IN UINT32 WriteData + ) +{ + if(!IsPhyAddressRegisterValid (PhyAddress, PhyRegister)) { + DEBUG ((DEBUG_ERROR, "GbeMdiWrite PhyAddressRegister validaton failed!= \n")); + return EFI_INVALID_PARAMETER; + } + + MmioWrite32 (GbeBar + R_LAN_MEM_CSR_MDIC, (~B_PHY_MDI_READY) & (B_PHY_MD= I_WRITE | PhyAddress | PhyRegister | (WriteData & 0xFFFF))); + return GbeMdiWaitReady (GbeBar); +} + +/** + Perform MDI read. + + @param [in] GbeBar GbE MMIO space + @param [in] PhyAddress Phy Address General - 02 or Specific - 01 + @param [in] PhyRegister Phy Register + @param [out] ReadData Return Value + + @retval EFI_SUCCESS Based on response from GbeMdiWaitReady + @retval EFI_TIMEOUT Based on response from GbeMdiWaitReady + @retval EFI_INVALID_PARAMETER If Phy Address or Register validaton fail= ed +**/ +EFI_STATUS +EFIAPI +GbeMdiRead ( + IN UINT32 GbeBar, + IN UINT32 PhyAddress, + IN UINT32 PhyRegister, + OUT UINT16 *ReadData + ) +{ + EFI_STATUS Status; + + if(!IsPhyAddressRegisterValid (PhyAddress, PhyRegister)) { + DEBUG ((DEBUG_ERROR, "GbeMdiRead PhyAddressRegister validaton failed!\= n")); + return EFI_INVALID_PARAMETER; + } + + MmioWrite32 (GbeBar + R_LAN_MEM_CSR_MDIC, (~B_PHY_MDI_READY) & (B_PHY_MD= I_READ | PhyAddress | PhyRegister)); + Status =3D GbeMdiWaitReady (GbeBar); + if (EFI_SUCCESS =3D=3D Status) { + *ReadData =3D (UINT16) MmioRead32 (GbeBar + R_LAN_MEM_CSR_MDIC); + } + return Status; +} + +/** + Gets Phy Revision and Model Number + from PHY IDENTIFIER register 2 (offset 3) + + @param [in] GbeBar GbE MMIO space + @param [out] LanPhyRevision Return Value + + @return EFI_STATUS + @return EFI_INVALID_PARAMETER When GbeBar is incorrect + When Phy register or address is out of bou= nds +**/ +EFI_STATUS +EFIAPI +GbeMdiGetLanPhyRevision ( + IN UINT32 GbeBar, + OUT UINT16 *LanPhyRevision + ) +{ + EFI_STATUS Status; + UINT8 LpcdLoop; + + if (!((GbeBar & 0xFFFFF000) > 0)) { + DEBUG ((DEBUG_ERROR, "GbeMdiGetLanPhyRevision GbeBar validation failed= ! Bar: 0x%08X \n", GbeBar)); + return EFI_INVALID_PARAMETER; + } + + Status =3D GbeMdiAcquireMdio (GbeBar); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "GbeMdiGetLanPhyRevision failed to aquire MDIO se= maphore. Status: %r\n", Status)); + return Status; + } + + Status =3D GbeMdiSetPage (GbeBar, PHY_MDI_PAGE_769_PORT_CONTROL_REGISTER= S); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "GbeMdiGetLanPhyRevision failed to Set Page 769. = Status: %r\n", Status)); + GbeMdiReleaseMdio (GbeBar); + return Status; + } + + // + // Set register to: Custom Mode Control + // Reduced MDIO frequency access (slow mdio) + // BIT 10 set to 1 + // + Status =3D GbeMdiWrite (GbeBar, B_PHY_MDI_PHY_ADDRESS_01, MDI_REG_SHIFT = (R_PHY_MDI_PAGE_769_REGISETER_16_CMC), BIT13 | B_PHY_MDI_PAGE_769_REGISETER= _16_CMC_MDIO_FREQ_ACCESS | BIT8 | BIT7); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "GbeMdiGetLanPhyRevision failed to enable slow MD= IO mode. Status: %r\n", Status)); + GbeMdiReleaseMdio (GbeBar); + return Status; + } + + // + // Read register PHY Version from PHY IDENTIFIER 2 (offset 0x3) + // Bits [9:4] - Device Model Number + // Bits [3:0] - Device Revision Number + // + Status =3D GbeMdiRead (GbeBar, B_PHY_MDI_PHY_ADDRESS_02, R_PHY_MDI_GENER= EAL_REGISTER_03_PHY_IDENTIFIER_2, LanPhyRevision); + + // + // Failed to obtain PHY REV + // + if (*LanPhyRevision =3D=3D 0x0) { + if ((MmioRead32 (GbeBar + R_LAN_MEM_CSR_CTRL) & (B_LAN_MEM_CSR_CTRL_LA= NPHYPC_OVERRIDE | B_LAN_MEM_CSR_CTRL_LANPHYPC_VAL))) { + DEBUG ((DEBUG_ERROR, "GbeMdiGetLanPhyRevision failed to read Phy Rev= ision. Other component tried to initialize GbE and failed.\n")); + Status =3D EFI_DEVICE_ERROR; + goto PHY_EXIT; + } + DEBUG ((DEBUG_INFO, "GbeMdiGetLanPhyRevision failed to read Revision. = Overriding LANPHYPC\n", Status)); + // + // Taking over LANPHYPC + // 1. SW signal override - 1st cycle. + // 2. Turn LCD on - 2nd cycle. + // + MmioOr32 (GbeBar + R_LAN_MEM_CSR_CTRL, B_LAN_MEM_CSR_CTRL_LANPHYPC_OVE= RRIDE); + MmioOr32 (GbeBar + R_LAN_MEM_CSR_CTRL, B_LAN_MEM_CSR_CTRL_LANPHYPC_VAL= ); + + // + // Poll on LPCD for 100mSec + // + LpcdLoop =3D 101; + while (LpcdLoop > 0) { + if (MmioRead32 (GbeBar + R_LAN_MEM_CSR_CTRL_EXT) & B_LAN_MEM_CSR_CTR= L_EXT_LPCD) { + break; + } else { + LpcdLoop--; + MicroSecondDelay (1000); + } + } + + if (LpcdLoop > 0) { + Status =3D GbeMdiRead (GbeBar, B_PHY_MDI_PHY_ADDRESS_02, R_PHY_MDI_G= ENEREAL_REGISTER_03_PHY_IDENTIFIER_2, LanPhyRevision); + } + // + // Restore LANPHYPC + // 1. Turn LCD off - 1st cycle. + // 2. Remove SW signal override - 2nd cycle. + // + MmioAnd32 (GbeBar + R_LAN_MEM_CSR_CTRL, (UINT32) ~B_LAN_MEM_CSR_CTRL_L= ANPHYPC_VAL); + MmioAnd32 (GbeBar + R_LAN_MEM_CSR_CTRL, (UINT32) ~B_LAN_MEM_CSR_CTRL_L= ANPHYPC_OVERRIDE); + } + +PHY_EXIT: + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "GbeMdiGetLanPhyRevision failed to read Revision = and Model Number from PHY Identifier 2. Status: %r\n", Status)); + GbeMdiReleaseMdio (GbeBar); + return Status; + } + + // + // Switch back to normal MDIO frequency access + // + Status =3D GbeMdiWrite (GbeBar, B_PHY_MDI_PHY_ADDRESS_01, MDI_REG_SHIFT= (R_PHY_MDI_PAGE_769_REGISETER_16_CMC), (~B_PHY_MDI_PAGE_769_REGISETER_16_C= MC_MDIO_FREQ_ACCESS) & (BIT13 | BIT8 | BIT7)); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "GbeMdiGetLanPhyRevision failed to disable slow M= DIO mode. Status: %r\n", Status)); + } + + GbeMdiReleaseMdio (GbeBar); + + return Status; +} + diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/PeiDxeSmmGbeMdi= Lib/PeiDxeSmmGbeMdiLib.inf b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library= /PeiDxeSmmGbeMdiLib/PeiDxeSmmGbeMdiLib.inf new file mode 100644 index 0000000000..be54788149 --- /dev/null +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/PeiDxeSmmGbeMdiLib/Pei= DxeSmmGbeMdiLib.inf @@ -0,0 +1,32 @@ +## @file +# Gbe MDI Library. +# +# All function in this library is available for PEI, DXE, and SMM, +# But do not support UEFI RUNTIME environment call. +# +# Copyright (c) 2020 Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + + +[Defines] + INF_VERSION =3D 0x00010017 + BASE_NAME =3D PeiDxeSmmGbeMdiLib + FILE_GUID =3D 0360E6F6-892A-4852-BF98-15C0D30D8A48 + VERSION_STRING =3D 1.0 + MODULE_TYPE =3D BASE + LIBRARY_CLASS =3D GbeMdiLib + +[LibraryClasses] + BaseLib + IoLib + DebugLib + TimerLib + +[Packages] + MdePkg/MdePkg.dec + CoffeelakeSiliconPkg/SiPkg.dec + +[Sources] + GbeMdiLib.c diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Smm/PchInitSmm.= inf b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Smm/PchInitSmm.inf index 267c45872d..9418d7a4c8 100644 --- a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Smm/PchInitSmm.inf +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Smm/PchInitSmm.inf @@ -46,6 +46,7 @@ TimerLib ConfigBlockLib PmcPrivateLib SataLib +GbeMdiLib =20 [Packages] MdePkg/MdePkg.dec diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/SiPkgCommonLib.dsc b/Silico= n/Intel/CoffeelakeSiliconPkg/SiPkgCommonLib.dsc index 7a9911e825..c631421408 100644 --- a/Silicon/Intel/CoffeelakeSiliconPkg/SiPkgCommonLib.dsc +++ b/Silicon/Intel/CoffeelakeSiliconPkg/SiPkgCommonLib.dsc @@ -1,7 +1,7 @@ ## @file # Component description file for the Coffee Lake silicon package both PEI= and DXE libraries DSC file. # -# Copyright (c) 2019 Intel Corporation. All rights reserved.
+# Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -34,6 +34,8 @@ DEFINE PCH =3D Cnl PchPcieRpLib|$(PLATFORM_SI_PACKAGE)/Pch/Library/PeiDxeSmmPchPcieRpLib/Pei= DxeSmmPchPcieRpLib.inf PchPcrLib|$(PLATFORM_SI_PACKAGE)/Pch/Library/PeiDxeSmmPchPcrLib/PeiDxeSmm= PchPcrLib.inf PmcLib|$(PLATFORM_SI_PACKAGE)/Pch/Library/PeiDxeSmmPmcLib/PeiDxeSmmPmcLib= .inf + GbeMdiLib|$(PLATFORM_SI_PACKAGE)/Pch/Library/PeiDxeSmmGbeMdiLib/PeiDxeSmm= GbeMdiLib.inf + =20 PchSbiAccessLib|$(PLATFORM_SI_PACKAGE)/Pch/Library/PeiDxeSmmPchSbiAccessL= ib/PeiDxeSmmPchSbiAccessLib.inf GpioLib|$(PLATFORM_SI_PACKAGE)/Pch/Library/PeiDxeSmmGpioLib/PeiDxeSmmGpio= Lib.inf --=20 2.19.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 (#54827): https://edk2.groups.io/g/devel/message/54827 Mute This Topic: https://groups.io/mt/71545950/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-