1 /** @file 2 Library that provides QNC specific library services in PEI phase 3 4 Copyright (c) 2013-2015 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 #ifndef __INTEL_QNC_LIB_H__ 17 #define __INTEL_QNC_LIB_H__ 18 19 /** 20 This function initializes the QNC register before MRC. 21 It sets RCBA, PMBASE, disable Watchdog timer and initialize QNC GPIO. 22 If the function cannot complete it'll ASSERT(). 23 **/ 24 VOID 25 EFIAPI 26 PeiQNCPreMemInit ( 27 VOID 28 ); 29 30 31 /** 32 Used to check SCH if it's S3 state. Clear the register state after query. 33 34 @retval TRUE if it's S3 state. 35 @retval FALSE if it's not S3 state. 36 37 **/ 38 BOOLEAN 39 EFIAPI 40 QNCCheckS3AndClearState ( 41 VOID 42 ); 43 44 /** 45 Used to check SCH if system wakes up from power on reset. Clear the register state after query. 46 47 @retval TRUE if system wakes up from power on reset 48 @retval FALSE if system does not wake up from power on reset 49 50 **/ 51 BOOLEAN 52 EFIAPI 53 QNCCheckPowerOnResetAndClearState ( 54 VOID 55 ); 56 57 /** 58 This function is used to clear SMI and wake status. 59 60 **/ 61 VOID 62 EFIAPI 63 QNCClearSmiAndWake ( 64 VOID 65 ); 66 67 /** 68 Used to initialize the QNC register after MRC. 69 70 **/ 71 VOID 72 EFIAPI 73 PeiQNCPostMemInit ( 74 VOID 75 ); 76 77 /** Send DRAM Ready opcode. 78 79 @param[in] OpcodeParam Parameter to DRAM ready opcode. 80 81 @retval VOID 82 **/ 83 VOID 84 EFIAPI 85 QNCSendOpcodeDramReady ( 86 IN UINT32 OpcodeParam 87 ); 88 89 /** 90 91 Relocate RMU Main binary to memory after MRC to improve performance. 92 93 @param[in] DestBaseAddress - Specify the new memory address for the RMU Main binary. 94 @param[in] SrcBaseAddress - Specify the current memory address for the RMU Main binary. 95 @param[in] Size - Specify size of the RMU Main binary. 96 97 @retval VOID 98 99 **/ 100 VOID 101 EFIAPI 102 RmuMainRelocation ( 103 IN CONST UINT32 DestBaseAddress, 104 IN CONST UINT32 SrcBaseAddress, 105 IN CONST UINTN Size 106 ); 107 108 /** 109 Get the total memory size 110 111 **/ 112 UINT32 113 EFIAPI 114 QNCGetTotalMemorysize ( 115 VOID 116 ); 117 118 /** 119 Get the memory range of TSEG. 120 The TSEG's memory is below TOLM. 121 122 @param[out] BaseAddress The base address of TSEG's memory range 123 @param[out] MemorySize The size of TSEG's memory range 124 125 **/ 126 VOID 127 EFIAPI 128 QNCGetTSEGMemoryRange ( 129 OUT UINT64 *BaseAddress, 130 OUT UINT64 *MemorySize 131 ); 132 133 /** 134 Updates the PAM registers in the MCH for the requested range and mode. 135 136 @param Start The start address of the memory region 137 @param Length The length, in bytes, of the memory region 138 @param ReadEnable Pointer to the boolean variable on whether to enable read for legacy memory section. 139 If NULL, then read attribute will not be touched by this call. 140 @param ReadEnable Pointer to the boolean variable on whether to enable write for legacy memory section. 141 If NULL, then write attribute will not be touched by this call. 142 @param Granularity A pointer to granularity, in bytes, that the PAM registers support 143 144 @retval RETURN_SUCCESS The PAM registers in the MCH were updated 145 @retval RETURN_INVALID_PARAMETER The memory range is not valid in legacy region. 146 147 **/ 148 RETURN_STATUS 149 EFIAPI 150 QNCLegacyRegionManipulation ( 151 IN UINT32 Start, 152 IN UINT32 Length, 153 IN BOOLEAN *ReadEnable, 154 IN BOOLEAN *WriteEnable, 155 OUT UINT32 *Granularity 156 ); 157 158 /** 159 Do early init of pci express rootports on Soc. 160 161 **/ 162 VOID 163 EFIAPI 164 PciExpressEarlyInit ( 165 VOID 166 ); 167 168 /** 169 Complete initialization of all the pci express rootports on Soc. 170 **/ 171 EFI_STATUS 172 EFIAPI 173 PciExpressInit ( 174 ); 175 176 /** 177 Determine if QNC is supported. 178 179 @retval FALSE QNC is not supported. 180 @retval TRUE QNC is supported. 181 **/ 182 BOOLEAN 183 EFIAPI 184 IsQncSupported ( 185 VOID 186 ); 187 188 /** 189 Get the DeviceId of the SoC 190 191 @retval PCI DeviceId of the SoC 192 **/ 193 UINT16 194 EFIAPI 195 QncGetSocDeviceId ( 196 VOID 197 ); 198 199 /** 200 Enable SMI detection of legacy flash access violations. 201 **/ 202 VOID 203 EFIAPI 204 QncEnableLegacyFlashAccessViolationSmi ( 205 VOID 206 ); 207 208 /** 209 Setup RMU Thermal sensor registers for Vref mode. 210 **/ 211 VOID 212 EFIAPI 213 QNCThermalSensorSetVRefMode ( 214 VOID 215 ); 216 217 /** 218 Setup RMU Thermal sensor registers for Ratiometric mode. 219 **/ 220 VOID 221 EFIAPI 222 QNCThermalSensorSetRatiometricMode ( 223 VOID 224 ); 225 226 /** 227 Setup RMU Thermal sensor trip point values. 228 229 @param[in] CatastrophicTripOnDegreesCelsius - Catastrophic set trip point threshold. 230 @param[in] HotTripOnDegreesCelsius - Hot set trip point threshold. 231 @param[in] HotTripOffDegreesCelsius - Hot clear trip point threshold. 232 233 @retval VOID 234 **/ 235 EFI_STATUS 236 EFIAPI 237 QNCThermalSensorSetTripValues ( 238 IN CONST UINTN CatastrophicTripOnDegreesCelsius, 239 IN CONST UINTN HotTripOnDegreesCelsius, 240 IN CONST UINTN HotTripOffDegreesCelsius 241 ); 242 243 /** 244 Enable RMU Thermal sensor with a Catastrophic Trip point. 245 246 @retval EFI_SUCCESS Trip points setup. 247 @retval EFI_INVALID_PARAMETER Invalid trip point value. 248 249 **/ 250 EFI_STATUS 251 EFIAPI 252 QNCThermalSensorEnableWithCatastrophicTrip ( 253 IN CONST UINTN CatastrophicTripOnDegreesCelsius 254 ); 255 256 /** 257 Lock all RMU Thermal sensor control & trip point registers. 258 259 **/ 260 VOID 261 EFIAPI 262 QNCThermalSensorLockAllRegisters ( 263 VOID 264 ); 265 266 /** 267 Set chipset policy for double bit ECC error. 268 269 @param[in] PolicyValue Policy to config on double bit ECC error. 270 271 **/ 272 VOID 273 EFIAPI 274 QNCPolicyDblEccBitErr ( 275 IN CONST UINT32 PolicyValue 276 ); 277 278 /** 279 Determine if running on secure Quark hardware Sku. 280 281 @retval FALSE Base Quark Sku or unprovisioned Secure Sku running. 282 @retval TRUE Provisioned SecureSku hardware running. 283 **/ 284 BOOLEAN 285 EFIAPI 286 QncIsSecureProvisionedSku ( 287 VOID 288 ); 289 #endif 290 291