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,
|
/*15*/ 200, 160, 120, 100,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned fid_cur;
|
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
msr_t msr;
|
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;
|
if (index>12) return divisor;
|
||||||
|
|
||||||
|
|
|
@ -432,14 +432,27 @@ static uint16_t get_exact_T1000(unsigned i)
|
||||||
/*15*/ 5000, 4000, 3000, 2500,
|
/*15*/ 5000, 4000, 3000, 2500,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned fid_cur;
|
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
msr_t msr;
|
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];
|
if(index>12) return T1000_a[i];
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue