Patchwork unstable AMD Fam10h boot

login
register
about
Submitter Patrick Georgi
Date 2009-08-25 12:53:19
Message ID <1251204799.28873.8.camel@tetris>
Download mbox | patch
Permalink /patch/184/
State Superseded
Headers show

Comments

Patrick Georgi - 2009-08-25 12:53:19
Hi,

I have some issues with an Fam10h board here. Every once in a while,
boot fails with "FIXME! CPU Version unknown or not supported!". The CPU
Version mask that is calculated at the location the patch changes is
0x10efff. This value appears if the result of the cpuid call (or NB
probe) is 0xffffff (the highest 8 bits aren't counted in, it might be
0xffffffff, too)

Attached patch fixes the issue for me by retrying until a valid value is
returned, which indicates that this might be a timing or concurrency
issue.

I'd appreciate if someone with more knowledge of the AMD code could look
into this, as this potentially endless loop is not a real fix.


Patrick
Ward Vandewege - 2009-08-25 20:17:34
Hi Patrick,

On Tue, Aug 25, 2009 at 02:53:19PM +0200, Patrick Georgi wrote:
> I have some issues with an Fam10h board here. Every once in a while,
> boot fails with "FIXME! CPU Version unknown or not supported!". The CPU
> Version mask that is calculated at the location the patch changes is
> 0x10efff. This value appears if the result of the cpuid call (or NB
> probe) is 0xffffff (the highest 8 bits aren't counted in, it might be
> 0xffffffff, too)'

I've seen this occasionally, too. I suspected compiler issues again...

Thanks,
Ward.

Patch

Index: dSPACE/src/northbridge/amd/amdfam10/raminit_amdmct.c
===================================================================
--- dSPACE.orig/src/northbridge/amd/amdfam10/raminit_amdmct.c	2009-08-25 13:53:55.254059607 +0200
+++ dSPACE/src/northbridge/amd/amdfam10/raminit_amdmct.c	2009-08-25 13:55:44.954075039 +0200
@@ -109,17 +109,24 @@ 
 	/* FIXME: Move this to a more generic place. Maybe to the CPU code */
 	/* Converts the CPUID to a logical ID MASK that is used to check
 	 CPU version support versions */
-	u32 dev;
 	u32 val, valx;
 	u32 family, model, stepping;
 	u32 ret;
 
+	{
 	if (Node == 0xFF) { /* current node */
 		val = cpuid_eax(0x80000001);
 	} else {
+		u32 dev;
 		dev = PA_NBMISC(Node);
 		val = Get_NB32(dev, 0xfc);
 	}
+	print_err("value found: ");
+	print_err_hex32(val);
+	print_err(" with node: ");
+	print_err_hex32(Node);
+	print_err("\n");
+	} while ((val & 0xffffff) == 0xffffff);
 
 	family = ((val >> 8) & 0x0f) + ((val >> 20) & 0xff);
 	model = ((val >> 4) & 0x0f) | ((val >> (16-4)) & 0xf0);
@@ -164,6 +171,7 @@ 
 	default:
 		/* FIXME: mabe we should die() here. */
 		print_err("FIXME! CPU Version unknown or not supported! \n");
+		print_err_hex32(valx);
 		ret = 0;
 	}