* Patch by Yuli Barcohen, 3 Dec 2003:
  "revive" U-Boot support for old Motorola MPC860ADS board

* Patch by Cam(ilo?), 03 Dec 2003:
  make examples build even with broken Montavista objcopy

* Patch by Pavel Bartusek, 27 Nov 2003:
  fix conversion problem with "bootretry" evironment variable
diff --git a/board/fads/config.mk b/board/fads/config.mk
index a9dbb8e..bad02f2 100644
--- a/board/fads/config.mk
+++ b/board/fads/config.mk
@@ -22,9 +22,9 @@
 #
 
 #
-# FADS boards
+# Motorola old MPC821/860ADS, MPC8xxFADS, and new MPC866ADS boards
 #
 
-#TEXT_BASE = 0xFE000000
-TEXT_BASE = 0x02800000
-OBJCFLAGS =	--set-section-flags=.ppcenv=contents,alloc,load,data
+TEXT_BASE = 0xFE000000
+#TEXT_BASE = 0x02800000
+#OBJCFLAGS = --set-section-flags=.ppcenv=contents,alloc,load,data
diff --git a/board/fads/fads.c b/board/fads/fads.c
index 3856b45..aca7b28 100644
--- a/board/fads/fads.c
+++ b/board/fads/fads.c
@@ -360,7 +360,11 @@
 
 	switch (noMbytes) {
 	case 4:				/* 4 Mbyte uses only CS2 */
+#ifdef CONFIG_ADS
+		memctl->memc_mamr = 0xc0a21114;
+#else
 		memctl->memc_mamr = 0x13a01114;	/* PTA 0x13 AMA 010 */
+#endif
 		memctl->memc_or2 = 0xffc00800;	/* 4M */
 		break;
 
@@ -393,17 +397,18 @@
 
 	memctl->memc_br2 = 0x81 + base;	/* use upma */
 
+	*((uint *) BCSR1) &= ~BCSR1_DRAM_EN;	/* enable dram */
+
 	/* if no dimm is inserted, noMbytes is still detected as 8m, so
 	 * sanity check top and bottom of memory */
 
-	*((uint *) BCSR1) &= ~BCSR1_DRAM_EN;	/* enable dram */
-
 	/* check bytes / 2 because dram_size tests at base+bytes, which
 	 * is not mapped */
-	if (dram_size ((long *) base, noMbytes << 19) != noMbytes << 19) {
-		*((uint *) BCSR1) |= BCSR1_DRAM_EN;	/* disable dram */
-		return -1;
-	}
+	if (noMbytes == 8)
+		if (dram_size ((long *) base, noMbytes << 19) != noMbytes << 19) {
+			*((uint *) BCSR1) |= BCSR1_DRAM_EN;	/* disable dram */
+			return -1;
+		}
 
 	return 0;
 }
diff --git a/board/fads/lamp.c b/board/fads/lamp.c
index b121477..4e58291 100644
--- a/board/fads/lamp.c
+++ b/board/fads/lamp.c
@@ -1,4 +1,7 @@
 #include <config.h>
+
+#ifndef CONFIG_ADS /* Old ADS has not got any user-controllable LED */
+
 #include <common.h>
 
 void
@@ -40,3 +43,5 @@
     signal_delay(0x00100000);
   }
 }
+
+#endif /* !CONFIG_ADS */
diff --git a/board/fads/u-boot.lds b/board/fads/u-boot.lds
index 41776d1..5fe5e22 100644
--- a/board/fads/u-boot.lds
+++ b/board/fads/u-boot.lds
@@ -22,9 +22,6 @@
  */
 
 OUTPUT_ARCH(powerpc)
-SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
 SECTIONS
 {
   /* Read-only sections, merged into text segment: */
@@ -33,41 +30,30 @@
   .hash          : { *(.hash)		}
   .dynsym        : { *(.dynsym)		}
   .dynstr        : { *(.dynstr)		}
-  .rel.text      : { *(.rel.text)		}
+  .rel.text      : { *(.rel.text)	}
   .rela.text     : { *(.rela.text) 	}
-  .rel.data      : { *(.rel.data)		}
+  .rel.data      : { *(.rel.data)	}
   .rela.data     : { *(.rela.data) 	}
   .rel.rodata    : { *(.rel.rodata) 	}
   .rela.rodata   : { *(.rela.rodata) 	}
-  .rel.got       : { *(.rel.got)		}
-  .rela.got      : { *(.rela.got)		}
+  .rel.got       : { *(.rel.got)	}
+  .rela.got      : { *(.rela.got)	}
   .rel.ctors     : { *(.rel.ctors)	}
   .rela.ctors    : { *(.rela.ctors)	}
   .rel.dtors     : { *(.rel.dtors)	}
   .rela.dtors    : { *(.rela.dtors)	}
-  .rel.bss       : { *(.rel.bss)		}
-  .rela.bss      : { *(.rela.bss)		}
-  .rel.plt       : { *(.rel.plt)		}
-  .rela.plt      : { *(.rela.plt)		}
-  .init          : { *(.init)	}
+  .rel.bss       : { *(.rel.bss)	}
+  .rela.bss      : { *(.rela.bss)	}
+  .rel.plt       : { *(.rel.plt)	}
+  .rela.plt      : { *(.rela.plt)	}
+  .init          : { *(.init)		}
   .plt : { *(.plt) }
   .text      :
   {
-    /* WARNING - the following is hand-optimized to fit within	*/
-    /* the sector layout of our flash chips!	XXX FIXME XXX	*/
+    cpu/mpc8xx/start.o		(.text)
 
-    cpu/mpc8xx/start.o	(.text)
-/*
-    cpu/mpc8xx/start.o	(.text)
-    common/dlmalloc.o	(.text)
-    lib_ppc/ppcstring.o	(.text)
-    lib_generic/vsprintf.o	(.text)
-    lib_generic/crc32.o		(.text)
-    lib_generic/zlib.o		(.text)
-
-    . = env_offset;
-    common/environment.o(.text)
-*/
+    . = DEFINED(env_offset) ? env_offset : .;
+    common/environment.o	(.ppcenv)
 
     *(.text)
     *(.fixup)
@@ -136,11 +122,7 @@
    *(.bss)
    *(COMMON)
   }
-  . = ALIGN(256 * 1024);
-  .ppcenv	:
-  {
-    common/environment.o (.ppcenv)
-  }
   _end = . ;
   PROVIDE (end = .);
 }
+ENTRY(_start)