Patchwork Patch for enableing 440BX NB to use large memory modules

login
register
about
Submitter Anders Jenbo
Date 2010-04-26 22:42:14
Message ID <1272321734.7436.4.camel@anders-laptop>
Download mbox | patch
Permalink /patch/1270/
State Accepted, archived
Headers show

Comments

Anders Jenbo - 2010-04-26 22:42:14
man, 26 04 2010 kl. 16:53 +0200, skrev Stefan Reinauer:
> On 4/26/10 4:24 PM, Anders Jenbo wrote:
> 
> > Stefan, since you acked the patch, should I still correct the typos that Paul pointed out and split it in to a patch, one with the added memory support and one with the cleaned white space?
> >   
> That would be awesome!

Ok i fixed the typos and removed the white space clean up.

Patch

Index: src/northbridge/intel/i440bx/raminit.c
===================================================================
--- src/northbridge/intel/i440bx/raminit.c	(revision 5496)
+++ src/northbridge/intel/i440bx/raminit.c	(working copy)
@@ -694,6 +694,23 @@ 
 	sz.side1 *= 4;
 	sz.side2 *= 4;
 
+	/* It is possible to partially use larger then supported
+	 * modules by setting them to a supported size.
+	 */
+	if(sz.side1 > 128) {
+		PRINT_DEBUG("Side1 was 0x");
+		PRINT_DEBUG_HEX16(sz.side1);
+		PRINT_DEBUG(" but only 128MB will be used\n");
+		sz.side1 = 128;
+
+		if(sz.side2 > 128) {
+			PRINT_DEBUG("Side2 was 0x");
+			PRINT_DEBUG_HEX16(sz.side2);
+			PRINT_DEBUG(" but only 128MB will be used\n");
+			sz.side2 = 128;
+		}
+	}
+
 	return sz;
 }
 /*
@@ -792,6 +809,12 @@ 
 					dra = 0x1; /* 4KB */
 				} else if (dra == 8) {
 					dra = 0x2; /* 8KB */
+				} else if (dra >= 16) {
+					/* Page sizes larger then supported are
+					 * set to 8KB to use module partially.
+					 */
+					PRINT_DEBUG("Page size forced to 8KB\n");
+					dra = 0x2; /* 8KB */
 				} else {
 					dra = -1;
 				}
@@ -808,6 +831,10 @@ 
 					dra = 0x05; /* 4KB */
 				} else if (dra == 8) {
 					dra = 0x0a; /* 8KB */
+				} else if (dra >= 16) {
+					/* Ditto */
+					PRINT_DEBUG("Page size forced to 8KB\n");
+					dra = 0x0a; /* 8KB */
 				} else {
 					dra = -1;
 				}
@@ -826,7 +853,7 @@ 
 			/*
 			 * 440BX supports asymmetrical dual-sided DIMMs,
 			 * but can't handle DIMMs smaller than 8MB per
-			 * side or larger than 128MB per side.
+			 * side.
 			 */
 			struct dimm_size sz = spd_get_dimm_size(device);
 			if ((sz.side1 < 8)) {
@@ -834,11 +861,6 @@ 
 					  "are not supported on this NB.\n");
 				die("HALT\n");
 			}
-			if ((sz.side1 > 128)) {
-				print_err("DIMMs > 128MB per side\n"
-					   "are not supported on this NB\n");
-				die("HALT\n");
-			}
 
 			/* Divide size by 8 to set up the DRB registers. */
 			drb += (sz.side1 / 8);