blob: 22ff36113c13311d8c66bb98985d9b222e9f9579 [file] [log] [blame]
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2010 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.
*/
static u32 mct_MR1Odt_RDimm(struct MCTStatStruc *pMCTstat,
struct DCTStatStruc *pDCTstat, u8 dct, u32 MrsChipSel)
{
u8 Speed = pDCTstat->Speed;
u32 ret;
u8 DimmsInstalled, DimmNum, ChipSelect;
ChipSelect = (MrsChipSel >> 20) & 0xF;
DimmNum = ChipSelect & 0xFE;
DimmsInstalled = pDCTstat->MAdimms[dct];
if (dct == 1)
DimmNum ++;
ret = 0;
if (mctGet_NVbits(NV_MAX_DIMMS) == 4) {
if (DimmsInstalled == 1)
ret |= 1 << 2;
else {
if (pDCTstat->CSPresent & 0xF0) {
if (pDCTstat->DimmQRPresent & (1 << DimmNum)) {
if (!(ChipSelect & 1))
ret |= 1 << 2;
} else
ret |= 0x204;
} else {
if (Speed < 6)
ret |= 0x44;
else
ret |= 0x204;
}
}
} else if (DimmsInstalled == 1)
ret |= 1 << 2;
else if (Speed < 6)
ret |= 0x44;
else
ret |= 0x204;
//ret = 0;
return ret;
}
static u32 mct_DramTermDyn_RDimm(struct MCTStatStruc *pMCTstat,
struct DCTStatStruc *pDCTstat, u8 dimm)
{
u8 DimmsInstalled = dimm;
u32 DramTermDyn = 0;
u8 Speed = pDCTstat->Speed;
if (mctGet_NVbits(NV_MAX_DIMMS) == 4) {
if (pDCTstat->CSPresent & 0xF0) {
if (DimmsInstalled == 1)
if (Speed == 7)
DramTermDyn |= 1 << 10;
else
DramTermDyn |= 1 << 11;
else
if (Speed == 4)
DramTermDyn |= 1 << 11;
else
DramTermDyn |= 1 << 10;
} else {
if (DimmsInstalled != 1) {
if (Speed == 7)
DramTermDyn |= 1 << 10;
else
DramTermDyn |= 1 << 11;
}
}
} else {
if (DimmsInstalled != 1)
DramTermDyn |= 1 << 11;
}
return DramTermDyn;
}