linux/drivers
Brian Norris 9ce244b3fb mtd: support writing OOB without ECC
This fixes issues with `nandwrite -n -o' and the MEMWRITEOOB[64] ioctls
on hardware that writes ECC when writing OOB. The problem arises as
follows: `nandwrite -n' can write page data to flash without applying
ECC, but when used with the `-o' option, ECC is applied (incorrectly),
contrary to the `--noecc' option.

I found that this is the case because my hardware computes and writes
ECC data to flash upon either OOB write or page write. Thus, to support
a proper "no ECC" write, my driver must know when we're performing a raw
OOB write vs. a normal ECC OOB write. However, MTD does not pass any raw
mode information to the write_oob functions.  This patch addresses the
problems by:

1) Passing MTD_OOB_RAW down to lower layers, instead of just defaulting
   to MTD_OOB_PLACE
2) Handling MTD_OOB_RAW within the NAND layer's `nand_do_write_oob'
3) Adding a new (replaceable) function pointer in struct ecc_ctrl; this
   function should support writing OOB without ECC data. Current
   hardware often can use the same OOB write function when writing
   either with or without ECC

This was tested with nandsim as well as on actual SLC NAND.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Cc: Jim Quinlan <jim2101024@gmail.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
2011-09-11 15:02:18 +03:00
..
accessibility
acpi Merge branch 'battery' into release 2011-08-05 22:16:42 -04:00
amba
ata Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2011-08-02 21:17:02 -10:00
atm
auxdisplay
base PM / Runtime: Allow _put_sync() from interrupts-disabled context 2011-08-05 21:45:20 +02:00
bcma
block
bluetooth
cdrom
char net: Compute protocol sequence numbers and fragment IDs using MD5. 2011-08-06 18:33:19 -07:00
clk
clocksource
connector proc_fork_connector: a lockless ->real_parent usage is not safe 2011-07-28 18:26:32 -07:00
cpufreq
cpuidle cpuidle: stop depending on pm_idle 2011-08-03 19:06:37 -04:00
crypto n2_crypto: Attach on Niagara-T3. 2011-07-28 01:30:07 -07:00
dca
dio
dma Merge branch 'fixes' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-08-10 17:37:17 -07:00
edac Revert "EDAC: Correct Kconfig dependencies" 2011-08-11 08:58:41 -07:00
eisa eisa/pci_eisa.c: fix BUG introduced by 005bdad7b8 2011-08-04 06:32:51 -10:00
firewire
firmware Merge branch 'pstore-efi' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6 2011-08-02 21:18:39 -10:00
gpio Merge branch 'gpio/next' of git://git.secretlab.ca/git/linux-2.6 2011-08-01 06:13:48 -10:00
gpu Revert "drm/i915: Try enabling RC6 by default (again)" 2011-08-05 10:56:29 +01:00
hid
hwmon hwmon: (ibmaem) add missing kfree 2011-08-11 10:14:18 -07:00
hwspinlock
i2c
ide drivers/ide/cy82c693.c: Add missing pci_dev_put 2011-08-04 01:30:34 -07:00
idle
ieee802154
infiniband
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2011-08-03 22:00:09 -10:00
iommu
isdn Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2011-07-28 05:58:19 -07:00
leds
lguest
macintosh
mca
md dm table: set flush capability based on underlying devices 2011-08-02 12:32:08 +01:00
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2011-07-30 00:08:53 -07:00
memstick
message Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2011-07-30 08:36:02 -10:00
mfd mfd: Fix mismatch in twl4030 mutex lock-unlock 2011-07-31 23:28:27 +02:00
misc mmc: cb710: fix possible pci_dev leak in cb710_pci_configure() 2011-08-13 14:50:23 -04:00
mmc mmc: dw_mmc: Fix DDR mode support. 2011-08-13 14:50:32 -04:00
mtd mtd: support writing OOB without ECC 2011-09-11 15:02:18 +03:00
net Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless 2011-08-11 23:09:46 -07:00
nfc
nubus
of Revert "dt: add of_alias_scan and of_alias_get_id" 2011-08-04 11:26:24 +01:00
oprofile
parisc
parport
pci Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2011-08-02 21:17:02 -10:00
pcmcia Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6 2011-07-31 06:23:08 -10:00
platform acer-wmi: support Lenovo ideapad S205 wifi switch 2011-08-05 15:21:52 -04:00
pnp
power Merge git://git.infradead.org/battery-2.6 2011-07-31 06:24:50 -10:00
pps
ps3
ptp
rapidio
regulator Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6 2011-08-01 14:05:46 -10:00
rtc rtc-omap: fix initialization of control register 2011-08-03 14:25:20 -10:00
s390 [S390] qdio: Use kstrtoul_from_user 2011-08-03 16:44:21 +02:00
sbus
scsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2011-07-30 08:36:02 -10:00
sfi
sh Merge branch 'sh-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-3.x 2011-08-01 06:10:16 -10:00
sn
spi spi/pl022: remove function cannot exit 2011-08-02 14:54:11 +01:00
ssb
staging gma500: Fix clashes with DRM updates 2011-08-09 08:34:50 -07:00
target Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2011-08-03 15:12:09 -10:00
tc
telephony
thermal thermal: make THERMAL_HWMON implementation fully internal 2011-08-02 14:51:57 -04:00
tty sh: Fix boot crash related to SCI 2011-08-07 15:51:45 -07:00
uio
usb USB: Serial: Add PID(0xF7C0) to FTDI SIO driver for a zeitcontrol-device 2011-08-10 22:11:45 -07:00
uwb
vhost
video savagedb: Fix typo causing regression in savage4 series video chip detection 2011-08-06 12:02:40 -07:00
virt
virtio
vlynq
w1
watchdog watchdog: Cleanup WATCHDOG_CORE help text 2011-08-02 08:23:07 +00:00
xen xen/self-balloon: Add dependency on tmem. 2011-08-03 14:34:57 -04:00
zorro
Kconfig
Makefile