2013.09.25. 11:26 keltezéssel, Gabor Juhos írta:

>> Now I tried to create a UBI volume using the initramfs-Kernel. I get
>> this kernel crash dump:
>>
>> # ubiattach -m 8 /dev/ubi_ctrl
>> [ 3712.320000] UBI: attaching mtd8 to ubi0
>> [ 3712.510000] UBI: scanning is finished
>> [ 3712.520000] UBI: empty MTD device detected
>> [ 3712.520000] CPU 0 Unable to handle kernel paging request at virtual
>> address 00000000, epc == 00000000, ra == 802094fc
>> [ 3712.530000] Oops[#1]:
>> [ 3712.530000] CPU: 0 PID: 1216 Comm: ubiattach Not tainted 3.10.12 #10
>> [ 3712.530000] task: 878b5d50 ti: 8654c000 task.ti: 8654c000
>> [ 3712.530000] $ 0   : 00000000 00000001 00000000 8037c810
>> [ 3712.530000] $ 4   : 87826010 00000001 000001ff 00000200
>> [ 3712.530000] $ 8   : 00000005 80064830 00000000 00000000
>> [ 3712.530000] $12   : 00000000 d8197822 00000000 00000000
>> [ 3712.530000] $16   : 878261b8 00000000 87826010 86e34000
>> [ 3712.530000] $20   : 00000200 86e34500 86e34d00 00000007
>> [ 3712.530000] $24   : 00000000 00000000
>> [ 3712.530000] $28   : 8654c000 8654dae8 00000000 802094fc
>> [ 3712.530000] Hi    : 00000000
>> [ 3712.530000] Lo    : 00000010
>> [ 3712.530000] epc   : 00000000   (null)
>> [ 3712.530000]     Not tainted
>> [ 3712.530000] ra    : 802094fc nand_write_subpage_hwecc+0xa0/0x1c4
> 
> Hm, this is a NULL pointer dereference. It seems that the
> nand_write_subpage_hwecc function tries to run a callback which is not
> initialized by the ar934x-nfc driver. I will look into that later.

FYI, I have disabled writing of subpages in the driver. It is not supported by
the controller if hardware ECC is used. At least I was not able to make it work.

> In the past, I have tested the ar934x-nfc driver (w/o hw ECC) with the modules
> provided by the mtdtests package and it passed all tests. Ideally, it should 
> be
> tested again with hw ECC support but that is quite dangerous on devices which
> are using a NAND flash only.

It passes all MTD tests now. Tested on the first MB of the reserved area on a on
the WNDR4300:

> root@OpenWrt:/# cat /proc/mtd
> dev:    size   erasesize  name
> mtd0: 00040000 00020000 "u-boot"
> mtd1: 00040000 00020000 "u-boot-env"
> mtd2: 00040000 00020000 "caldata"
> mtd3: 00080000 00020000 "pot"
> mtd4: 00200000 00020000 "language"
> mtd5: 00080000 00020000 "config"
> mtd6: 00300000 00020000 "traffic_meter"
> mtd7: 00120000 00020000 "kernel"
> mtd8: 017e0000 00020000 "rootfs"
> mtd9: 01900000 00020000 "firmware"
> mtd10: 00040000 00020000 "caldata_backup"
> mtd11: 00100000 00020000 "test"
> mtd12: 05f00000 00020000 "reserved"
> root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_readtest.ko dev=11
> [   53.390000]
> [   53.390000] =================================================
> [   53.400000] mtd_readtest: MTD device: 11
> [   53.400000] mtd_readtest: MTD device size 1048576, eraseblock size 131072, 
> page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB size 64
> [   53.420000] mtd_readtest: scanning for bad eraseblocks
> [   53.420000] mtd_readtest: scanned 8 eraseblocks, 0 are bad
> [   53.430000] mtd_readtest: testing page read
> [   53.760000] mtd_readtest: finished
> [   53.770000] =================================================
> root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_speedtest.ko dev=11
> [  115.180000]
> [  115.180000] =================================================
> [  115.190000] mtd_speedtest: MTD device: 11
> [  115.190000] mtd_speedtest: MTD device size 1048576, eraseblock size 
> 131072, page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB 
> size 64
> [  115.210000] mtd_speedtest: scanning for bad eraseblocks
> [  115.220000] mtd_speedtest: scanned 8 eraseblocks, 0 are bad
> [  115.230000] mtd_speedtest: testing eraseblock write speed
> [  115.480000] mtd_speedtest: eraseblock write speed is 4162 KiB/s
> [  115.490000] mtd_speedtest: testing eraseblock read speed
> [  115.800000] mtd_speedtest: eraseblock read speed is 3313 KiB/s
> [  115.810000] mtd_speedtest: testing page write speed
> [  116.070000] mtd_speedtest: page write speed is 4129 KiB/s
> [  116.070000] mtd_speedtest: testing page read speed
> [  116.390000] mtd_speedtest: page read speed is 3303 KiB/s
> [  116.400000] mtd_speedtest: testing 2 page write speed
> [  116.650000] mtd_speedtest: 2 page write speed is 4162 KiB/s
> [  116.660000] mtd_speedtest: testing 2 page read speed
> [  116.970000] mtd_speedtest: 2 page read speed is 3303 KiB/s
> [  116.980000] mtd_speedtest: Testing erase speed
> [  116.990000] mtd_speedtest: erase speed is 170666 KiB/s
> [  116.990000] mtd_speedtest: Testing 2x multi-block erase speed
> [  117.000000] mtd_speedtest: 2x multi-block erase speed is 341333 KiB/s
> [  117.010000] mtd_speedtest: Testing 4x multi-block erase speed
> [  117.020000] mtd_speedtest: 4x multi-block erase speed is 341333 KiB/s
> [  117.020000] mtd_speedtest: Testing 8x multi-block erase speed
> [  117.030000] mtd_speedtest: 8x multi-block erase speed is 341333 KiB/s
> [  117.040000] mtd_speedtest: Testing 16x multi-block erase speed
> [  117.050000] mtd_speedtest: 16x multi-block erase speed is 341333 KiB/s
> [  117.060000] mtd_speedtest: Testing 32x multi-block erase speed
> [  117.070000] mtd_speedtest: 32x multi-block erase speed is 341333 KiB/s
> [  117.070000] mtd_speedtest: Testing 64x multi-block erase speed
> [  117.080000] mtd_speedtest: 64x multi-block erase speed is 341333 KiB/s
> [  117.090000] mtd_speedtest: finished
> [  117.090000] =================================================
> root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_pagetest.ko dev=11
> [  134.090000]
> [  134.090000] =================================================
> [  134.090000] mtd_pagetest: MTD device: 11
> [  134.100000] mtd_pagetest: MTD device size 1048576, eraseblock size 131072, 
> page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB size 64
> [  134.110000] mtd_pagetest: scanning for bad eraseblocks
> [  134.120000] mtd_pagetest: scanned 8 eraseblocks, 0 are bad
> [  134.120000] mtd_pagetest: erasing whole device
> [  134.130000] mtd_pagetest: erased 8 eraseblocks
> [  134.130000] mtd_pagetest: writing whole device
> [  134.170000] mtd_pagetest: written up to eraseblock 0
> [  134.410000] mtd_pagetest: written 8 eraseblocks
> [  134.420000] mtd_pagetest: verifying all eraseblocks
> [  134.650000] mtd_pagetest: verified up to eraseblock 0
> [  136.290000] mtd_pagetest: verified 8 eraseblocks
> [  136.300000] mtd_pagetest: crosstest
> [  136.300000] mtd_pagetest: reading page at 0x0
> [  136.310000] mtd_pagetest: reading page at 0xff800
> [  136.310000] mtd_pagetest: reading page at 0x0
> [  136.320000] mtd_pagetest: verifying pages read at 0x0 match
> [  136.320000] mtd_pagetest: crosstest ok
> [  136.330000] mtd_pagetest: erasecrosstest
> [  136.330000] mtd_pagetest: erasing block 0
> [  136.340000] mtd_pagetest: writing 1st page of block 0
> [  136.350000] mtd_pagetest: reading 1st page of block 0
> [  136.350000] mtd_pagetest: verifying 1st page of block 0
> [  136.360000] mtd_pagetest: erasing block 0
> [  136.360000] mtd_pagetest: writing 1st page of block 0
> [  136.380000] mtd_pagetest: erasing block 7
> [  136.380000] mtd_pagetest: reading 1st page of block 0
> [  136.390000] mtd_pagetest: verifying 1st page of block 0
> [  136.390000] mtd_pagetest: erasecrosstest ok
> [  136.400000] mtd_pagetest: erasetest
> [  136.400000] mtd_pagetest: erasing block 0
> [  136.410000] mtd_pagetest: writing 1st page of block 0
> [  136.410000] mtd_pagetest: erasing block 0
> [  136.420000] mtd_pagetest: reading 1st page of block 0
> [  136.420000] mtd_pagetest: verifying 1st page of block 0 is all 0xff
> [  136.430000] mtd_pagetest: erasetest ok
> [  136.430000] mtd_pagetest: finished with 0 errors
> [  136.440000] =================================================
> root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_subpagetest.ko dev=11
> [  158.500000]
> [  158.500000] =================================================
> [  158.500000] mtd_subpagetest: MTD device: 11
> [  158.510000] mtd_subpagetest: MTD device size 1048576, eraseblock size 
> 131072, page size 2048, subpage size 2048, count of eraseblocks 8, pages per 
> eraseblock 64, OOB size 64
> [  158.520000] mtd_subpagetest: scanning for bad eraseblocks
> [  158.530000] mtd_subpagetest: scanned 8 eraseblocks, 0 are bad
> [  158.540000] mtd_subpagetest: erasing whole device
> [  158.550000] mtd_subpagetest: erased 8 eraseblocks
> [  158.550000] mtd_subpagetest: writing whole device
> [  158.560000] mtd_subpagetest: written up to eraseblock 0
> [  158.570000] mtd_subpagetest: written 8 eraseblocks
> [  158.570000] mtd_subpagetest: verifying all eraseblocks
> [  158.580000] mtd_subpagetest: verified up to eraseblock 0
> [  158.590000] mtd_subpagetest: verified 8 eraseblocks
> [  158.600000] mtd_subpagetest: erasing whole device
> [  158.610000] mtd_subpagetest: erased 8 eraseblocks
> [  158.610000] mtd_subpagetest: verifying all eraseblocks for 0xff
> [  158.680000] mtd_subpagetest: verified up to eraseblock 0
> [  159.150000] mtd_subpagetest: verified 8 eraseblocks
> [  159.160000] mtd_subpagetest: writing whole device
> [  159.190000] mtd_subpagetest: written up to eraseblock 0
> [  159.390000] mtd_subpagetest: written 8 eraseblocks
> [  159.390000] mtd_subpagetest: verifying all eraseblocks
> [  159.430000] mtd_subpagetest: verified up to eraseblock 0
> [  159.690000] mtd_subpagetest: verified 8 eraseblocks
> [  159.700000] mtd_subpagetest: erasing whole device
> [  159.710000] mtd_subpagetest: erased 8 eraseblocks
> [  159.720000] mtd_subpagetest: verifying all eraseblocks for 0xff
> [  159.790000] mtd_subpagetest: verified up to eraseblock 0
> [  160.250000] mtd_subpagetest: verified 8 eraseblocks
> [  160.250000] mtd_subpagetest: finished with 0 errors
> [  160.260000] =================================================
> root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_oobtest.ko dev=11
> [  186.480000]
> [  186.480000] =================================================
> [  186.480000] mtd_oobtest: MTD device: 11
> [  186.490000] mtd_oobtest: MTD device size 1048576, eraseblock size 131072, 
> page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB size 64
> [  186.500000] mtd_oobtest: scanning for bad eraseblocks
> [  186.510000] mtd_oobtest: scanned 8 eraseblocks, 0 are bad
> [  186.510000] mtd_oobtest: test 1 of 5
> [  186.520000] mtd_oobtest: erasing whole device
> [  186.520000] mtd_oobtest: erased 8 eraseblocks
> [  186.530000] mtd_oobtest: writing OOBs of whole device
> [  186.550000] mtd_oobtest: written up to eraseblock 0
> [  186.640000] mtd_oobtest: written 8 eraseblocks
> [  186.640000] mtd_oobtest: verifying all eraseblocks
> [  186.650000] mtd_oobtest: verified up to eraseblock 0
> [  186.670000] mtd_oobtest: verified 8 eraseblocks
> [  186.680000] mtd_oobtest: test 2 of 5
> [  186.680000] mtd_oobtest: erasing whole device
> [  186.690000] mtd_oobtest: erased 8 eraseblocks
> [  186.690000] mtd_oobtest: writing OOBs of whole device
> [  186.710000] mtd_oobtest: written up to eraseblock 0
> [  186.800000] mtd_oobtest: written 8 eraseblocks
> [  186.810000] mtd_oobtest: verifying all eraseblocks
> [  186.820000] mtd_oobtest: verified up to eraseblock 0
> [  186.840000] mtd_oobtest: verified 8 eraseblocks
> [  186.840000] mtd_oobtest: test 3 of 5
> [  186.850000] mtd_oobtest: erasing whole device
> [  186.860000] mtd_oobtest: erased 8 eraseblocks
> [  186.860000] mtd_oobtest: writing OOBs of whole device
> [  186.880000] mtd_oobtest: written up to eraseblock 0
> [  186.970000] mtd_oobtest: written 8 eraseblocks
> [  186.970000] mtd_oobtest: verifying all eraseblocks
> [  186.980000] mtd_oobtest: verified up to eraseblock 0
> [  187.030000] mtd_oobtest: verified 8 eraseblocks
> [  187.030000] mtd_oobtest: test 4 of 5
> [  187.030000] mtd_oobtest: erasing whole device
> [  187.040000] mtd_oobtest: erased 8 eraseblocks
> [  187.050000] mtd_oobtest: attempting to start write past end of OOB
> [  187.050000] mtd_oobtest: an error is expected...
> [  187.060000] mtd_oobtest: error occurred as expected
> [  187.060000] mtd_oobtest: attempting to start read past end of OOB
> [  187.070000] mtd_oobtest: an error is expected...
> [  187.070000] mtd_oobtest: error occurred as expected
> [  187.080000] mtd_oobtest: attempting to write past end of device
> [  187.080000] mtd_oobtest: an error is expected...
> [  187.090000] mtd_oobtest: error occurred as expected
> [  187.090000] mtd_oobtest: attempting to read past end of device
> [  187.100000] mtd_oobtest: an error is expected...
> [  187.110000] mtd_oobtest: error occurred as expected
> [  187.110000] mtd_oobtest: attempting to write past end of device
> [  187.120000] mtd_oobtest: an error is expected...
> [  187.120000] mtd_oobtest: error occurred as expected
> [  187.130000] mtd_oobtest: attempting to read past end of device
> [  187.130000] mtd_oobtest: an error is expected...
> [  187.140000] mtd_oobtest: error occurred as expected
> [  187.140000] mtd_oobtest: test 5 of 5
> [  187.150000] mtd_oobtest: erasing whole device
> [  187.150000] mtd_oobtest: erased 8 eraseblocks
> [  187.160000] mtd_oobtest: writing OOBs of whole device
> [  187.160000] mtd_oobtest: written up to eraseblock 0
> [  187.170000] mtd_oobtest: written up to eraseblock 0
> [  187.180000] mtd_oobtest: written 7 eraseblocks
> [  187.180000] mtd_oobtest: verifying all eraseblocks
> [  187.190000] mtd_oobtest: verified up to eraseblock 0
> [  187.190000] mtd_oobtest: verified 7 eraseblocks
> [  187.200000] mtd_oobtest: finished with 0 errors
> [  187.200000] =================================================
> root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_stresstest.ko dev=11 count=10
> [  285.120000]
> [  285.130000] =================================================
> [  285.130000] mtd_stresstest: MTD device: 11
> [  285.140000] mtd_stresstest: MTD device size 1048576, eraseblock size 
> 131072, page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB 
> size 64
> [  285.150000] mtd_stresstest: scanning for bad eraseblocks
> [  285.160000] mtd_stresstest: scanned 8 eraseblocks, 0 are bad
> [  285.170000] mtd_stresstest: doing operations
> [  285.170000] mtd_stresstest: 0 operations done
> [  285.460000] mtd_stresstest: finished, 10 operations done
> [  285.470000] =================================================
> root@OpenWrt:/#

Did not want to damage the flash, so I did not run the torture test.

-Gabor
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to