[coreboot] New patch to review for coreboot: 0ea79df Fixed hangup problem with processors that lack PowerNow!

Oskar Enoksson (enok@lysator.liu.se) gerrit at coreboot.org
Mon Oct 10 14:13:26 CEST 2011


Oskar Enoksson (enok at 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 at 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 at 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




More information about the coreboot mailing list