2 * This file is part of the coreboot project.
4 * Copyright (C) 2012 - 2014 Advanced Micro Devices, Inc.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
18 #include <cpu/amd/pi/s3_resume.h>
19 #include <cpu/x86/mtrr.h>
20 #include <cpuRegisters.h>
21 #include <FchPlatform.h>
22 #include <heapManager.h>
23 #include <northbridge/amd/pi/agesawrapper.h>
24 #include <northbridge/amd/pi/BiosCallOuts.h>
26 VOID
FchInitS3LateRestore (IN FCH_DATA_BLOCK
*FchDataPtr
);
27 VOID
FchInitS3EarlyRestore (IN FCH_DATA_BLOCK
*FchDataPtr
);
29 #define FILECODE UNASSIGNED_FILE_FILECODE
32 /* ACPI table pointers returned by AmdInitLate */
33 static void *DmiTable
= NULL
;
34 static void *AcpiPstate
= NULL
;
35 static void *AcpiSrat
= NULL
;
36 static void *AcpiSlit
= NULL
;
38 static void *AcpiWheaMce
= NULL
;
39 static void *AcpiWheaCmc
= NULL
;
40 static void *AcpiAlib
= NULL
;
41 static void *AcpiIvrs
= NULL
;
42 static void *AcpiCrat
= NULL
;
43 #endif /* #ifndef __PRE_RAM__ */
45 AGESA_STATUS
agesawrapper_amdinitreset(void)
48 AMD_INTERFACE_PARAMS AmdParamStruct
;
49 AMD_RESET_PARAMS AmdResetParams
;
51 LibAmdMemFill (&AmdParamStruct
,
53 sizeof (AMD_INTERFACE_PARAMS
),
54 &(AmdParamStruct
.StdHeader
));
56 LibAmdMemFill (&AmdResetParams
,
58 sizeof (AMD_RESET_PARAMS
),
59 &(AmdResetParams
.StdHeader
));
61 AmdParamStruct
.AgesaFunctionName
= AMD_INIT_RESET
;
62 AmdParamStruct
.AllocationMethod
= ByHost
;
63 AmdParamStruct
.NewStructSize
= sizeof(AMD_RESET_PARAMS
);
64 AmdParamStruct
.NewStructPtr
= &AmdResetParams
;
65 AmdParamStruct
.StdHeader
.AltImageBasePtr
= 0;
66 AmdParamStruct
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
67 AmdParamStruct
.StdHeader
.Func
= 0;
68 AmdParamStruct
.StdHeader
.ImageBasePtr
= 0;
69 AmdCreateStruct (&AmdParamStruct
);
71 AmdResetParams
.FchInterface
.Xhci0Enable
= IS_ENABLED(CONFIG_HUDSON_XHCI_ENABLE
);
72 if (IS_ENABLED(CONFIG_SOUTHBRIDGE_AMD_PI_BOLTON
))
73 AmdResetParams
.FchInterface
.Xhci1Enable
= TRUE
;
75 AmdResetParams
.FchInterface
.SataEnable
= !((CONFIG_HUDSON_SATA_MODE
== 0) || (CONFIG_HUDSON_SATA_MODE
== 3));
76 AmdResetParams
.FchInterface
.IdeEnable
= (CONFIG_HUDSON_SATA_MODE
== 0) || (CONFIG_HUDSON_SATA_MODE
== 3);
78 status
= AmdInitReset(&AmdResetParams
);
79 if (status
!= AGESA_SUCCESS
) agesawrapper_amdreadeventlog(AmdParamStruct
.StdHeader
.HeapStatus
);
80 AmdReleaseStruct (&AmdParamStruct
);
84 AGESA_STATUS
agesawrapper_amdinitearly(void)
87 AMD_INTERFACE_PARAMS AmdParamStruct
;
88 AMD_EARLY_PARAMS
*AmdEarlyParamsPtr
;
90 LibAmdMemFill (&AmdParamStruct
,
92 sizeof (AMD_INTERFACE_PARAMS
),
93 &(AmdParamStruct
.StdHeader
));
95 AmdParamStruct
.AgesaFunctionName
= AMD_INIT_EARLY
;
96 AmdParamStruct
.AllocationMethod
= PreMemHeap
;
97 AmdParamStruct
.StdHeader
.AltImageBasePtr
= 0;
98 AmdParamStruct
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
99 AmdParamStruct
.StdHeader
.Func
= 0;
100 AmdParamStruct
.StdHeader
.ImageBasePtr
= 0;
101 AmdCreateStruct (&AmdParamStruct
);
103 AmdEarlyParamsPtr
= (AMD_EARLY_PARAMS
*)AmdParamStruct
.NewStructPtr
;
104 OemCustomizeInitEarly (AmdEarlyParamsPtr
);
106 AmdEarlyParamsPtr
->GnbConfig
.PsppPolicy
= PsppDisabled
;
107 status
= AmdInitEarly ((AMD_EARLY_PARAMS
*)AmdParamStruct
.NewStructPtr
);
108 if (status
!= AGESA_SUCCESS
) agesawrapper_amdreadeventlog(AmdParamStruct
.StdHeader
.HeapStatus
);
109 AmdReleaseStruct (&AmdParamStruct
);
114 AGESA_STATUS
agesawrapper_amdinitpost(void)
117 AMD_INTERFACE_PARAMS AmdParamStruct
;
118 AMD_POST_PARAMS
*PostParams
;
120 LibAmdMemFill (&AmdParamStruct
,
122 sizeof (AMD_INTERFACE_PARAMS
),
123 &(AmdParamStruct
.StdHeader
));
125 AmdParamStruct
.AgesaFunctionName
= AMD_INIT_POST
;
126 AmdParamStruct
.AllocationMethod
= PreMemHeap
;
127 AmdParamStruct
.StdHeader
.AltImageBasePtr
= NULL
;
128 AmdParamStruct
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
129 AmdParamStruct
.StdHeader
.Func
= 0;
130 AmdParamStruct
.StdHeader
.ImageBasePtr
= 0;
132 AmdCreateStruct (&AmdParamStruct
);
133 PostParams
= (AMD_POST_PARAMS
*)AmdParamStruct
.NewStructPtr
;
135 // Do not use IS_ENABLED here. CONFIG_GFXUMA should always have a value. Allow
136 // the compiler to flag the error if CONFIG_GFXUMA is not set.
137 PostParams
->MemConfig
.UmaMode
= CONFIG_GFXUMA
? UMA_AUTO
: UMA_NONE
;
138 PostParams
->MemConfig
.UmaSize
= 0;
139 PostParams
->MemConfig
.BottomIo
= (UINT16
)(0xD0000000 >> 24);
140 status
= AmdInitPost (PostParams
);
143 "setup_uma_memory: umamode %s\n",
144 (PostParams
->MemConfig
.UmaMode
== UMA_AUTO
) ? "UMA_AUTO" :
145 (PostParams
->MemConfig
.UmaMode
== UMA_SPECIFIED
) ? "UMA_SPECIFIED" :
146 (PostParams
->MemConfig
.UmaMode
== UMA_NONE
) ? "UMA_NONE" :
151 "setup_uma_memory: syslimit 0x%08llX, bottomio 0x%08lx\n",
152 (unsigned long long)(PostParams
->MemConfig
.SysLimit
) << 16,
153 (unsigned long)(PostParams
->MemConfig
.BottomIo
) << 16
157 "setup_uma_memory: uma size %luMB, uma start 0x%08lx\n",
158 (unsigned long)(PostParams
->MemConfig
.UmaSize
) >> (20 - 16),
159 (unsigned long)(PostParams
->MemConfig
.UmaBase
) << 16
162 if (status
!= AGESA_SUCCESS
) agesawrapper_amdreadeventlog(PostParams
->StdHeader
.HeapStatus
);
163 AmdReleaseStruct (&AmdParamStruct
);
164 /* Initialize heap space */
170 AGESA_STATUS
agesawrapper_amdinitenv(void)
173 AMD_INTERFACE_PARAMS AmdParamStruct
;
174 AMD_ENV_PARAMS
*EnvParam
;
176 LibAmdMemFill (&AmdParamStruct
,
178 sizeof (AMD_INTERFACE_PARAMS
),
179 &(AmdParamStruct
.StdHeader
));
181 AmdParamStruct
.AgesaFunctionName
= AMD_INIT_ENV
;
182 AmdParamStruct
.AllocationMethod
= PostMemDram
;
183 AmdParamStruct
.StdHeader
.AltImageBasePtr
= 0;
184 AmdParamStruct
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
185 AmdParamStruct
.StdHeader
.Func
= 0;
186 AmdParamStruct
.StdHeader
.ImageBasePtr
= 0;
187 status
= AmdCreateStruct (&AmdParamStruct
);
188 EnvParam
= (AMD_ENV_PARAMS
*)AmdParamStruct
.NewStructPtr
;
190 EnvParam
->FchInterface
.AzaliaController
= AzEnable
;
191 EnvParam
->FchInterface
.SataClass
= CONFIG_HUDSON_SATA_MODE
;
192 EnvParam
->FchInterface
.SataEnable
= !((CONFIG_HUDSON_SATA_MODE
== 0) || (CONFIG_HUDSON_SATA_MODE
== 3));
193 EnvParam
->FchInterface
.IdeEnable
= (CONFIG_HUDSON_SATA_MODE
== 0) || (CONFIG_HUDSON_SATA_MODE
== 3);
194 EnvParam
->FchInterface
.SataIdeMode
= (CONFIG_HUDSON_SATA_MODE
== 3);
195 EnvParam
->GnbEnvConfiguration
.IommuSupport
= FALSE
;
197 status
= AmdInitEnv (EnvParam
);
198 if (status
!= AGESA_SUCCESS
) agesawrapper_amdreadeventlog(EnvParam
->StdHeader
.HeapStatus
);
199 /* Initialize Subordinate Bus Number and Secondary Bus Number
200 * In platform BIOS this address is allocated by PCI enumeration code
208 VOID
* agesawrapper_getlateinitptr (int pick
)
233 #endif /* #ifndef __PRE_RAM__ */
235 AGESA_STATUS
agesawrapper_amdinitmid(void)
238 AMD_INTERFACE_PARAMS AmdParamStruct
;
239 AMD_MID_PARAMS
*MidParam
;
241 /* Enable MMIO on AMD CPU Address Map Controller */
244 LibAmdMemFill (&AmdParamStruct
,
246 sizeof (AMD_INTERFACE_PARAMS
),
247 &(AmdParamStruct
.StdHeader
));
249 AmdParamStruct
.AgesaFunctionName
= AMD_INIT_MID
;
250 AmdParamStruct
.AllocationMethod
= PostMemDram
;
251 AmdParamStruct
.StdHeader
.AltImageBasePtr
= 0;
252 AmdParamStruct
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
253 AmdParamStruct
.StdHeader
.Func
= 0;
254 AmdParamStruct
.StdHeader
.ImageBasePtr
= 0;
256 AmdCreateStruct (&AmdParamStruct
);
257 MidParam
= (AMD_MID_PARAMS
*)AmdParamStruct
.NewStructPtr
;
259 MidParam
->GnbMidConfiguration
.iGpuVgaMode
= 0;/* 0 iGpuVgaAdapter, 1 iGpuVgaNonAdapter; */
260 MidParam
->GnbMidConfiguration
.GnbIoapicAddress
= 0xFEC20000;
262 MidParam
->FchInterface
.AzaliaController
= AzEnable
;
263 MidParam
->FchInterface
.SataClass
= CONFIG_HUDSON_SATA_MODE
;
264 MidParam
->FchInterface
.SataEnable
= !((CONFIG_HUDSON_SATA_MODE
== 0) || (CONFIG_HUDSON_SATA_MODE
== 3));
265 MidParam
->FchInterface
.IdeEnable
= (CONFIG_HUDSON_SATA_MODE
== 0) || (CONFIG_HUDSON_SATA_MODE
== 3);
266 MidParam
->FchInterface
.SataIdeMode
= (CONFIG_HUDSON_SATA_MODE
== 3);
268 status
= AmdInitMid ((AMD_MID_PARAMS
*)AmdParamStruct
.NewStructPtr
);
269 if (status
!= AGESA_SUCCESS
) agesawrapper_amdreadeventlog(AmdParamStruct
.StdHeader
.HeapStatus
);
270 AmdReleaseStruct (&AmdParamStruct
);
276 AGESA_STATUS
agesawrapper_amdinitlate(void)
279 AMD_INTERFACE_PARAMS AmdParamStruct
;
280 AMD_LATE_PARAMS
*AmdLateParams
;
282 LibAmdMemFill (&AmdParamStruct
,
284 sizeof (AMD_INTERFACE_PARAMS
),
285 &(AmdParamStruct
.StdHeader
));
287 AmdParamStruct
.AgesaFunctionName
= AMD_INIT_LATE
;
288 AmdParamStruct
.AllocationMethod
= PostMemDram
;
289 AmdParamStruct
.StdHeader
.AltImageBasePtr
= 0;
290 AmdParamStruct
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
291 AmdParamStruct
.StdHeader
.HeapStatus
= HEAP_SYSTEM_MEM
;
292 AmdParamStruct
.StdHeader
.Func
= 0;
293 AmdParamStruct
.StdHeader
.ImageBasePtr
= 0;
295 /* NOTE: if not call amdcreatestruct, the initializer(AmdInitLateInitializer) would not be called */
296 AmdCreateStruct(&AmdParamStruct
);
297 AmdLateParams
= (AMD_LATE_PARAMS
*)AmdParamStruct
.NewStructPtr
;
298 Status
= AmdInitLate(AmdLateParams
);
299 if (Status
!= AGESA_SUCCESS
) {
300 agesawrapper_amdreadeventlog(AmdLateParams
->StdHeader
.HeapStatus
);
301 ASSERT(Status
== AGESA_SUCCESS
);
304 DmiTable
= AmdLateParams
->DmiTable
;
305 AcpiPstate
= AmdLateParams
->AcpiPState
;
306 #if IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_PI_00630F01) || IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_PI_00730F01)
307 AcpiSrat
= AmdLateParams
->AcpiSrat
;
308 AcpiSlit
= AmdLateParams
->AcpiSlit
;
311 AcpiWheaMce
= AmdLateParams
->AcpiWheaMce
;
312 AcpiWheaCmc
= AmdLateParams
->AcpiWheaCmc
;
313 AcpiAlib
= AmdLateParams
->AcpiAlib
;
314 AcpiIvrs
= AmdLateParams
->AcpiIvrs
;
315 AcpiCrat
= AmdLateParams
->AcpiCrat
;
317 printk(BIOS_DEBUG
, "DmiTable:%x, AcpiPstatein: %x, AcpiSrat:%x,"
318 "AcpiSlit:%x, Mce:%x, Cmc:%x,"
319 "Alib:%x, AcpiIvrs:%x in %s\n",
320 (unsigned int)DmiTable
, (unsigned int)AcpiPstate
, (unsigned int)AcpiSrat
,
321 (unsigned int)AcpiSlit
, (unsigned int)AcpiWheaMce
, (unsigned int)AcpiWheaCmc
,
322 (unsigned int)AcpiAlib
, (unsigned int)AcpiIvrs
, __func__
);
324 /* AmdReleaseStruct (&AmdParamStruct); */
327 #endif /* #ifndef __PRE_RAM__ */
329 AGESA_STATUS
agesawrapper_amdlaterunaptask (
336 AP_EXE_PARAMS ApExeParams
;
338 LibAmdMemFill (&ApExeParams
,
340 sizeof (AP_EXE_PARAMS
),
341 &(ApExeParams
.StdHeader
));
343 ApExeParams
.StdHeader
.AltImageBasePtr
= 0;
344 ApExeParams
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
345 ApExeParams
.StdHeader
.Func
= 0;
346 ApExeParams
.StdHeader
.ImageBasePtr
= 0;
347 ApExeParams
.FunctionNumber
= Func
;
348 ApExeParams
.RelatedDataBlock
= ConfigPtr
;
350 Status
= AmdLateRunApTask (&ApExeParams
);
351 if (Status
!= AGESA_SUCCESS
) {
352 /* agesawrapper_amdreadeventlog(); */
353 ASSERT(Status
== AGESA_SUCCESS
);
359 #if CONFIG_HAVE_ACPI_RESUME
361 AGESA_STATUS
agesawrapper_amdinitresume(void)
364 AMD_INTERFACE_PARAMS AmdParamStruct
;
365 AMD_RESUME_PARAMS
*AmdResumeParamsPtr
;
366 S3_DATA_TYPE S3DataType
;
368 LibAmdMemFill (&AmdParamStruct
,
370 sizeof (AMD_INTERFACE_PARAMS
),
371 &(AmdParamStruct
.StdHeader
));
373 AmdParamStruct
.AgesaFunctionName
= AMD_INIT_RESUME
;
374 AmdParamStruct
.AllocationMethod
= PreMemHeap
;
375 AmdParamStruct
.StdHeader
.AltImageBasePtr
= 0;
376 AmdParamStruct
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
377 AmdParamStruct
.StdHeader
.Func
= 0;
378 AmdParamStruct
.StdHeader
.ImageBasePtr
= 0;
379 AmdCreateStruct (&AmdParamStruct
);
381 AmdResumeParamsPtr
= (AMD_RESUME_PARAMS
*)AmdParamStruct
.NewStructPtr
;
383 AmdResumeParamsPtr
->S3DataBlock
.NvStorageSize
= 0;
384 AmdResumeParamsPtr
->S3DataBlock
.VolatileStorageSize
= 0;
385 S3DataType
= S3DataTypeNonVolatile
;
386 OemAgesaGetS3Info (S3DataType
,
387 (u32
*) &AmdResumeParamsPtr
->S3DataBlock
.NvStorageSize
,
388 (void **) &AmdResumeParamsPtr
->S3DataBlock
.NvStorage
);
390 status
= AmdInitResume ((AMD_RESUME_PARAMS
*)AmdParamStruct
.NewStructPtr
);
392 if (status
!= AGESA_SUCCESS
) agesawrapper_amdreadeventlog(AmdParamStruct
.StdHeader
.HeapStatus
);
393 AmdReleaseStruct (&AmdParamStruct
);
399 AGESA_STATUS
agesawrapper_fchs3earlyrestore(void)
401 AGESA_STATUS status
= AGESA_SUCCESS
;
403 FCH_DATA_BLOCK FchParams
;
404 AMD_CONFIG_PARAMS StdHeader
;
406 StdHeader
.HeapStatus
= HEAP_SYSTEM_MEM
;
407 StdHeader
.HeapBasePtr
= GetHeapBase(&StdHeader
) + 0x10;
408 StdHeader
.AltImageBasePtr
= 0;
409 StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
411 StdHeader
.ImageBasePtr
= 0;
413 LibAmdMemFill (&FchParams
,
418 FchParams
.StdHeader
= &StdHeader
;
419 s3_resume_init_data(&FchParams
);
421 FchInitS3EarlyRestore(&FchParams
);
425 #endif /* #ifndef __PRE_RAM__ */
427 AGESA_STATUS
agesawrapper_amds3laterestore(void)
430 AMD_INTERFACE_PARAMS AmdInterfaceParams
;
431 AMD_S3LATE_PARAMS AmdS3LateParams
;
432 AMD_S3LATE_PARAMS
*AmdS3LateParamsPtr
;
433 S3_DATA_TYPE S3DataType
;
435 agesawrapper_amdinitcpuio();
436 LibAmdMemFill (&AmdS3LateParams
,
438 sizeof (AMD_S3LATE_PARAMS
),
439 &(AmdS3LateParams
.StdHeader
));
440 AmdInterfaceParams
.StdHeader
.ImageBasePtr
= 0;
441 AmdInterfaceParams
.AllocationMethod
= ByHost
;
442 AmdInterfaceParams
.AgesaFunctionName
= AMD_S3LATE_RESTORE
;
443 AmdInterfaceParams
.NewStructPtr
= &AmdS3LateParams
;
444 AmdInterfaceParams
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
445 AmdS3LateParamsPtr
= &AmdS3LateParams
;
446 AmdInterfaceParams
.NewStructSize
= sizeof (AMD_S3LATE_PARAMS
);
448 AmdCreateStruct (&AmdInterfaceParams
);
450 AmdS3LateParamsPtr
->S3DataBlock
.VolatileStorageSize
= 0;
451 S3DataType
= S3DataTypeVolatile
;
453 OemAgesaGetS3Info (S3DataType
,
454 (u32
*) &AmdS3LateParamsPtr
->S3DataBlock
.VolatileStorageSize
,
455 (void **) &AmdS3LateParamsPtr
->S3DataBlock
.VolatileStorage
);
457 Status
= AmdS3LateRestore (AmdS3LateParamsPtr
);
458 if (Status
!= AGESA_SUCCESS
) {
459 agesawrapper_amdreadeventlog(AmdInterfaceParams
.StdHeader
.HeapStatus
);
460 ASSERT(Status
== AGESA_SUCCESS
);
468 AGESA_STATUS
agesawrapper_fchs3laterestore(void)
470 AGESA_STATUS status
= AGESA_SUCCESS
;
472 AMD_CONFIG_PARAMS StdHeader
;
473 FCH_DATA_BLOCK FchParams
;
475 StdHeader
.HeapStatus
= HEAP_SYSTEM_MEM
;
476 StdHeader
.HeapBasePtr
= GetHeapBase(&StdHeader
) + 0x10;
477 StdHeader
.AltImageBasePtr
= 0;
478 StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
480 StdHeader
.ImageBasePtr
= 0;
482 LibAmdMemFill (&FchParams
,
487 FchParams
.StdHeader
= &StdHeader
;
488 s3_resume_init_data(&FchParams
);
489 FchInitS3LateRestore(&FchParams
);
491 /* PIC IRQ routine */
492 for (byte
= 0x0; byte
< sizeof(picr_data
); byte
++) {
494 outb(picr_data
[byte
], 0xC01);
497 /* APIC IRQ routine */
498 for (byte
= 0x0; byte
< sizeof(intr_data
); byte
++) {
499 outb(byte
| 0x80, 0xC00);
500 outb(intr_data
[byte
], 0xC01);
506 AGESA_STATUS
agesawrapper_amdS3Save(void)
509 AMD_S3SAVE_PARAMS
*AmdS3SaveParamsPtr
;
510 AMD_INTERFACE_PARAMS AmdInterfaceParams
;
511 S3_DATA_TYPE S3DataType
;
513 LibAmdMemFill (&AmdInterfaceParams
,
515 sizeof (AMD_INTERFACE_PARAMS
),
516 &(AmdInterfaceParams
.StdHeader
));
518 AmdInterfaceParams
.StdHeader
.ImageBasePtr
= 0;
519 AmdInterfaceParams
.StdHeader
.HeapStatus
= HEAP_SYSTEM_MEM
;
520 AmdInterfaceParams
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
521 AmdInterfaceParams
.AllocationMethod
= PostMemDram
;
522 AmdInterfaceParams
.AgesaFunctionName
= AMD_S3_SAVE
;
523 AmdInterfaceParams
.StdHeader
.AltImageBasePtr
= 0;
524 AmdInterfaceParams
.StdHeader
.Func
= 0;
526 AmdCreateStruct(&AmdInterfaceParams
);
527 AmdS3SaveParamsPtr
= (AMD_S3SAVE_PARAMS
*)AmdInterfaceParams
.NewStructPtr
;
528 AmdS3SaveParamsPtr
->StdHeader
= AmdInterfaceParams
.StdHeader
;
530 Status
= AmdS3Save(AmdS3SaveParamsPtr
);
531 if (Status
!= AGESA_SUCCESS
) {
532 agesawrapper_amdreadeventlog(AmdInterfaceParams
.StdHeader
.HeapStatus
);
533 ASSERT(Status
== AGESA_SUCCESS
);
536 S3DataType
= S3DataTypeNonVolatile
;
537 printk(BIOS_DEBUG
, "NvStorageSize=%x, NvStorage=%x\n",
538 (unsigned int)AmdS3SaveParamsPtr
->S3DataBlock
.NvStorageSize
,
539 (unsigned int)AmdS3SaveParamsPtr
->S3DataBlock
.NvStorage
);
541 Status
= OemAgesaSaveS3Info (
543 AmdS3SaveParamsPtr
->S3DataBlock
.NvStorageSize
,
544 AmdS3SaveParamsPtr
->S3DataBlock
.NvStorage
);
546 printk(BIOS_DEBUG
, "VolatileStorageSize=%x, VolatileStorage=%x\n",
547 (unsigned int)AmdS3SaveParamsPtr
->S3DataBlock
.VolatileStorageSize
,
548 (unsigned int)AmdS3SaveParamsPtr
->S3DataBlock
.VolatileStorage
);
550 if (AmdS3SaveParamsPtr
->S3DataBlock
.VolatileStorageSize
!= 0) {
551 S3DataType
= S3DataTypeVolatile
;
553 Status
= OemAgesaSaveS3Info (
555 AmdS3SaveParamsPtr
->S3DataBlock
.VolatileStorageSize
,
556 AmdS3SaveParamsPtr
->S3DataBlock
.VolatileStorage
);
560 AmdReleaseStruct (&AmdInterfaceParams
);
565 #endif /* #ifndef __PRE_RAM__ */
566 #endif /* CONFIG_HAVE_ACPI_RESUME */
568 AGESA_STATUS
agesawrapper_amdreadeventlog (UINT8 HeapStatus
)
571 EVENT_PARAMS AmdEventParams
;
573 LibAmdMemFill (&AmdEventParams
,
575 sizeof (EVENT_PARAMS
),
576 &(AmdEventParams
.StdHeader
));
578 AmdEventParams
.StdHeader
.AltImageBasePtr
= 0;
579 AmdEventParams
.StdHeader
.CalloutPtr
= (CALLOUT_ENTRY
) &GetBiosCallout
;
580 AmdEventParams
.StdHeader
.Func
= 0;
581 AmdEventParams
.StdHeader
.ImageBasePtr
= 0;
582 AmdEventParams
.StdHeader
.HeapStatus
= HeapStatus
;
583 Status
= AmdReadEventLog (&AmdEventParams
);
584 while (AmdEventParams
.EventClass
!= 0) {
585 printk(BIOS_DEBUG
,"\nEventLog: EventClass = %x, EventInfo = %x.\n", (unsigned int)AmdEventParams
.EventClass
,(unsigned int)AmdEventParams
.EventInfo
);
586 printk(BIOS_DEBUG
," Param1 = %x, Param2 = %x.\n",(unsigned int)AmdEventParams
.DataParam1
, (unsigned int)AmdEventParams
.DataParam2
);
587 printk(BIOS_DEBUG
," Param3 = %x, Param4 = %x.\n",(unsigned int)AmdEventParams
.DataParam3
, (unsigned int)AmdEventParams
.DataParam4
);
588 Status
= AmdReadEventLog (&AmdEventParams
);
594 const void *agesawrapper_locate_module (const CHAR8 name
[8])
597 const AMD_IMAGE_HEADER
* image
;
598 const AMD_MODULE_HEADER
* module
;
601 agesa
= cbfs_boot_map_with_leak((const char *)CONFIG_CBFS_AGESA_NAME
,
602 CBFS_TYPE_RAW
, &file_size
);
605 image
= LibAmdLocateImage(agesa
, agesa
+ file_size
- 1, 4096, name
);
606 module
= (AMD_MODULE_HEADER
*)image
->ModuleInfoOffset
;