/* * This file is part of the coreboot project. * * Copyright (C) 2007 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 * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "mct_d.h" u8 mct_checkNumberOfDqsRcvEn_1Pass(u8 pass) { u8 ret = 1; if (pass == SecondPass) ret = 0; return ret; } u32 SetupDqsPattern_1PassA(u8 pass) { return (u32) TestPattern1_D; } u32 SetupDqsPattern_1PassB(u8 pass) { return (u32) TestPattern0_D; } u8 mct_Get_Start_RcvrEnDly_1Pass(u8 pass) { return 0; } static u8 mct_Average_RcvrEnDly_1Pass(struct DCTStatStruc *pDCTstat, u8 Channel, u8 Receiver, u8 Pass) { u8 i, MaxValue; u8 *p; u8 val; MaxValue = 0; p = pDCTstat->persistentData.CH_D_B_RCVRDLY[Channel][Receiver >> 1]; for (i = 0; i < 8; i++) { /* get left value from DCTStatStruc.CHA_D0_B0_RCVRDLY*/ val = p[i]; /* get right value from DCTStatStruc.CHA_D0_B0_RCVRDLY_1*/ val += Pass1MemClkDly; /* write back the value to stack */ if (val > MaxValue) MaxValue = val; p[i] = val; } return MaxValue; } #ifdef UNUSED_CODE static u8 mct_AdjustFinalDQSRcvValue_1Pass(u8 val_1p, u8 val_2p) { return (val_1p & 0xff) + ((val_2p & 0xff)<<8); } #endif u8 mct_SaveRcvEnDly_D_1Pass(struct DCTStatStruc *pDCTstat, u8 pass) { u8 ret; ret = 0; if ((pDCTstat->DqsRcvEn_Pass == 0xff) && (pass== FirstPass)) ret = 2; return ret; } u8 mct_Average_RcvrEnDly_Pass(struct DCTStatStruc *pDCTstat, u8 RcvrEnDly, u8 RcvrEnDlyLimit, u8 Channel, u8 Receiver, u8 Pass) { return mct_Average_RcvrEnDly_1Pass(pDCTstat, Channel, Receiver, Pass); }