aboutsummaryrefslogtreecommitdiff
path: root/src/northbridge/amd/agesa/agesawrapper.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/northbridge/amd/agesa/agesawrapper.c')
-rw-r--r--src/northbridge/amd/agesa/agesawrapper.c156
1 files changed, 151 insertions, 5 deletions
diff --git a/src/northbridge/amd/agesa/agesawrapper.c b/src/northbridge/amd/agesa/agesawrapper.c
index 6b2bf39e65..a73817c0e4 100644
--- a/src/northbridge/amd/agesa/agesawrapper.c
+++ b/src/northbridge/amd/agesa/agesawrapper.c
@@ -1,7 +1,7 @@
/*
* This file is part of the coreboot project.
*
- * Copyright (C) 2012 Advanced Micro Devices, Inc.
+ * Copyright (C) 2011-2012 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,8 +25,156 @@
#include "heapManager.h"
-#if !defined(__PRE_RAM__)
+static const struct OEM_HOOK *OemHook = &OemCustomize;
+#if defined(__PRE_RAM__)
+
+AGESA_STATUS agesawrapper_amdinitreset(void)
+{
+ AGESA_STATUS status;
+ AMD_INTERFACE_PARAMS AmdParamStruct;
+ AMD_RESET_PARAMS AmdResetParams;
+
+ memset(&AmdParamStruct, 0, sizeof(AMD_INTERFACE_PARAMS));
+ memset(&AmdResetParams, 0, sizeof(AMD_RESET_PARAMS));
+
+ AmdParamStruct.AgesaFunctionName = AMD_INIT_RESET;
+ AmdParamStruct.AllocationMethod = ByHost;
+ AmdParamStruct.NewStructSize = sizeof(AMD_RESET_PARAMS);
+ AmdParamStruct.NewStructPtr = &AmdResetParams;
+ AmdParamStruct.StdHeader.AltImageBasePtr = 0;
+ AmdParamStruct.StdHeader.CalloutPtr = (CALLOUT_ENTRY) & GetBiosCallout;
+ AmdParamStruct.StdHeader.Func = 0;
+ AmdParamStruct.StdHeader.ImageBasePtr = 0;
+
+ AmdCreateStruct(&AmdParamStruct);
+ AmdResetParams.HtConfig.Depth = 0;
+
+ status = AmdInitReset((AMD_RESET_PARAMS *) AmdParamStruct.NewStructPtr);
+ AGESA_EVENTLOG(status, &AmdParamStruct.StdHeader);
+ AmdReleaseStruct(&AmdParamStruct);
+ return status;
+}
+
+AGESA_STATUS agesawrapper_amdinitearly(void)
+{
+ AGESA_STATUS status;
+ AMD_INTERFACE_PARAMS AmdParamStruct;
+ AMD_EARLY_PARAMS *AmdEarlyParamsPtr;
+
+ memset(&AmdParamStruct, 0, sizeof(AMD_INTERFACE_PARAMS));
+
+ AmdParamStruct.AgesaFunctionName = AMD_INIT_EARLY;
+ AmdParamStruct.AllocationMethod = PreMemHeap;
+ AmdParamStruct.StdHeader.AltImageBasePtr = 0;
+ AmdParamStruct.StdHeader.CalloutPtr = (CALLOUT_ENTRY) & GetBiosCallout;
+ AmdParamStruct.StdHeader.Func = 0;
+ AmdParamStruct.StdHeader.ImageBasePtr = 0;
+ AmdCreateStruct(&AmdParamStruct);
+
+ /* OEM Should Customize the defaults through this hook. */
+ AmdEarlyParamsPtr = (AMD_EARLY_PARAMS *) AmdParamStruct.NewStructPtr;
+ if (OemHook->InitEarly)
+ OemHook->InitEarly(AmdEarlyParamsPtr);
+
+ status = AmdInitEarly(AmdEarlyParamsPtr);
+ AGESA_EVENTLOG(status, &AmdParamStruct.StdHeader);
+
+ AmdReleaseStruct(&AmdParamStruct);
+
+ return status;
+}
+
+AGESA_STATUS agesawrapper_amdinitpost(void)
+{
+ AGESA_STATUS status;
+ AMD_INTERFACE_PARAMS AmdParamStruct;
+ AMD_POST_PARAMS *PostParams;
+
+ memset(&AmdParamStruct, 0, sizeof(AMD_INTERFACE_PARAMS));
+
+ AmdParamStruct.AgesaFunctionName = AMD_INIT_POST;
+ AmdParamStruct.AllocationMethod = PreMemHeap;
+ AmdParamStruct.StdHeader.AltImageBasePtr = 0;
+ AmdParamStruct.StdHeader.CalloutPtr = (CALLOUT_ENTRY) & GetBiosCallout;
+ AmdParamStruct.StdHeader.Func = 0;
+ AmdParamStruct.StdHeader.ImageBasePtr = 0;
+
+ AmdCreateStruct(&AmdParamStruct);
+
+ /* OEM Should Customize the defaults through this hook. */
+ PostParams = (AMD_POST_PARAMS *) AmdParamStruct.NewStructPtr;
+ if (OemHook->InitPost)
+ OemHook->InitPost(PostParams);
+
+ status = AmdInitPost(PostParams);
+ AGESA_EVENTLOG(status, &PostParams->StdHeader);
+
+ AmdReleaseStruct(&AmdParamStruct);
+
+ /* Initialize heap space */
+ EmptyHeap();
+
+ return status;
+}
+
+AGESA_STATUS agesawrapper_amdinitenv(void)
+{
+ AGESA_STATUS status;
+ AMD_INTERFACE_PARAMS AmdParamStruct;
+ AMD_ENV_PARAMS *EnvParam;
+
+ memset(&AmdParamStruct, 0, sizeof(AMD_INTERFACE_PARAMS));
+
+ AmdParamStruct.AgesaFunctionName = AMD_INIT_ENV;
+ AmdParamStruct.AllocationMethod = PostMemDram;
+ AmdParamStruct.StdHeader.AltImageBasePtr = 0;
+ AmdParamStruct.StdHeader.CalloutPtr = (CALLOUT_ENTRY) & GetBiosCallout;
+ AmdParamStruct.StdHeader.Func = 0;
+ AmdParamStruct.StdHeader.ImageBasePtr = 0;
+ AmdCreateStruct(&AmdParamStruct);
+ EnvParam = (AMD_ENV_PARAMS *) AmdParamStruct.NewStructPtr;
+
+ status = AmdInitEnv(EnvParam);
+ AGESA_EVENTLOG(status, &EnvParam->StdHeader);
+
+ AmdReleaseStruct(&AmdParamStruct);
+ return status;
+}
+
+#else /* __PRE_RAM__ */
+
+AGESA_STATUS agesawrapper_amdinitmid(void)
+{
+ AGESA_STATUS status;
+ AMD_INTERFACE_PARAMS AmdParamStruct;
+ AMD_MID_PARAMS *MidParam;
+
+ memset(&AmdParamStruct, 0, sizeof(AMD_INTERFACE_PARAMS));
+
+ AmdParamStruct.AgesaFunctionName = AMD_INIT_MID;
+ AmdParamStruct.AllocationMethod = PostMemDram;
+ AmdParamStruct.StdHeader.AltImageBasePtr = 0;
+ AmdParamStruct.StdHeader.CalloutPtr = (CALLOUT_ENTRY) & GetBiosCallout;
+ AmdParamStruct.StdHeader.Func = 0;
+ AmdParamStruct.StdHeader.ImageBasePtr = 0;
+
+ AmdCreateStruct(&AmdParamStruct);
+
+ /* OEM Should Customize the defaults through this hook. */
+ MidParam = (AMD_MID_PARAMS *) AmdParamStruct.NewStructPtr;
+ if (OemHook->InitMid)
+ OemHook->InitMid(MidParam);
+
+ status = AmdInitMid(MidParam);
+ AGESA_EVENTLOG(status, &MidParam->StdHeader);
+ AmdReleaseStruct(&AmdParamStruct);
+
+ return status;
+}
+
+
+/* We will reference AmdLateParams later to copy ACPI tables. */
static AMD_LATE_PARAMS *AmdLateParams = NULL;
AGESA_STATUS agesawrapper_amdinitlate(void)
@@ -54,9 +202,7 @@ AGESA_STATUS agesawrapper_amdinitlate(void)
AGESA_EVENTLOG(status, &AmdLateParams->StdHeader);
ASSERT(status == AGESA_SUCCESS);
- /* We will reference AmdLateParams when coreboot copies the ACPI tables,
- * so must not call AmdReleaseStruct(&AmdParamStruct) here.
- */
+ /* No AmdReleaseStruct(&AmdParamStruct), we need AmdLateParams later. */
return status;
}