blob: 32036bf68b8e76a43f5e0ef3dc8c7c7eb9f6e8e2 [file] [log] [blame]
Marc Jones9ef6e522016-09-20 20:16:20 -06001/* $NoKeywords:$ */
2/**
3 * @file
4 *
5 * Agesa structures and definitions
6 *
7 * Contains AMD AGESA core interface
8 *
9 * @xrefitem bom "File Content Label" "Release Content"
10 * @e project: AGESA
11 * @e sub-project: Include
12 * @e \$Revision: 85818 $ @e \$Date: 2013-01-11 17:04:21 -0600 (Fri, 11 Jan 2013) $
13 */
14/*****************************************************************************
15 *
16 * Copyright (c) 2008 - 2013, Advanced Micro Devices, Inc.
17 * All rights reserved.
18 *
19 * Redistribution and use in source and binary forms, with or without
20 * modification, are permitted provided that the following conditions are met:
21 * * Redistributions of source code must retain the above copyright
22 * notice, this list of conditions and the following disclaimer.
23 * * Redistributions in binary form must reproduce the above copyright
24 * notice, this list of conditions and the following disclaimer in the
25 * documentation and/or other materials provided with the distribution.
26 * * Neither the name of Advanced Micro Devices, Inc. nor the names of
27 * its contributors may be used to endorse or promote products derived
28 * from this software without specific prior written permission.
29 *
30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
31 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
33 * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
34 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
35 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
36 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
37 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 ***************************************************************************/
42// TODO This list needs to be pruned of anything that is not API
43#include "AGESA.h"
Aaron Durbin49ec3f02017-12-12 10:01:06 -070044#include <amdblocks/agesawrapper.h>
Marc Jones9ef6e522016-09-20 20:16:20 -060045#include "AcpiLib.h"
46#include "FchCommonCfg.h"
47#include "Fch.h"
48#include "FchDef.h"
49#include "amdlib.h"
50#include "cbfs.h"
51#include <console/console.h>
52#include <commonlib/loglevel.h>
53
Marc Jones9ef6e522016-09-20 20:16:20 -060054CONST UINT32 ImageSignature = IMAGE_SIGNATURE;
55CONST UINT32 ModuleSignature = MODULE_SIGNATURE;
Martin Roth16995fb2017-11-10 20:28:44 -070056CONST CHAR8 ModuleIdentifier[8] = AGESA_ID;
Marc Jones9ef6e522016-09-20 20:16:20 -060057
58/**********************************************************************
59 * Interface call: AmdCreateStruct
60 **********************************************************************/
61AGESA_STATUS
62AmdCreateStruct (
63 IN OUT AMD_INTERFACE_PARAMS *InterfaceParams
64 )
65{
Aaron Durbina78319b2017-12-08 15:38:59 -070066 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -060067 InterfaceParams->StdHeader.Func = AMD_CREATE_STRUCT;
Aaron Durbina78319b2017-12-08 15:38:59 -070068 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -060069 return Dispatcher(InterfaceParams);
70}
71
72/**********************************************************************
73 * Interface call: AmdReleaseStruct
74 **********************************************************************/
75AGESA_STATUS
76AmdReleaseStruct (
77 IN OUT AMD_INTERFACE_PARAMS *InterfaceParams
78 )
79{
Aaron Durbina78319b2017-12-08 15:38:59 -070080 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -060081 InterfaceParams->StdHeader.Func = AMD_RELEASE_STRUCT;
Aaron Durbina78319b2017-12-08 15:38:59 -070082 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -060083 return Dispatcher(InterfaceParams);
84}
85
86/**********************************************************************
87 * Interface call: AmdInitReset
88 **********************************************************************/
89AGESA_STATUS
90AmdInitReset (
91 IN OUT AMD_RESET_PARAMS *ResetParams
92 )
93{
Aaron Durbina78319b2017-12-08 15:38:59 -070094 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -060095 ResetParams->StdHeader.Func = AMD_INIT_RESET;
Aaron Durbina78319b2017-12-08 15:38:59 -070096 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -060097 return Dispatcher(ResetParams);
98}
99
100/**********************************************************************
101 * Interface call: AmdInitEarly
102 **********************************************************************/
103AGESA_STATUS
104AmdInitEarly (
105 IN OUT AMD_EARLY_PARAMS *EarlyParams
106 )
107{
Aaron Durbina78319b2017-12-08 15:38:59 -0700108 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600109 EarlyParams->StdHeader.Func = AMD_INIT_EARLY;
Aaron Durbina78319b2017-12-08 15:38:59 -0700110 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600111 return Dispatcher(EarlyParams);
112}
113
114/**********************************************************************
115 * Interface call: AmdInitPost
116 **********************************************************************/
117AGESA_STATUS
118AmdInitPost (
119 IN OUT AMD_POST_PARAMS *PostParams ///< Amd Cpu init param
120 )
121{
Aaron Durbina78319b2017-12-08 15:38:59 -0700122 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600123 PostParams->StdHeader.Func = AMD_INIT_POST;
Aaron Durbina78319b2017-12-08 15:38:59 -0700124 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600125 return Dispatcher(PostParams);
126}
127
128/**********************************************************************
129 * Interface call: AmdInitEnv
130 **********************************************************************/
131AGESA_STATUS
132AmdInitEnv (
133 IN OUT AMD_ENV_PARAMS *EnvParams
134 )
135{
Aaron Durbina78319b2017-12-08 15:38:59 -0700136 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600137 EnvParams->StdHeader.Func = AMD_INIT_ENV;
Aaron Durbina78319b2017-12-08 15:38:59 -0700138 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600139 return Dispatcher(EnvParams);
140}
141
142/**********************************************************************
143 * Interface call: AmdInitMid
144 **********************************************************************/
145AGESA_STATUS
146AmdInitMid (
147 IN OUT AMD_MID_PARAMS *MidParams
148 )
149{
Aaron Durbina78319b2017-12-08 15:38:59 -0700150 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600151 MidParams->StdHeader.Func = AMD_INIT_MID;
Aaron Durbina78319b2017-12-08 15:38:59 -0700152 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600153 return Dispatcher(MidParams);
154}
155
156/**********************************************************************
157 * Interface call: AmdInitLate
158 **********************************************************************/
159AGESA_STATUS
160AmdInitLate (
161 IN OUT AMD_LATE_PARAMS *LateParams
162 )
163{
Aaron Durbina78319b2017-12-08 15:38:59 -0700164 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600165 LateParams->StdHeader.Func = AMD_INIT_LATE;
Aaron Durbina78319b2017-12-08 15:38:59 -0700166 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600167 return Dispatcher(LateParams);
168}
169
170/**********************************************************************
171 * Interface call: AmdInitRecovery
172 **********************************************************************/
173AGESA_STATUS
174AmdInitRecovery (
175 IN OUT AMD_RECOVERY_PARAMS *RecoveryParams
176 )
177{
Aaron Durbina78319b2017-12-08 15:38:59 -0700178 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600179 RecoveryParams->StdHeader.Func = AMD_INIT_RECOVERY;
Aaron Durbina78319b2017-12-08 15:38:59 -0700180 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600181 return Dispatcher(RecoveryParams);
182}
183
184/**********************************************************************
185 * Interface call: AmdInitResume
186 **********************************************************************/
187AGESA_STATUS
188AmdInitResume (
189 IN AMD_RESUME_PARAMS *ResumeParams
190 )
191{
Aaron Durbina78319b2017-12-08 15:38:59 -0700192 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600193 ResumeParams->StdHeader.Func = AMD_INIT_RESUME;
Aaron Durbina78319b2017-12-08 15:38:59 -0700194 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600195 return Dispatcher(ResumeParams);
196}
197
198/**********************************************************************
199 * Interface call: AmdS3LateRestore
200 **********************************************************************/
201AGESA_STATUS
202AmdS3LateRestore (
203 IN OUT AMD_S3LATE_PARAMS *S3LateParams
204 )
205{
Aaron Durbina78319b2017-12-08 15:38:59 -0700206 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600207 S3LateParams->StdHeader.Func = AMD_S3LATE_RESTORE;
Aaron Durbina78319b2017-12-08 15:38:59 -0700208 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600209 return Dispatcher(S3LateParams);
210}
211
212/**********************************************************************
213 * Interface call: AmdInitRtb
214 **********************************************************************/
215AGESA_STATUS
216AmdInitRtb (
217 IN OUT AMD_RTB_PARAMS *AmdInitRtbParams
218 )
219{
Aaron Durbina78319b2017-12-08 15:38:59 -0700220 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600221 AmdInitRtbParams->StdHeader.Func = AMD_INIT_RTB;
Aaron Durbina78319b2017-12-08 15:38:59 -0700222 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600223 return Dispatcher(AmdInitRtbParams);
224}
225
226/**********************************************************************
227 * Interface call: AmdLateRunApTask
228 **********************************************************************/
229AGESA_STATUS
230AmdLateRunApTask (
231 IN AP_EXE_PARAMS *AmdApExeParams
232)
233{
Aaron Durbina78319b2017-12-08 15:38:59 -0700234 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600235 AmdApExeParams->StdHeader.Func = AMD_LATE_RUN_AP_TASK;
Aaron Durbina78319b2017-12-08 15:38:59 -0700236 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600237 return Dispatcher(AmdApExeParams);
238}
239
240/**********************************************************************
241 * Interface service call: AmdGetApicId
242 **********************************************************************/
243AGESA_STATUS
244AmdGetApicId (
245 IN OUT AMD_APIC_PARAMS *AmdParamApic
246)
247{
Aaron Durbina78319b2017-12-08 15:38:59 -0700248 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600249 AmdParamApic->StdHeader.Func = AMD_GET_APIC_ID;
Aaron Durbina78319b2017-12-08 15:38:59 -0700250 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600251 return Dispatcher(AmdParamApic);
252}
253
254/**********************************************************************
255 * Interface service call: AmdGetPciAddress
256 **********************************************************************/
257AGESA_STATUS
258AmdGetPciAddress (
259 IN OUT AMD_GET_PCI_PARAMS *AmdParamGetPci
260)
261{
Aaron Durbina78319b2017-12-08 15:38:59 -0700262 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600263 AmdParamGetPci->StdHeader.Func = AMD_GET_PCI_ADDRESS;
Aaron Durbina78319b2017-12-08 15:38:59 -0700264 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600265 return Dispatcher(AmdParamGetPci);
266}
267
268/**********************************************************************
269 * Interface service call: AmdIdentifyCore
270 **********************************************************************/
271AGESA_STATUS
272AmdIdentifyCore (
273 IN OUT AMD_IDENTIFY_PARAMS *AmdParamIdentify
274)
275{
Aaron Durbina78319b2017-12-08 15:38:59 -0700276 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600277 AmdParamIdentify->StdHeader.Func = AMD_IDENTIFY_CORE;
Aaron Durbina78319b2017-12-08 15:38:59 -0700278 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600279 return Dispatcher(AmdParamIdentify);
280}
281
282/**********************************************************************
283 * Interface service call: AmdReadEventLog
284 **********************************************************************/
285AGESA_STATUS
286AmdReadEventLog (
287 IN EVENT_PARAMS *Event
288)
289{
Aaron Durbina78319b2017-12-08 15:38:59 -0700290 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600291 Event->StdHeader.Func = AMD_READ_EVENT_LOG;
Aaron Durbina78319b2017-12-08 15:38:59 -0700292 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600293 return Dispatcher(Event);
294}
295
296/**********************************************************************
297 * Interface service call: AmdIdentifyDimm
298 **********************************************************************/
299AGESA_STATUS
300AmdIdentifyDimm (
301 IN OUT AMD_IDENTIFY_DIMM *AmdDimmIdentify
302)
303{
Aaron Durbina78319b2017-12-08 15:38:59 -0700304 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600305 AmdDimmIdentify->StdHeader.Func = AMD_IDENTIFY_DIMMS;
Aaron Durbina78319b2017-12-08 15:38:59 -0700306 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600307 return Dispatcher(AmdDimmIdentify);
308}
309
310AGESA_STATUS
311AmdIdsRunApTaskLate (
312 IN AP_EXE_PARAMS *AmdApExeParams
313 )
314{
Marc Jones9ef6e522016-09-20 20:16:20 -0600315 AmdApExeParams->StdHeader.Func = -1;
316 return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600317}
318
319/**********************************************************************
320 * Interface service call: AmdGet2DDataEye
321 **********************************************************************/
322AGESA_STATUS
323AmdGet2DDataEye (
324 IN OUT AMD_GET_DATAEYE *AmdGetDataEye
325 )
326{
Aaron Durbina78319b2017-12-08 15:38:59 -0700327 MODULE_ENTRY Dispatcher = agesa_get_dispatcher();
Marc Jones9ef6e522016-09-20 20:16:20 -0600328 AmdGetDataEye->StdHeader.Func = AMD_GET_2D_DATA_EYE;
Aaron Durbina78319b2017-12-08 15:38:59 -0700329 if (!Dispatcher) return AGESA_UNSUPPORTED;
Marc Jones9ef6e522016-09-20 20:16:20 -0600330 return Dispatcher(AmdGetDataEye);
331}