PERFORCE change 135623 for review

Marcel Moolenaar marcel at FreeBSD.org
Sun Feb 17 20:35:00 PST 2008


http://perforce.freebsd.org/chv.cgi?CH=135623

Change 135623 by marcel at marcel_xcllnt on 2008/02/18 04:34:45

	Use uboot_address as the basis for where we start
	looking for the API signature. We search the 1MB
	of memory (aligned) in which uboot_address points.
	If uboot_address is 0, we search the last 1MB of
	memory, assuming 256MB of RAM.

Affected files ...

.. //depot/projects/e500/sys/boot/uboot/lib/glue.c#5 edit

Differences ...

==== //depot/projects/e500/sys/boot/uboot/lib/glue.c#5 (text+ko) ====

@@ -71,6 +71,8 @@
 
 extern int		syscall(int, int *, ...);
 
+/* Some random address used by U-Boot. */
+extern long		uboot_address;
 
 /* crc32 stuff stolen from lib/libdisk/write_ia64_disk.c */
 static uint32_t crc32_tab[] = {
@@ -158,10 +160,6 @@
 	return 1;
 }
 
-#define API_SEARCH_START	(255*1024*1024)		/* start at 1MB below the RAM top */
-//#define API_SEARCH_START	0
-#define API_SEARCH_END		(256 * 1024 * 1024 - 1)	/* ...and search to the end */
-
 /*
  * Searches for the U-Boot API signature
  *
@@ -169,14 +167,17 @@
  */
 int api_search_sig(struct api_signature **sig) {
 
-	unsigned char *sp;
+	unsigned char *sp, *spend;
 
 	if (sig == NULL)
 		return 0;
 
-	sp = (unsigned char *)API_SEARCH_START;
+	if (uboot_address == 0)
+		uboot_address = 255 * 1024 * 1024;
 
-	while ((sp + (int)API_SIG_MAGLEN) < (unsigned char *)API_SEARCH_END) {
+	sp = (void *)(uboot_address & ~0x000fffff);
+	spend = sp + 0x00100000 - API_SIG_MAGLEN;
+	while (sp < spend) {
 		if (!bcmp(sp, API_SIG_MAGIC, API_SIG_MAGLEN)) {
 			*sig = (struct api_signature *)sp;
 			if (valid_sig(*sig))


More information about the p4-projects mailing list