On Wednesday 03 August 2005 07:00, Artis Kugevics artis@mikrotik.com wrote: > I wonder, at what oob offset yaffs2 out-of-band data is placed > for curent yaffs2 users? This offset is taken from default > nand_oobinfo structure in MTD. If not overriden, then it is > nand_oob_64 in mtd/nand/nand_base.c, which sets offset to 2 > (oobfree = {{2,38}}). I should have included the following with my last posting... The hacked nand_read_oob function included in my earlier posting assumes that the first element in the 'oobfree' list defines a region that is sufficient for yaffs2 tags, i.e. at least 28 bytes. The hack does not do the full oob scatter/gather thing. The root problem is that YAFFS2 needs AUTOPLACMENT functionality on mtd->read_oob when MTD is provided the ECC functionality, and mtd->read_oob is providing a raw interface. Our mtd flash i/o setup uses its own struct nand_oobinfo nand_oob_64, see below. I 'reserved' the first 6 bytes because the ST large-page chip we are using (NAND01GW3B2AN6) has bad-block markers at the 1st and the 6th bytes. MTD's equivalent struct (in nand_base.c) starts user data at offset 2 so would/will overwrite the factory installed bad-block status in the sixth byte. [For this reason too we have our own mtd nand_block_bad function and there was some MTD hacking necessary to get that working -- if you need that, e-mail]. -imcd ============== This is from our board-specific NAND setup code: /* We use our own oobinfo data for the STM 128Mbyte large page device. * It has factory bad block indicators in the 1st and 6th bytes. * MTD's oobinfo data for these type of parts is different. * * Large page (2k) devices have 64 bytes of 'spare' (oob) data. * We provide 34 bytes of 'oobfree' data for user/filesystem use; * bytes 6-40 inclusive. YAFFS2 needs 28 bytes for its tags; this * is stored in the 'oobfree' area. 24 bytes of ECC for the 2K page * is stored in 'eccpos', see below; this is managed by MTD. */ static struct nand_oobinfo nand_oob_64 = { .useecc = MTD_NANDECC_AUTOPLACE, .eccbytes = 24, .eccpos = { 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 }, .oobfree = { {6, 34} } };