1 /** @file 2 Platform Pcie Helper Lib. 3 4 Copyright (c) 2013 Intel Corporation. 5 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #include "CommonHeader.h" 17 18 // 19 // Routines local to this source module. 20 // 21 VOID 22 LegacyGpioSetLevel ( 23 IN CONST UINT32 LevelRegOffset, 24 IN CONST UINT32 GpioNum, 25 IN CONST BOOLEAN HighLevel 26 ) 27 { 28 UINT32 RegValue; 29 UINT32 GpioBaseAddress; 30 UINT32 GpioNumMask; 31 32 GpioBaseAddress = LpcPciCfg32 (R_QNC_LPC_GBA_BASE) & B_QNC_LPC_GPA_BASE_MASK; 33 ASSERT (GpioBaseAddress > 0); 34 35 RegValue = IoRead32 (GpioBaseAddress + LevelRegOffset); 36 GpioNumMask = (1 << GpioNum); 37 if (HighLevel) { 38 RegValue |= (GpioNumMask); 39 } else { 40 RegValue &= ~(GpioNumMask); 41 } 42 IoWrite32 (GpioBaseAddress + R_QNC_GPIO_RGLVL_RESUME_WELL, RegValue); 43 } 44 45 // 46 // Routines exported by this component. 47 // 48 49 /** 50 Platform assert PCI express PERST# signal. 51 52 @param PlatformType See EFI_PLATFORM_TYPE enum definitions. 53 54 **/ 55 VOID 56 EFIAPI 57 PlatformPERSTAssert ( 58 IN CONST EFI_PLATFORM_TYPE PlatformType 59 ) 60 { 61 if (PlatformType == GalileoGen2) { 62 LegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_GEN2_PCIEXP_PERST_RESUMEWELL_GPIO, FALSE); 63 } else { 64 LegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, PCIEXP_PERST_RESUMEWELL_GPIO, FALSE); 65 } 66 } 67 68 /** 69 Platform de assert PCI express PERST# signal. 70 71 @param PlatformType See EFI_PLATFORM_TYPE enum definitions. 72 73 **/ 74 VOID 75 EFIAPI 76 PlatformPERSTDeAssert ( 77 IN CONST EFI_PLATFORM_TYPE PlatformType 78 ) 79 { 80 if (PlatformType == GalileoGen2) { 81 LegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_GEN2_PCIEXP_PERST_RESUMEWELL_GPIO, TRUE); 82 } else { 83 LegacyGpioSetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, PCIEXP_PERST_RESUMEWELL_GPIO, TRUE); 84 } 85 } 86 87 /** Early initialisation of the PCIe controller. 88 89 @param PlatformType See EFI_PLATFORM_TYPE enum definitions. 90 91 @retval EFI_SUCCESS Operation success. 92 93 **/ 94 EFI_STATUS 95 EFIAPI 96 PlatformPciExpressEarlyInit ( 97 IN CONST EFI_PLATFORM_TYPE PlatformType 98 ) 99 { 100 101 // 102 // Release and wait for PCI controller to come out of reset. 103 // 104 SocUnitReleasePcieControllerPreWaitPllLock (PlatformType); 105 MicroSecondDelay (PCIEXP_DELAY_US_WAIT_PLL_LOCK); 106 SocUnitReleasePcieControllerPostPllLock (PlatformType); 107 108 // 109 // Early PCIe initialisation 110 // 111 SocUnitEarlyInitialisation (); 112 113 // 114 // Do North cluster early PCIe init. 115 // 116 PciExpressEarlyInit (); 117 118 return EFI_SUCCESS; 119 } 120 121