[OpenBIOS] [commit] r1121 - trunk/openbios-devel/libopenbios

repository service svn at openbios.org
Fri Apr 19 09:04:02 CEST 2013


Author: mcayland
Date: Fri Apr 19 09:03:59 2013
New Revision: 1121
URL: http://tracker.coreboot.org/trac/openbios/changeset/1121

Log:
OFMEM: Fix bad alignments passed into the OFMEM claim words

If a memory claim is made with an alignment that is not an exact power of
2, round up to the nearest power of 2 as per the IEEE1275 specification
rather than switching to a 4K default.

Also we make sure that the minimum alignment is equivalent to PAGE_SIZE.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>

Modified:
   trunk/openbios-devel/libopenbios/ofmem_common.c

Modified: trunk/openbios-devel/libopenbios/ofmem_common.c
==============================================================================
--- trunk/openbios-devel/libopenbios/ofmem_common.c	Fri Apr 19 09:03:38 2013	(r1120)
+++ trunk/openbios-devel/libopenbios/ofmem_common.c	Fri Apr 19 09:03:59 2013	(r1121)
@@ -425,13 +425,27 @@
 {
 	phys_addr_t base = min;
 	range_t *r2;
+	ucell old_align;
+	int i;
 
 	if( (align & (align-1)) ) {
-		OFMEM_TRACE("bad alignment " FMT_ucell "\n", align);
-		align = 0x1000;
+	
+		/* As per IEEE1275 specification, round up to the nearest power of 2 */
+		old_align = align;
+		if (old_align <= PAGE_SIZE) {
+			align = PAGE_SIZE;
+		} else {
+			align--;
+			for (i = 1; i < sizeof(ucell) * 8; i<<=1) {
+				align |= align >> i;
+			}
+			align++;
+		}
+		
+		OFMEM_TRACE("warning: bad alignment " FMT_ucellx " rounded up to " FMT_ucellx "\n", old_align, align);
 	}
 	if( !align )
-		align = 0x1000;
+		align = PAGE_SIZE;
 
 	base = reverse ? max - size : min;
 	r2 = reverse ? NULL : r;



More information about the OpenBIOS mailing list