Coding Style cleanup, update CHANGELOG
Signed-off-by: Wolfgang Denk <wd@denx.de>
This commit is contained in:
parent
28ac671910
commit
4b0708093e
947
CHANGELOG
947
CHANGELOG
|
@ -1,3 +1,577 @@
|
|||
commit 68cf19aae48f2969ec70669604d0d776f02c8bc4
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Wed Aug 13 18:24:05 2008 -0500
|
||||
|
||||
socrates: Update NAND driver to new API.
|
||||
|
||||
Also, fix some minor formatting issues, and simplify the handling of
|
||||
"state" for writes.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit ba22d10f39eaeedd035e8265616e31ff88e314d5
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Wed Aug 13 18:03:40 2008 -0500
|
||||
|
||||
quad100hd: Update NAND driver to new API.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit f64cb652a8a84c5c34d0afcbd7ffef886aa1d838
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Wed Aug 13 17:53:48 2008 -0500
|
||||
|
||||
m5373evb: Update NAND driver to new API.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 1a23a197c8722b805f40895544bbdb1a648c1c82
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Wed Aug 13 17:04:30 2008 -0500
|
||||
|
||||
s3c24x0: Update NAND driver to new API.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit aa5f75f20db8a7103fad9c34d6f1193e10d1890f
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Wed Aug 13 15:56:00 2008 -0500
|
||||
|
||||
at91: Update board NAND drivers to current API.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit d438d50848e9425286e5fb0493e0affb5a0b1e1b
|
||||
Author: Kyungmin Park <kmpark@infradead.org>
|
||||
Date: Wed Aug 13 09:11:02 2008 +0900
|
||||
|
||||
Fix OneNAND build break
|
||||
|
||||
Since page size field is changed from oobblock to writesize. But OneNAND is not updated.
|
||||
- fix bufferram management at erase operation
|
||||
This patch includes the NAND/OneNAND state filed too.
|
||||
|
||||
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 9483df6408c25f16060432de3868901e352e23bc
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:43 2008 +0200
|
||||
|
||||
drivers/mtd/nand_legacy: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit cc4a0ceeac5462106172d0cc9d9d542233aa3ab2
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:43 2008 +0200
|
||||
|
||||
drivers/mtd/nand: Move conditional compilation to Makefile
|
||||
|
||||
rename CFG_NAND_LEGACY to CONFIG_NAND_LEGACY
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 4fb09b81920e5dfdfc4576883186733f0bd6059c
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:42 2008 +0200
|
||||
|
||||
drivers/mtd/onenand: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 00b1883a4cac59d97cd297b1a3a398db85982865
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:42 2008 +0200
|
||||
|
||||
drivers/mtd: Move conditional compilation to Makefile
|
||||
|
||||
rename CFG_FLASH_CFI_DRIVER to CONFIG_FLASH_CFI_DRIVER
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 7ba44a5521cdb7fa1c72864025cde1e21a6f6921
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:41 2008 +0200
|
||||
|
||||
drivers/qe: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit ab6878c7bc68a7b5e5b731655bdc13221bbfc493
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:40 2008 +0200
|
||||
|
||||
drivers/pci: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 55d6d2d39fe3fe87802e399aa17539368b495d2e
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:40 2008 +0200
|
||||
|
||||
drivers/misc: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 65e41ea0548b86e3d7892defac8e4dc1ea70aed1
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:40 2008 +0200
|
||||
|
||||
drivers/input: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 88f57e093114a44aa9a858d52b099bcc52034a8c
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:39 2008 +0200
|
||||
|
||||
drivers/dma: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 1a02806c4b1b4a09ad4e95d3aac3783889e5f8d7
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:39 2008 +0200
|
||||
|
||||
drivers/block: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 1a6ffbfaf4353bec379ed1fcfc54b6f1a30af09a
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:39 2008 +0200
|
||||
|
||||
serial: move CFG_NS9750_UART to CONFIG_NS9750_UART
|
||||
|
||||
move also conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 6c58a030f86829fa4f0d4337cf4b794c41a1823e
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:38 2008 +0200
|
||||
|
||||
serial: move CFG_SCIF_CONSOLE to CONFIG_SCIF_CONSOLE
|
||||
|
||||
move also conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit d6e9ee92e890f67594ab150689510df361133ead
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:38 2008 +0200
|
||||
|
||||
common: Move conditional compilation to Makefile
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit f5acb9fd9bba1160de3ef349c7d33fe510eda286
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Wed Aug 13 01:40:09 2008 +0200
|
||||
|
||||
mx31: move freescale's mx31 boards to vendor board dir
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 8ed2f5f950e2581214d20b011a8f27a6396d65d2
|
||||
Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
Date: Sat Jul 5 23:11:11 2008 +0200
|
||||
|
||||
at91: move arch-at91sam9 to arch-at91
|
||||
|
||||
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
|
||||
commit 195ccfc5991d48764b2519941e3507f693851d5d
|
||||
Author: Fathi BOUDRA <fabo@debian.org>
|
||||
Date: Wed Aug 6 10:06:20 2008 +0200
|
||||
|
||||
OneNAND: Fill in MTD function pointers for OneNAND.
|
||||
|
||||
onenand_print_device_info():
|
||||
- Now returns a string to be placed in mtd->name,
|
||||
rather than calling printf.
|
||||
- Remove verbose parameter as it becomes useless.
|
||||
|
||||
Signed-off-by: Fathi Boudra <fabo@debian.org>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit aa646643b6bc250cb3a4966bf728876e0c10d329
|
||||
Author: Guennadi Liakhovetski <lg@denx.de>
|
||||
Date: Wed Aug 6 21:42:07 2008 +0200
|
||||
|
||||
nand_spl: Support page-aligned read in nand_load, use chipselect
|
||||
|
||||
Supporting page-aligned reads doesn't incure any sinificant overhead, just
|
||||
a small change in the algorithm. Also replace in_8 with readb, since there
|
||||
is no in_8 on ARM.
|
||||
|
||||
Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 4f32d7760a58fe73981b6edc0b0751565d2daa4c
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Tue Aug 5 11:15:59 2008 -0500
|
||||
|
||||
NAND boot: Update large page support for current API.
|
||||
|
||||
Also, remove the ctrl variable in favor of passing the constants
|
||||
directly, and remove redundant (u8) casts.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit e4c09508545d1c45617ba45391c03c03cbc360b9
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Mon Jun 30 14:13:28 2008 -0500
|
||||
|
||||
NAND boot: MPC8313ERDB support
|
||||
|
||||
Note that with older board revisions, NAND boot may only work after a
|
||||
power-on reset, and not after a warm reset. I don't have a newer board
|
||||
to test on; if you have a board with a 33MHz crystal, please let me know
|
||||
if it works after a warm reset.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit acdab5c33f1ea6f5e08f06f08bc64af23ff40d71
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Thu Jun 26 14:06:52 2008 -0500
|
||||
|
||||
mpc8313erdb: Enable NAND in config.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit c3db8c649c6ab3da2f1411c4c6d61aecea054aa4
|
||||
Author: Guennadi Liakhovetski <lg@denx.de>
|
||||
Date: Thu Jul 31 12:38:26 2008 +0200
|
||||
|
||||
NAND: Do not write or read a whole block if it is larger than the environment
|
||||
|
||||
Environment can be smaller than NAND block size, do not need to read a whole
|
||||
block and minimum for writing is one page. Also remove an unused variable.
|
||||
|
||||
Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit eafcabd15f00c142156235c519fcc55b10993241
|
||||
Author: Marcel Ziswiler <marcel@ziswiler.com>
|
||||
Date: Sun Jun 22 16:30:06 2008 +0200
|
||||
|
||||
NAND: chip->state does not always get set.
|
||||
|
||||
Fixes an issue with chip->state not always being set causing troubles.
|
||||
|
||||
Signed-off-by: Marcel Ziswiler <marcel@ziswiler.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 13f0fd94e3cae6f8a0d9fba5d367e311edc8ebde
|
||||
Author: Ilya Yanok <yanok@emcraft.com>
|
||||
Date: Mon Jun 30 15:34:40 2008 +0200
|
||||
|
||||
NAND: Scan bad blocks lazily.
|
||||
|
||||
Rather than scanning on boot, scan upon the first attempt to check the
|
||||
badness of a block. This speeds up boot when not using NAND, and reduces
|
||||
the likelihood of needing to reflash via JTAG if NAND becomes
|
||||
nonfunctional.
|
||||
|
||||
Signed-off-by: Ilya Yanok <yanok@emcraft.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit dfbf617ff055e4216f78d358b0867c548916d14b
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Thu Jun 12 13:20:16 2008 -0500
|
||||
|
||||
NAND read/write fix
|
||||
|
||||
Implement block-skipping read/write, based on a patch from
|
||||
Morten Ebbell Hestens <morten.hestnes@tandberg.com>.
|
||||
|
||||
Signed-off-by: Morten Ebbell Hestnes <morten.hestnes@tandberg.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 984e03cdf1431bb593aeaa1b74c445d616f955d3
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Thu Jun 12 13:13:23 2008 -0500
|
||||
|
||||
NAND: Always skip blocks on read/write/boot.
|
||||
|
||||
Use of the non-skipping versions was almost always (if not always)
|
||||
an error, and no valid use case has been identified.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit e1c3dbada349992875934575c97b328ab2cb33ca
|
||||
Author: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
Date: Thu Jun 12 11:10:21 2008 -0500
|
||||
|
||||
nand: fsl_upm: convert to updated MTD NAND infrastructure
|
||||
|
||||
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 300253306acc72b1b2e9faf0987f86551151d7cf
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Thu May 22 15:02:46 2008 -0500
|
||||
|
||||
fsl_elbc_nand: Hard-code the FBAR/FPAR split.
|
||||
|
||||
The hardware has separate registers for block and page-within-block,
|
||||
but the division between the two has no apparent relation to the
|
||||
actual erase block size of the NAND chip.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 9c814b0a716aae884bec977b9a032dfa59cfb79a
|
||||
Author: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
Date: Fri Mar 28 22:10:54 2008 +0300
|
||||
|
||||
fsl_elbc_nand: workaround for hangs during nand write
|
||||
|
||||
Using current driver elbc sometimes hangs during nand write. Reading back
|
||||
last byte helps though (thanks to Scott Wood for the idea).
|
||||
|
||||
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 9fd020d6b4b36b9fb67cd834bc1ae7fdba15ee9e
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Fri Mar 21 16:12:51 2008 -0500
|
||||
|
||||
Freescale eLBC FCM NAND driver
|
||||
|
||||
This is a driver for the Flash Control Machine of the enhanched Local Bus
|
||||
Controller found on some Freescale chips (such as the mpc8313 and the
|
||||
mpc8379).
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 41ef8c716e93fdf50efe9c1ba733ca6675daaca6
|
||||
Author: Scott Wood <scottwood@freescale.com>
|
||||
Date: Tue Mar 18 15:29:14 2008 -0500
|
||||
|
||||
Don't panic if a controller driver does ecc its own way.
|
||||
|
||||
Some hardware, such as the enhanced local bus controller used on some
|
||||
mpc83xx chips, does ecc transparently when reading and writing data, rather
|
||||
than providing a generic calculate/correct mechanism that can be exported to
|
||||
the nand subsystem.
|
||||
|
||||
The subsystem should not BUG() when calculate, correct, or hwctl are
|
||||
missing, if the methods that call them have been overridden.
|
||||
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit e52b34d40a8a646e3d11638ea8797e96398dba13
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Thu Jan 10 18:47:33 2008 +0100
|
||||
|
||||
NAND: Make NAND driver less verbose per default
|
||||
|
||||
This patch turns off printing of bad blocks per default upon bootup.
|
||||
This can always be shown via the "nand bad" command later.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit fe56a2772e5c59577df906163d0d4b29b056140e
|
||||
Author: Sergey Kubushyn <ksi@koi8.net>
|
||||
Date: Wed Jan 9 15:36:20 2008 +0100
|
||||
|
||||
NAND: Davinci driver updates
|
||||
|
||||
Here comes a trivial patch to cpu/arm926ejs/davinci/nand.c. Unfortunately I
|
||||
don't have hardware handy so I can not test it at the moment but changes are
|
||||
rather trivial so it should work. It would be nice if somebody with a
|
||||
hardware checked it anyways.
|
||||
|
||||
Signed-off-by: Sergey Kubushyn <ksi@koi8.net>
|
||||
|
||||
commit deac913effd8d80535c9ff4687b6fcdff540c554
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Sat Jan 5 16:50:32 2008 +0100
|
||||
|
||||
NAND: Fix compilation warning and small coding style issue
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit c568f77acdf896fc3dd6413ce53205b17ba809a3
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Sat Jan 5 16:49:37 2008 +0100
|
||||
|
||||
NAND: Update nand_spl driver to match updated nand subsystem
|
||||
|
||||
This patch changes the NAND booting driver nand_spl/nand_boot.c to match
|
||||
the new infrastructure from the updated NAND subsystem. This NAND
|
||||
subsystem was recently synced again with the Linux 2.6.22 MTD/NAND
|
||||
subsystem.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 3df2ece0f0fbba47d27f02fff96c533732b98c14
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Sat Jan 5 16:47:58 2008 +0100
|
||||
|
||||
NAND: Update 4xx NDFC driver to match updated nand subsystem
|
||||
|
||||
This patch changes the 4xx NAND driver ndfc.c to match the new
|
||||
infrastructure from the updated NAND subsystem. This NAND
|
||||
subsystem was recently synced again with the Linux 2.6.22 MTD/NAND
|
||||
subsystem.
|
||||
|
||||
Tested successfully on AMCC Sequoia and Bamboo.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 12072264528eba33737bc9674e19f0e925ffda23
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Sat Jan 5 16:43:25 2008 +0100
|
||||
|
||||
NAND: Change nand_wait_ready() to not call nand_wait()
|
||||
|
||||
This patch changes nand_wait_ready() to not just call nand_wait(),
|
||||
since this will send a new command to the NAND chip. We just want to
|
||||
wait for the chip to become ready here.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 9ad754fef5053144daed3b007adaf1c9bec654c9
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Fri Dec 14 16:33:45 2007 +0100
|
||||
|
||||
make nand dump and nand dump.oob work
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 43ea36fb8fdcbc6e26f0caffe808c63633b18838
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Mon Nov 19 14:46:00 2007 +0100
|
||||
|
||||
moving files from yaffs2/direct/ to yaffs2/ and deleting all symlinks
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
|
||||
commit 98824ce3f95e6c4d08d439b779c0acb0048045a6
|
||||
Author: William Juul <william.juul@tandberg.com>
|
||||
Date: Tue Jun 10 16:18:13 2008 -0500
|
||||
|
||||
Clean out unneeded files
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
|
||||
commit ec29a32b5a71b203f7d9087f1f4d786e7f13dd23
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Fri Nov 16 08:44:27 2007 +0100
|
||||
|
||||
Create symlinks from yaffs2/direct to yaffs2
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
|
||||
commit 90ef117b68387d66763291af0117677644166611
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Thu Nov 15 12:23:57 2007 +0100
|
||||
|
||||
Incorporate yaffs2 into U-boot
|
||||
|
||||
To use YAFFS2 define CONFIG_YAFFS2
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 0e8cc8bd92257da2e1df88cbc985e166e472ce61
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Thu Nov 15 11:13:05 2007 +0100
|
||||
|
||||
YAFFS2 import
|
||||
|
||||
Direct import of yaffs as a tarball as of 20071113 from their public
|
||||
CVS-web at http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2/
|
||||
|
||||
The code can also be imported on the command line with:
|
||||
export CVSROOT=:pserver:anonymous@cvs.aleph1.co.uk:/home/aleph1/cvs cvs logon
|
||||
(Hit return when asked for a password)
|
||||
cvs checkout yaffs2
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
Signed-off-by: Stig Olsen <stig.olsen@tandberg.com>
|
||||
|
||||
commit 3043c045d5a9897faba7d5c7218c2f4d06cd0038
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Wed Nov 14 14:28:11 2007 +0100
|
||||
|
||||
Whitespace cleanup and marking broken code.
|
||||
|
||||
Changes requested by maintainer Stefan Roese after
|
||||
posting patch to U-boot mailing list.
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 5e1dae5c3db7f4026f31b6a2a81ecd9e9dee475f
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Fri Nov 9 13:32:30 2007 +0100
|
||||
|
||||
Fixing coding style issues
|
||||
|
||||
- Fixing leading white spaces
|
||||
- Fixing indentation where 4 spaces are used instead of tab
|
||||
- Removing C++ comments (//), wherever I introduced them
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit 4cbb651b29cb64d378a06729970e1e153bb605b1
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Thu Nov 8 10:39:53 2007 +0100
|
||||
|
||||
Remove white space at end.
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit cfa460adfdefcc30d104e1a9ee44994ee349bb7b
|
||||
Author: William Juul <william.juul@datarespons.no>
|
||||
Date: Wed Oct 31 13:53:06 2007 +0100
|
||||
|
||||
Update MTD to that of Linux 2.6.22.1
|
||||
|
||||
A lot changed in the Linux MTD code, since it was last ported from
|
||||
Linux to U-Boot. This patch takes U-Boot NAND support to the level
|
||||
of Linux 2.6.22.1 and will enable support for very large NAND devices
|
||||
(4KB pages) and ease the compatibility between U-Boot and Linux
|
||||
filesystems.
|
||||
|
||||
This patch is tested on two custom boards with PPC and ARM
|
||||
processors running YAFFS in U-Boot and Linux using gcc-4.1.2
|
||||
cross compilers.
|
||||
|
||||
MAKEALL ppc/arm has some issues:
|
||||
* DOC/OneNand/nand_spl is not building (I have not tried porting
|
||||
these parts, and since I do not have any HW and I am not familiar
|
||||
with this code/HW I think its best left to someone else.)
|
||||
|
||||
Except for the issues mentioned above, I have ported all drivers
|
||||
necessary to run MAKEALL ppc/arm without errors and warnings. Many
|
||||
drivers were trivial to port, but some were not so trivial. The
|
||||
following drivers must be examined carefully and maybe rewritten to
|
||||
some degree:
|
||||
cpu/ppc4xx/ndfc.c
|
||||
cpu/arm926ejs/davinci/nand.c
|
||||
board/delta/nand.c
|
||||
board/zylonite/nand.c
|
||||
|
||||
Signed-off-by: William Juul <william.juul@tandberg.com>
|
||||
Signed-off-by: Stig Olsen <stig.olsen@tandberg.com>
|
||||
Signed-off-by: Scott Wood <scottwood@freescale.com>
|
||||
|
||||
commit cd82919e6c8a73b363a26f34b734923844e52d1c
|
||||
Author: Wolfgang Denk <wd@denx.de>
|
||||
Date: Tue Aug 12 16:08:38 2008 +0200
|
||||
|
||||
Coding style cleanup, update CHANGELOG, prepare release
|
||||
|
||||
Signed-off-by: Wolfgang Denk <wd@denx.de>
|
||||
|
||||
commit 17e900b8c0f38d922da47073246219dce2a847f2
|
||||
Author: Wolfgang Denk <wd@denx.de>
|
||||
Date: Tue Aug 12 14:54:04 2008 +0200
|
||||
|
@ -413,6 +987,22 @@ Date: Wed Aug 6 15:42:52 2008 -0400
|
|||
Signed-off-by: Steven A. Falco <sfalco@harris.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 1318673045fe188c6e24c582b1e6efc00ae1c62c
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Wed Aug 6 14:06:03 2008 +0200
|
||||
|
||||
Fix merge problems
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit f2302d4430e7f3f48308d6a585320fe96af8afbd
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Wed Aug 6 14:05:38 2008 +0200
|
||||
|
||||
Fix merge problems
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 6689484ccd43189322aaa5a1c6cd02cdd511ad7d
|
||||
Author: Kenneth Johansson <kenneth@southpole.se>
|
||||
Date: Tue Jul 15 12:13:38 2008 +0200
|
||||
|
@ -775,6 +1365,42 @@ Date: Thu Jul 31 10:12:09 2008 +0200
|
|||
|
||||
Signed-off-by: Wolfgang Denk <wd@denx.de>
|
||||
|
||||
commit 9246f5ecfd353ae297a02ffd5328402acf16c9dd
|
||||
Author: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Date: Wed Jul 30 12:39:28 2008 +0200
|
||||
|
||||
ppc4xx: ML507: Environment in flash and MTD Support
|
||||
|
||||
- Relocate the location of U-Boot in the flash
|
||||
- Save the environment in one sector of the flash memory
|
||||
- MTD Support
|
||||
|
||||
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit a8a16af4d59d14cc1c1187c10aaad80d6b8394b5
|
||||
Author: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Date: Tue Jul 29 17:16:10 2008 +0200
|
||||
|
||||
ppc4xx: ML507: Use of get_ram_size in board ml507
|
||||
|
||||
- Change suggested by WD
|
||||
|
||||
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 01a004313c5ec2d128b611df4c208b1b0d3c3fb4
|
||||
Author: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Date: Mon Jul 21 20:30:07 2008 +0200
|
||||
|
||||
ppc4xx: ML507: U-Boot in flash and System ACE
|
||||
|
||||
This patch allows booting from FLASH the ML507 board by Xilinx.
|
||||
Previously, U-Boot needed to be loaded from JTAG or a Sytem ACE CF
|
||||
|
||||
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 09d318a8bb1444ec92e31cafcdba877eb9409e58
|
||||
Author: Kumar Gala <galak@kernel.crashing.org>
|
||||
Date: Tue Jul 29 12:23:49 2008 -0500
|
||||
|
@ -1098,6 +1724,54 @@ Date: Fri Jul 18 15:57:23 2008 +0200
|
|||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 60204d06ed9f8c2a67cc79eb67fd2b1d22bcbc8c
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Fri Jul 18 12:24:41 2008 +0200
|
||||
|
||||
ppc4xx: Minor coding style cleanup of Xilinx Virtex5 ml507 support
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 086511fc96a8a9bb56e5e19a3d84c40f4dba80cc
|
||||
Author: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Date: Thu Jul 17 12:47:09 2008 +0200
|
||||
|
||||
ppc4xx: ML507 Board Support
|
||||
|
||||
The Xilinx ML507 Board is a Virtex 5 prototyping board that includes,
|
||||
among others:
|
||||
-Virtex 5 FX FPGA (With a ppc440x5 in it)
|
||||
-256MB of SDRAM2
|
||||
-32MB of Flash
|
||||
-I2C Eeprom
|
||||
-System ACE chip
|
||||
-Serial ATA connectors
|
||||
-RS232 Level Conversors
|
||||
-Ethernet Transceiver
|
||||
|
||||
This patch gives support to a standard design produced by EDK for this
|
||||
board: ppc440, uartlite, xilinx_int and flash
|
||||
|
||||
- Includes Changes propossed by Stefan Roese and Michal Simek
|
||||
|
||||
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Acked-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit d865fd09809a3a18669f35f970781820af40e4de
|
||||
Author: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Date: Thu Jul 17 11:44:12 2008 +0200
|
||||
|
||||
ppc4xx: CPU PPC440x5 on Virtex5 FX
|
||||
|
||||
-This patchs gives support for the embbedded ppc440
|
||||
on the Virtex5 FPGAs
|
||||
-interrupts.c divided in uic.c and interrupts.c
|
||||
-xilinx_irq.c for xilinx interrupt controller
|
||||
-Include modifications propossed by Stefan Roese
|
||||
|
||||
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@uam.es>
|
||||
Acked-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 340ccb260f21516be360745d5c5e3bd0657698df
|
||||
Author: Sebastian Siewior <bigeasy@linutronix.de>
|
||||
Date: Wed Jul 16 20:04:49 2008 +0200
|
||||
|
@ -1116,6 +1790,14 @@ Date: Wed Jul 16 20:04:49 2008 +0200
|
|||
Cc: Vasiliy Leonenko <vasiliy.leonenko@mail.ru>
|
||||
Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
|
||||
|
||||
commit 11188d55bc16dd907451c00282e00a038f73dd62
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Thu Jul 17 10:40:51 2008 +0200
|
||||
|
||||
ppc4xx: Fix alphabetical order in 4xx Makefile part (redwood)
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 699f05125509249072a0b865c8d35520d97cd501
|
||||
Author: Wolfgang Denk <wd@denx.de>
|
||||
Date: Tue Jul 15 22:22:44 2008 +0200
|
||||
|
@ -1927,6 +2609,271 @@ Date: Thu Jul 10 11:38:26 2008 +0200
|
|||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 69e2c6d0d13d7c8cf1612ac090bdc4c59ba6858e
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Fri Jul 11 13:10:56 2008 +0200
|
||||
|
||||
ppc4xx: Fix compile warning in 44x_spd_ddr2.c
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 6bd9138498c2e4f4f09190108b99157d1b2140b5
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Fri Jul 11 11:40:13 2008 +0200
|
||||
|
||||
ppc4xx: Fix small korat merge problem
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 1d0554736a0a1dd59718acda660871ce56b69e18
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Fri Jul 11 11:34:52 2008 +0200
|
||||
|
||||
ppc4xx: Some Rewood cleanups (coding style, leading white spaces)
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 3a82113ed5934d498f25080441a8261fc9454b15
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Thu Jul 10 16:37:09 2008 +0200
|
||||
|
||||
ppc4xx: Add 460SX UIC defines
|
||||
|
||||
Only the really needed ones are added (cascading and EMAC/MAL).
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 26173fc6f60521c2a8072f652f863617fc11ba9a
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Mon Jun 30 14:11:07 2008 +0200
|
||||
|
||||
ppc4xx: Continue cleanup of ppc440.h
|
||||
|
||||
This patch continues the ppc440.h cleanup by removing some of the unused
|
||||
defines.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit d9056b7913ed6a228d2f33671d916efedee541dd
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Mon Jun 30 14:05:05 2008 +0200
|
||||
|
||||
ppc4xx: Cleanup Katmai & Yucca PCIe register usage
|
||||
|
||||
This patch cleans up the 440SPe PCIe register usage. Now only defines
|
||||
from the include/asm-ppc/4xx_pcie.h are used.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 5de851403b01489b493fa83137ad990b8ce60d1c
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Thu Jun 26 17:36:39 2008 +0200
|
||||
|
||||
ppc4xx: Rework 440GX UIC handling
|
||||
|
||||
This patch reworks the 440GX interrupt handling so that the common 4xx
|
||||
code can be used. The 440GX is an exception to all other 4xx variants
|
||||
by having the cascading interrupt vectors not on UIC0 but on a special
|
||||
UIC named UICB0 (UIC Base 0). With this patch now, U-Boot references
|
||||
the 440GX UICB0 when UIC0 is selected. And the common 4xx interrupt
|
||||
handling is simpler without any 440GX special cases.
|
||||
|
||||
Also some additional cleanup to cpu/ppc4xx/interrupt.c is done.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit d1631fe1a05b063ccaf62ea892a8887b829847d1
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Thu Jun 26 13:40:57 2008 +0200
|
||||
|
||||
ppc4xx: Consolidate PPC4xx UIC defines
|
||||
|
||||
This 2nd patch now removes all UIC mask bit definition. They should be
|
||||
generated from the vectors by using the UIC_MASK() macro from now on.
|
||||
This way only the vectors need to get defined for new PPC's.
|
||||
|
||||
Also only the really used interrupt vectors are now defined. This makes
|
||||
definitions for new PPC versions easier and less error prone.
|
||||
|
||||
Another part of this patch is that the 4xx emac driver got a little
|
||||
cleanup, since now the usage of the interrupts is clearer.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 4fb25a3db3b3839094aa9ab748efd7a95924690b
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Wed Jun 25 10:59:22 2008 +0200
|
||||
|
||||
ppc4xx: Consolidate PPC4xx UIC defines
|
||||
|
||||
This patch is the first step to consolidate the UIC related defines in the
|
||||
4xx headers. Move header from asm-ppc/ppc4xx-intvec.h to
|
||||
asm-ppc/ppc4xx-uic.h as it will hold all UIC related defines in the next
|
||||
steps.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 7ee2619c20ccecd57966d74d844e6329e141261c
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Tue Jun 24 17:18:50 2008 +0200
|
||||
|
||||
ppc4xx: Consolidate PPC4xx EBC defines
|
||||
|
||||
This patch removes all EBC related defines from the PPC4xx headers
|
||||
ppc405.h and ppc440.h and introduces a new header
|
||||
|
||||
include/asm-ppc/ppc4xx-ebc.h
|
||||
|
||||
with all those defines.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit e321801bed5a6d896d298c00fd20046f039d5d66
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Thu Jul 10 13:52:44 2008 +0200
|
||||
|
||||
ppc4xx: Remove redundant ft_board_setup() functions from some 4xx boards
|
||||
|
||||
This patch removes some ft_board_setup() functions from some 4xx boards.
|
||||
This can be done since we now have a default weak implementation for this
|
||||
in cpu/ppc4xx/fdt.c. Only board in need for a different/custom
|
||||
implementation like canyonlands need their own version.
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 08250eb2edbd96514d049602d9e134110ac3185f
|
||||
Author: Stefan Roese <sr@denx.de>
|
||||
Date: Thu Jul 10 15:32:32 2008 +0200
|
||||
|
||||
ppc4xx: Fix merge problems in 44x_spd_ddr2.c
|
||||
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 1740c1bf40e3c6d03ac16c29943fdd9fc1e87038
|
||||
Author: Grant Erickson <gerickson@nuovations.com>
|
||||
Date: Tue Jul 8 08:35:00 2008 -0700
|
||||
|
||||
ppc4xx: Add MII mode support to the EMAC RGMII Bridge
|
||||
|
||||
This patch adds support for placing the RGMII bridge on the
|
||||
PPC405EX(r) into MII/GMII mode and allows a board-specific
|
||||
configuration to specify the bridge mode at compile-time.
|
||||
|
||||
Signed-off-by: Grant Erickson <gerickson@nuovations.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 2e2050842e731c823ce8d41fb0c15579eb70ced9
|
||||
Author: Grant Erickson <gerickson@nuovations.com>
|
||||
Date: Wed Jul 9 16:46:35 2008 -0700
|
||||
|
||||
ppc4xx: Add Mnemonics for AMCC/IBM DDR2 SDRAM Controller
|
||||
|
||||
This patch completes the preprocessor mneomics for the IBM DDR2 SDRAM
|
||||
controller registers (MODT and INITPLR) used by the
|
||||
PowerPC405EX(r). The MMODE and MEMODE registers are unified with their
|
||||
peer values used for the INITPLR MR and EMR registers,
|
||||
respectively. Finally, a spelling typo is correct (MANUEL to MANUAL).
|
||||
|
||||
With these mnemonics in place, the CFG_SDRAM0_* magic numbers for
|
||||
Kilauea are replaced by equivalent mnemonics to make it easier to
|
||||
compare and contrast other 405EX(r)-based boards (e.g. during board
|
||||
bring-up).
|
||||
|
||||
Finally, unified the SDRAM controller register dump routine such that
|
||||
it can be used across all processor variants that utilize the IBM DDR2
|
||||
SDRAM controller core. It produces output of the form:
|
||||
|
||||
PPC4xx IBM DDR2 Register Dump:
|
||||
...
|
||||
SDRAM_MB0CF[40] = 0x00006701
|
||||
...
|
||||
|
||||
which is '<mnemonic>[<DCR #>] = <value>'. The DCR number is included
|
||||
since it is not uncommon that the DCR values in header files get mixed
|
||||
up and it helps to validate, at a glance, they match what is printed
|
||||
in the user manual.
|
||||
|
||||
Tested on:
|
||||
AMCC Kilauea/Haleakala:
|
||||
- NFS Linux Boot: PASSED
|
||||
- NAND Linux Boot: PASSED
|
||||
|
||||
Signed-off-by: Grant Erickson <gerickson@nuovations.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit ad7382d828982e9c1bafc4313ef1b666f6145f58
|
||||
Author: Grant Erickson <gerickson@nuovations.com>
|
||||
Date: Wed Jul 9 16:31:59 2008 -0700
|
||||
|
||||
ppc4xx: Add AMCC/IBM DDR2 SDRAM ECC Field Mnemonics
|
||||
|
||||
Add additional DDR2 SDRAM memory controller DCR mneomnics, condition
|
||||
revision ID DCR based on 405EX, and add field mnemonics for bus error
|
||||
status and ECC error status registers.
|
||||
|
||||
Signed-off-by: Grant Erickson <gerickson@nuovations.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 103201731bd8e85404d0f51a5b4e8abd14c0b6c6
|
||||
Author: Grant Erickson <gerickson@nuovations.com>
|
||||
Date: Wed Jul 9 16:31:36 2008 -0700
|
||||
|
||||
ppc4xx: Add SDR0_SRST Mnemonics for the 405EX(r)
|
||||
|
||||
This patch adds bit field mnemonics for the 405EX(r) SDR0_SRST soft reset register.
|
||||
|
||||
Signed-off-by: Grant Erickson <gerickson@nuovations.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 5b457d00730d4aa0c6450d21a9104723e606fb98
|
||||
Author: Grant Erickson <gerickson@nuovations.com>
|
||||
Date: Wed Jul 9 11:55:46 2008 -0700
|
||||
|
||||
PPC4xx: Correct SDRAM_MCSTAT for PPC405EX(r)
|
||||
|
||||
While the PowerPC 405EX(r) shares in common the AMCC/IBM DDR2 SDRAM
|
||||
controller core also used in the 440SP, 440SPe, 460EX, and 460GT, in
|
||||
the 405EX(r), SDRAM_MCSTAT has a different DCR value.
|
||||
|
||||
Its present value on the 405EX(r) causes a read back of 0xFFFFFFFF
|
||||
which causes SDRAM initialization to periodically fail since it can
|
||||
prematurely indicate SDRAM ready status.
|
||||
|
||||
Signed-off-by: Grant Erickson <gerickson@nuovations.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 0ce5c8675bb2c61f1d71fb97f0bbe822663fb93d
|
||||
Author: Feng Kan <fkan@amcc.com>
|
||||
Date: Tue Jul 8 22:48:42 2008 -0700
|
||||
|
||||
ppc4xx: Initial framework of the AMCC PPC460SX redwood reference board.
|
||||
|
||||
Add AMCC Redwood reference board that uses the latest
|
||||
PPC 464 CPU processor combined with a rich mix of peripheral
|
||||
controllers. The board will support PCIe, mutiple Gig ethernet
|
||||
ports, advanced hardware RAID assistance and IEEE 1588.
|
||||
|
||||
Signed-off-by: Feng Kan <fkan@amcc.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 96e5fc0e6a1861d0fea4efa3cd376df95a5b1b89
|
||||
Author: Feng Kan <fkan@amcc.com>
|
||||
Date: Tue Jul 8 22:48:07 2008 -0700
|
||||
|
||||
ppc4xx: Add initial 460SX reference board (redwood) config file and defines.
|
||||
|
||||
Signed-off-by: Feng Kan <fkan@amcc.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 7d30793685efcada183891c78fc892e6c9ba50c7
|
||||
Author: Feng Kan <fkan@amcc.com>
|
||||
Date: Tue Jul 8 22:47:31 2008 -0700
|
||||
|
||||
ppc4xx: Add initial 460SX defines for the cpu/ppc4xx directory.
|
||||
|
||||
Signed-off-by: Feng Kan <fkan@amcc.com>
|
||||
Signed-off-by: Stefan Roese <sr@denx.de>
|
||||
|
||||
commit 9b55a2536919f4de1bb1044e6eb8262c2f53bc96
|
||||
Author: Wolfgang Denk <wd@denx.de>
|
||||
Date: Fri Jul 11 01:16:00 2008 +0200
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
int mtdparts_init(void);
|
||||
int id_parse(const char *id, const char **ret_id, u8 *dev_type, u8 *dev_num);
|
||||
int find_dev_and_part(const char *id, struct mtd_device **dev,
|
||||
u8 *part_num, struct part_info **part);
|
||||
u8 *part_num, struct part_info **part);
|
||||
#endif
|
||||
|
||||
static int nand_dump(nand_info_t *nand, ulong off, int only_oob)
|
||||
|
@ -68,7 +68,7 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob)
|
|||
printf("Page %08lx dump:\n", off);
|
||||
i = nand->writesize >> 4;
|
||||
p = datbuf;
|
||||
|
||||
|
||||
while (i--) {
|
||||
if (!only_oob)
|
||||
printf("\t%02x %02x %02x %02x %02x %02x %02x %02x"
|
||||
|
@ -193,7 +193,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
|||
for (i = 0; i < CFG_MAX_NAND_DEVICE; i++) {
|
||||
if (nand_info[i].name)
|
||||
printf("Device %d: %s, sector size %u KiB\n",
|
||||
i, nand_info[i].name,
|
||||
i, nand_info[i].name,
|
||||
nand_info[i].erasesize >> 10);
|
||||
}
|
||||
return 0;
|
||||
|
@ -336,10 +336,10 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
|||
!strcmp(s, ".e") || !strcmp(s, ".i")) {
|
||||
if (read)
|
||||
ret = nand_read_skip_bad(nand, off, &size,
|
||||
(u_char *)addr);
|
||||
(u_char *)addr);
|
||||
else
|
||||
ret = nand_write_skip_bad(nand, off, &size,
|
||||
(u_char *)addr);
|
||||
(u_char *)addr);
|
||||
} else if (s != NULL && !strcmp(s, ".oob")) {
|
||||
/* out-of-band data */
|
||||
mtd_oob_ops_t ops = {
|
||||
|
@ -469,26 +469,26 @@ usage:
|
|||
}
|
||||
|
||||
U_BOOT_CMD(nand, 5, 1, do_nand,
|
||||
"nand - NAND sub-system\n",
|
||||
"info - show available NAND devices\n"
|
||||
"nand device [dev] - show or set current device\n"
|
||||
"nand read - addr off|partition size\n"
|
||||
"nand write - addr off|partition size\n"
|
||||
" read/write 'size' bytes starting at offset 'off'\n"
|
||||
" to/from memory address 'addr', skipping bad blocks.\n"
|
||||
"nand erase [clean] [off size] - erase 'size' bytes from\n"
|
||||
" offset 'off' (entire device if not specified)\n"
|
||||
"nand bad - show bad blocks\n"
|
||||
"nand dump[.oob] off - dump page\n"
|
||||
"nand scrub - really clean NAND erasing bad blocks (UNSAFE)\n"
|
||||
"nand markbad off - mark bad block at offset (UNSAFE)\n"
|
||||
"nand biterr off - make a bit error at offset (UNSAFE)\n"
|
||||
"nand lock [tight] [status]\n"
|
||||
" bring nand to lock state or display locked pages\n"
|
||||
"nand unlock [offset] [size] - unlock section\n");
|
||||
"nand - NAND sub-system\n",
|
||||
"info - show available NAND devices\n"
|
||||
"nand device [dev] - show or set current device\n"
|
||||
"nand read - addr off|partition size\n"
|
||||
"nand write - addr off|partition size\n"
|
||||
" read/write 'size' bytes starting at offset 'off'\n"
|
||||
" to/from memory address 'addr', skipping bad blocks.\n"
|
||||
"nand erase [clean] [off size] - erase 'size' bytes from\n"
|
||||
" offset 'off' (entire device if not specified)\n"
|
||||
"nand bad - show bad blocks\n"
|
||||
"nand dump[.oob] off - dump page\n"
|
||||
"nand scrub - really clean NAND erasing bad blocks (UNSAFE)\n"
|
||||
"nand markbad off - mark bad block at offset (UNSAFE)\n"
|
||||
"nand biterr off - make a bit error at offset (UNSAFE)\n"
|
||||
"nand lock [tight] [status]\n"
|
||||
" bring nand to lock state or display locked pages\n"
|
||||
"nand unlock [offset] [size] - unlock section\n");
|
||||
|
||||
static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
|
||||
ulong offset, ulong addr, char *cmd)
|
||||
ulong offset, ulong addr, char *cmd)
|
||||
{
|
||||
int r;
|
||||
char *ep, *s;
|
||||
|
@ -608,7 +608,7 @@ int do_nandboot(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
|||
else
|
||||
addr = CFG_LOAD_ADDR;
|
||||
return nand_load_image(cmdtp, &nand_info[dev->id->num],
|
||||
part->offset, addr, argv[0]);
|
||||
part->offset, addr, argv[0]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -837,7 +837,7 @@ int do_nand (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
|||
off_t off = simple_strtoul (argv[3], NULL, 16);
|
||||
size_t size = simple_strtoul (argv[4], NULL, 16);
|
||||
int cmd = (strncmp (argv[1], "read", 4) == 0) ?
|
||||
NANDRW_READ : NANDRW_WRITE;
|
||||
NANDRW_READ : NANDRW_WRITE;
|
||||
size_t total;
|
||||
int ret;
|
||||
char *cmdtail = strchr (argv[1], '.');
|
||||
|
@ -997,7 +997,7 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
offset);
|
||||
|
||||
if (nand_legacy_rw (nand_dev_desc + dev, NANDRW_READ, offset,
|
||||
SECTORSIZE, NULL, (u_char *)addr)) {
|
||||
SECTORSIZE, NULL, (u_char *)addr)) {
|
||||
printf ("** Read error on %d\n", dev);
|
||||
show_boot_progress (-56);
|
||||
return 1;
|
||||
|
@ -1028,8 +1028,8 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
show_boot_progress (57);
|
||||
|
||||
if (nand_legacy_rw (nand_dev_desc + dev, NANDRW_READ,
|
||||
offset + SECTORSIZE, cnt, NULL,
|
||||
(u_char *)(addr+SECTORSIZE))) {
|
||||
offset + SECTORSIZE, cnt, NULL,
|
||||
(u_char *)(addr+SECTORSIZE))) {
|
||||
printf ("** Read error on %d\n", dev);
|
||||
show_boot_progress (-58);
|
||||
return 1;
|
||||
|
|
|
@ -28,7 +28,7 @@ int do_ymount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
{
|
||||
char *mtpoint = argv[1];
|
||||
cmd_yaffs_mount(mtpoint);
|
||||
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
@ -36,14 +36,14 @@ int do_yumount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
{
|
||||
char *mtpoint = argv[1];
|
||||
cmd_yaffs_umount(mtpoint);
|
||||
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
int do_yls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
{
|
||||
char *dirname = argv[argc-1];
|
||||
|
||||
|
||||
cmd_yaffs_ls(dirname, (argc>2)?1:0);
|
||||
|
||||
return(0);
|
||||
|
@ -136,7 +136,7 @@ int do_ydump (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
{
|
||||
char *dirname = argv[1];
|
||||
if (yaffs_DumpDevStruct(dirname) != 0)
|
||||
printf("yaffs_DumpDevStruct returning error when dumping path: , %s\n", dirname);
|
||||
printf("yaffs_DumpDevStruct returning error when dumping path: , %s\n", dirname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -141,14 +141,14 @@ static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob)
|
|||
if (priv->page_size) {
|
||||
out_be32(&lbc->fbar, page_addr >> 6);
|
||||
out_be32(&lbc->fpar,
|
||||
((page_addr << FPAR_LP_PI_SHIFT) & FPAR_LP_PI) |
|
||||
(oob ? FPAR_LP_MS : 0) | column);
|
||||
((page_addr << FPAR_LP_PI_SHIFT) & FPAR_LP_PI) |
|
||||
(oob ? FPAR_LP_MS : 0) | column);
|
||||
buf_num = (page_addr & 1) << 2;
|
||||
} else {
|
||||
out_be32(&lbc->fbar, page_addr >> 5);
|
||||
out_be32(&lbc->fpar,
|
||||
((page_addr << FPAR_SP_PI_SHIFT) & FPAR_SP_PI) |
|
||||
(oob ? FPAR_SP_MS : 0) | column);
|
||||
((page_addr << FPAR_SP_PI_SHIFT) & FPAR_SP_PI) |
|
||||
(oob ? FPAR_SP_MS : 0) | column);
|
||||
buf_num = page_addr & 7;
|
||||
}
|
||||
|
||||
|
@ -227,24 +227,24 @@ static void fsl_elbc_do_read(struct nand_chip *chip, int oob)
|
|||
|
||||
if (priv->page_size) {
|
||||
out_be32(&lbc->fir,
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_CA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP2_SHIFT) |
|
||||
(FIR_OP_CW1 << FIR_OP3_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP4_SHIFT));
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_CA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP2_SHIFT) |
|
||||
(FIR_OP_CW1 << FIR_OP3_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP4_SHIFT));
|
||||
|
||||
out_be32(&lbc->fcr, (NAND_CMD_READ0 << FCR_CMD0_SHIFT) |
|
||||
(NAND_CMD_READSTART << FCR_CMD1_SHIFT));
|
||||
(NAND_CMD_READSTART << FCR_CMD1_SHIFT));
|
||||
} else {
|
||||
out_be32(&lbc->fir,
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_CA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP2_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP3_SHIFT));
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_CA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP2_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP3_SHIFT));
|
||||
|
||||
if (oob)
|
||||
out_be32(&lbc->fcr,
|
||||
NAND_CMD_READOOB << FCR_CMD0_SHIFT);
|
||||
NAND_CMD_READOOB << FCR_CMD0_SHIFT);
|
||||
else
|
||||
out_be32(&lbc->fcr, NAND_CMD_READ0 << FCR_CMD0_SHIFT);
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ static void fsl_elbc_do_read(struct nand_chip *chip, int oob)
|
|||
|
||||
/* cmdfunc send commands to the FCM */
|
||||
static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
||||
int column, int page_addr)
|
||||
int column, int page_addr)
|
||||
{
|
||||
struct nand_chip *chip = mtd->priv;
|
||||
struct fsl_elbc_mtd *priv = chip->priv;
|
||||
|
@ -306,8 +306,8 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|||
vdbg("fsl_elbc_cmdfunc: NAND_CMD_READID.\n");
|
||||
|
||||
out_be32(&lbc->fir, (FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_UA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP2_SHIFT));
|
||||
(FIR_OP_UA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP2_SHIFT));
|
||||
out_be32(&lbc->fcr, NAND_CMD_READID << FCR_CMD0_SHIFT);
|
||||
/* 5 bytes for manuf, device and exts */
|
||||
out_be32(&lbc->fbcr, 5);
|
||||
|
@ -331,13 +331,13 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|||
vdbg("fsl_elbc_cmdfunc: NAND_CMD_ERASE2.\n");
|
||||
|
||||
out_be32(&lbc->fir,
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_CM1 << FIR_OP2_SHIFT));
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_CM1 << FIR_OP2_SHIFT));
|
||||
|
||||
out_be32(&lbc->fcr,
|
||||
(NAND_CMD_ERASE1 << FCR_CMD0_SHIFT) |
|
||||
(NAND_CMD_ERASE2 << FCR_CMD1_SHIFT));
|
||||
(NAND_CMD_ERASE1 << FCR_CMD0_SHIFT) |
|
||||
(NAND_CMD_ERASE2 << FCR_CMD1_SHIFT));
|
||||
|
||||
out_be32(&lbc->fbcr, 0);
|
||||
ctrl->read_bytes = 0;
|
||||
|
@ -360,22 +360,22 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|||
(NAND_CMD_PAGEPROG << FCR_CMD1_SHIFT);
|
||||
|
||||
out_be32(&lbc->fir,
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_CA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP2_SHIFT) |
|
||||
(FIR_OP_WB << FIR_OP3_SHIFT) |
|
||||
(FIR_OP_CW1 << FIR_OP4_SHIFT));
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_CA << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP2_SHIFT) |
|
||||
(FIR_OP_WB << FIR_OP3_SHIFT) |
|
||||
(FIR_OP_CW1 << FIR_OP4_SHIFT));
|
||||
} else {
|
||||
fcr = (NAND_CMD_PAGEPROG << FCR_CMD1_SHIFT) |
|
||||
(NAND_CMD_SEQIN << FCR_CMD2_SHIFT);
|
||||
|
||||
out_be32(&lbc->fir,
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_CM2 << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_CA << FIR_OP2_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP3_SHIFT) |
|
||||
(FIR_OP_WB << FIR_OP4_SHIFT) |
|
||||
(FIR_OP_CW1 << FIR_OP5_SHIFT));
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_CM2 << FIR_OP1_SHIFT) |
|
||||
(FIR_OP_CA << FIR_OP2_SHIFT) |
|
||||
(FIR_OP_PA << FIR_OP3_SHIFT) |
|
||||
(FIR_OP_WB << FIR_OP4_SHIFT) |
|
||||
(FIR_OP_CW1 << FIR_OP5_SHIFT));
|
||||
|
||||
if (column >= mtd->writesize) {
|
||||
/* OOB area --> READOOB */
|
||||
|
@ -430,7 +430,7 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|||
fsl_elbc_run_command(mtd);
|
||||
|
||||
memcpy_fromio(ctrl->oob_poi + 6,
|
||||
&ctrl->addr[ctrl->index], 3);
|
||||
&ctrl->addr[ctrl->index], 3);
|
||||
ctrl->index += 3;
|
||||
}
|
||||
|
||||
|
@ -442,8 +442,8 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|||
/* Note - it does not wait for the ready line */
|
||||
case NAND_CMD_STATUS:
|
||||
out_be32(&lbc->fir,
|
||||
(FIR_OP_CM0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP1_SHIFT));
|
||||
(FIR_OP_CM0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP1_SHIFT));
|
||||
out_be32(&lbc->fcr, NAND_CMD_STATUS << FCR_CMD0_SHIFT);
|
||||
out_be32(&lbc->fbcr, 1);
|
||||
set_addr(mtd, 0, 0, 0);
|
||||
|
@ -467,7 +467,7 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|||
|
||||
default:
|
||||
printf("fsl_elbc_cmdfunc: error, unsupported command 0x%x.\n",
|
||||
command);
|
||||
command);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -559,7 +559,7 @@ static void fsl_elbc_read_buf(struct mtd_info *mtd, u8 *buf, int len)
|
|||
* Verify buffer against the FCM Controller Data Buffer
|
||||
*/
|
||||
static int fsl_elbc_verify_buf(struct mtd_info *mtd,
|
||||
const u_char *buf, int len)
|
||||
const u_char *buf, int len)
|
||||
{
|
||||
struct nand_chip *chip = mtd->priv;
|
||||
struct fsl_elbc_mtd *priv = chip->priv;
|
||||
|
@ -603,8 +603,8 @@ static int fsl_elbc_wait(struct mtd_info *mtd, struct nand_chip *chip)
|
|||
/* Use READ_STATUS command, but wait for the device to be ready */
|
||||
ctrl->use_mdr = 0;
|
||||
out_be32(&lbc->fir,
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP1_SHIFT));
|
||||
(FIR_OP_CW0 << FIR_OP0_SHIFT) |
|
||||
(FIR_OP_RBW << FIR_OP1_SHIFT));
|
||||
out_be32(&lbc->fcr, NAND_CMD_STATUS << FCR_CMD0_SHIFT);
|
||||
out_be32(&lbc->fbcr, 1);
|
||||
set_addr(mtd, 0, 0, 0);
|
||||
|
@ -623,8 +623,8 @@ static int fsl_elbc_wait(struct mtd_info *mtd, struct nand_chip *chip)
|
|||
}
|
||||
|
||||
static int fsl_elbc_read_page(struct mtd_info *mtd,
|
||||
struct nand_chip *chip,
|
||||
uint8_t *buf)
|
||||
struct nand_chip *chip,
|
||||
uint8_t *buf)
|
||||
{
|
||||
fsl_elbc_read_buf(mtd, buf, mtd->writesize);
|
||||
fsl_elbc_read_buf(mtd, chip->oob_poi, mtd->oobsize);
|
||||
|
@ -639,8 +639,8 @@ static int fsl_elbc_read_page(struct mtd_info *mtd,
|
|||
* waitfunc.
|
||||
*/
|
||||
static void fsl_elbc_write_page(struct mtd_info *mtd,
|
||||
struct nand_chip *chip,
|
||||
const uint8_t *buf)
|
||||
struct nand_chip *chip,
|
||||
const uint8_t *buf)
|
||||
{
|
||||
struct fsl_elbc_mtd *priv = chip->priv;
|
||||
struct fsl_elbc_ctrl *ctrl = priv->ctrl;
|
||||
|
@ -737,8 +737,8 @@ int board_nand_init(struct nand_chip *nand)
|
|||
nand->ecc.mode = NAND_ECC_HW;
|
||||
|
||||
nand->ecc.layout = (priv->fmr & FMR_ECCM) ?
|
||||
&fsl_elbc_oob_sp_eccm1 :
|
||||
&fsl_elbc_oob_sp_eccm0;
|
||||
&fsl_elbc_oob_sp_eccm1 :
|
||||
&fsl_elbc_oob_sp_eccm0;
|
||||
|
||||
nand->ecc.size = 512;
|
||||
nand->ecc.bytes = 3;
|
||||
|
@ -758,8 +758,8 @@ int board_nand_init(struct nand_chip *nand)
|
|||
if ((br & BR_DECC) == BR_DECC_CHK_GEN) {
|
||||
nand->ecc.steps = 4;
|
||||
nand->ecc.layout = (priv->fmr & FMR_ECCM) ?
|
||||
&fsl_elbc_oob_lp_eccm1 :
|
||||
&fsl_elbc_oob_lp_eccm0;
|
||||
&fsl_elbc_oob_lp_eccm1 :
|
||||
&fsl_elbc_oob_lp_eccm0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -435,7 +435,7 @@ int nand_unlock(nand_info_t *meminfo, ulong start, ulong length)
|
|||
* @return image length including bad blocks
|
||||
*/
|
||||
static size_t get_len_incl_bad (nand_info_t *nand, size_t offset,
|
||||
const size_t length)
|
||||
const size_t length)
|
||||
{
|
||||
size_t len_incl_bad = 0;
|
||||
size_t len_excl_bad = 0;
|
||||
|
@ -472,7 +472,7 @@ static size_t get_len_incl_bad (nand_info_t *nand, size_t offset,
|
|||
* @return 0 in case of success
|
||||
*/
|
||||
int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
|
||||
u_char *buffer)
|
||||
u_char *buffer)
|
||||
{
|
||||
int rval;
|
||||
size_t left_to_write = *length;
|
||||
|
@ -497,7 +497,7 @@ int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
|
|||
rval = nand_write (nand, offset, length, buffer);
|
||||
if (rval != 0) {
|
||||
printf ("NAND write to offset %x failed %d\n",
|
||||
offset, rval);
|
||||
offset, rval);
|
||||
return rval;
|
||||
}
|
||||
}
|
||||
|
@ -521,7 +521,7 @@ int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
|
|||
rval = nand_write (nand, offset, &write_size, p_buffer);
|
||||
if (rval != 0) {
|
||||
printf ("NAND write to offset %x failed %d\n",
|
||||
offset, rval);
|
||||
offset, rval);
|
||||
*length -= left_to_write;
|
||||
return rval;
|
||||
}
|
||||
|
@ -567,7 +567,7 @@ int nand_read_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
|
|||
rval = nand_read (nand, offset, length, buffer);
|
||||
if (rval != 0) {
|
||||
printf ("NAND read from offset %x failed %d\n",
|
||||
offset, rval);
|
||||
offset, rval);
|
||||
return rval;
|
||||
}
|
||||
}
|
||||
|
@ -591,7 +591,7 @@ int nand_read_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
|
|||
rval = nand_read (nand, offset, &read_length, p_buffer);
|
||||
if (rval != 0) {
|
||||
printf ("NAND read from offset %x failed %d\n",
|
||||
offset, rval);
|
||||
offset, rval);
|
||||
*length -= left_to_read;
|
||||
return rval;
|
||||
}
|
||||
|
|
|
@ -292,13 +292,13 @@ static int onenand_wait(struct mtd_info *mtd, int state)
|
|||
|
||||
if (ctrl & ONENAND_CTRL_ERROR) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_wait: controller error = 0x%04x\n", ctrl);
|
||||
"onenand_wait: controller error = 0x%04x\n", ctrl);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
if (ctrl & ONENAND_CTRL_LOCK) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_wait: it's locked error = 0x%04x\n", ctrl);
|
||||
"onenand_wait: it's locked error = 0x%04x\n", ctrl);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
@ -306,7 +306,7 @@ static int onenand_wait(struct mtd_info *mtd, int state)
|
|||
ecc = this->read_word(this->base + ONENAND_REG_ECC_STATUS);
|
||||
if (ecc & ONENAND_ECC_2BIT_ALL) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_wait: ECC error = 0x%04x\n", ecc);
|
||||
"onenand_wait: ECC error = 0x%04x\n", ecc);
|
||||
return -EBADMSG;
|
||||
}
|
||||
}
|
||||
|
@ -487,7 +487,7 @@ static int onenand_update_bufferram(struct mtd_info *mtd, loff_t addr,
|
|||
* Invalidate BufferRAM information
|
||||
*/
|
||||
static void onenand_invalidate_bufferram(struct mtd_info *mtd, loff_t addr,
|
||||
unsigned int len)
|
||||
unsigned int len)
|
||||
{
|
||||
struct onenand_chip *this = mtd->priv;
|
||||
int i;
|
||||
|
@ -547,13 +547,13 @@ static int onenand_read_ecc(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
int ret = 0;
|
||||
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL3, "onenand_read_ecc: "
|
||||
"from = 0x%08x, len = %i\n",
|
||||
(unsigned int)from, (int)len);
|
||||
"from = 0x%08x, len = %i\n",
|
||||
(unsigned int)from, (int)len);
|
||||
|
||||
/* Do not allow reads past end of device */
|
||||
if ((from + len) > mtd->size) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0, "onenand_read_ecc: "
|
||||
"Attempt read beyond end of device\n");
|
||||
"Attempt read beyond end of device\n");
|
||||
*retlen = 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -585,7 +585,7 @@ static int onenand_read_ecc(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
|
||||
if (ret) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_read_ecc: read failed = %d\n", ret);
|
||||
"onenand_read_ecc: read failed = %d\n", ret);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -639,8 +639,8 @@ int onenand_read_oob(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
int ret = 0;
|
||||
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL3, "onenand_read_oob: "
|
||||
"from = 0x%08x, len = %i\n",
|
||||
(unsigned int)from, (int)len);
|
||||
"from = 0x%08x, len = %i\n",
|
||||
(unsigned int)from, (int)len);
|
||||
|
||||
/* Initialize return length value */
|
||||
*retlen = 0;
|
||||
|
@ -648,7 +648,7 @@ int onenand_read_oob(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
/* Do not allow reads past end of device */
|
||||
if (unlikely((from + len) > mtd->size)) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0, "onenand_read_oob: "
|
||||
"Attempt read beyond end of device\n");
|
||||
"Attempt read beyond end of device\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -677,7 +677,7 @@ int onenand_read_oob(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
|
||||
if (ret) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_read_oob: read failed = %d\n", ret);
|
||||
"onenand_read_oob: read failed = %d\n", ret);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -756,8 +756,8 @@ static int onenand_write_ecc(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
int ret = 0;
|
||||
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL3, "onenand_write_ecc: "
|
||||
"to = 0x%08x, len = %i\n",
|
||||
(unsigned int)to, (int)len);
|
||||
"to = 0x%08x, len = %i\n",
|
||||
(unsigned int)to, (int)len);
|
||||
|
||||
/* Initialize retlen, in case of early exit */
|
||||
*retlen = 0;
|
||||
|
@ -765,14 +765,14 @@ static int onenand_write_ecc(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
/* Do not allow writes past end of device */
|
||||
if (unlikely((to + len) > mtd->size)) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0, "onenand_write_ecc: "
|
||||
"Attempt write to past end of device\n");
|
||||
"Attempt write to past end of device\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Reject writes, which are not page aligned */
|
||||
if (unlikely(NOTALIGNED(to)) || unlikely(NOTALIGNED(len))) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0, "onenand_write_ecc: "
|
||||
"Attempt to write not page aligned data\n");
|
||||
"Attempt to write not page aligned data\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -796,7 +796,7 @@ static int onenand_write_ecc(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
ret = this->wait(mtd, FL_WRITING);
|
||||
if (ret) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_write_ecc: write filaed %d\n", ret);
|
||||
"onenand_write_ecc: write filaed %d\n", ret);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -806,7 +806,7 @@ static int onenand_write_ecc(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
ret = onenand_verify_page(mtd, (u_char *) buf, to);
|
||||
if (ret) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_write_ecc: verify failed %d\n", ret);
|
||||
"onenand_write_ecc: verify failed %d\n", ret);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -860,8 +860,8 @@ int onenand_write_oob(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
int written = 0;
|
||||
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL3, "onenand_write_oob: "
|
||||
"to = 0x%08x, len = %i\n",
|
||||
(unsigned int)to, (int)len);
|
||||
"to = 0x%08x, len = %i\n",
|
||||
(unsigned int)to, (int)len);
|
||||
|
||||
/* Initialize retlen, in case of early exit */
|
||||
*retlen = 0;
|
||||
|
@ -869,7 +869,7 @@ int onenand_write_oob(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
/* Do not allow writes past end of device */
|
||||
if (unlikely((to + len) > mtd->size)) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0, "onenand_write_oob: "
|
||||
"Attempt write to past end of device\n");
|
||||
"Attempt write to past end of device\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -948,28 +948,28 @@ int onenand_erase(struct mtd_info *mtd, struct erase_info *instr)
|
|||
int ret = 0;
|
||||
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL3, "onenand_erase: start = 0x%08x, len = %i\n",
|
||||
(unsigned int)instr->addr, (unsigned int)instr->len);
|
||||
(unsigned int)instr->addr, (unsigned int)instr->len);
|
||||
|
||||
block_size = (1 << this->erase_shift);
|
||||
|
||||
/* Start address must align on block boundary */
|
||||
if (unlikely(instr->addr & (block_size - 1))) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_erase: Unaligned address\n");
|
||||
"onenand_erase: Unaligned address\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Length must align on block boundary */
|
||||
if (unlikely(instr->len & (block_size - 1))) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_erase: Length not block aligned\n");
|
||||
"onenand_erase: Length not block aligned\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Do not allow erase past end of device */
|
||||
if (unlikely((instr->len + instr->addr) > mtd->size)) {
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
||||
"onenand_erase: Erase past end of device\n");
|
||||
"onenand_erase: Erase past end of device\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -997,11 +997,11 @@ int onenand_erase(struct mtd_info *mtd, struct erase_info *instr)
|
|||
if (ret) {
|
||||
if (ret == -EPERM)
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0, "onenand_erase: "
|
||||
"Device is write protected!!!\n");
|
||||
"Device is write protected!!!\n");
|
||||
else
|
||||
MTDDEBUG (MTD_DEBUG_LEVEL0, "onenand_erase: "
|
||||
"Failed erase, block %d\n",
|
||||
(unsigned)(addr >> this->erase_shift));
|
||||
"Failed erase, block %d\n",
|
||||
(unsigned)(addr >> this->erase_shift));
|
||||
instr->state = MTD_ERASE_FAILED;
|
||||
instr->fail_addr = addr;
|
||||
goto erase_exit;
|
||||
|
|
|
@ -31,7 +31,7 @@ SRCS := $(COBJS-y:.o=.c)
|
|||
OBJS := $(addprefix $(obj),$(COBJS-y))
|
||||
|
||||
# -DCONFIG_YAFFS_NO_YAFFS1
|
||||
CFLAGS += -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM -DCONFIG_YAFFS_YAFFS2 -DNO_Y_INLINE -DLINUX_VERSION_CODE=0x20622
|
||||
CFLAGS += -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM -DCONFIG_YAFFS_YAFFS2 -DNO_Y_INLINE -DLINUX_VERSION_CODE=0x20622
|
||||
|
||||
all: $(LIB)
|
||||
|
||||
|
@ -53,4 +53,3 @@ include $(SRCTREE)/rules.mk
|
|||
sinclude $(obj).depend
|
||||
|
||||
#########################################################################
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ in YAFFS2 mode (CONFIG_YAFFS_YAFFS2).
|
|||
|
||||
A note on licencing
|
||||
-------------------
|
||||
YAFFS is available under the GPL and via alternative licensing
|
||||
YAFFS is available under the GPL and via alternative licensing
|
||||
arrangements with Aleph One. If you're using YAFFS as a Linux kernel
|
||||
file system then it will be under the GPL. For use in other situations
|
||||
you should discuss licensing issues with Aleph One.
|
||||
|
@ -17,10 +17,10 @@ you should discuss licensing issues with Aleph One.
|
|||
Terminology
|
||||
-----------
|
||||
Page - NAND addressable unit (normally 512b or 2Kbyte size) - can
|
||||
be read, written, marked bad. Has associated OOB.
|
||||
be read, written, marked bad. Has associated OOB.
|
||||
Block - Eraseable unit. 64 Pages. (128K on 2K NAND, 32K on 512b NAND)
|
||||
OOB - 'spare area' of each page for ECC, bad block marked and YAFFS
|
||||
tags. 16 bytes per 512b - 64 bytes for 2K page size.
|
||||
tags. 16 bytes per 512b - 64 bytes for 2K page size.
|
||||
Chunk - Basic YAFFS addressable unit. Same size as Page.
|
||||
Object - YAFFS Object: File, Directory, Link, Device etc.
|
||||
|
||||
|
@ -48,28 +48,28 @@ is managed by moving deleted objects to the special, hidden 'unlinked'
|
|||
directory. These records are preserved until all the pages containing
|
||||
the object have been erased (We know when this happen by keeping a
|
||||
count of chunks remaining on the system for each object - when it
|
||||
reaches zero the object really is gone).
|
||||
reaches zero the object really is gone).
|
||||
|
||||
When data in a file is overwritten, the relevant chunks are replaced
|
||||
by writing new pages to flash containing the new data but the same
|
||||
tags.
|
||||
tags.
|
||||
|
||||
Pages are also marked with a short (2 bit) serial number that
|
||||
increments each time the page at this position is incremented. The
|
||||
reason for this is that if power loss/crash/other act of demonic
|
||||
forces happens before the replaced page is marked as discarded, it is
|
||||
possible to have two pages with the same tags. The serial number is
|
||||
Pages are also marked with a short (2 bit) serial number that
|
||||
increments each time the page at this position is incremented. The
|
||||
reason for this is that if power loss/crash/other act of demonic
|
||||
forces happens before the replaced page is marked as discarded, it is
|
||||
possible to have two pages with the same tags. The serial number is
|
||||
used to arbitrate.
|
||||
|
||||
A block containing only discarded pages (termed a dirty block) is an
|
||||
A block containing only discarded pages (termed a dirty block) is an
|
||||
obvious candidate for garbage collection. Otherwise valid pages can be
|
||||
copied off a block thus rendering the whole block discarded and ready
|
||||
for garbage collection.
|
||||
|
||||
copied off a block thus rendering the whole block discarded and ready
|
||||
for garbage collection.
|
||||
|
||||
In theory you don't need to hold the file structure in RAM... you
|
||||
could just scan the whole flash looking for pages when you need them.
|
||||
In practice though you'd want better file access times than that! The
|
||||
mechanism proposed here is to have a list of __u16 page addresses
|
||||
mechanism proposed here is to have a list of __u16 page addresses
|
||||
associated with each file. Since there are 2^18 pages in a 128MB NAND,
|
||||
a __u16 is insufficient to uniquely identify a page but is does
|
||||
identify a group of 4 pages - a small enough region to search
|
||||
|
@ -77,17 +77,17 @@ exhaustively. This mechanism is clearly expandable to larger NAND
|
|||
devices - within reason. The RAM overhead with this approach is approx
|
||||
2 bytes per page - 512kB of RAM for a whole 128MB NAND.
|
||||
|
||||
Boot-time scanning to build the file structure lists only requires
|
||||
Boot-time scanning to build the file structure lists only requires
|
||||
one pass reading NAND. If proper shutdowns happen the current RAM
|
||||
summary of the filesystem status is saved to flash, called
|
||||
'checkpointing'. This saves re-scanning the flash on startup, and gives
|
||||
huge boot/mount time savings.
|
||||
huge boot/mount time savings.
|
||||
|
||||
YAFFS regenerates its state by 'replaying the tape' - i.e. by
|
||||
scanning the chunks in their allocation order (i.e. block sequence ID
|
||||
order), which is usually different form the media block order. Each
|
||||
block is still only read once - starting from the end of the media and
|
||||
working back.
|
||||
working back.
|
||||
|
||||
YAFFS tags in YAFFS1 mode:
|
||||
|
||||
|
@ -109,27 +109,27 @@ YAFFS tags in YAFFS2 mode:
|
|||
12 bytes ECC on data (3 bytes per 256 bytes of data)
|
||||
|
||||
|
||||
Page allocation and garbage collection
|
||||
|
||||
Pages are allocated sequentially from the currently selected block.
|
||||
When all the pages in the block are filled, another clean block is
|
||||
selected for allocation. At least two or three clean blocks are
|
||||
reserved for garbage collection purposes. If there are insufficient
|
||||
clean blocks available, then a dirty block ( ie one containing only
|
||||
Page allocation and garbage collection
|
||||
|
||||
Pages are allocated sequentially from the currently selected block.
|
||||
When all the pages in the block are filled, another clean block is
|
||||
selected for allocation. At least two or three clean blocks are
|
||||
reserved for garbage collection purposes. If there are insufficient
|
||||
clean blocks available, then a dirty block ( ie one containing only
|
||||
discarded pages) is erased to free it up as a clean block. If no dirty
|
||||
blocks are available, then the dirtiest block is selected for garbage
|
||||
collection.
|
||||
|
||||
Garbage collection is performed by copying the valid data pages into
|
||||
new data pages thus rendering all the pages in this block dirty and
|
||||
freeing it up for erasure. I also like the idea of selecting a block
|
||||
blocks are available, then the dirtiest block is selected for garbage
|
||||
collection.
|
||||
|
||||
Garbage collection is performed by copying the valid data pages into
|
||||
new data pages thus rendering all the pages in this block dirty and
|
||||
freeing it up for erasure. I also like the idea of selecting a block
|
||||
at random some small percentage of the time - thus reducing the chance
|
||||
of wear differences.
|
||||
|
||||
YAFFS is single-threaded. Garbage-collection is done as a parasitic
|
||||
task of writing data. So each time some data is written, a bit of
|
||||
pending garbage collection is done. More pages are garbage-collected
|
||||
when free space is tight.
|
||||
when free space is tight.
|
||||
|
||||
|
||||
Flash writing
|
||||
|
@ -143,7 +143,7 @@ This comes as a side-effect of the block-allocation strategy. Data is
|
|||
always written on the next free block, so they are all used equally.
|
||||
Blocks containing data that is written but never erased will not get
|
||||
back into the free list, so wear is levelled over only blocks which
|
||||
are free or become free, not blocks which never change.
|
||||
are free or become free, not blocks which never change.
|
||||
|
||||
|
||||
|
||||
|
@ -183,7 +183,7 @@ image just had to know which bytes to use for YAFFS Tags.
|
|||
|
||||
Option 3 is hardest as the image creator needs to know exactly what
|
||||
ECC bytes, endianness and algorithm to use as well as which bytes are
|
||||
available to YAFFS.
|
||||
available to YAFFS.
|
||||
|
||||
mkyaffs2image creates an image suitable for option 3 for the
|
||||
particular case of yaffs2 on 2K page NAND with default MTD layout.
|
||||
|
@ -195,7 +195,7 @@ Bootloaders
|
|||
-----------
|
||||
|
||||
A bootloader using YAFFS needs to know how MTD is laying out the OOB
|
||||
so that it can skip bad blocks.
|
||||
so that it can skip bad blocks.
|
||||
|
||||
YAFFS Tracing
|
||||
-------------
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -15,7 +15,7 @@
|
|||
|
||||
/*
|
||||
* This file is just holds extra declarations used during development.
|
||||
* Most of these are from kernel includes placed here so we can use them in
|
||||
* Most of these are from kernel includes placed here so we can use them in
|
||||
* applications.
|
||||
*
|
||||
*/
|
||||
|
@ -192,7 +192,7 @@ static __inline__ void list_splice(struct list_head *list,
|
|||
*/
|
||||
#define list_for_each(pos, head) \
|
||||
for (pos = (head)->next, prefetch(pos->next); pos != (head); \
|
||||
pos = pos->next, prefetch(pos->next))
|
||||
pos = pos->next, prefetch(pos->next))
|
||||
|
||||
/**
|
||||
* list_for_each_safe - iterate over a list safe against removal
|
||||
|
|
|
@ -26,27 +26,27 @@ static int yaffs_CheckpointSpaceOk(yaffs_Device *dev)
|
|||
{
|
||||
|
||||
int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
|
||||
|
||||
|
||||
T(YAFFS_TRACE_CHECKPOINT,
|
||||
(TSTR("checkpt blocks available = %d" TENDSTR),
|
||||
blocksAvailable));
|
||||
|
||||
|
||||
|
||||
|
||||
return (blocksAvailable <= 0) ? 0 : 1;
|
||||
}
|
||||
|
||||
|
||||
static int yaffs_CheckpointErase(yaffs_Device *dev)
|
||||
{
|
||||
|
||||
int i;
|
||||
|
||||
|
||||
if(!dev->eraseBlockInNAND)
|
||||
int i;
|
||||
|
||||
|
||||
if(!dev->eraseBlockInNAND)
|
||||
return 0;
|
||||
T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
|
||||
dev->internalStartBlock,dev->internalEndBlock));
|
||||
|
||||
|
||||
for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
|
||||
yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
|
||||
if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
|
||||
|
@ -62,9 +62,9 @@ static int yaffs_CheckpointErase(yaffs_Device *dev)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dev->blocksInCheckpoint = 0;
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -76,11 +76,11 @@ static void yaffs_CheckpointFindNextErasedBlock(yaffs_Device *dev)
|
|||
T(YAFFS_TRACE_CHECKPOINT,
|
||||
(TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
|
||||
dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
|
||||
|
||||
|
||||
if(dev->checkpointNextBlock >= 0 &&
|
||||
dev->checkpointNextBlock <= dev->internalEndBlock &&
|
||||
blocksAvailable > 0){
|
||||
|
||||
|
||||
for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
|
||||
yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
|
||||
if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
|
||||
|
@ -92,7 +92,7 @@ static void yaffs_CheckpointFindNextErasedBlock(yaffs_Device *dev)
|
|||
}
|
||||
}
|
||||
T(YAFFS_TRACE_CHECKPOINT,(TSTR("out of checkpt blocks"TENDSTR)));
|
||||
|
||||
|
||||
dev->checkpointNextBlock = -1;
|
||||
dev->checkpointCurrentBlock = -1;
|
||||
}
|
||||
|
@ -101,19 +101,19 @@ static void yaffs_CheckpointFindNextCheckpointBlock(yaffs_Device *dev)
|
|||
{
|
||||
int i;
|
||||
yaffs_ExtendedTags tags;
|
||||
|
||||
|
||||
T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: start: blocks %d next %d" TENDSTR),
|
||||
dev->blocksInCheckpoint, dev->checkpointNextBlock));
|
||||
|
||||
if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
|
||||
|
||||
if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
|
||||
for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
|
||||
int chunk = i * dev->nChunksPerBlock;
|
||||
int realignedChunk = chunk - dev->chunkOffset;
|
||||
|
||||
dev->readChunkWithTagsFromNAND(dev,realignedChunk,NULL,&tags);
|
||||
T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
|
||||
T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
|
||||
i, tags.objectId,tags.sequenceNumber,tags.eccResult));
|
||||
|
||||
|
||||
if(tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA){
|
||||
/* Right kind of block */
|
||||
dev->checkpointNextBlock = tags.objectId;
|
||||
|
@ -134,7 +134,7 @@ static void yaffs_CheckpointFindNextCheckpointBlock(yaffs_Device *dev)
|
|||
|
||||
int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting)
|
||||
{
|
||||
|
||||
|
||||
/* Got the functions we need? */
|
||||
if (!dev->writeChunkWithTagsToNAND ||
|
||||
!dev->readChunkWithTagsFromNAND ||
|
||||
|
@ -144,31 +144,31 @@ int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting)
|
|||
|
||||
if(forWriting && !yaffs_CheckpointSpaceOk(dev))
|
||||
return 0;
|
||||
|
||||
|
||||
if(!dev->checkpointBuffer)
|
||||
dev->checkpointBuffer = YMALLOC_DMA(dev->nDataBytesPerChunk);
|
||||
if(!dev->checkpointBuffer)
|
||||
return 0;
|
||||
|
||||
|
||||
|
||||
dev->checkpointPageSequence = 0;
|
||||
|
||||
|
||||
dev->checkpointOpenForWrite = forWriting;
|
||||
|
||||
|
||||
dev->checkpointByteCount = 0;
|
||||
dev->checkpointSum = 0;
|
||||
dev->checkpointXor = 0;
|
||||
dev->checkpointCurrentBlock = -1;
|
||||
dev->checkpointCurrentChunk = -1;
|
||||
dev->checkpointNextBlock = dev->internalStartBlock;
|
||||
|
||||
|
||||
/* Erase all the blocks in the checkpoint area */
|
||||
if(forWriting){
|
||||
memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
|
||||
dev->checkpointByteOffset = 0;
|
||||
return yaffs_CheckpointErase(dev);
|
||||
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
int i;
|
||||
/* Set to a value that will kick off a read */
|
||||
|
@ -181,7 +181,7 @@ int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting)
|
|||
for(i = 0; i < dev->checkpointMaxBlocks; i++)
|
||||
dev->checkpointBlockList[i] = -1;
|
||||
}
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -200,15 +200,15 @@ static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
|
|||
int realignedChunk;
|
||||
|
||||
yaffs_ExtendedTags tags;
|
||||
|
||||
|
||||
if(dev->checkpointCurrentBlock < 0){
|
||||
yaffs_CheckpointFindNextErasedBlock(dev);
|
||||
dev->checkpointCurrentChunk = 0;
|
||||
}
|
||||
|
||||
|
||||
if(dev->checkpointCurrentBlock < 0)
|
||||
return 0;
|
||||
|
||||
|
||||
tags.chunkDeleted = 0;
|
||||
tags.objectId = dev->checkpointNextBlock; /* Hint to next place to look */
|
||||
tags.chunkId = dev->checkpointPageSequence + 1;
|
||||
|
@ -221,25 +221,25 @@ static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
|
|||
bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
|
||||
dev->blocksInCheckpoint++;
|
||||
}
|
||||
|
||||
|
||||
chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock + dev->checkpointCurrentChunk;
|
||||
|
||||
|
||||
|
||||
T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
|
||||
chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
|
||||
|
||||
chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
|
||||
|
||||
realignedChunk = chunk - dev->chunkOffset;
|
||||
|
||||
|
||||
dev->writeChunkWithTagsToNAND(dev,realignedChunk,dev->checkpointBuffer,&tags);
|
||||
dev->checkpointByteOffset = 0;
|
||||
dev->checkpointPageSequence++;
|
||||
dev->checkpointPageSequence++;
|
||||
dev->checkpointCurrentChunk++;
|
||||
if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock){
|
||||
dev->checkpointCurrentChunk = 0;
|
||||
dev->checkpointCurrentBlock = -1;
|
||||
}
|
||||
memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -249,37 +249,37 @@ int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes)
|
|||
int i=0;
|
||||
int ok = 1;
|
||||
|
||||
|
||||
|
||||
__u8 * dataBytes = (__u8 *)data;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(!dev->checkpointBuffer)
|
||||
return 0;
|
||||
|
||||
|
||||
if(!dev->checkpointOpenForWrite)
|
||||
return -1;
|
||||
|
||||
while(i < nBytes && ok) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
|
||||
dev->checkpointSum += *dataBytes;
|
||||
dev->checkpointXor ^= *dataBytes;
|
||||
|
||||
|
||||
dev->checkpointByteOffset++;
|
||||
i++;
|
||||
dataBytes++;
|
||||
dev->checkpointByteCount++;
|
||||
|
||||
|
||||
|
||||
|
||||
if(dev->checkpointByteOffset < 0 ||
|
||||
dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
|
||||
dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
|
||||
ok = yaffs_CheckpointFlushBuffer(dev);
|
||||
|
||||
}
|
||||
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
|
@ -289,12 +289,12 @@ int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
|
|||
int ok = 1;
|
||||
yaffs_ExtendedTags tags;
|
||||
|
||||
|
||||
|
||||
int chunk;
|
||||
int realignedChunk;
|
||||
|
||||
__u8 *dataBytes = (__u8 *)data;
|
||||
|
||||
|
||||
if(!dev->checkpointBuffer)
|
||||
return 0;
|
||||
|
||||
|
@ -302,31 +302,31 @@ int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
|
|||
return -1;
|
||||
|
||||
while(i < nBytes && ok) {
|
||||
|
||||
|
||||
|
||||
|
||||
if(dev->checkpointByteOffset < 0 ||
|
||||
dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
|
||||
|
||||
|
||||
if(dev->checkpointCurrentBlock < 0){
|
||||
yaffs_CheckpointFindNextCheckpointBlock(dev);
|
||||
dev->checkpointCurrentChunk = 0;
|
||||
}
|
||||
|
||||
|
||||
if(dev->checkpointCurrentBlock < 0)
|
||||
ok = 0;
|
||||
else {
|
||||
|
||||
chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
|
||||
|
||||
chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
|
||||
dev->checkpointCurrentChunk;
|
||||
|
||||
realignedChunk = chunk - dev->chunkOffset;
|
||||
|
||||
/* read in the next chunk */
|
||||
/* printf("read checkpoint page %d\n",dev->checkpointPage); */
|
||||
dev->readChunkWithTagsFromNAND(dev, realignedChunk,
|
||||
dev->readChunkWithTagsFromNAND(dev, realignedChunk,
|
||||
dev->checkpointBuffer,
|
||||
&tags);
|
||||
|
||||
|
||||
if(tags.chunkId != (dev->checkpointPageSequence + 1) ||
|
||||
tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
|
||||
ok = 0;
|
||||
|
@ -334,12 +334,12 @@ int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
|
|||
dev->checkpointByteOffset = 0;
|
||||
dev->checkpointPageSequence++;
|
||||
dev->checkpointCurrentChunk++;
|
||||
|
||||
|
||||
if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
|
||||
dev->checkpointCurrentBlock = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(ok){
|
||||
*dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
|
||||
dev->checkpointSum += *dataBytes;
|
||||
|
@ -350,14 +350,14 @@ int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
|
|||
dev->checkpointByteCount++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
int yaffs_CheckpointClose(yaffs_Device *dev)
|
||||
{
|
||||
|
||||
if(dev->checkpointOpenForWrite){
|
||||
if(dev->checkpointOpenForWrite){
|
||||
if(dev->checkpointByteOffset != 0)
|
||||
yaffs_CheckpointFlushBuffer(dev);
|
||||
} else {
|
||||
|
@ -377,19 +377,19 @@ int yaffs_CheckpointClose(yaffs_Device *dev)
|
|||
dev->nFreeChunks -= dev->blocksInCheckpoint * dev->nChunksPerBlock;
|
||||
dev->nErasedBlocks -= dev->blocksInCheckpoint;
|
||||
|
||||
|
||||
|
||||
T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint byte count %d" TENDSTR),
|
||||
dev->checkpointByteCount));
|
||||
|
||||
|
||||
if(dev->checkpointBuffer){
|
||||
/* free the buffer */
|
||||
/* free the buffer */
|
||||
YFREE(dev->checkpointBuffer);
|
||||
dev->checkpointBuffer = NULL;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
int yaffs_CheckpointInvalidateStream(yaffs_Device *dev)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -32,4 +32,3 @@ int yaffs_CheckpointInvalidateStream(yaffs_Device *dev);
|
|||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -14,9 +14,9 @@
|
|||
/*
|
||||
* This code implements the ECC algorithm used in SmartMedia.
|
||||
*
|
||||
* The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
|
||||
* The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
|
||||
* The two unused bit are set to 1.
|
||||
* The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
|
||||
* The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
|
||||
* blocks are used on a 512-byte NAND page.
|
||||
*
|
||||
*/
|
||||
|
@ -231,8 +231,8 @@ int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
|
|||
return 1; /* Corrected the error */
|
||||
}
|
||||
|
||||
if ((yaffs_CountBits(d0) +
|
||||
yaffs_CountBits(d1) +
|
||||
if ((yaffs_CountBits(d0) +
|
||||
yaffs_CountBits(d1) +
|
||||
yaffs_CountBits(d2)) == 1) {
|
||||
/* Reccoverable error in ecc */
|
||||
|
||||
|
@ -242,7 +242,7 @@ int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
|
|||
|
||||
return 1; /* Corrected the error */
|
||||
}
|
||||
|
||||
|
||||
/* Unrecoverable error */
|
||||
|
||||
return -1;
|
||||
|
@ -296,7 +296,7 @@ int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
|
|||
if ((cDelta | lDelta | lDeltaPrime) == 0)
|
||||
return 0; /* no error */
|
||||
|
||||
if (lDelta == ~lDeltaPrime &&
|
||||
if (lDelta == ~lDeltaPrime &&
|
||||
(((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15))
|
||||
{
|
||||
/* Single bit (recoverable) error in data */
|
||||
|
@ -312,7 +312,7 @@ int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
|
|||
|
||||
if(lDelta >= nBytes)
|
||||
return -1;
|
||||
|
||||
|
||||
data[lDelta] ^= (1 << bit);
|
||||
|
||||
return 1; /* corrected */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -16,9 +16,9 @@
|
|||
/*
|
||||
* This code implements the ECC algorithm used in SmartMedia.
|
||||
*
|
||||
* The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
|
||||
* The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
|
||||
* The two unused bit are set to 1.
|
||||
* The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
|
||||
* The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
|
||||
* blocks are used on a 512-byte NAND page.
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -22,11 +22,11 @@
|
|||
#define YAFFS_OK 1
|
||||
#define YAFFS_FAIL 0
|
||||
|
||||
/* Give us a Y=0x59,
|
||||
* Give us an A=0x41,
|
||||
* Give us an FF=0xFF
|
||||
/* Give us a Y=0x59,
|
||||
* Give us an A=0x41,
|
||||
* Give us an FF=0xFF
|
||||
* Give us an S=0x53
|
||||
* And what have we got...
|
||||
* And what have we got...
|
||||
*/
|
||||
#define YAFFS_MAGIC 0x5941FF53
|
||||
|
||||
|
@ -102,7 +102,7 @@
|
|||
* The range is limited slightly to help distinguish bad numbers from good.
|
||||
* This also allows us to perhaps in the future use special numbers for
|
||||
* special purposes.
|
||||
* EFFFFF00 allows the allocation of 8 blocks per second (~1Mbytes) for 15 years,
|
||||
* EFFFFF00 allows the allocation of 8 blocks per second (~1Mbytes) for 15 years,
|
||||
* and is a larger number than the lifetime of a 2GB device.
|
||||
*/
|
||||
#define YAFFS_LOWEST_SEQUENCE_NUMBER 0x00001000
|
||||
|
@ -178,7 +178,7 @@ typedef struct {
|
|||
|
||||
/* The following stuff only has meaning when we read */
|
||||
yaffs_ECCResult eccResult;
|
||||
unsigned blockBad;
|
||||
unsigned blockBad;
|
||||
|
||||
/* YAFFS 1 stuff */
|
||||
unsigned chunkDeleted; /* The chunk is marked deleted */
|
||||
|
@ -244,29 +244,29 @@ typedef enum {
|
|||
/* This block is empty */
|
||||
|
||||
YAFFS_BLOCK_STATE_ALLOCATING,
|
||||
/* This block is partially allocated.
|
||||
/* This block is partially allocated.
|
||||
* At least one page holds valid data.
|
||||
* This is the one currently being used for page
|
||||
* allocation. Should never be more than one of these
|
||||
*/
|
||||
|
||||
YAFFS_BLOCK_STATE_FULL,
|
||||
YAFFS_BLOCK_STATE_FULL,
|
||||
/* All the pages in this block have been allocated.
|
||||
*/
|
||||
|
||||
YAFFS_BLOCK_STATE_DIRTY,
|
||||
/* All pages have been allocated and deleted.
|
||||
/* All pages have been allocated and deleted.
|
||||
* Erase me, reuse me.
|
||||
*/
|
||||
|
||||
YAFFS_BLOCK_STATE_CHECKPOINT,
|
||||
YAFFS_BLOCK_STATE_CHECKPOINT,
|
||||
/* This block is assigned to holding checkpoint data.
|
||||
*/
|
||||
|
||||
YAFFS_BLOCK_STATE_COLLECTING,
|
||||
YAFFS_BLOCK_STATE_COLLECTING,
|
||||
/* This block is being garbage collected */
|
||||
|
||||
YAFFS_BLOCK_STATE_DEAD
|
||||
YAFFS_BLOCK_STATE_DEAD
|
||||
/* This block has failed and is not in use */
|
||||
} yaffs_BlockState;
|
||||
|
||||
|
@ -279,11 +279,11 @@ typedef struct {
|
|||
int pagesInUse:10; /* number of pages in use */
|
||||
unsigned blockState:4; /* One of the above block states. NB use unsigned because enum is sometimes an int */
|
||||
__u32 needsRetiring:1; /* Data has failed on this block, need to get valid data off */
|
||||
/* and retire the block. */
|
||||
/* and retire the block. */
|
||||
__u32 skipErasedCheck: 1; /* If this is set we can skip the erased check on this block */
|
||||
__u32 gcPrioritise: 1; /* An ECC check or blank check has failed on this block.
|
||||
__u32 gcPrioritise: 1; /* An ECC check or blank check has failed on this block.
|
||||
It should be prioritised for GC */
|
||||
__u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
|
||||
__u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
|
||||
|
||||
#ifdef CONFIG_YAFFS_YAFFS2
|
||||
__u32 hasShrinkHeader:1; /* This block has at least one shrink object header */
|
||||
|
@ -408,7 +408,7 @@ struct yaffs_ObjectStruct {
|
|||
__u8 renameAllowed:1; /* Some objects are not allowed to be renamed. */
|
||||
__u8 unlinkAllowed:1;
|
||||
__u8 dirty:1; /* the object needs to be written to flash */
|
||||
__u8 valid:1; /* When the file system is being loaded up, this
|
||||
__u8 valid:1; /* When the file system is being loaded up, this
|
||||
* object might be created before the data
|
||||
* is available (ie. file data records appear before the header).
|
||||
*/
|
||||
|
@ -430,11 +430,11 @@ struct yaffs_ObjectStruct {
|
|||
|
||||
/* directory structure stuff */
|
||||
/* also used for linking up the free list */
|
||||
struct yaffs_ObjectStruct *parent;
|
||||
struct yaffs_ObjectStruct *parent;
|
||||
struct list_head siblings;
|
||||
|
||||
/* Where's my object header in NAND? */
|
||||
int chunkId;
|
||||
int chunkId;
|
||||
|
||||
int nDataChunks; /* Number of data chunks attached to the file. */
|
||||
|
||||
|
@ -491,26 +491,26 @@ typedef struct {
|
|||
} yaffs_ObjectBucket;
|
||||
|
||||
|
||||
/* yaffs_CheckpointObject holds the definition of an object as dumped
|
||||
/* yaffs_CheckpointObject holds the definition of an object as dumped
|
||||
* by checkpointing.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
int structType;
|
||||
__u32 objectId;
|
||||
int structType;
|
||||
__u32 objectId;
|
||||
__u32 parentId;
|
||||
int chunkId;
|
||||
|
||||
|
||||
yaffs_ObjectType variantType:3;
|
||||
__u8 deleted:1;
|
||||
__u8 softDeleted:1;
|
||||
__u8 unlinked:1;
|
||||
__u8 fake:1;
|
||||
__u8 deleted:1;
|
||||
__u8 softDeleted:1;
|
||||
__u8 unlinked:1;
|
||||
__u8 fake:1;
|
||||
__u8 renameAllowed:1;
|
||||
__u8 unlinkAllowed:1;
|
||||
__u8 serial;
|
||||
|
||||
int nDataChunks;
|
||||
__u8 serial;
|
||||
|
||||
int nDataChunks;
|
||||
__u32 fileSizeOrEquivalentObjectId;
|
||||
|
||||
}yaffs_CheckpointObject;
|
||||
|
@ -540,14 +540,14 @@ struct yaffs_DeviceStruct {
|
|||
int endBlock; /* End block we're allowed to use */
|
||||
int nReservedBlocks; /* We want this tuneable so that we can reduce */
|
||||
/* reserved blocks on NOR and RAM. */
|
||||
|
||||
|
||||
|
||||
|
||||
/* Stuff used by the shared space checkpointing mechanism */
|
||||
/* If this value is zero, then this mechanism is disabled */
|
||||
|
||||
|
||||
int nCheckpointReservedBlocks; /* Blocks to reserve for checkpoint data */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int nShortOpCaches; /* If <= 0, then short op caching is disabled, else
|
||||
|
@ -561,8 +561,8 @@ struct yaffs_DeviceStruct {
|
|||
void *genericDevice; /* Pointer to device context
|
||||
* On an mtd this holds the mtd pointer.
|
||||
*/
|
||||
void *superBlock;
|
||||
|
||||
void *superBlock;
|
||||
|
||||
/* NAND access functions (Must be set before calling YAFFS)*/
|
||||
|
||||
int (*writeChunkToNAND) (struct yaffs_DeviceStruct * dev,
|
||||
|
@ -588,21 +588,21 @@ struct yaffs_DeviceStruct {
|
|||
#endif
|
||||
|
||||
int isYaffs2;
|
||||
|
||||
/* The removeObjectCallback function must be supplied by OS flavours that
|
||||
|
||||
/* The removeObjectCallback function must be supplied by OS flavours that
|
||||
* need it. The Linux kernel does not use this, but yaffs direct does use
|
||||
* it to implement the faster readdir
|
||||
*/
|
||||
void (*removeObjectCallback)(struct yaffs_ObjectStruct *obj);
|
||||
|
||||
|
||||
/* Callback to mark the superblock dirsty */
|
||||
void (*markSuperBlockDirty)(void * superblock);
|
||||
|
||||
|
||||
int wideTnodesDisabled; /* Set to disable wide tnodes */
|
||||
|
||||
|
||||
|
||||
/* End of stuff that must be set before initialisation. */
|
||||
|
||||
|
||||
/* Checkpoint control. Can be set before or after initialisation */
|
||||
__u8 skipCheckpointRead;
|
||||
__u8 skipCheckpointWrite;
|
||||
|
@ -611,21 +611,21 @@ struct yaffs_DeviceStruct {
|
|||
|
||||
__u16 chunkGroupBits; /* 0 for devices <= 32MB. else log2(nchunks) - 16 */
|
||||
__u16 chunkGroupSize; /* == 2^^chunkGroupBits */
|
||||
|
||||
|
||||
/* Stuff to support wide tnodes */
|
||||
__u32 tnodeWidth;
|
||||
__u32 tnodeMask;
|
||||
|
||||
|
||||
/* Stuff to support various file offses to chunk/offset translations */
|
||||
/* "Crumbs" for nDataBytesPerChunk not being a power of 2 */
|
||||
__u32 crumbMask;
|
||||
__u32 crumbShift;
|
||||
__u32 crumbsPerChunk;
|
||||
|
||||
|
||||
/* Straight shifting for nDataBytesPerChunk being a power of 2 */
|
||||
__u32 chunkShift;
|
||||
__u32 chunkMask;
|
||||
|
||||
|
||||
|
||||
/* XXX U-BOOT XXX */
|
||||
#if 0
|
||||
|
@ -636,12 +636,12 @@ struct yaffs_DeviceStruct {
|
|||
void (*putSuperFunc) (struct super_block * sb);
|
||||
#endif
|
||||
#endif
|
||||
__u8 *spareBuffer; /* For mtdif2 use. Don't know the size of the buffer
|
||||
__u8 *spareBuffer; /* For mtdif2 use. Don't know the size of the buffer
|
||||
* at compile time so we have to allocate it.
|
||||
*/
|
||||
|
||||
int isMounted;
|
||||
|
||||
|
||||
int isCheckpointed;
|
||||
|
||||
|
||||
|
@ -650,7 +650,7 @@ struct yaffs_DeviceStruct {
|
|||
int internalEndBlock;
|
||||
int blockOffset;
|
||||
int chunkOffset;
|
||||
|
||||
|
||||
|
||||
/* Runtime checkpointing stuff */
|
||||
int checkpointPageSequence; /* running sequence number of checkpoint pages */
|
||||
|
@ -666,13 +666,13 @@ struct yaffs_DeviceStruct {
|
|||
int checkpointMaxBlocks;
|
||||
__u32 checkpointSum;
|
||||
__u32 checkpointXor;
|
||||
|
||||
|
||||
/* Block Info */
|
||||
yaffs_BlockInfo *blockInfo;
|
||||
__u8 *chunkBits; /* bitmap of chunks in use */
|
||||
unsigned blockInfoAlt:1; /* was allocated using alternative strategy */
|
||||
unsigned chunkBitsAlt:1; /* was allocated using alternative strategy */
|
||||
int chunkBitmapStride; /* Number of bytes of chunkBits per block.
|
||||
int chunkBitmapStride; /* Number of bytes of chunkBits per block.
|
||||
* Must be consistent with nChunksPerBlock.
|
||||
*/
|
||||
|
||||
|
@ -720,7 +720,7 @@ struct yaffs_DeviceStruct {
|
|||
int tagsEccUnfixed;
|
||||
int nDeletions;
|
||||
int nUnmarkedDeletions;
|
||||
|
||||
|
||||
int hasPendingPrioritisedGCs; /* We think this device might have pending prioritised gcs */
|
||||
|
||||
/* Special directories */
|
||||
|
@ -731,7 +731,7 @@ struct yaffs_DeviceStruct {
|
|||
* __u8 bufferedData[YAFFS_CHUNKS_PER_BLOCK][YAFFS_BYTES_PER_CHUNK];
|
||||
* yaffs_Spare bufferedSpare[YAFFS_CHUNKS_PER_BLOCK];
|
||||
*/
|
||||
|
||||
|
||||
int bufferedBlock; /* Which block is buffered here? */
|
||||
int doingBufferedBlockRewrite;
|
||||
|
||||
|
@ -764,7 +764,7 @@ typedef struct yaffs_DeviceStruct yaffs_Device;
|
|||
|
||||
/* The static layout of bllock usage etc is stored in the super block header */
|
||||
typedef struct {
|
||||
int StructType;
|
||||
int StructType;
|
||||
int version;
|
||||
int checkpointStartBlock;
|
||||
int checkpointEndBlock;
|
||||
|
@ -772,12 +772,12 @@ typedef struct {
|
|||
int endBlock;
|
||||
int rfu[100];
|
||||
} yaffs_SuperBlockHeader;
|
||||
|
||||
|
||||
/* The CheckpointDevice structure holds the device information that changes at runtime and
|
||||
* must be preserved over unmount/mount cycles.
|
||||
*/
|
||||
typedef struct {
|
||||
int structType;
|
||||
int structType;
|
||||
int nErasedBlocks;
|
||||
int allocationBlock; /* Current block being allocated off */
|
||||
__u32 allocationPage;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#ifndef __YAFFS_MALLOC_H__
|
||||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -13,14 +13,13 @@
|
|||
*
|
||||
* Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
|
||||
*/
|
||||
|
||||
|
||||
/* XXX U-BOOT XXX */
|
||||
#if 0
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
void *yaffs_malloc(size_t size);
|
||||
void yaffs_free(void *ptr);
|
||||
|
||||
#endif
|
||||
|
||||
void *yaffs_malloc(size_t size);
|
||||
void yaffs_free(void *ptr);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -175,7 +175,7 @@ int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
|
|||
__u8 *spareAsBytes = (__u8 *) spare;
|
||||
|
||||
if (data && spare) {
|
||||
if (dev->useNANDECC) {
|
||||
if (dev->useNANDECC) {
|
||||
/* Careful, this call adds 2 ints */
|
||||
/* to the end of the spare data. Calling function */
|
||||
/* should allocate enough memory for spare, */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -162,7 +162,7 @@ int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
|
|||
|
||||
if (tags)
|
||||
yaffs_UnpackTags2(tags, &pt);
|
||||
|
||||
|
||||
if(tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
|
||||
tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
|
||||
/* XXX U-BOOT XXX */
|
||||
#include <common.h>
|
||||
|
||||
|
@ -28,9 +28,9 @@ int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
|
|||
{
|
||||
int result;
|
||||
yaffs_ExtendedTags localTags;
|
||||
|
||||
|
||||
int realignedChunkInNAND = chunkInNAND - dev->chunkOffset;
|
||||
|
||||
|
||||
/* If there are no tags provided, use local tags to get prioritised gc working */
|
||||
if(!tags)
|
||||
tags = &localTags;
|
||||
|
@ -42,14 +42,14 @@ int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
|
|||
result = yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(dev,
|
||||
realignedChunkInNAND,
|
||||
buffer,
|
||||
tags);
|
||||
if(tags &&
|
||||
tags);
|
||||
if(tags &&
|
||||
tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){
|
||||
|
||||
|
||||
yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock);
|
||||
yaffs_HandleChunkError(dev,bi);
|
||||
yaffs_HandleChunkError(dev,bi);
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,7 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
|
|||
{
|
||||
chunkInNAND -= dev->chunkOffset;
|
||||
|
||||
|
||||
|
||||
if (tags) {
|
||||
tags->sequenceNumber = dev->sequenceNumber;
|
||||
tags->chunkUsed = 1;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -41,4 +41,3 @@ int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
|
|||
int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -131,10 +131,10 @@ void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt)
|
|||
(yaffs_PackedTags2TagsPart),
|
||||
&pt->ecc, &ecc);
|
||||
switch(result){
|
||||
case 0:
|
||||
t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
|
||||
case 0:
|
||||
t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
|
||||
break;
|
||||
case 1:
|
||||
case 1:
|
||||
t->eccResult = YAFFS_ECC_RESULT_FIXED;
|
||||
break;
|
||||
case -1:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
register TYPE t = *pi; \
|
||||
*pi++ = *pj; \
|
||||
*pj++ = t; \
|
||||
} while (--i > 0); \
|
||||
} while (--i > 0); \
|
||||
}
|
||||
|
||||
#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \
|
||||
|
@ -53,7 +53,7 @@
|
|||
static __inline void
|
||||
swapfunc(char *a, char *b, int n, int swaptype)
|
||||
{
|
||||
if (swaptype <= 1)
|
||||
if (swaptype <= 1)
|
||||
swapcode(long, a, b, n)
|
||||
else
|
||||
swapcode(char, a, b, n)
|
||||
|
@ -74,7 +74,7 @@ med3(char *a, char *b, char *c, int (*cmp)(const void *, const void *))
|
|||
{
|
||||
return cmp(a, b) < 0 ?
|
||||
(cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))
|
||||
:(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
|
||||
:(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
|
||||
}
|
||||
|
||||
#ifndef min
|
||||
|
@ -140,7 +140,7 @@ loop: SWAPINIT(a, es);
|
|||
}
|
||||
if (swap_cnt == 0) { /* Switch to insertion sort */
|
||||
for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
|
||||
for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
|
||||
for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
|
||||
pl -= es)
|
||||
swap(pl, pl - es);
|
||||
return;
|
||||
|
@ -153,7 +153,7 @@ loop: SWAPINIT(a, es);
|
|||
vecswap(pb, pn - r, r);
|
||||
if ((r = pb - pa) > es)
|
||||
yaffs_qsort(a, r / es, es, cmp);
|
||||
if ((r = pd - pc) > es) {
|
||||
if ((r = pd - pc) > es) {
|
||||
/* Iterate rather than recurse to save stack space */
|
||||
a = pn - r;
|
||||
n = r / es;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -18,6 +18,6 @@
|
|||
#define __YAFFS_QSORT_H__
|
||||
|
||||
extern void yaffs_qsort (void *const base, size_t total_elems, size_t size,
|
||||
int (*cmp)(const void *, const void *));
|
||||
int (*cmp)(const void *, const void *));
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -83,7 +83,7 @@ void yaffsfs_LocalInitialisation(void)
|
|||
// NB Though /boot and /flash occupy the same physical device they
|
||||
// are still disticnt "yaffs_Devices. You may think of these as "partitions"
|
||||
// using non-overlapping areas in the same device.
|
||||
//
|
||||
//
|
||||
|
||||
#include "yaffs_ramdisk.h"
|
||||
#include "yaffs_flashif.h"
|
||||
|
@ -124,7 +124,7 @@ int yaffs_StartUp(void)
|
|||
// Stuff to configure YAFFS
|
||||
// Stuff to initialise anything special (eg lock semaphore).
|
||||
yaffsfs_LocalInitialisation();
|
||||
|
||||
|
||||
// Set up devices
|
||||
|
||||
/* XXX U-BOOT XXX */
|
||||
|
@ -134,7 +134,7 @@ int yaffs_StartUp(void)
|
|||
ramDev.nChunksPerBlock = 32;
|
||||
ramDev.nReservedBlocks = 2; // Set this smaller for RAM
|
||||
ramDev.startBlock = 1; // Can't use block 0
|
||||
ramDev.endBlock = 127; // Last block in 2MB.
|
||||
ramDev.endBlock = 127; // Last block in 2MB.
|
||||
ramDev.useNANDECC = 1;
|
||||
ramDev.nShortOpCaches = 0; // Disable caching on this device.
|
||||
ramDev.genericDevice = (void *) 0; // Used to identify the device in fstat.
|
||||
|
@ -148,7 +148,7 @@ int yaffs_StartUp(void)
|
|||
bootDev.nChunksPerBlock = 32;
|
||||
bootDev.nReservedBlocks = 5;
|
||||
bootDev.startBlock = 1; // Can't use block 0
|
||||
bootDev.endBlock = 127; // Last block in 2MB.
|
||||
bootDev.endBlock = 127; // Last block in 2MB.
|
||||
bootDev.useNANDECC = 0; // use YAFFS's ECC
|
||||
bootDev.nShortOpCaches = 10; // Use caches
|
||||
bootDev.genericDevice = (void *) 1; // Used to identify the device in fstat.
|
||||
|
@ -196,13 +196,13 @@ int yaffs_StartUp(void)
|
|||
flashDev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
|
||||
flashDev->nDataBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
|
||||
}
|
||||
|
||||
|
||||
/* ... and common functions */
|
||||
flashDev->eraseBlockInNAND = nandmtd_EraseBlockInNAND;
|
||||
flashDev->initialiseNAND = nandmtd_InitialiseNAND;
|
||||
|
||||
yaffs_initialise(yaffsfs_config);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -219,19 +219,19 @@ void make_a_file(char *yaffsName,char bval,int sizeOfFile)
|
|||
printf("Error opening file: %d\n", outh);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
memset(buffer,bval,100);
|
||||
|
||||
|
||||
do{
|
||||
i = sizeOfFile;
|
||||
if(i > 100) i = 100;
|
||||
sizeOfFile -= i;
|
||||
|
||||
|
||||
yaffs_write(outh,buffer,i);
|
||||
|
||||
|
||||
} while (sizeOfFile > 0);
|
||||
|
||||
|
||||
|
||||
|
||||
yaffs_close(outh);
|
||||
}
|
||||
|
||||
|
@ -252,7 +252,7 @@ void read_a_file(char *fn)
|
|||
{
|
||||
printf("%02x ",b);
|
||||
i++;
|
||||
if(i > 32)
|
||||
if(i > 32)
|
||||
{
|
||||
printf("\n");
|
||||
i = 0;;
|
||||
|
@ -305,7 +305,7 @@ void cmd_yaffs_mread_file(char *fn, char *addr)
|
|||
{
|
||||
int h;
|
||||
struct yaffs_stat s;
|
||||
|
||||
|
||||
checkMount();
|
||||
|
||||
yaffs_stat(fn,&s);
|
||||
|
@ -317,7 +317,7 @@ void cmd_yaffs_mread_file(char *fn, char *addr)
|
|||
printf("File not found\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
yaffs_read(h,addr,(int)s.st_size);
|
||||
printf("\t[DONE]\n");
|
||||
|
||||
|
@ -335,9 +335,9 @@ void cmd_yaffs_mwrite_file(char *fn, char *addr, int size)
|
|||
{
|
||||
printf("Error opening file: %d\n", outh);
|
||||
}
|
||||
|
||||
|
||||
yaffs_write(outh,addr,size);
|
||||
|
||||
|
||||
yaffs_close(outh);
|
||||
}
|
||||
|
||||
|
@ -381,7 +381,7 @@ void cmd_yaffs_mkdir(const char *dir)
|
|||
checkMount();
|
||||
|
||||
int retval = yaffs_mkdir(dir, 0);
|
||||
|
||||
|
||||
if ( retval < 0)
|
||||
printf("yaffs_mkdir returning error: %d\n", retval);
|
||||
}
|
||||
|
@ -391,7 +391,7 @@ void cmd_yaffs_rmdir(const char *dir)
|
|||
checkMount();
|
||||
|
||||
int retval = yaffs_rmdir(dir);
|
||||
|
||||
|
||||
if ( retval < 0)
|
||||
printf("yaffs_rmdir returning error: %d\n", retval);
|
||||
}
|
||||
|
@ -401,7 +401,7 @@ void cmd_yaffs_rm(const char *path)
|
|||
checkMount();
|
||||
|
||||
int retval = yaffs_unlink(path);
|
||||
|
||||
|
||||
if ( retval < 0)
|
||||
printf("yaffs_unlink returning error: %d\n", retval);
|
||||
}
|
||||
|
@ -411,7 +411,7 @@ void cmd_yaffs_mv(const char *oldPath, const char *newPath)
|
|||
checkMount();
|
||||
|
||||
int retval = yaffs_rename(newPath, oldPath);
|
||||
|
||||
|
||||
if ( retval < 0)
|
||||
printf("yaffs_unlink returning error: %d\n", retval);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -43,4 +43,3 @@ void yaffsfs_SetError(int err);
|
|||
int yaffsfs_GetError(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -47,7 +47,7 @@
|
|||
#define O_RDWR 02
|
||||
#endif
|
||||
|
||||
#ifndef O_CREAT
|
||||
#ifndef O_CREAT
|
||||
#define O_CREAT 0100
|
||||
#endif
|
||||
|
||||
|
@ -95,7 +95,7 @@
|
|||
#define EACCESS 13
|
||||
#endif
|
||||
|
||||
#ifndef EXDEV
|
||||
#ifndef EXDEV
|
||||
#define EXDEV 18
|
||||
#endif
|
||||
|
||||
|
@ -146,7 +146,7 @@
|
|||
#define S_IFREG 0100000
|
||||
#endif
|
||||
|
||||
#ifndef S_IREAD
|
||||
#ifndef S_IREAD
|
||||
#define S_IREAD 0000400
|
||||
#endif
|
||||
|
||||
|
@ -202,8 +202,8 @@ int yaffs_stat(const char *path, struct yaffs_stat *buf) ;
|
|||
int yaffs_lstat(const char *path, struct yaffs_stat *buf) ;
|
||||
int yaffs_fstat(int fd, struct yaffs_stat *buf) ;
|
||||
|
||||
int yaffs_chmod(const char *path, mode_t mode);
|
||||
int yaffs_fchmod(int fd, mode_t mode);
|
||||
int yaffs_chmod(const char *path, mode_t mode);
|
||||
int yaffs_fchmod(int fd, mode_t mode);
|
||||
|
||||
int yaffs_mkdir(const char *path, mode_t mode) ;
|
||||
int yaffs_rmdir(const char *path) ;
|
||||
|
@ -216,10 +216,10 @@ int yaffs_closedir(yaffs_DIR *dirp) ;
|
|||
int yaffs_mount(const char *path) ;
|
||||
int yaffs_unmount(const char *path) ;
|
||||
|
||||
int yaffs_symlink(const char *oldpath, const char *newpath);
|
||||
int yaffs_readlink(const char *path, char *buf, int bufsiz);
|
||||
int yaffs_symlink(const char *oldpath, const char *newpath);
|
||||
int yaffs_readlink(const char *path, char *buf, int bufsiz);
|
||||
|
||||
int yaffs_link(const char *oldpath, const char *newpath);
|
||||
int yaffs_link(const char *oldpath, const char *newpath);
|
||||
int yaffs_mknod(const char *pathname, mode_t mode, dev_t dev);
|
||||
|
||||
loff_t yaffs_freespace(const char *path);
|
||||
|
@ -229,5 +229,3 @@ void yaffs_initialise(yaffsfs_DeviceConfiguration *configList);
|
|||
int yaffs_StartUp(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -20,7 +20,7 @@
|
|||
#ifndef __YDIRECTENV_H__
|
||||
#define __YDIRECTENV_H__
|
||||
|
||||
// Direct interface
|
||||
/* Direct interface */
|
||||
|
||||
#include "devextras.h"
|
||||
|
||||
|
@ -90,5 +90,3 @@
|
|||
#define yaffs_strcmp(a,b) strcmp(a,b)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
|
||||
*
|
||||
* Copyright (C) 2002-2007 Aleph One Ltd.
|
||||
* for Toby Churchill Ltd and Brightstar Engineering
|
||||
|
@ -156,7 +156,7 @@ extern unsigned int yaffs_wr_attempts;
|
|||
* Tracing flags.
|
||||
* The flags masked in YAFFS_TRACE_ALWAYS are always traced.
|
||||
*/
|
||||
|
||||
|
||||
#define YAFFS_TRACE_OS 0x00000002
|
||||
#define YAFFS_TRACE_ALLOCATE 0x00000004
|
||||
#define YAFFS_TRACE_SCAN 0x00000008
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
#define CFG_IMMR 0xE0000000
|
||||
|
||||
#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
|
||||
#define CONFIG_DEFAULT_IMMR CFG_IMMR
|
||||
#define CONFIG_DEFAULT_IMMR CFG_IMMR
|
||||
#endif
|
||||
|
||||
#define CFG_MEMTEST_START 0x00001000
|
||||
|
@ -243,7 +243,7 @@
|
|||
#define CFG_NAND_U_BOOT_OFFS 16384
|
||||
#define CFG_NAND_U_BOOT_RELOC 0x00010000
|
||||
|
||||
#define CFG_NAND_BR_PRELIM ( CFG_NAND_BASE \
|
||||
#define CFG_NAND_BR_PRELIM ( CFG_NAND_BASE \
|
||||
| (2<<BR_DECC_SHIFT) /* Use HW ECC */ \
|
||||
| BR_PS_8 /* Port Size = 8 bit */ \
|
||||
| BR_MS_FCM /* MSEL = FCM */ \
|
||||
|
@ -385,13 +385,13 @@
|
|||
* Environment
|
||||
*/
|
||||
#if defined(CONFIG_NAND_U_BOOT)
|
||||
#define CFG_ENV_IS_IN_NAND 1
|
||||
#define CFG_ENV_OFFSET (512 * 1024)
|
||||
#define CFG_ENV_SECT_SIZE CFG_NAND_BLOCK_SIZE
|
||||
#define CFG_ENV_SIZE CFG_ENV_SECT_SIZE
|
||||
#define CFG_ENV_SIZE_REDUND CFG_ENV_SIZE
|
||||
#define CFG_ENV_RANGE (CFG_ENV_SECT_SIZE * 4)
|
||||
#define CFG_ENV_OFFSET_REDUND (CFG_ENV_OFFSET + CFG_ENV_RANGE)
|
||||
#define CFG_ENV_IS_IN_NAND 1
|
||||
#define CFG_ENV_OFFSET (512 * 1024)
|
||||
#define CFG_ENV_SECT_SIZE CFG_NAND_BLOCK_SIZE
|
||||
#define CFG_ENV_SIZE CFG_ENV_SECT_SIZE
|
||||
#define CFG_ENV_SIZE_REDUND CFG_ENV_SIZE
|
||||
#define CFG_ENV_RANGE (CFG_ENV_SECT_SIZE * 4)
|
||||
#define CFG_ENV_OFFSET_REDUND (CFG_ENV_OFFSET + CFG_ENV_RANGE)
|
||||
#elif !defined(CFG_RAMBOOT)
|
||||
#define CFG_ENV_IS_IN_FLASH 1
|
||||
#define CFG_ENV_ADDR (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
|
||||
|
@ -501,14 +501,14 @@
|
|||
|
||||
#ifdef CONFIG_NAND_SPL
|
||||
#define CFG_HRCW_HIGH (CFG_HRCW_HIGH_BASE |\
|
||||
HRCWH_FROM_0XFFF00100 |\
|
||||
HRCWH_ROM_LOC_NAND_SP_8BIT |\
|
||||
HRCWH_RL_EXT_NAND)
|
||||
HRCWH_FROM_0XFFF00100 |\
|
||||
HRCWH_ROM_LOC_NAND_SP_8BIT |\
|
||||
HRCWH_RL_EXT_NAND)
|
||||
#else
|
||||
#define CFG_HRCW_HIGH (CFG_HRCW_HIGH_BASE |\
|
||||
HRCWH_FROM_0X00000100 |\
|
||||
HRCWH_ROM_LOC_LOCAL_16BIT |\
|
||||
HRCWH_RL_EXT_LEGACY)
|
||||
HRCWH_FROM_0X00000100 |\
|
||||
HRCWH_ROM_LOC_LOCAL_16BIT |\
|
||||
HRCWH_RL_EXT_LEGACY)
|
||||
#endif
|
||||
|
||||
/* System IO Config */
|
||||
|
|
|
@ -87,5 +87,3 @@ struct INFTLMediaHeader {
|
|||
#define INFTL_LAST 0x80000000
|
||||
|
||||
#endif /* __MTD_INFTL_USER_H__ */
|
||||
|
||||
|
||||
|
|
|
@ -35,18 +35,18 @@ struct mtd_oob_buf {
|
|||
#define MTD_NO_ERASE 0x1000 /* No erase necessary */
|
||||
#define MTD_STUPID_LOCK 0x2000 /* Always locked after reset */
|
||||
|
||||
// Some common devices / combinations of capabilities
|
||||
/* Some common devices / combinations of capabilities */
|
||||
#define MTD_CAP_ROM 0
|
||||
#define MTD_CAP_RAM (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
|
||||
#define MTD_CAP_NORFLASH (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
|
||||
#define MTD_CAP_NANDFLASH (MTD_WRITEABLE)
|
||||
|
||||
/* ECC byte placement */
|
||||
#define MTD_NANDECC_OFF 0 // Switch off ECC (Not recommended)
|
||||
#define MTD_NANDECC_PLACE 1 // Use the given placement in the structure (YAFFS1 legacy mode)
|
||||
#define MTD_NANDECC_AUTOPLACE 2 // Use the default placement scheme
|
||||
#define MTD_NANDECC_PLACEONLY 3 // Use the given placement in the structure (Do not store ecc result on read)
|
||||
#define MTD_NANDECC_AUTOPL_USR 4 // Use the given autoplacement scheme rather than using the default
|
||||
#define MTD_NANDECC_OFF 0 /* Switch off ECC (Not recommended) */
|
||||
#define MTD_NANDECC_PLACE 1 /* Use the given placement in the structure (YAFFS1 legacy mode) */
|
||||
#define MTD_NANDECC_AUTOPLACE 2 /* Use the default placement scheme */
|
||||
#define MTD_NANDECC_PLACEONLY 3 /* Use the given placement in the structure (Do not store ecc result on read) */
|
||||
#define MTD_NANDECC_AUTOPL_USR 4 /* Use the given autoplacement scheme rather than using the default */
|
||||
|
||||
/* OTP mode selection */
|
||||
#define MTD_OTP_OFF 0
|
||||
|
@ -56,10 +56,10 @@ struct mtd_oob_buf {
|
|||
struct mtd_info_user {
|
||||
uint8_t type;
|
||||
uint32_t flags;
|
||||
uint32_t size; // Total size of the MTD
|
||||
uint32_t size; /* Total size of the MTD */
|
||||
uint32_t erasesize;
|
||||
uint32_t writesize;
|
||||
uint32_t oobsize; // Amount of OOB data per block (e.g. 16)
|
||||
uint32_t oobsize; /* Amount of OOB data per block (e.g. 16) */
|
||||
/* The below two fields are obsolete and broken, do not use them
|
||||
* (TODO: remove at some point) */
|
||||
uint32_t ecctype;
|
||||
|
|
|
@ -112,7 +112,7 @@ struct mtd_oob_ops {
|
|||
struct mtd_info {
|
||||
u_char type;
|
||||
u_int32_t flags;
|
||||
u_int32_t size; // Total size of the MTD
|
||||
u_int32_t size; /* Total size of the MTD */
|
||||
|
||||
/* "Major" erase size for the device. Naïve users may take this
|
||||
* to be the only erase size available, or may use the more detailed
|
||||
|
@ -128,10 +128,10 @@ struct mtd_info {
|
|||
*/
|
||||
u_int32_t writesize;
|
||||
|
||||
u_int32_t oobsize; // Amount of OOB data per block (e.g. 16)
|
||||
u_int32_t oobavail; // Available OOB bytes per block
|
||||
u_int32_t oobsize; /* Amount of OOB data per block (e.g. 16) */
|
||||
u_int32_t oobavail; /* Available OOB bytes per block */
|
||||
|
||||
// Kernel-only stuff starts here.
|
||||
/* Kernel-only stuff starts here. */
|
||||
char *name;
|
||||
int index;
|
||||
|
||||
|
|
|
@ -32,8 +32,8 @@ struct nftl_uci1 {
|
|||
} __attribute__((packed));
|
||||
|
||||
struct nftl_uci2 {
|
||||
uint16_t FoldMark;
|
||||
uint16_t FoldMark1;
|
||||
uint16_t FoldMark;
|
||||
uint16_t FoldMark1;
|
||||
uint32_t unused;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
#include <linux/mtd/nftl-user.h>
|
||||
|
||||
/* these info are used in ReplUnitTable */
|
||||
#define BLOCK_NIL 0xffff /* last block of a chain */
|
||||
#define BLOCK_FREE 0xfffe /* free block */
|
||||
#define BLOCK_NIL 0xffff /* last block of a chain */
|
||||
#define BLOCK_FREE 0xfffe /* free block */
|
||||
#define BLOCK_NOTEXPLORED 0xfffd /* non explored block, only used during mounting */
|
||||
#define BLOCK_RESERVED 0xfffc /* bios block or bad block */
|
||||
#define BLOCK_RESERVED 0xfffc /* bios block or bad block */
|
||||
|
||||
struct NFTLrecord {
|
||||
struct mtd_blktrans_dev mbd;
|
||||
|
@ -28,15 +28,15 @@ struct NFTLrecord {
|
|||
unsigned char sectors;
|
||||
unsigned short cylinders;
|
||||
__u16 numvunits;
|
||||
__u16 lastEUN; /* should be suppressed */
|
||||
__u16 lastEUN; /* should be suppressed */
|
||||
__u16 numfreeEUNs;
|
||||
__u16 LastFreeEUN; /* To speed up finding a free EUN */
|
||||
int head,sect,cyl;
|
||||
__u16 *EUNtable; /* [numvunits]: First EUN for each virtual unit */
|
||||
__u16 *ReplUnitTable; /* [numEUNs]: ReplUnitNumber for each */
|
||||
unsigned int nb_blocks; /* number of physical blocks */
|
||||
unsigned int nb_boot_blocks; /* number of blocks used by the bios */
|
||||
struct erase_info instr;
|
||||
unsigned int nb_blocks; /* number of physical blocks */
|
||||
unsigned int nb_boot_blocks; /* number of blocks used by the bios */
|
||||
struct erase_info instr;
|
||||
struct nand_ecclayout oobinfo;
|
||||
};
|
||||
|
||||
|
|
|
@ -109,9 +109,9 @@ struct nand_erase_options {
|
|||
typedef struct nand_erase_options nand_erase_options_t;
|
||||
|
||||
int nand_read_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
|
||||
u_char *buffer);
|
||||
u_char *buffer);
|
||||
int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
|
||||
u_char *buffer);
|
||||
u_char *buffer);
|
||||
int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
|
||||
|
||||
#define NAND_LOCK_STATUS_TIGHT 0x01
|
||||
|
|
|
@ -95,7 +95,7 @@ static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8
|
|||
/* Set ALE and clear CLE to start address cycle */
|
||||
/* Column address */
|
||||
this->cmd_ctrl(mtd, offs & 0xff,
|
||||
NAND_CTRL_ALE | NAND_CTRL_CHANGE); /* A[7:0] */
|
||||
NAND_CTRL_ALE | NAND_CTRL_CHANGE); /* A[7:0] */
|
||||
this->cmd_ctrl(mtd, (offs >> 8) & 0xff, 0); /* A[11:9] */
|
||||
/* Row address */
|
||||
this->cmd_ctrl(mtd, (page_addr & 0xff), 0); /* A[19:12] */
|
||||
|
@ -106,7 +106,7 @@ static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8
|
|||
#endif
|
||||
/* Latch in address */
|
||||
this->cmd_ctrl(mtd, NAND_CMD_READSTART,
|
||||
NAND_CTRL_CLE | NAND_CTRL_CHANGE);
|
||||
NAND_CTRL_CLE | NAND_CTRL_CHANGE);
|
||||
this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
|
||||
|
||||
/*
|
||||
|
@ -185,7 +185,7 @@ static int nand_read_page(struct mtd_info *mtd, int block, int page, uchar *dst)
|
|||
}
|
||||
|
||||
static int nand_load(struct mtd_info *mtd, unsigned int offs,
|
||||
unsigned int uboot_size, uchar *dst)
|
||||
unsigned int uboot_size, uchar *dst)
|
||||
{
|
||||
unsigned int block, lastblock;
|
||||
unsigned int page;
|
||||
|
|
Loading…
Reference in New Issue