[edk2-devel][edk2-platforms][PATCH 2/2] AmpereAltraPkg: Enable auto bifurcation via BoardSetting

Minh Nguyen via groups.io minhnguyen1=os.amperecomputing.com at groups.io
Fri May 5 02:49:18 UTC 2023


From: Vu Nguyen <vunguyen at 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 <minhnguyen1 at 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/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list