blob: 9f90a1376c8be8dfb7faae8706f5d72330bb13b1 [file] [log] [blame]
Siyuan Wangaffe85f2013-07-25 15:14:15 +08001/* $NoKeywords:$ */
2/**
3 * @file
4 *
5 * Config Fch HwAcpi controller
6 *
7 * Init HwAcpi Controller features.
8 *
9 * @xrefitem bom "File Content Label" "Release Content"
10 * @e project: AGESA
11 * @e sub-project: FCH
12 * @e \$Revision: 87262 $ @e \$Date: 2013-01-31 09:13:43 -0600 (Thu, 31 Jan 2013) $
13 *
14 */
15/*
16*****************************************************************************
17*
18 * Copyright (c) 2008 - 2013, Advanced Micro Devices, Inc.
19 * All rights reserved.
20 *
21 * Redistribution and use in source and binary forms, with or without
22 * modification, are permitted provided that the following conditions are met:
23 * * Redistributions of source code must retain the above copyright
24 * notice, this list of conditions and the following disclaimer.
25 * * Redistributions in binary form must reproduce the above copyright
26 * notice, this list of conditions and the following disclaimer in the
27 * documentation and/or other materials provided with the distribution.
28 * * Neither the name of Advanced Micro Devices, Inc. nor the names of
29 * its contributors may be used to endorse or promote products derived
30 * from this software without specific prior written permission.
31 *
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
33 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35 * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
36 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
37 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
38 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
39 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42****************************************************************************
43*/
44#include "FchPlatform.h"
45#include "amdlib.h"
46#include "cpuServices.h"
47#include "Filecode.h"
48#define FILECODE PROC_FCH_HWACPI_FAMILY_YANGTZE_YANGTZEHWACPIENVSERVICE_FILECODE
49
50#define AMD_CPUID_APICID_LPC_BID 0x00000001ul // Local APIC ID, Logical Processor Count, Brand ID
51
52ACPI_REG_WRITE FchYangtzeInitEnvSpecificHwAcpiMmioTable[] =
53{
54 {00, 00, 0xB0, 0xAC},
55 {PMIO_BASE >> 8, FCH_PMIOA_REG28, (UINT8)~(BIT0 + BIT2), BIT0}, // Set ASF SMBUS master function enabled here (temporary)
56#ifdef ACPI_SLEEP_TRAP
57 {SMI_BASE >> 8, FCH_SMI_REGB0, (UINT8)~(BIT2 + BIT3), BIT2}, // Set SLP_TYPE as SMI event
58 {PMIO_BASE >> 8, FCH_PMIOA_REGBE, (UINT8)~BIT5, 0x00}, // Disabled SLP function for S1/S3/S4/S5
59 {PMIO_BASE >> 8, 0x08 + 3, (UINT8)~(BIT0 + BIT1), BIT1}, // Set S state transition disabled (BIT0) force ACPI to
60 // send SMI message when writing to SLP_TYP Acpi register. (BIT1)
61 {SMI_BASE >> 8, FCH_SMI_REG98 + 3, (UINT8)~BIT7, 0x00}, // Enabled Global Smi ( BIT7 clear as 0 to enable )
62#endif
63 {PMIO_BASE >> 8, 0x80 + 1, (UINT8)~(BIT3 + BIT4), BIT3 + BIT4},
64 {0xFF, 0xFF, 0xFF, 0xFF},
65};
66
67
68/**
69 * FchInitEnvHwAcpiMmioTable - Fch ACPI MMIO initial
70 * during POST.
71 *
72 */
73ACPI_REG_WRITE FchYangtzeInitEnvHwAcpiMmioTable[] =
74{
75 {00, 00, 0xB0, 0xAC}, /// Signature
76
77 //
78 // HPET workaround
79 //
WANG Siyuan7b6d4122013-07-31 16:55:26 +080080 {PMIO_BASE >> 8, FCH_PMIOA_REG54 + 2, 0x7F, BIT7},
81 {PMIO_BASE >> 8, FCH_PMIOA_REG54 + 2, 0x7F, 0x00},
Siyuan Wangaffe85f2013-07-25 15:14:15 +080082 {PMIO_BASE >> 8, FCH_PMIOA_REGC4, (UINT8)~BIT2, BIT2},
83 {PMIO_BASE >> 8, FCH_PMIOA_REGC0, 0, 0x3D},
84 {PMIO_BASE >> 8, FCH_PMIOA_REGC0 + 1, 0x0, 0x04},
85 {PMIO_BASE >> 8, FCH_PMIOA_REGC2, 0x20, 0x58},
86 {PMIO_BASE >> 8, FCH_PMIOA_REGC2 + 1, 0, 0x40},
87 {PMIO_BASE >> 8, FCH_PMIOA_REGC2, (UINT8)~(BIT4), BIT4},
WANG Siyuan7b6d4122013-07-31 16:55:26 +080088 {PMIO_BASE >> 8, FCH_PMIOA_REGCC, 0xF8, 0x03},
Siyuan Wangaffe85f2013-07-25 15:14:15 +080089 {PMIO_BASE >> 8, FCH_PMIOA_REG74, 0x00, BIT0 + BIT1 + BIT2 + BIT4},
90 {PMIO_BASE >> 8, 0x74 + 3, (UINT8)~BIT5, 0},
91 {PMIO_BASE >> 8, FCH_PMIOA_REGBA, (UINT8)~BIT3, BIT3},
Siyuan Wangaffe85f2013-07-25 15:14:15 +080092 {PMIO_BASE >> 8, FCH_PMIOA_REGBC, (UINT8)~BIT1, BIT1},
Siyuan Wangaffe85f2013-07-25 15:14:15 +080093 {PMIO_BASE >> 8, 0xDC, 0x7C, BIT1},
94
95 {SMI_BASE >> 8, FCH_SMI_Gevent1, 0, 1},
96 {SMI_BASE >> 8, FCH_SMI_Gevent3, 0, 3},
97 {SMI_BASE >> 8, FCH_SMI_Gevent4, 0, 4},
98 {SMI_BASE >> 8, FCH_SMI_Gevent5, 0, 5},
99 {SMI_BASE >> 8, FCH_SMI_Gevent6, 0, 6},
100 {SMI_BASE >> 8, FCH_SMI_Gevent23, 0, 23},
101 {SMI_BASE >> 8, FCH_SMI_xHC0Pme, 0, 11},
102 {SMI_BASE >> 8, FCH_SMI_xHC1Pme, 0, 11},
103 {SMI_BASE >> 8, FCH_SMI_Usbwakup0, 0, 11},
104 {SMI_BASE >> 8, FCH_SMI_Usbwakup1, 0, 11},
105 {SMI_BASE >> 8, FCH_SMI_Usbwakup2, 0, 11},
106 {SMI_BASE >> 8, FCH_SMI_Usbwakup3, 0, 11},
107 {SMI_BASE >> 8, FCH_SMI_IMCGevent0, 0, 12},
108 {SMI_BASE >> 8, FCH_SMI_FanThGevent, 0, 13},
109 {SMI_BASE >> 8, FCH_SMI_SBGppPme0, 0, 15},
110 {SMI_BASE >> 8, FCH_SMI_SBGppPme1, 0, 16},
111 {SMI_BASE >> 8, FCH_SMI_SBGppPme2, 0, 17},
112 {SMI_BASE >> 8, FCH_SMI_SBGppPme3, 0, 18},
113 {SMI_BASE >> 8, FCH_SMI_GecPme, 0, 19},
114 {SMI_BASE >> 8, FCH_SMI_CIRPme, 0, 28},
115 {SMI_BASE >> 8, FCH_SMI_Gevent8, 0, 24},
116// {SMI_BASE >> 8, FCH_SMI_AzaliaPme, 0, 27},
117 {SMI_BASE >> 8, FCH_SMI_SataGevent0, 0, 30},
118 {SMI_BASE >> 8, FCH_SMI_SataGevent1, 0, 31},
119 {SMI_BASE >> 8, FCH_SMI_REG08, 0xE7, 0},
120 {SMI_BASE >> 8, FCH_SMI_REG0C + 2, (UINT8)~BIT3, BIT3},
121 {SMI_BASE >> 8, FCH_SMI_TWARN, 0, 9},
122 {0xFF, 0xFF, 0xFF, 0xFF},
123};
124
125/**
126 * FchYangtzeInitEnvHwAcpiPciTable - PCI device registers initial
127 * during early POST.
128 *
129 */
130REG8_MASK FchYangtzeInitEnvHwAcpiPciTable[] =
131{
132 //
133 // SMBUS Device (Bus 0, Dev 20, Func 0)
134 //
135 {0x00, SMBUS_BUS_DEV_FUN, 0},
136 {FCH_CFG_REG10, 0X00, (FCH_VERSION & 0xFF)}, ///Program the version information
137 {FCH_CFG_REG11, 0X00, (FCH_VERSION >> 8)},
138 {0xFF, 0xFF, 0xFF},
139};
140
141
142/**
143 * ProgramEnvPFchAcpiMmio - Config HwAcpi MMIO registers
144 * Acpi S3 resume won't execute this procedure (POST only)
145 *
146 * @param[in] FchDataPtr Fch configuration structure pointer.
147 *
148 */
149VOID
150ProgramEnvPFchAcpiMmio (
151 IN VOID *FchDataPtr
152 )
153{
154 FCH_DATA_BLOCK *LocalCfgPtr;
155 AMD_CONFIG_PARAMS *StdHeader;
156
157 LocalCfgPtr = (FCH_DATA_BLOCK *) FchDataPtr;
158 StdHeader = LocalCfgPtr->StdHeader;
159
160 ProgramFchAcpiMmioTbl ((ACPI_REG_WRITE*) (&FchYangtzeInitEnvHwAcpiMmioTable[0]), StdHeader);
161}
162
163/**
164 * ProgramFchEnvHwAcpiPciReg - Config HwAcpi PCI controller
165 * before PCI emulation
166 *
167 *
168 *
169 * @param[in] FchDataPtr Fch configuration structure pointer.
170 *
171 */
172VOID
173ProgramFchEnvHwAcpiPciReg (
174 IN VOID *FchDataPtr
175 )
176{
177 FCH_DATA_BLOCK *LocalCfgPtr;
178 AMD_CONFIG_PARAMS *StdHeader;
179
180 LocalCfgPtr = (FCH_DATA_BLOCK *) FchDataPtr;
181 StdHeader = LocalCfgPtr->StdHeader;
182
183 //
184 //Early post initialization of pci config space
185 //
Patrick Georgi6b688f52021-02-12 13:49:11 +0100186 ProgramPciByteTable ((REG8_MASK*) (&FchYangtzeInitEnvHwAcpiPciTable[0]),
187 ARRAY_SIZE(FchYangtzeInitEnvHwAcpiPciTable), StdHeader);
Siyuan Wangaffe85f2013-07-25 15:14:15 +0800188
189 if ( LocalCfgPtr->Smbus.SmbusSsid != 0 ) {
190 RwPci ((SMBUS_BUS_DEV_FUN << 16) + FCH_CFG_REG2C, AccessWidth32, 0x00, LocalCfgPtr->Smbus.SmbusSsid, StdHeader);
191 }
WANG Siyuan7b6d4122013-07-31 16:55:26 +0800192 if ( LocalCfgPtr->Misc.NoneSioKbcSupport ) {
193 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REGED, AccessWidth8, ~(UINT32) ( BIT2 + BIT1), BIT2 + BIT1);
194 } else {
195 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REGED, AccessWidth8, ~(UINT32) ( BIT2 + BIT1), BIT2);
196 }
Siyuan Wangaffe85f2013-07-25 15:14:15 +0800197 ProgramPcieNativeMode (FchDataPtr);
198}
199
200/**
201 * FchVgaInit - Config VGA CODEC
202 *
203 * @param[in] VOID empty
204 *
205 */
206VOID
207FchVgaInit (
208 OUT VOID
209 )
210{
211}
212
213/**
214 * ProgramSpecificFchInitEnvAcpiMmio - Config HwAcpi MMIO before
215 * PCI emulation
216 *
217 *
218 *
219 * @param[in] FchDataPtr Fch configuration structure pointer.
220 *
221 */
222VOID
223ProgramSpecificFchInitEnvAcpiMmio (
224 IN VOID *FchDataPtr
225 )
226{
227 CPUID_DATA CpuId;
228 FCH_DATA_BLOCK *LocalCfgPtr;
229 AMD_CONFIG_PARAMS *StdHeader;
230
231 LocalCfgPtr = (FCH_DATA_BLOCK *) FchDataPtr;
232 StdHeader = LocalCfgPtr->StdHeader;
233
234 ProgramFchAcpiMmioTbl ((ACPI_REG_WRITE*) (&FchYangtzeInitEnvSpecificHwAcpiMmioTable[0]), StdHeader);
235
236 LibAmdCpuidRead (AMD_CPUID_APICID_LPC_BID, &CpuId, StdHeader);
237
238 if ((LocalCfgPtr->HwAcpi.AnyHt200MhzLink) || ((CpuId.EAX_Reg & 0x00ff00f0) == 0x100080) || ((CpuId.EAX_Reg & 0x00ff00f0) == 0x100090) || ((CpuId.EAX_Reg & 0x00ff00f0) == 0x1000A0)) {
239 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REG94, AccessWidth8, 0, 0x0A);
240 RwMem (ACPI_MMIO_BASE + PMIO_BASE + 0x80 + 3, AccessWidth8, 0xFE, 0x28);
241 } else {
242 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REG94, AccessWidth8, 0, 0x01);
243 RwMem (ACPI_MMIO_BASE + PMIO_BASE + 0x80 + 3, AccessWidth8, 0xFE, 0x20);
244 }
245 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG6C + 2, AccessWidth8, 0x5F, 0xA0);
246 //
247 // Ac Loss Control
248 //
249 AcLossControl ((UINT8) LocalCfgPtr->HwAcpi.PwrFailShadow);
250 //
251 // FCH VGA Init
252 //
253 FchVgaInit ();
254
255 //
256 // Set ACPIMMIO by OEM Input table
257 //
258 ProgramFchAcpiMmioTbl ((ACPI_REG_WRITE *) (LocalCfgPtr->HwAcpi.OemProgrammingTablePtr), StdHeader);
259}
260
261/**
262 * ValidateFchVariant - Validate FCH Variant
263 *
264 *
265 *
266 * @param[in] FchDataPtr
267 *
268 */
269VOID
270ValidateFchVariant (
271 IN VOID *FchDataPtr
272 )
273{
274 CPUID_DATA CpuId;
275 FCH_DATA_BLOCK *LocalCfgPtr;
276 AMD_CONFIG_PARAMS *StdHeader;
277
278 LocalCfgPtr = (FCH_DATA_BLOCK *) FchDataPtr;
279 StdHeader = LocalCfgPtr->StdHeader;
280 LibAmdCpuidRead (CPUID_FMF, &CpuId, StdHeader);
281 LocalCfgPtr->Misc.FchCpuId = ( UINT32 ) (CpuId.EAX_Reg & 0xFFFFFFFF);
282}
283
284/**
285 * IsExternalClockMode - Is External Clock Mode?
286 *
287 *
288 * @retval TRUE or FALSE
289 *
290 */
291BOOLEAN
292IsExternalClockMode (
293 IN VOID *FchDataPtr
294 )
295{
296 UINT8 MISC80;
297 ReadMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG80 + 2, AccessWidth8, &MISC80);
298 return ( (BOOLEAN) ((MISC80 & BIT1) == 0) );
299}
300
301
302/**
303 * ProgramFchEnvSpreadSpectrum - Config SpreadSpectrum before
304 * PCI emulation
305 *
306 *
307 *
308 * @param[in] FchDataPtr Fch configuration structure pointer.
309 *
310 */
311VOID
312ProgramFchEnvSpreadSpectrum (
313 IN VOID *FchDataPtr
314 )
315{
316 UINT8 PortStatus;
317 UINT8 FchSpreadSpectrum;
318
319 FCH_DATA_BLOCK *LocalCfgPtr;
320 AMD_CONFIG_PARAMS *StdHeader;
321
322 LocalCfgPtr = (FCH_DATA_BLOCK *) FchDataPtr;
323 StdHeader = LocalCfgPtr->StdHeader;
324
325 FchSpreadSpectrum = LocalCfgPtr->HwAcpi.SpreadSpectrum;
326
327 if ( FchSpreadSpectrum ) {
328 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG08, AccessWidth8, 0xFE, 0x00);
329 if ( LocalCfgPtr->HwAcpi.SpreadSpectrumOptions == 0 ) {
330 /// -0.362%
331 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG18 + 1, AccessWidth8, 0xF0, 0x01);
332 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14 + 2, AccessWidth16, 0, 0xCF5C);
333 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14, AccessWidth16, 0, 0x0137);
334 }
335 if ( LocalCfgPtr->HwAcpi.SpreadSpectrumOptions == 1 ) {
336 /// -0.375%
337 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG18 + 1, AccessWidth8, 0xF0, 0x01);
338 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14 + 2, AccessWidth16, 0, 0xE000);
339 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14, AccessWidth16, 0, 0x0142);
340 }
341 if ( LocalCfgPtr->HwAcpi.SpreadSpectrumOptions == 2 ) {
342 /// -0.4%
343 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG18 + 1, AccessWidth8, 0xF0, 0x02);
344 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14 + 2, AccessWidth16, 0, 0);
345 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14, AccessWidth16, 0, 0x0158);
346 }
347 if ( LocalCfgPtr->HwAcpi.SpreadSpectrumOptions == 3 ) {
348 /// -0.425%
349 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG18 + 1, AccessWidth8, 0xF0, 0x02);
350 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14 + 2, AccessWidth16, 0, 0x1FFF);
351 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14, AccessWidth16, 0, 0x016D);
352 }
353 if ( LocalCfgPtr->HwAcpi.SpreadSpectrumOptions == 4 ) {
354 /// -0.45%
355 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG18 + 1, AccessWidth8, 0xF0, 0x02);
356 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14 + 2, AccessWidth16, 0, 0x4000);
357 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14, AccessWidth16, 0, 0x0183);
358 }
359 if ( LocalCfgPtr->HwAcpi.SpreadSpectrumOptions == 5 ) {
360 /// -0.475%
361 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG18 + 1, AccessWidth8, 0xF0, 0x02);
362 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14 + 2, AccessWidth16, 0, 0x6000);
363 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG14, AccessWidth16, 0, 0x0198);
364 }
365 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG08, AccessWidth8, 0xFE, BIT0);
366 } else {
367 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG08, AccessWidth8, 0xFE, 0x00);
368 }
369
370 //
371 // PLL 100Mhz Reference Clock Buffer setting for internal clock generator mode (BIT5)
372 // OSC Clock setting for internal clock generator mode (BIT6)
373 //
374 GetChipSysMode (&PortStatus, StdHeader);
375 if ( ((PortStatus & ChipSysIntClkGen) == ChipSysIntClkGen) ) {
376 RwMem (ACPI_MMIO_BASE + MISC_BASE + FCH_MISC_REG04 + 1, AccessWidth8, (UINT32)~(BIT5 + BIT6), BIT5 + BIT6);
377 }
378}
379
380/**
381 * TurnOffCG2
382 *
383 *
384 * @retval VOID
385 *
386 */
387VOID
388TurnOffCG2 (
389 OUT VOID
390 )
391{
392}
393
394/**
395 * BackUpCG2
396 *
397 *
398 * @retval VOID
399 *
400 */
401VOID
402BackUpCG2 (
403 OUT VOID
404 )
405{
406}
407
408/**
409 * HpetInit - Program Fch HPET function
410 *
411 *
412 *
413 * @param[in] FchDataPtr Fch configuration structure pointer.
414 *
415 */
416VOID
417HpetInit (
418 IN VOID *FchDataPtr
419 )
420{
421 DESCRIPTION_HEADER *HpetTable;
422 UINT8 FchHpetTimer;
423 UINT8 FchHpetMsiDis;
424 FCH_DATA_BLOCK *LocalCfgPtr;
425
426 LocalCfgPtr = (FCH_DATA_BLOCK *) FchDataPtr;
427 FchHpetTimer = (UINT8) LocalCfgPtr->Hpet.HpetEnable;
428 FchHpetMsiDis = (UINT8) LocalCfgPtr->Hpet.HpetMsiDis;
429
430 HpetTable = NULL;
431 if ( FchHpetTimer == TRUE ) {
432 //
433 //Program the HPET BAR address
434 //
435 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REG50, AccessWidth32, FCH_HPET_REG_MASK, LocalCfgPtr->Hpet.HpetBase);
436
437 //
438 //Enabling decoding of HPET MMIO
439 //Enable HPET MSI support
440 //Enable High Precision Event Timer (also called Multimedia Timer) interrupt
441 //
442 if ( FchHpetMsiDis == FALSE ) {
443 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REG50, AccessWidth32, FCH_HPET_REG_MASK, BIT0 + BIT1 + BIT2 + BIT3 + BIT4);
444#ifdef FCH_TIMER_TICK_INTERVAL_WA
445 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REG50, AccessWidth32, FCH_HPET_REG_MASK, BIT0 + BIT1);
446#endif
447 } else {
448 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REG50, AccessWidth32, FCH_HPET_REG_MASK, BIT0 + BIT1);
449 }
450
451 } else {
452 if ( ! (LocalCfgPtr->Misc.S3Resume) ) {
453 HpetTable = (DESCRIPTION_HEADER*) AcpiLocateTable (Int32FromChar('H','P','E','T'));//'TEPH'
454 }
455 if ( HpetTable != NULL ) {
456 HpetTable->Signature = Int32FromChar('T','E','P','H');//'HPET'
457 }
458 }
459}
460
461/**
462 * ProgramPcieNativeMode - Config Pcie Native Mode
463 *
464 *
465 *
466 * @param[in] FchDataPtr Fch configuration structure pointer.
467 *
468 */
469VOID
470ProgramPcieNativeMode (
471 IN VOID *FchDataPtr
472 )
473{
474 UINT8 FchNativepciesupport;
475 FCH_DATA_BLOCK *LocalCfgPtr;
476
477 LocalCfgPtr = (FCH_DATA_BLOCK *) FchDataPtr;
478 FchNativepciesupport = (UINT8) LocalCfgPtr->Misc.NativePcieSupport;
479
480 //
481 // PCIE Native setting
482 //
483 RwMem (ACPI_MMIO_BASE + PMIO_BASE + FCH_PMIOA_REGBA + 1, AccessWidth8, (UINT32)~BIT6, 0);
484 if ( FchNativepciesupport == 1) {
485 RwMem (ACPI_MMIO_BASE + PMIO_BASE + 0x74 + 3, AccessWidth8, (UINT32)~(BIT3 + BIT1 + BIT0), BIT3 + BIT0);
486 } else {
487 RwMem (ACPI_MMIO_BASE + PMIO_BASE + 0x74 + 3, AccessWidth8, (UINT32)~(BIT3 + BIT1 + BIT0), BIT3);
488 }
489}