blob: 61343958b00c944f9b446ff2a8f0349cf60305a8 [file] [log] [blame]
Frank Vibrans2b4c8312011-02-14 18:30:54 +00001/* $NoKeywords:$ */
2/**
3 * @file
4 *
5 * mmEcc.c
6 *
7 * Main Memory Feature implementation file for ECC Initialization
8 *
9 * @xrefitem bom "File Content Label" "Release Content"
10 * @e project: AGESA
11 * @e sub-project: (Mem/Main)
12 * @e \$Revision: 35136 $ @e \$Date: 2010-07-16 11:29:48 +0800 (Fri, 16 Jul 2010) $
13 *
14 **/
15/*
16 *****************************************************************************
17 *
18 * Copyright (c) 2011, Advanced Micro Devices, Inc.
19 * All rights reserved.
Edward O'Callaghan1542a6f2014-07-06 19:24:06 +100020 *
Frank Vibrans2b4c8312011-02-14 18:30:54 +000021 * 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.
Edward O'Callaghan1542a6f2014-07-06 19:24:06 +100028 * * Neither the name of Advanced Micro Devices, Inc. nor the names of
29 * its contributors may be used to endorse or promote products derived
Frank Vibrans2b4c8312011-02-14 18:30:54 +000030 * from this software without specific prior written permission.
Edward O'Callaghan1542a6f2014-07-06 19:24:06 +100031 *
Frank Vibrans2b4c8312011-02-14 18:30:54 +000032 * 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.
Edward O'Callaghan1542a6f2014-07-06 19:24:06 +100042 *
Frank Vibrans2b4c8312011-02-14 18:30:54 +000043 * ***************************************************************************
44 *
45 */
46
47/*
48 *----------------------------------------------------------------------------
49 * MODULES USED
50 *
51 *----------------------------------------------------------------------------
52 */
53
54
55#include "Porting.h"
56#include "AGESA.h"
57#include "Ids.h"
58#include "cpuRegisters.h"
59#include "OptionMemory.h"
60#include "mm.h"
61#include "mn.h"
62#include "mt.h"
63#include "ma.h"
64#include "mfmemclr.h"
65#include "Filecode.h"
66CODE_GROUP (G1_PEICC)
67RDATA_GROUP (G1_PEICC)
68
69#define FILECODE PROC_MEM_MAIN_MMECC_FILECODE
70
71/*-----------------------------------------------------------------------------
72* EXPORTED FUNCTIONS
73*
74*-----------------------------------------------------------------------------
75*/
76
efdesign9884cbce22011-08-04 12:09:17 -060077BOOLEAN
78MemMEcc (
79 IN OUT MEM_MAIN_DATA_BLOCK *mmPtr
80 );
81
Frank Vibrans2b4c8312011-02-14 18:30:54 +000082/* -----------------------------------------------------------------------------*/
83/**
84 *
85 *
86 *
87 *
88 * @param[in,out] *mmPtr - Pointer to the MEM_MAIN_DATA_BLOCK
89 *
90 * @return TRUE - No fatal error occurs.
91 * @return FALSE - Fatal error occurs.
92 */
93BOOLEAN
94MemMEcc (
95 IN OUT MEM_MAIN_DATA_BLOCK *mmPtr
96 )
97{
98 UINT8 Die;
99 DIE_STRUCT *MCTPtr;
100 MEM_SHARED_DATA *SharedPtr;
101 MEM_PARAMETER_STRUCT *RefPtr;
102 BOOLEAN RetVal;
103
104 RetVal = TRUE;
105 RefPtr = mmPtr->MemPtr->ParameterListPtr;
106 SharedPtr = mmPtr->mmSharedPtr;
107 MCTPtr = mmPtr->NBPtr->MCTPtr;
108 //
109 // Run Northbridge-specific ECC initialization feature for each die.
110 //
111 SharedPtr->AllECC = FALSE;
112 if (MCTPtr->Status[SbEccDimms] && RefPtr->EnableEccFeature) {
113 SharedPtr->AllECC = TRUE;
114 AGESA_TESTPOINT (TpProcMemEccInitialization, &(mmPtr->MemPtr->StdHeader));
115
116 for (Die = 0 ; Die < mmPtr->DieCount ; Die ++ ) {
117 mmPtr->NBPtr[Die].FeatPtr->CheckEcc (&(mmPtr->NBPtr[Die]));
118 RetVal &= (BOOLEAN) (mmPtr->NBPtr[Die].MCTPtr->ErrCode < AGESA_FATAL);
119 }
120 if (SharedPtr->AllECC == TRUE) {
121 RefPtr->GStatus[GsbAllECCDimms] = TRUE;
122 // Sync mem clear before setting scrub rate.
123 for (Die = 0; Die < mmPtr->DieCount; Die++) {
124 MemFMctMemClr_Sync (&(mmPtr->NBPtr[Die]));
125 }
126 }
127 }
128 // Scrubber control
129 for (Die = 0 ; Die < mmPtr->DieCount ; Die ++ ) {
130 mmPtr->NBPtr[Die].FeatPtr->InitEcc (&(mmPtr->NBPtr[Die]));
131 }
132 return RetVal;
133}