On Friday 19 January 2007 16:03, howhowwork wrote:
> Hi
> Thank you for your help !
> I did the test using nandflash as root filesystem , my yaffs2 filesytem
> run right.
>
> Now i am suspicious of my nandfash and norflash about static bus :
> in my nandflash driver Au1550nd.c
> static void au1xxx_nand_select_chip(struct mtd_info *mtd, int chip)
> {
> switch(chip) {
> case -1:
> /* deassert chip enable */
> au_writel(au_readl(MEM_STNDCTL) & ~(1<<(4+NAND_CS)), MEM_STNDCTL);
> break;
> case 0:
> /* assert (force assert) chip enable */
> au_writel(au_readl(MEM_STNDCTL) | (1<<(4+NAND_CS)) , MEM_STNDCTL);
> break; default:
> BUG();
> }
> }
> -CE manually permitting the NAND controller to do this. Keeping -CE
> asserted during the whole sector reads interferes with the NOR flash
> drivers
> so it causes contention on the static bus.
> Can you give me any idea ?
Fiddling with the CE might be the cause of your problems. Some NAND parts
allow you to change the CE during a transaction and some others do not.
I siuggest you refer to your datasheets and check the timing etc.
>
>
>
>
>
>
> howhowwork
> 2007-01-19
>
>
>
> 发件人: Charles Manning
> 发送时间: 2007-01-19 09:12:26
> 收件人: yaffs@lists.aleph1.co.uk
> 抄送: howhowwork; cqdxlijie
> 主题: Re: [Yaffs] yaffs2 ecc error
>
> On Friday 19 January 2007 13:25, howhowwork wrote:
> > Hi ,
> >
> > I have mips board au1200 with a Samsung K9f1208V 64MB NAND flash which
> > is 528bytes/page and nor flash with 32M. i have established a jffs2
> > filesystem as root filesystem in nor flash with 32M ,my sytem is ok if
> > only use nor flash . now i plan to mount nand flash under jffs2
> > filesystem . I downloaded the newest yaffs2 code from
> > "http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs" and place it to linux
> > kernel 2.6.11. I select yafss and mtd support from muneconfig. After
> > make, I got the error messages
> > at the end:
> >
> > all of transport is passed
> >
> > 1. i boot my board using jffs2 filesystem as root filesystem
> > # cat /proc/mtd
> > dev: size erasesize name
> > mtd0: 03c00000 00020000 "User11 FS"
> > mtd1: 00100000 00020000 "YAMON"
> > mtd2: 002c0000 00020000 "raw kernel"
> > mtd3: 00800000 00004000 "NAND FSa 0"
> > mtd4: 03800000 00004000 "NAND FSa 1"
> >
> > 2. using the tools "flash_eraseall /dev/mtd6 ",passed
> >
> > 3. # mount -tyaffs /dev/mtdblock4 /mnt/
> > yaffs: dev is 32505860 name is "mtdblock4"
> > yaffs: Attempting MTD mount on 31.4, "mtdblock4"
> >
> > 4. then there are erros when copying data to mnt's directory
> > the questions :
> > when copy less 120k data , no errors,and the data is correct after i
> > reboot however , copying more 100k data ,there are the following errors:
> > .........................................
> > ** > >mtd ecc error unfixed on chunk 113984:0
> > ** > >mtd ecc error unfixed on chunk 113984:1
> > ** > >Block 3562 marked for retirement
> > ** > > yaffs chunk 114016 was not erased
> > ** > > Erasure failed 3563
> > ** > > Block 3563 retired
> > ......
> > ** > > yaffs chunk 416 was not erased
> > ** > > Erasure failed 13
> > ......
> > yaffs tragedy: no more eraased blocks
> > !!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!
> > ......
> > ** > >mtd ecc error unfixed on chunk 1375:0
> > ** > >mtd ecc error unfixed on chunk 1375:1
> > ** > >Block 42 marked for retirement
> > yaffs tragedy: no more eraased blocks
> > !!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!
> > .........................................
> > then i try to exc command "df"
> > /mnt # df
> > Filesystem 1k-blocks Used Available Use% Mounted on
> > /dev/mtdblock0 61440 27308 34132 44% /
> > tmpfs 512 60 452 12% /var
> > /dev/loop1 1244 1244 0 100% /root/test
> > /dev/mtdblock4 57344 57344 0 100% /mnt
> >
> > exc command "reboot"
> > /mnt #df
> > Filesystem 1k-blocks Used Available Use% Mounted on
> > /dev/mtdblock0 61440 27308 34132 44% /
> > tmpfs 512 60 452 12% /var
> > /dev/loop1 1244 1244 0 100% /root/test
> > /dev/mtdblock4 57344 57344 0 2% /mnt
> >
> > why ...
> > what is somthing wrong ?
>
> You are getting some ecc errors, most likely because your oob-area data
> placement is conflicting with the way your nand driver is working.
>
> I suggest having a very good look at usgae of the oob bytes and looking for
> any conflicts.
>
> > according to some suggustion , I changed my oob placement as
> > following
> >
> >
> > /* Define default oob placement schemes for large and small page
> > devices */ static struct nand_oobinfo nand_oob_8 = {
> > .useecc = MTD_NANDECC_AUTOPLACE,
> > .eccbytes = 3,
> > .eccpos = {0, 1, 2},
> > .oobfree = { {3, 2}, {6, 2} }
> > };
> >
> > static struct nand_oobinfo nand_oob_16 = {
> > .useecc = MTD_NANDECC_AUTOPLACE,
> > .eccbytes = 6,
> > .eccpos = {0, 1, 2, 3, 6, 7},
> > .oobfree = { {8, 8} }
> > };
> >
> > 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 = { {2, 38} }
> > };
> >
> > -------------------------------------------------------------------------
> >-
> >
> > While oob placements definition in yaffs_mtdif.c
> >
> > static struct nand_oobinfo yaffs_oobinfo = {
> > .useecc = 1,
> > .eccbytes = 6,
> > .eccpos = {8, 9, 10, 13, 14, 15}
> > };
> >
> > then i change the struct " nand_oobinfo nand_oob_16" into
> > static struct nand_oobinfo nand_oob_16 = {
> > .useecc = 1,
> > .eccbytes = 6,
> > .eccpos = {8, 9, 10, 13, 14, 15},
> > };
> >
> > but the errors is the same as before. Anyclues what
> > could be wrong ..
> > Any help will be highly appreciated.
> >
> >
> > regards
> >
> > please help me out ...
> >
> >
> >
> >
> > howhowwork
> > 2007-01-15
>
> .