[edk2-devel] [edk2-platforms][PATCH v5 10/30] AmpereAltraPkg: Add Root Complex HOB data structures

Nhi Pham via groups.io nhi=os.amperecomputing.com at groups.io
Wed Nov 17 16:47:07 UTC 2021


From: Vu Nguyen <vunguyen at os.amperecomputing.com>

Provide common data structures and macros which will be consumed by
various PCIe modules.

Cc: Thang Nguyen <thang at os.amperecomputing.com>
Cc: Chuong Tran <chuong at os.amperecomputing.com>
Cc: Phong Vo <phong at os.amperecomputing.com>
Cc: Leif Lindholm <leif at nuviainc.com>
Cc: Michael D Kinney <michael.d.kinney at intel.com>
Cc: Ard Biesheuvel <ardb+tianocore at kernel.org>
Cc: Nate DeSimone <nathaniel.l.desimone at intel.com>

Signed-off-by: Nhi Pham <nhi at os.amperecomputing.com>
Reviewed-by: Leif Lindholm <leif at nuviainc.com>
---
 Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec                |   3 +
 Silicon/Ampere/AmpereAltraPkg/Include/Guid/RootComplexInfoHob.h | 140 ++++++++++++++++++++
 2 files changed, 143 insertions(+)

diff --git a/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec b/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec
index c1226c296dad..e19925c68a0e 100644
--- a/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec
+++ b/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec
@@ -52,3 +52,6 @@ [Guids]
 
   ## Include/Guid/PlatformInfoHob.h
   gPlatformInfoHobGuid         = { 0x7f73e372, 0x7183, 0x4022, { 0xb3, 0x76, 0x78, 0x30, 0x32, 0x6d, 0x79, 0xb4 } }
