Merge branch 'master' of /home/wd/git/u-boot/custodians
diff --git a/board/qemu-mips/README b/board/qemu-mips/README
index 4c1f8ed..565241b 100644
--- a/board/qemu-mips/README
+++ b/board/qemu-mips/README
@@ -2,7 +2,7 @@
 ----------------------------------------
 Qemu is a full system emulator. See
 
-http://fabrice.bellard.free.fr/qemu
+http://www.nongnu.org/qemu/
 
 Limitations & comments
 ----------------------
diff --git a/board/trab/Makefile b/board/trab/Makefile
index 2afad88..27d75f3 100644
--- a/board/trab/Makefile
+++ b/board/trab/Makefile
@@ -49,7 +49,6 @@
 	$(LD) -g -Ttext $(LOAD_ADDR) -o $(<:.o=) -e trab_fkt $^ $(LIB) \
 		-L$(obj)../../examples/standalone -lstubs \
 		-L$(obj)../../lib_generic -lgeneric \
-		$(obj)../../lib_arm/div0.o \
 		$(PLATFORM_LIBS)
 	$(OBJCOPY) -O srec $(<:.o=) $@
 
diff --git a/board/trab/u-boot.lds b/board/trab/u-boot.lds
index d8bcfa4..c3d5c49 100644
--- a/board/trab/u-boot.lds
+++ b/board/trab/u-boot.lds
@@ -33,7 +33,6 @@
 	.text      :
 	{
 	  cpu/arm920t/start.o	(.text)
-	  lib_arm/_umodsi3.o	(.text)
 	  lib_generic/zlib.o	(.text)
 	  lib_generic/crc32.o	(.text)
 	  lib_generic/string.o	(.text)
diff --git a/drivers/mtd/spi/eeprom_m95xxx.c b/drivers/mtd/spi/eeprom_m95xxx.c
index 59f80e3..0148d00 100644
--- a/drivers/mtd/spi/eeprom_m95xxx.c
+++ b/drivers/mtd/spi/eeprom_m95xxx.c
@@ -71,7 +71,6 @@
 ssize_t spi_write (uchar *addr, int alen, uchar *buffer, int len)
 {
 	struct spi_slave *slave;
-	int i;
 	char buf[3];
 
 	slave = spi_setup_slave(CONFIG_DEFAULT_SPI_BUS, 1, 1000000,
diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index b61a6f9..1923ed9 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -120,6 +120,7 @@
 #include <jffs2/jffs2.h>
 #include <jffs2/jffs2_1pass.h>
 #include <linux/mtd/compat.h>
+#include <asm/errno.h>
 
 #include "jffs2_private.h"
 
@@ -1200,8 +1201,30 @@
 	return 0;
 }
 
+#ifdef CONFIG_JFFS2_SUMMARY
+static u32 sum_get_unaligned32(u32 *ptr)
+{
+	u32 val;
+	u8 *p = (u8 *)ptr;
+
+	val = *p | (*(p + 1) << 8) | (*(p + 2) << 16) | (*(p + 3) << 24);
+
+	return __le32_to_cpu(val);
+}
+
+static u16 sum_get_unaligned16(u16 *ptr)
+{
+	u16 val;
+	u8 *p = (u8 *)ptr;
+
+	val = *p | (*(p + 1) << 8);
+
+	return __le16_to_cpu(val);
+}
+
 #define dbg_summary(...) do {} while (0);
-/* Process the stored summary information - helper function for
+/*
+ * Process the stored summary information - helper function for
  * jffs2_sum_scan_sumnode()
  */
 
@@ -1210,54 +1233,64 @@
 				struct b_lists *pL)
 {
 	void *sp;
-	int i;
+	int i, pass;
+	void *ret;
 
-	sp = summary->sum;
+	for (pass = 0; pass < 2; pass++) {
+		sp = summary->sum;
 
-	for (i = 0; i < summary->sum_num; i++) {
-		dbg_summary("processing summary index %d\n", i);
+		for (i = 0; i < summary->sum_num; i++) {
+			struct jffs2_sum_unknown_flash *spu = sp;
+			dbg_summary("processing summary index %d\n", i);
 
-		switch (((struct jffs2_sum_unknown_flash *)sp)->nodetype) {
-			case JFFS2_NODETYPE_INODE: {
+			switch (sum_get_unaligned16(&spu->nodetype)) {
+				case JFFS2_NODETYPE_INODE: {
 				struct jffs2_sum_inode_flash *spi;
-				spi = sp;
+					if (pass) {
+						spi = sp;
 
-				dbg_summary("Inode at 0x%08x-0x%08x\n",
-					    offset + spi->offset,
-					    offset + spi->offset + spi->totlen);
-
-				if (insert_node(&pL->frag, (u32) part->offset +
-						offset + spi->offset) == NULL)
-					return -1;
+						ret = insert_node(&pL->frag,
+							(u32)part->offset +
+							offset +
+							sum_get_unaligned32(
+								&spi->offset));
+						if (ret == NULL)
+							return -1;
+					}
 
-				sp += JFFS2_SUMMARY_INODE_SIZE;
+					sp += JFFS2_SUMMARY_INODE_SIZE;
 
-				break;
-			}
-
-			case JFFS2_NODETYPE_DIRENT: {
-				struct jffs2_sum_dirent_flash *spd;
-				spd = sp;
-
-				dbg_summary("Dirent at 0x%08x-0x%08x\n",
-					    offset + spd->offset,
-					    offset + spd->offset + spd->totlen);
-
-				if (insert_node(&pL->dir, (u32) part->offset +
-						offset + spd->offset) == NULL)
-					return -1;
+					break;
+				}
+				case JFFS2_NODETYPE_DIRENT: {
+					struct jffs2_sum_dirent_flash *spd;
+					spd = sp;
+					if (pass) {
+						ret = insert_node(&pL->dir,
+							(u32) part->offset +
+							offset +
+							sum_get_unaligned32(
+								&spd->offset));
+						if (ret == NULL)
+							return -1;
+					}
 
-				sp += JFFS2_SUMMARY_DIRENT_SIZE(spd->nsize);
+					sp += JFFS2_SUMMARY_DIRENT_SIZE(
+							spd->nsize);
 
-				break;
-			}
-			default : {
-				uint16_t nodetype =
-					((struct jffs2_sum_unknown_flash *)
-					 sp)->nodetype;
-				printf("Unsupported node type %x found in "
-						"summary!\n", nodetype);
-				break;
+					break;
+				}
+				default : {
+					uint16_t nodetype = sum_get_unaligned16(
+								&spu->nodetype);
+					printf("Unsupported node type %x found"
+							" in summary!\n",
+							nodetype);
+					if ((nodetype & JFFS2_COMPAT_MASK) ==
+							JFFS2_FEATURE_INCOMPAT)
+						return -EIO;
+					return -EBADMSG;
+				}
 			}
 		}
 	}
@@ -1315,6 +1348,8 @@
 		dbg_summary("Summary : CLEANMARKER node \n");
 
 	ret = jffs2_sum_process_sum_data(part, offset, summary, pL);
+	if (ret == -EBADMSG)
+		return 0;
 	if (ret)
 		return ret;		/* real error */
 
@@ -1325,6 +1360,7 @@
 
 	return 0;
 }
+#endif /* CONFIG_JFFS2_SUMMARY */
 
 #ifdef DEBUG_FRAGMENTS
 static void
@@ -1430,13 +1466,16 @@
 		uint32_t buf_ofs = sector_ofs;
 		uint32_t buf_len;
 		uint32_t ofs, prevofs;
+#ifdef CONFIG_JFFS2_SUMMARY
 		struct jffs2_sum_marker *sm;
 		void *sumptr = NULL;
 		uint32_t sumlen;
 		int ret;
+#endif
 
 		WATCHDOG_RESET();
 
+#ifdef CONFIG_JFFS2_SUMMARY
 		buf_len = sizeof(*sm);
 
 		/* Read as much as we want into the _end_ of the preallocated
@@ -1489,6 +1528,7 @@
 				continue;
 
 		}
+#endif /* CONFIG_JFFS2_SUMMARY */
 
 		buf_len = EMPTY_SCAN_SIZE(part->sector_size);
 
diff --git a/include/configs/rd6281a.h b/include/configs/rd6281a.h
index 3d8e25c..3f4d42c 100644
--- a/include/configs/rd6281a.h
+++ b/include/configs/rd6281a.h
@@ -107,6 +107,7 @@
 #define NAND_MAX_CHIPS			1
 #define CONFIG_SYS_NAND_BASE		0xD8000000	/* KW_DEFADR_NANDF */
 #define NAND_ALLOW_ERASE_ALL		1
+#define CONFIG_SYS_64BIT_VSPRINTF	/* needed for nand_util.c */
 #endif
 
 /*