AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Proc / Mem / Main / minit.c
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * minit.c
6  *
7  * Initializer support function
8  *
9  * @xrefitem bom "File Content Label" "Release Content"
10  * @e project: AGESA
11  * @e sub-project: (Mem/Main)
12  * @e \$Revision: 56279 $ @e \$Date: 2011-07-11 13:11:28 -0600 (Mon, 11 Jul 2011) $
13  *
14  **/
15 /*****************************************************************************
16   *
17  * Copyright (C) 2012 Advanced Micro Devices, Inc.
18  * All rights reserved.
19  *
20  * Redistribution and use in source and binary forms, with or without
21  * modification, are permitted provided that the following conditions are met:
22  *     * Redistributions of source code must retain the above copyright
23  *       notice, this list of conditions and the following disclaimer.
24  *     * Redistributions in binary form must reproduce the above copyright
25  *       notice, this list of conditions and the following disclaimer in the
26  *       documentation and/or other materials provided with the distribution.
27  *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
28  *       its contributors may be used to endorse or promote products derived
29  *       from this software without specific prior written permission.
30  *
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
32  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
33  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
34  * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
35  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
36  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
37  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
38  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
40  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41   *
42   * ***************************************************************************
43   *
44  */
45
46 /*
47  *----------------------------------------------------------------------------
48  *                                MODULES USED
49  *
50  *----------------------------------------------------------------------------
51  */
52
53
54 #include "AGESA.h"
55 #include "amdlib.h"
56 #include "AdvancedApi.h"
57 #include "mu.h"
58 #include "OptionMemory.h"
59 #include "Ids.h"
60 #include "merrhdl.h"
61 #include "Filecode.h"
62 CODE_GROUP (G1_PEICC)
63 RDATA_GROUP (G2_PEI)
64
65 #define FILECODE PROC_MEM_MAIN_MINIT_FILECODE
66 /*----------------------------------------------------------------------------
67  *                          DEFINITIONS AND MACROS
68  *
69  *----------------------------------------------------------------------------
70  */
71
72 /*----------------------------------------------------------------------------
73  *                           TYPEDEFS AND STRUCTURES
74  *
75  *----------------------------------------------------------------------------
76  */
77
78 /*----------------------------------------------------------------------------
79  *                        PROTOTYPES OF LOCAL FUNCTIONS
80  *
81  *----------------------------------------------------------------------------
82  */
83
84 extern MEM_NB_SUPPORT memNBInstalled[];
85 extern MEM_PLATFORM_CFG* memPlatformTypeInstalled[];
86
87
88 /*----------------------------------------------------------------------------
89  *                            EXPORTED FUNCTIONS
90  *
91  *----------------------------------------------------------------------------
92  */
93 /* -----------------------------------------------------------------------------*/
94 /**
95  *
96  *
97  *  This function initializes the default parameter, function pointers, build options
98  *   and SPD data for memory configuration
99  *
100  *     @param[in,out]   *MemPtr   - Pointer to the MEM_DATA_STRUCT
101  *     @param[in,out]   *PlatFormConfig -  Platform profile/build option config structure
102  *
103  */
104
105 VOID
106 AmdMemInitDataStructDef (
107   IN OUT   MEM_DATA_STRUCT *MemPtr,
108   IN OUT   PLATFORM_CONFIGURATION   *PlatFormConfig
109   )
110 {
111   UINT8 p;
112   UINT8 i;
113   // We need a way of specifying default values for each particular northbridge
114   // family.  We also need to make sure that the IBV knows which parameter struct
115   // is for which northbridge.
116   //----------------------------------------------------------------------------
117   AGESA_TESTPOINT (TpProcMemBeforeMemDataInit, &MemPtr->StdHeader);
118
119   MemPtr->PlatFormConfig = PlatFormConfig;
120
121   memNBInstalled[0].MemNInitDefaults (MemPtr);
122
123   //----------------------------------------------------------------------------
124   // INITIALIZE PLATFORM SPECIFIC CONFIGURATION STRUCT
125   //----------------------------------------------------------------------------
126   AGESA_TESTPOINT (TpProcMemPlatformSpecificConfig, &MemPtr->StdHeader);
127   i = 0;
128   for (p = 0; p < MAX_PLATFORM_TYPES; p++) {
129     if (memPlatformTypeInstalled[i] != NULL) {
130       MemPtr->GetPlatformCfg[p] = memPlatformTypeInstalled[i];
131       i++;
132     } else {
133       MemPtr->GetPlatformCfg[p] = MemAGetPsCfgDef;
134     }
135   }
136   AGESA_TESTPOINT (TpProcMemAfterMemDataInit, &MemPtr->StdHeader);
137   MemPtr->ErrorHandling = MemErrHandle;
138 }