Revision b135b3358d73aa2a8b2be35d08e422421d1c609e authored by Miquel Raynal on 19 January 2021, 15:55:10 UTC, committed by Miquel Raynal on 20 January 2021, 22:38:00 UTC
The OMAP driver may leverage software BCH logic to locate errors while
using its own hardware to detect the presence of errors. This is
achieved with a "mixed" mode which initializes manually the software
BCH internal logic while providing its own OOB layout.

The issue here comes from the fact that the BCH driver has been
updated to only use generic NAND objects, and no longer depend on raw
NAND structures as it is usable from SPI-NAND as well. However, at the
end of the BCH context initialization, the driver checks the validity
of the OOB layout. At this stage, the raw NAND fields have not been
populated yet while being used by the layout helpers, leading to an
invalid layout.

The chosen solution here is to include the BCH structure definition
and to refer to the BCH fields directly (de-referenced as a const
pointer here) to know as early as possible the number of steps and ECC
bytes which have been chosen.

Note: I don't know which commit exactly triggered the error, but the
entire migration to a generic BCH driver got merged in one go, so this
should not be a problem for stable backports.

Reported-by: Adam Ford <aford173@gmail.com>
Fixes: 80fe603160a4 ("mtd: nand: ecc-bch: Stop using raw NAND structures")
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Tested-by: Adam Ford <aford173@gmail.com> #logicpd-torpedo-37xx-devkit-28.dts
Link: https://lore.kernel.org/linux-mtd/20210119155510.5655-1-miquel.raynal@bootlin.com
1 parent e708789
History
File Mode Size
842
crypto
dim
fonts
kunit
livepatch
lz4
lzo
math
mpi
pldmfw
raid6
reed_solomon
vdso
xz
zlib_deflate
zlib_dfltcc
zlib_inflate
zstd
.gitignore -rw-r--r-- 116 bytes
Kconfig -rw-r--r-- 15.4 KB
Kconfig.debug -rw-r--r-- 81.6 KB
Kconfig.kasan -rw-r--r-- 6.8 KB
Kconfig.kcsan -rw-r--r-- 8.7 KB
Kconfig.kgdb -rw-r--r-- 5.6 KB
Kconfig.ubsan -rw-r--r-- 6.9 KB
Makefile -rw-r--r-- 11.9 KB
argv_split.c -rw-r--r-- 2.1 KB
ashldi3.c -rw-r--r-- 541 bytes
ashrdi3.c -rw-r--r-- 565 bytes
asn1_decoder.c -rw-r--r-- 13.2 KB
assoc_array.c -rw-r--r-- 51.8 KB
atomic64.c -rw-r--r-- 4.5 KB
atomic64_test.c -rw-r--r-- 6.4 KB
audit.c -rw-r--r-- 1.8 KB
bcd.c -rw-r--r-- 297 bytes
bch.c -rw-r--r-- 38.3 KB
bitfield_kunit.c -rw-r--r-- 4.4 KB
bitmap.c -rw-r--r-- 38.1 KB
bitrev.c -rw-r--r-- 1.9 KB
bootconfig.c -rw-r--r-- 19.0 KB
bsearch.c -rw-r--r-- 1.2 KB
btree.c -rw-r--r-- 19.2 KB
bucket_locks.c -rw-r--r-- 1.4 KB
bug.c -rw-r--r-- 5.9 KB
build_OID_registry -rwxr-xr-x 4.5 KB
bust_spinlocks.c -rw-r--r-- 676 bytes
check_signature.c -rw-r--r-- 635 bytes
checksum.c -rw-r--r-- 4.1 KB
clz_ctz.c -rw-r--r-- 1.2 KB
clz_tab.c -rw-r--r-- 891 bytes
cmdline.c -rw-r--r-- 5.4 KB
cmdline_kunit.c -rw-r--r-- 2.4 KB
cmpdi2.c -rw-r--r-- 501 bytes
compat_audit.c -rw-r--r-- 832 bytes
cpu_rmap.c -rw-r--r-- 7.6 KB
cpumask.c -rw-r--r-- 7.2 KB
crc-ccitt.c -rw-r--r-- 5.6 KB
crc-itu-t.c -rw-r--r-- 2.7 KB
crc-t10dif.c -rw-r--r-- 3.2 KB
crc16.c -rw-r--r-- 2.7 KB
crc32.c -rw-r--r-- 9.3 KB
crc32defs.h -rw-r--r-- 1.6 KB
crc32test.c -rw-r--r-- 37.4 KB
crc4.c -rw-r--r-- 1003 bytes
crc64.c -rw-r--r-- 1.8 KB
crc7.c -rw-r--r-- 2.5 KB
crc8.c -rw-r--r-- 2.4 KB
ctype.c -rw-r--r-- 1.4 KB
debug_info.c -rw-r--r-- 777 bytes
debug_locks.c -rw-r--r-- 1.2 KB
debugobjects.c -rw-r--r-- 35.3 KB
dec_and_lock.c -rw-r--r-- 1.2 KB
decompress.c -rw-r--r-- 1.8 KB
decompress_bunzip2.c -rw-r--r-- 23.5 KB
decompress_inflate.c -rw-r--r-- 4.8 KB
decompress_unlz4.c -rw-r--r-- 4.0 KB
decompress_unlzma.c -rw-r--r-- 15.8 KB
decompress_unlzo.c -rw-r--r-- 6.4 KB
decompress_unxz.c -rw-r--r-- 10.9 KB
decompress_unzstd.c -rw-r--r-- 10.2 KB
devmem_is_allowed.c -rw-r--r-- 687 bytes
devres.c -rw-r--r-- 12.3 KB
digsig.c -rw-r--r-- 5.5 KB
dump_stack.c -rw-r--r-- 3.2 KB
dynamic_debug.c -rw-r--r-- 27.9 KB
dynamic_queue_limits.c -rw-r--r-- 4.3 KB
earlycpio.c -rw-r--r-- 3.6 KB
errname.c -rw-r--r-- 3.7 KB
error-inject.c -rw-r--r-- 5.5 KB
errseq.c -rw-r--r-- 6.6 KB
extable.c -rw-r--r-- 3.0 KB
fault-inject-usercopy.c -rw-r--r-- 823 bytes
fault-inject.c -rw-r--r-- 5.9 KB
fdt.c -rw-r--r-- 69 bytes
fdt_addresses.c -rw-r--r-- 79 bytes
fdt_empty_tree.c -rw-r--r-- 80 bytes
fdt_ro.c -rw-r--r-- 72 bytes
fdt_rw.c -rw-r--r-- 72 bytes
fdt_strerror.c -rw-r--r-- 78 bytes
fdt_sw.c -rw-r--r-- 72 bytes
fdt_wip.c -rw-r--r-- 73 bytes
find_bit.c -rw-r--r-- 4.5 KB
find_bit_benchmark.c -rw-r--r-- 3.9 KB
flex_proportions.c -rw-r--r-- 6.8 KB
gen_crc32table.c -rw-r--r-- 3.3 KB
gen_crc64table.c -rw-r--r-- 1.4 KB
genalloc.c -rw-r--r-- 26.1 KB
generic-radix-tree.c -rw-r--r-- 5.3 KB
glob.c -rw-r--r-- 3.5 KB
globtest.c -rw-r--r-- 4.2 KB
hexdump.c -rw-r--r-- 7.4 KB
hweight.c -rw-r--r-- 1.9 KB
idr.c -rw-r--r-- 17.5 KB
inflate.c -rw-r--r-- 38.7 KB
interval_tree.c -rw-r--r-- 540 bytes
interval_tree_test.c -rw-r--r-- 3.4 KB
iomap.c -rw-r--r-- 9.1 KB
iomap_copy.c -rw-r--r-- 2.2 KB
iommu-helper.c -rw-r--r-- 755 bytes
iov_iter.c -rw-r--r-- 44.2 KB
irq_poll.c -rw-r--r-- 5.4 KB
irq_regs.c -rw-r--r-- 394 bytes
is_single_threaded.c -rw-r--r-- 1.2 KB
kasprintf.c -rw-r--r-- 1.4 KB
kfifo.c -rw-r--r-- 12.1 KB
klist.c -rw-r--r-- 10.4 KB
kobject.c -rw-r--r-- 28.2 KB
kobject_uevent.c -rw-r--r-- 18.8 KB
kstrtox.c -rw-r--r-- 10.4 KB
kstrtox.h -rw-r--r-- 293 bytes
libcrc32c.c -rw-r--r-- 2.0 KB
linear_ranges.c -rw-r--r-- 7.2 KB
list-test.c -rw-r--r-- 17.4 KB
list_debug.c -rw-r--r-- 1.8 KB
list_sort.c -rw-r--r-- 8.4 KB
llist.c -rw-r--r-- 2.5 KB
locking-selftest-hardirq.h -rw-r--r-- 246 bytes
locking-selftest-mutex.h -rw-r--r-- 159 bytes
locking-selftest-rlock-hardirq.h -rw-r--r-- 74 bytes
locking-selftest-rlock-softirq.h -rw-r--r-- 74 bytes
locking-selftest-rlock.h -rw-r--r-- 197 bytes
locking-selftest-rsem.h -rw-r--r-- 202 bytes
locking-selftest-rtmutex.h -rw-r--r-- 162 bytes
locking-selftest-softirq.h -rw-r--r-- 246 bytes
locking-selftest-spin-hardirq.h -rw-r--r-- 73 bytes
locking-selftest-spin-softirq.h -rw-r--r-- 73 bytes
locking-selftest-spin.h -rw-r--r-- 157 bytes
locking-selftest-wlock-hardirq.h -rw-r--r-- 74 bytes
locking-selftest-wlock-softirq.h -rw-r--r-- 74 bytes
locking-selftest-wlock.h -rw-r--r-- 197 bytes
locking-selftest-wsem.h -rw-r--r-- 202 bytes
locking-selftest.c -rw-r--r-- 53.0 KB
lockref.c -rw-r--r-- 4.5 KB
logic_pio.c -rw-r--r-- 8.4 KB
lru_cache.c -rw-r--r-- 18.8 KB
lshrdi3.c -rw-r--r-- 559 bytes
memcat_p.c -rw-r--r-- 753 bytes
memory-notifier-error-inject.c -rw-r--r-- 1.1 KB
memregion.c -rw-r--r-- 429 bytes
memweight.c -rw-r--r-- 1.0 KB
muldi3.c -rw-r--r-- 1.7 KB
net_utils.c -rw-r--r-- 640 bytes
netdev-notifier-error-inject.c -rw-r--r-- 1.5 KB
nlattr.c -rw-r--r-- 26.9 KB
nmi_backtrace.c -rw-r--r-- 3.1 KB
nodemask.c -rw-r--r-- 653 bytes
notifier-error-inject.c -rw-r--r-- 2.5 KB
notifier-error-inject.h -rw-r--r-- 653 bytes
objagg.c -rw-r--r-- 28.3 KB
of-reconfig-notifier-error-inject.c -rw-r--r-- 1.3 KB
oid_registry.c -rw-r--r-- 3.7 KB
once.c -rw-r--r-- 1.4 KB
packing.c -rw-r--r-- 6.6 KB
parman.c -rw-r--r-- 10.6 KB
parser.c -rw-r--r-- 8.1 KB
pci_iomap.c -rw-r--r-- 4.2 KB
percpu-refcount.c -rw-r--r-- 15.2 KB
percpu_counter.c -rw-r--r-- 6.4 KB
percpu_test.c -rw-r--r-- 3.2 KB
plist.c -rw-r--r-- 5.9 KB
pm-notifier-error-inject.c -rw-r--r-- 1.2 KB
radix-tree.c -rw-r--r-- 43.1 KB
random32.c -rw-r--r-- 18.5 KB
ratelimit.c -rw-r--r-- 1.6 KB
rbtree.c -rw-r--r-- 17.1 KB
rbtree_test.c -rw-r--r-- 9.4 KB
refcount.c -rw-r--r-- 4.8 KB
rhashtable.c -rw-r--r-- 29.5 KB
sbitmap.c -rw-r--r-- 16.1 KB
scatterlist.c -rw-r--r-- 27.3 KB
seq_buf.c -rw-r--r-- 9.9 KB
sg_pool.c -rw-r--r-- 4.2 KB
sg_split.c -rw-r--r-- 5.0 KB
sha1.c -rw-r--r-- 6.3 KB
show_mem.c -rw-r--r-- 1.1 KB
siphash.c -rw-r--r-- 11.9 KB
smp_processor_id.c -rw-r--r-- 1.5 KB
sort.c -rw-r--r-- 8.4 KB
stackdepot.c -rw-r--r-- 9.5 KB
stmp_device.c -rw-r--r-- 1.9 KB
string.c -rw-r--r-- 25.7 KB
string_helpers.c -rw-r--r-- 14.5 KB
strncpy_from_user.c -rw-r--r-- 3.9 KB
strnlen_user.c -rw-r--r-- 3.3 KB
syscall.c -rw-r--r-- 2.7 KB
test-kstrtox.c -rw-r--r-- 17.3 KB
test-string_helpers.c -rw-r--r-- 11.7 KB
test_bitmap.c -rw-r--r-- 17.5 KB
test_bitops.c -rw-r--r-- 2.5 KB
test_bits.c -rw-r--r-- 1.8 KB
test_blackhole_dev.c -rw-r--r-- 2.5 KB
test_bpf.c -rw-r--r-- 160.5 KB
test_debug_virtual.c -rw-r--r-- 981 bytes
test_firmware.c -rw-r--r-- 27.7 KB
test_fpu.c -rw-r--r-- 2.0 KB
test_free_pages.c -rw-r--r-- 995 bytes
test_hash.c -rw-r--r-- 6.3 KB
test_hexdump.c -rw-r--r-- 6.3 KB
test_hmm.c -rw-r--r-- 26.6 KB
test_hmm_uapi.h -rw-r--r-- 2.3 KB
test_ida.c -rw-r--r-- 4.3 KB
test_kasan.c -rw-r--r-- 19.5 KB
test_kasan_module.c -rw-r--r-- 3.3 KB
test_kmod.c -rw-r--r-- 29.9 KB
test_linear_ranges.c -rw-r--r-- 7.5 KB
test_list_sort.c -rw-r--r-- 3.3 KB
test_lockup.c -rw-r--r-- 16.3 KB
test_memcat_p.c -rw-r--r-- 2.2 KB
test_meminit.c -rw-r--r-- 9.7 KB
test_min_heap.c -rw-r--r-- 4.3 KB
test_module.c -rw-r--r-- 794 bytes
test_objagg.c -rw-r--r-- 24.6 KB
test_overflow.c -rw-r--r-- 22.3 KB
test_parman.c -rw-r--r-- 11.2 KB
test_printf.c -rw-r--r-- 16.6 KB
test_rhashtable.c -rw-r--r-- 20.0 KB
test_siphash.c -rw-r--r-- 7.5 KB
test_sort.c -rw-r--r-- 870 bytes
test_stackinit.c -rw-r--r-- 11.3 KB
test_static_key_base.c -rw-r--r-- 1.6 KB
test_static_keys.c -rw-r--r-- 5.6 KB
test_string.c -rw-r--r-- 3.8 KB
test_strscpy.c -rw-r--r-- 4.0 KB
test_sysctl.c -rw-r--r-- 3.9 KB
test_ubsan.c -rw-r--r-- 3.8 KB
test_user_copy.c -rw-r--r-- 9.1 KB
test_uuid.c -rw-r--r-- 3.4 KB
test_vmalloc.c -rw-r--r-- 12.0 KB
test_xarray.c -rw-r--r-- 46.5 KB
textsearch.c -rw-r--r-- 9.3 KB
timerqueue.c -rw-r--r-- 2.5 KB
ts_bm.c -rw-r--r-- 5.1 KB
ts_fsm.c -rw-r--r-- 10.4 KB
ts_kmp.c -rw-r--r-- 4.1 KB
ubsan.c -rw-r--r-- 10.5 KB
ubsan.h -rw-r--r-- 1.6 KB
ucmpdi2.c -rw-r--r-- 568 bytes
ucs2_string.c -rw-r--r-- 2.5 KB
usercopy.c -rw-r--r-- 2.2 KB
uuid.c -rw-r--r-- 2.9 KB
vsprintf.c -rw-r--r-- 82.1 KB
win_minmax.c -rw-r--r-- 3.4 KB
xarray.c -rw-r--r-- 58.5 KB
xxhash.c -rw-r--r-- 12.7 KB

back to top