+
+  ## Include/Guid/RootComplexInfoHob.h
+  gRootComplexInfoHobGuid      = { 0x568a258a, 0xcaa1, 0x47e9, { 0xbb, 0x89, 0x65, 0xa3, 0x73, 0x9b, 0x58, 0x75 } }
diff --git a/Silicon/Ampere/AmpereAltraPkg/Include/Guid/RootComplexInfoHob.h b/Silicon/Ampere/AmpereAltraPkg/Include/Guid/RootComplexInfoHob.h
new file mode 100644
index 000000000000..24599b781646
--- /dev/null
+++ b/Silicon/Ampere/AmpereAltraPkg/Include/Guid/RootComplexInfoHob.h
@@ -0,0 +1,140 @@
+/** @file
+
+  Copyright (c) 2021, Ampere Computing LLC. All rights reserved.<BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef ROOT_COMPLEX_INFO_HOB_H_
+#define ROOT_COMPLEX_INFO_HOB_H_
+
+#define ROOT_COMPLEX_INFO_HOB_GUID \
+  { 0x568a258a, 0xcaa1, 0x47e9, { 0xbb, 0x89, 0x65, 0xa3, 0x73, 0x9b, 0x58, 0x75 } }
+
+extern GUID gRootComplexInfoHobGuid;
+
+#define PRESET_INVALID     0xFF
+
+//
+// PCIe link width
+//
+#define LINK_WIDTH_NONE    0x00
+#define LINK_WIDTH_X1      0x01
+#define LINK_WIDTH_X2      0x02
+#define LINK_WIDTH_X4      0x04
+#define LINK_WIDTH_X8      0x08
+#define LINK_WIDTH_X16     0x10
+
+//
+// PCIe link speed
+//
+#define LINK_SPEED_NONE    0x00
+#define LINK_SPEED_GEN1    0x01
+#define LINK_SPEED_GEN2    0x02
+#define LINK_SPEED_GEN3    0x04
+#define LINK_SPEED_GEN4    0x08
+
+typedef enum {
+  DevMapMode1 = 0,
+  DevMapMode2,
+  DevMapMode3,
+  DevMapMode4,
+  MaxDevMapMode = DevMapMode4
+} DEV_MAP_MODE;
+
+//
+// PCIe controller index
+//
+typedef enum {
+  PcieController0 = 0,
+  PcieController1,
+  PcieController2,
+  PcieController3,
+  PcieController4,
+  MaxPcieControllerOfRootComplexA = PcieController4,
+  PcieController5,
+  PcieController6,
+  PcieController7,
+  MaxPcieController,
+  MaxPcieControllerOfRootComplexB = MaxPcieController
+} AC01_PCIE_CONTROLLER_INDEX;
+
+//
+// Root Complex type
+//
+typedef enum {
+  RootComplexTypeA,
+  RootComplexTypeB,
+  MaxRootComplexType = RootComplexTypeB
+} AC01_ROOT_COMPLEX_TYPE;
+
+//
+// Root Complex index
+//
+typedef enum {
+  RootComplexA0 = 0,
+  RootComplexA1,
+  RootComplexA2,
+  RootComplexA3,
+  MaxRootComplexA,
+  RootComplexB0 = MaxRootComplexA,
+  RootComplexB1,
+  RootComplexB2,
+  RootComplexB3,
+  MaxRootComplex,
+  MaxRootComplexB = MaxRootComplex
+} AC01_ROOT_COMPLEX_INDEX;
+
+#pragma pack(1)
+
+//
+// Data structure to store the PCIe controller information
+//
+typedef struct {
+  PHYSICAL_ADDRESS  CsrBase;               // Base address of CSR block
+  PHYSICAL_ADDRESS  SnpsRamBase;           // Base address of Synopsys SRAM
+  UINT8             MaxGen;                // Max speed Gen-1/-2/-3/-4
+  UINT8             CurrentGen;            // Current speed Gen-1/-2/-3/-4
+  UINT8             MaxWidth;              // Max lanes x2/x4/x8/x16
+  UINT8             CurWidth;              // Current lanes x2/x4/x8/x16
+  UINT8             ID;                    // ID of the controller within Root Complex
+  UINT8             DevNum;                // Device number as part of Bus:Dev:Func
+  BOOLEAN           Active;                // Active? Used in bi-furcation mode
+  BOOLEAN           LinkUp;                // PHY and PCIE linkup
+  BOOLEAN           HotPlug;               // Hotplug support
+} AC01_PCIE_CONTROLLER;
+
+//
+// Data structure to store the Root Complex information
+//
+typedef struct {
+  PHYSICAL_ADDRESS       CsrBase;
+  PHYSICAL_ADDRESS       TcuBase;
+  PHYSICAL_ADDRESS       HostBridgeBase;
+  PHYSICAL_ADDRESS       SerdesBase;
+  PHYSICAL_ADDRESS       MmcfgBase;
+  PHYSICAL_ADDRESS       MmioBase;
+  PHYSICAL_ADDRESS       MmioSize;
+  PHYSICAL_ADDRESS       Mmio32Base;
+  PHYSICAL_ADDRESS       Mmio32Size;
+  AC01_PCIE_CONTROLLER   Pcie[MaxPcieController];
+  UINT8                  MaxPcieController;
+  AC01_ROOT_COMPLEX_TYPE Type;
+  UINT8                  ID;
+  DEV_MAP_MODE           DevMapHigh:3;           // Copy of High Devmap programmed to Host bridge
+  DEV_MAP_MODE           DevMapLow:3;            // Copy of Low Devmap programmed to Host bridge
+  DEV_MAP_MODE           DefaultDevMapHigh:3;    // Default of High devmap based on board settings
+  DEV_MAP_MODE           DefaultDevMapLow:3;     // Default of Low devmap based on board settings
+  UINT8                  Socket;
+  BOOLEAN                Active;
+  BOOLEAN                DefaultActive;
+  UINT16                 Logical;
+  UINT32                 Flags;
+  UINT8                  PresetGen3[MaxPcieController];
+  UINT8                  PresetGen4[MaxPcieController];
+} AC01_ROOT_COMPLEX;
+
+#pragma pack()
+
+#endif /* ROOT_COMPLEX_INFO_HOB_H_ */
-- 
2.17.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#83822): https://edk2.groups.io/g/devel/message/83822
Mute This Topic: https://groups.io/mt/87123874/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