From: Vu Nguyen <vungu...@os.amperecomputing.com> Add support for new BoardSetting's config value (0x0000000A) to enable auto bifurcation mode per Root Complex:
Example: NV_SI_RO_BOARD_S0_RCA2_CFG, 0x0098, 0x0000000A NV_SI_RO_BOARD_S0_RCA3_CFG, 0x00A0, 0x0000000A Signed-off-by: Minh Nguyen <minhnguy...@os.amperecomputing.com> --- Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.h | 4 +++- Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.c | 12 +++++++++++- Silicon/Ampere/AmpereAltraPkg/Drivers/RootComplexConfigDxe/RootComplexConfigDxe.c | 7 ++++--- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.h b/Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.h index 008a8db69f2c..8c07f086a58f 100644 --- a/Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.h +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.h @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.<BR> + Copyright (c) 2020 - 2023, Ampere Computing LLC. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -13,6 +13,8 @@ #define BYTE_MASK 0xFF #define PCIE_ERRATA_SPEED1 0x0001 // Limited speed errata +#define AUTO_BIFURCATION_SETTING_VALUE 0x0A + #ifndef BIT #define BIT(nr) (1 << (nr)) #endif diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.c b/Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.c index 08dff0f1311f..a8e23015b605 100644 --- a/Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.c +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/PcieInitPei/RootComplexNVParam.c @@ -205,7 +205,9 @@ GetDevMap ( // // Get default Devmap low and configure Devmap low accordingly. // - RootComplex->DefaultDevMapLow = GetDefaultDevMap (RootComplex, TRUE); + if (RootComplex->DefaultDevMapLow != DevMapModeAuto) { + RootComplex->DefaultDevMapLow = GetDefaultDevMap (RootComplex, TRUE); + } if (RootComplex->DevMapLow == 0) { RootComplex->DevMapLow = RootComplex->DefaultDevMapLow; } @@ -398,6 +400,14 @@ GetLaneAllocation ( } } + // Update RootComplex data to handle auto bifurcation mode on RCA + if (Value == AUTO_BIFURCATION_SETTING_VALUE) { + RootComplex->Pcie[PcieController0].MaxWidth = LINK_WIDTH_X4; + RootComplex->Pcie[PcieController0].MaxGen = LINK_SPEED_GEN3; + RootComplex->Pcie[PcieController0].Active = TRUE; + RootComplex->DefaultDevMapLow = DevMapModeAuto; + } + if (RootComplex->Type == RootComplexTypeB) { NvParamOffset += NV_PARAM_ENTRYSIZE; Status = NVParamGet (NvParamOffset, NV_PERM_ALL, &Value); diff --git a/Silicon/Ampere/AmpereAltraPkg/Drivers/RootComplexConfigDxe/RootComplexConfigDxe.c b/Silicon/Ampere/AmpereAltraPkg/Drivers/RootComplexConfigDxe/RootComplexConfigDxe.c index 52a297ff085d..bc4812207f63 100644 --- a/Silicon/Ampere/AmpereAltraPkg/Drivers/RootComplexConfigDxe/RootComplexConfigDxe.c +++ b/Silicon/Ampere/AmpereAltraPkg/Drivers/RootComplexConfigDxe/RootComplexConfigDxe.c @@ -733,7 +733,8 @@ PcieRCScreenSetup ( // OptionsOpCodeHandle = CreateDevMapOptions (RootComplex); - if (RootComplex->DefaultDevMapLow != 0) { + if ((RootComplex->DefaultDevMapLow != 0) + && (RootComplex->DefaultDevMapLow != DevMapModeAuto)) { QuestionFlags |= EFI_IFR_FLAG_READ_ONLY; } @@ -1202,8 +1203,8 @@ RootComplexDriverEntry ( RootComplex = GetRootComplex (RCIndex); if (EFI_ERROR (Status)) { - VarStoreConfig->RCBifurcationLow[RCIndex] = RootComplex->DevMapLow; - VarStoreConfig->RCBifurcationHigh[RCIndex] = RootComplex->DevMapHigh; + VarStoreConfig->RCBifurcationLow[RCIndex] = RootComplex->DefaultDevMapLow; + VarStoreConfig->RCBifurcationHigh[RCIndex] = RootComplex->DefaultDevMapHigh; VarStoreConfig->RCStatus[RCIndex] = RootComplex->Active; IsUpdated = TRUE; } -- 2.39.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104079): https://edk2.groups.io/g/devel/message/104079 Mute This Topic: https://groups.io/mt/98698193/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-