amdk8: This patch fixes ram init problems when using the 9W Sempron part.

Trying to read the FIDVID register when the processor does not support FIDVID
control causes a GP Fault. This patch reads the startup FID from a different
MSR. I have verified this patch to work on the dbm690t platform.

Signed-off-by: Dan Lykowski <lykowdk@gmail.com>
Acked-by: Peter Stuge <peter@stuge.se>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3863 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Dan Lykowski 2009-01-15 02:21:27 +00:00 committed by Peter Stuge
parent 884e1cbeeb
commit 0f502c7537
2 changed files with 37 additions and 10 deletions

View File

@ -1656,14 +1656,28 @@ static uint8_t get_exact_divisor(int i, uint8_t divisor)
/*15*/ 200, 160, 120, 100,
};
unsigned fid_cur;
int index;
msr_t msr;
msr = rdmsr(0xc0010042);
fid_cur = msr.lo & 0x3f;
index = fid_cur>>1;
/* Check for FID control support */
struct cpuid_result cpuid1;
cpuid1 = cpuid(0x8000007);
if( cpuid1.edx & 0x02 ) {
/* Use current FID */
unsigned fid_cur;
msr = rdmsr(0xc0010042);
fid_cur = msr.lo & 0x3f;
index = fid_cur>>1;
} else {
/* Use startup FID */
unsigned fid_start;
msr = rdmsr(0xc0010015);
fid_start = (msr.lo & (0x3f << 24));
index = fid_start>>25;
}
if (index>12) return divisor;

View File

@ -432,14 +432,27 @@ static uint16_t get_exact_T1000(unsigned i)
/*15*/ 5000, 4000, 3000, 2500,
};
unsigned fid_cur;
int index;
msr_t msr;
msr = rdmsr(0xc0010042);
fid_cur = msr.lo & 0x3f;
index = fid_cur>>1;
/* Check for FID control support */
struct cpuid_result cpuid1;
cpuid1 = cpuid(0x8000007);
if( cpuid1.edx & 0x02 ) {
/* Use current FID */
unsigned fid_cur;
msr = rdmsr(0xc0010042);
fid_cur = msr.lo & 0x3f;
index = fid_cur>>1;
} else {
/* Use startup FID */
unsigned fid_start;
msr = rdmsr(0xc0010015);
fid_start = (msr.lo & (0x3f << 24));
index = fid_start>>25;
}
if(index>12) return T1000_a[i];