Oskar Enoksson (enok@lysator.liu.se) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/247
-gerrit
commit 0ea79dfc52268d1d519c36d1d5290a37bf57f57f Author: Oskar Enoksson enok@lysator.liu.se Date: Mon Oct 10 13:59:53 2011 +0200
Fixed hangup problem with processors that lack PowerNow!
Signed-off-by: Oskar Enoksson enok@lysator.liu.se Change-Id: Id1b739ec5ae8fbe65bbae1dbde7d41db5f18212f --- src/cpu/amd/model_fxx/fidvid.c | 4 ++++ src/cpu/amd/model_fxx/powernow_acpi.c | 13 +++++++------ 2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/src/cpu/amd/model_fxx/fidvid.c b/src/cpu/amd/model_fxx/fidvid.c index bbafde6..62a25d6 100644 --- a/src/cpu/amd/model_fxx/fidvid.c +++ b/src/cpu/amd/model_fxx/fidvid.c @@ -347,6 +347,10 @@ static void init_fidvid_ap(unsigned bsp_apicid, unsigned apicid) u32 fid_max; int loop;
+ if((cpuid_edx(0x80000007)&0x06)!=0x06) { + return; // FID/VID change not supported + } + msr = rdmsr(0xc0010042); fid_max = ((msr.lo >> 16) & 0x3f); /* max fid */ #if FX_SUPPORT diff --git a/src/cpu/amd/model_fxx/powernow_acpi.c b/src/cpu/amd/model_fxx/powernow_acpi.c index c49322f..dd7038d 100644 --- a/src/cpu/amd/model_fxx/powernow_acpi.c +++ b/src/cpu/amd/model_fxx/powernow_acpi.c @@ -595,6 +595,13 @@ static int pstates_algorithm(u32 pcontrol_blk, u8 plen, u8 onlyBSP) u8 Max_fid, Start_fid, Start_vid, Max_vid; struct cpuid_result cpuid1 = cpuid(0x80000001);
+ /* See if the CPUID(0x80000007) returned EDX[2:1]==11b */ + cpuid1 = cpuid(0x80000007); + if((cpuid1.edx & 0x6)!=0x6) { + printk(BIOS_INFO, "Processor not capable of performing P-state transitions\n"); + return 0; + } + // Because I don't know how to read msr registers from // other CPU's I assume they all have the same SYSCONF values msr = rdmsr(0xc0010042); @@ -621,12 +628,6 @@ static int pstates_algorithm(u32 pcontrol_blk, u8 plen, u8 onlyBSP) printk(BIOS_WARNING, "Unknown CPU, please update the powernow_acpi.c\n"); return 0; } - /* See if the CPUID(0x80000007) returned EDX[2:1]==11b */ - cpuid1 = cpuid(0x80000007); - if((cpuid1.edx & 0x6)!=0x6) { - printk(BIOS_INFO, "Processor not capable of performing P-state transitions\n"); - return 0; - }
#if CONFIG_MAX_PHYSICAL_CPUS==1 // IRT 80us RVO = 50mV PLL_LOCK_TIME 2us, MVS 25mv, VST 100us