MVME5100 and bugboot fails

Matt Porter mporter at mvista.com
Fri Sep 7 00:03:58 EST 2001


On Thu, Sep 06, 2001 at 08:56:39AM -0700, Tom Rini wrote:
>
> On Thu, Sep 06, 2001 at 11:36:39AM -0400, Brian Waite wrote:
>
> > I tried that and I was unable to relocate just the initrd. Right now, I just
> > tested to see:
> > if  ((zImage_start >= 0xf0000000) || (zImage_start <= 0x00800000))
> >
> > That seems to work for now, but I'll take a peek at the gemeni and see how
> > they do it.
>
> Er, after re-reading, it's wrong too.  I'll send you a patch
> privately, if you can test it.

This location checking logic is all a hack...I've already stared at this
a while to make it work for someone.  I recommend we _always_ relocate
both zImage and initrd (if present).

See the attached patch to misc-simple.c (this is versus 2.4.2ish, but
should apply cleanly) which gets the initrd relocated properly...it's
tested with bugboot.

--
Matt Porter
MontaVista Software, Inc.
mporter at mvista.com
-------------- next part --------------
--- linux-2.4.2_hhl20/arch/ppc/boot/common/misc-simple.c.orig	Wed Sep  5 14:31:27 2001
+++ linux-2.4.2_hhl20/arch/ppc/boot/common/misc-simple.c	Wed Sep  5 14:51:49 2001
@@ -97,39 +97,27 @@
 		initrd_start = 0;
 	initrd_end = INITRD_SIZE + initrd_start;

-	/*
-	 * Find a place to stick the zimage and initrd and
-	 * relocate them if we have to. -- Cort
-	 */
+	/* relocate zimage */
 	avail_ram = (char *)PAGE_ALIGN((unsigned long)_end);
 	puts("zimage at:     "); puthex((unsigned long)zimage_start);
 	puts(" "); puthex((unsigned long)(zimage_size+zimage_start)); puts("\n");
-	if ( (unsigned long)zimage_start <= 0x00800000 )
-	{
-		memcpy( (void *)avail_ram, (void *)zimage_start, zimage_size );
-		zimage_start = (char *)avail_ram;
-		puts("relocated to:  "); puthex((unsigned long)zimage_start);
-		puts(" ");
-		puthex((unsigned long)zimage_size+(unsigned long)zimage_start);
-		puts("\n");
+	memcpy( (void *)avail_ram, (void *)zimage_start, zimage_size );
+	zimage_start = (char *)avail_ram;
+	puts("relocated to:  "); puthex((unsigned long)zimage_start);
+	puts(" ");
+	puthex((unsigned long)zimage_size+(unsigned long)zimage_start);
+	puts("\n");

-		/* relocate initrd */
-		if ( initrd_start )
-		{
-			puts("initrd at:     "); puthex(initrd_start);
-			puts(" "); puthex(initrd_end); puts("\n");
-			avail_ram = (char *)PAGE_ALIGN(
-				(unsigned long)zimage_size+(unsigned long)zimage_start);
-			memcpy ((void *)avail_ram, (void *)initrd_start, INITRD_SIZE );
-			initrd_start = (unsigned long)avail_ram;
-			initrd_end = initrd_start + INITRD_SIZE;
-			puts("relocated to:  "); puthex(initrd_start);
-			puts(" "); puthex(initrd_end); puts("\n");
-		}
-	} else if ( initrd_start ) {
-		puts("initrd at:     "); puthex(initrd_start);
-		puts(" "); puthex(initrd_end); puts("\n");
-	}
+	/* relocate initrd */
+	puts("initrd at:     "); puthex(initrd_start);
+	puts(" "); puthex(initrd_end); puts("\n");
+	avail_ram = (char *)PAGE_ALIGN(
+			(unsigned long)zimage_size+(unsigned long)zimage_start);
+	memcpy ((void *)avail_ram, (void *)initrd_start, INITRD_SIZE );
+	initrd_start = (unsigned long)avail_ram;
+	initrd_end = initrd_start + INITRD_SIZE;
+	puts("relocated to:  "); puthex(initrd_start);
+	puts(" "); puthex(initrd_end); puts("\n");

 	avail_ram = (char *)0x00400000;
 	end_avail = (char *)0x00800000;


More information about the Linuxppc-embedded mailing list