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:
parent
884e1cbeeb
commit
0f502c7537
|
@ -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;
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
Loading…
Reference in New Issue