summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/qemu-mips/README2
-rw-r--r--board/trab/Makefile1
-rw-r--r--board/trab/u-boot.lds1
-rw-r--r--drivers/mtd/spi/eeprom_m95xxx.c1
-rw-r--r--fs/jffs2/jffs2_1pass.c122
-rw-r--r--include/configs/rd6281a.h1
6 files changed, 83 insertions, 45 deletions
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 @@ By Vlad Lungu vlad.lungu@windriver.com 2007-Oct-01
----------------------------------------
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 @@ $(obj)trab_fkt.srec: $(OBJS_FKT) $(LIB)
$(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 @@ SECTIONS
.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_read (uchar *addr, int alen, uchar *buffer, int len)
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 @@ jffs2_1pass_rescan_needed(struct part_info *part)
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 @@ static int jffs2_sum_process_sum_data(struct part_info *part, uint32_t offset,
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;
-
- dbg_summary("Inode at 0x%08x-0x%08x\n",
- offset + spi->offset,
- offset + spi->offset + spi->totlen);
+ if (pass) {
+ spi = sp;
- 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;
-
- sp += JFFS2_SUMMARY_DIRENT_SIZE(spd->nsize);
+ 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);
- 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 @@ int jffs2_sum_scan_sumnode(struct part_info *part, uint32_t offset,
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 @@ crc_err:
return 0;
}
+#endif /* CONFIG_JFFS2_SUMMARY */
#ifdef DEBUG_FRAGMENTS
static void
@@ -1430,13 +1466,16 @@ jffs2_1pass_build_lists(struct part_info * part)
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 @@ jffs2_1pass_build_lists(struct part_info * part)
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
/*