diff options
-rw-r--r-- | board/qemu-mips/README | 2 | ||||
-rw-r--r-- | board/trab/Makefile | 1 | ||||
-rw-r--r-- | board/trab/u-boot.lds | 1 | ||||
-rw-r--r-- | drivers/mtd/spi/eeprom_m95xxx.c | 1 | ||||
-rw-r--r-- | fs/jffs2/jffs2_1pass.c | 122 | ||||
-rw-r--r-- | include/configs/rd6281a.h | 1 |
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 /* |