[U-Boot-Users] JFFS2 images on NAND flash

Hi,
is anybody using U-Boot's NAND subsystem to write jffs2 images to NAND flash? It seems that images written by U-Boot are not compatible to what Linux expects.
This is what I did:
1) I created the jffs2 image using mkfs.jffs2 from ELDK 4.1: mkfs.jffs2 -n -b -p -s 2048 -e 0x20000 -d test -o /tftpboot/du440/test.img
2a) Flashing and mounting under Linux is fine: du440:~# flash_eraseall /dev/mtd4 du440:~# nandwrite /dev/mtd4 test_jffs2.img du440:~# mount /nand0
2b) Flashing with U-Boot:
U-Boot 1.2.0-gfdd1d6dc-dirty (Apr 17 2007 - 14:39:52)
CPU: AMCC PowerPC 440EPx Rev. A at 533.333 MHz (PLB=133, OPB=66, EBC=66 MHz) Security/Kasumi support I2C boot EEPROM disabled Bootstrap Option C - Boot ROM Location EBC (16 bits) Internal PCI arbiter enabled, PCI async ext clock used 32 kB I-Cache 32 kB D-Cache Board: DU440, serial# AA0004, HW-Rev. 1.0, CPLD-Rev. 1.1 I2C: ready DTT: 1 is 36 C DTT: 2 is 49 C DRAM: Slot 0 populated with DDR2 DIMM Ref. Buffalo D2N533B - Component: unknown 1024 MB FLASH: 4 MB NAND: 512 MiB PCI: Bus Dev VenId DevId Class Int 00 0c 126f 0720 0300 00 In: serial Out: serial Err: serial USB: Host(int phy) Net: ppc_4xx_eth0 USBhub: ERROR: writing to register 0x00 failed Hit any key to stop autoboot: 0 => nand info
Device 0: NAND 256MiB 3,3V 8-bit, sector size 128 KiB Device 1: NAND 256MiB 3,3V 8-bit, sector size 128 KiB => nand erase clean
NAND erase: device 0 whole chip Skipping bad block at 0x00000000 Skipping bad block at 0x00040000 Skipping bad block at 0x00120000 Skipping bad block at 0x08160000 Skipping bad block at 0x0f740000 Erasing at 0xffe0000 -- 100% complete. Cleanmarker written at 0xffe0000. OK => tftp 200000 /tftpboot/du440/target_root_du440/test_jffs2.img ... Bytes transferred = 2490368 (260000 hex) => nand write.jffs2 200000 0 $(filesize)
NAND write: device 0 offset 0x0, size 0x260000
Bad block at 0x0 in erase block from 0x0 will be skipped Bad block at 0x40000 in erase block from 0x40000 will be skipped Bad block at 0x120000 in erase block from 0x120000 will be skipped Writing data at 0x2bf800 -- 100% complete. 2490368 bytes written: OK => boot ... du440:~# mount -t jffs2 /dev/mtdblock4 /nand0 mtd->read(0x400 bytes from 0x20000) returned ECC error mtd->read(0x1fc3c bytes from 0x203c4) returned ECC error mtd->read(0x400 bytes from 0x60000) returned ECC error mtd->read(0x1f8cc bytes from 0x60734) returned ECC error mtd->read(0x400 bytes from 0x80000) returned ECC error mtd->read(0x1f954 bytes from 0x806ac) returned ECC error ...
some more information: -mkfs.jffs2 comes from the ELDK 4.1 distribution -U-Boot is updated to current git repository -Linux kernel is synced to Denx Linux kernel git repository -U-Boot port for this board will be commited when current issues are solved.
I also noticed that the NAND+JFFS2 code has never been tested on large block NANDs. jffs2_1pass.c definetly looks like small block NAND only:
#define NAND_PAGE_SIZE 512 #define NAND_PAGE_SHIFT 9
Any ideas?
Matthias
participants (1)
-
Matthias Fuchs