diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-24 22:57:15 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-24 22:57:15 -0400 |
| commit | 8f40842e4260f73792c156aded004197a19135ee (patch) | |
| tree | b192ed354a34839a8c1607883d1ebc09b06a76c0 /drivers/mtd/tests | |
| parent | 88875667ebbcb95da3f93a4cf657d5dad7db9673 (diff) | |
| parent | 6871c1b96de88d3576d935b528fd1b0ec70e81f5 (diff) | |
Merge tag 'for-linus-20160324' of git://git.infradead.org/linux-mtd
Pull MTD updates from Brian Norris:
"NAND:
- Add sunxi_nand randomizer support
- begin refactoring NAND ecclayout structs
- fix pxa3xx_nand dmaengine usage
- brcmnand: fix support for v7.1 controller
- add Qualcomm NAND controller driver
SPI NOR:
- add new ls1021a, ls2080a support to Freescale QuadSPI
- add new flash ID entries
- support bottom-block protection for Winbond flash
- support Status Register Write Protect
- remove broken QPI support for Micron SPI flash
JFFS2:
- improve post-mount CRC scan efficiency
General:
- refactor bcm63xxpart parser, to later extend for NAND
- add writebuf size parameter to mtdram
Other minor code quality improvements"
* tag 'for-linus-20160324' of git://git.infradead.org/linux-mtd: (72 commits)
mtd: nand: remove kerneldoc for removed function parameter
mtd: nand: Qualcomm NAND controller driver
dt/bindings: qcom_nandc: Add DT bindings
mtd: nand: don't select chip in nand_chip's block_bad op
mtd: spi-nor: support lock/unlock for a few Winbond chips
mtd: spi-nor: add TB (Top/Bottom) protect support
mtd: spi-nor: add SPI_NOR_HAS_LOCK flag
mtd: spi-nor: use BIT() for flash_info flags
mtd: spi-nor: disallow further writes to SR if WP# is low
mtd: spi-nor: make lock/unlock bounds checks more obvious and robust
mtd: spi-nor: silently drop lock/unlock for already locked/unlocked region
mtd: spi-nor: wait for SR_WIP to clear on initial unlock
mtd: nand: simplify nand_bch_init() usage
mtd: mtdswap: remove useless if (!mtd->ecclayout) test
mtd: create an mtd_oobavail() helper and make use of it
mtd: kill the ecclayout->oobavail field
mtd: nand: check status before reporting timeout
mtd: bcm63xxpart: give width specifier an 'int', not 'size_t'
mtd: mtdram: Add parameter for setting writebuf size
mtd: nand: pxa3xx_nand: kill unused field 'drcmr_cmd'
...
Diffstat (limited to 'drivers/mtd/tests')
| -rw-r--r-- | drivers/mtd/tests/oobtest.c | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/drivers/mtd/tests/oobtest.c b/drivers/mtd/tests/oobtest.c index 31762120eb56..1cb3f7758fb6 100644 --- a/drivers/mtd/tests/oobtest.c +++ b/drivers/mtd/tests/oobtest.c | |||
| @@ -215,19 +215,19 @@ static int verify_eraseblock(int ebnum) | |||
| 215 | pr_info("ignoring error as within bitflip_limit\n"); | 215 | pr_info("ignoring error as within bitflip_limit\n"); |
| 216 | } | 216 | } |
| 217 | 217 | ||
| 218 | if (use_offset != 0 || use_len < mtd->ecclayout->oobavail) { | 218 | if (use_offset != 0 || use_len < mtd->oobavail) { |
| 219 | int k; | 219 | int k; |
| 220 | 220 | ||
| 221 | ops.mode = MTD_OPS_AUTO_OOB; | 221 | ops.mode = MTD_OPS_AUTO_OOB; |
| 222 | ops.len = 0; | 222 | ops.len = 0; |
| 223 | ops.retlen = 0; | 223 | ops.retlen = 0; |
| 224 | ops.ooblen = mtd->ecclayout->oobavail; | 224 | ops.ooblen = mtd->oobavail; |
| 225 | ops.oobretlen = 0; | 225 | ops.oobretlen = 0; |
| 226 | ops.ooboffs = 0; | 226 | ops.ooboffs = 0; |
| 227 | ops.datbuf = NULL; | 227 | ops.datbuf = NULL; |
| 228 | ops.oobbuf = readbuf; | 228 | ops.oobbuf = readbuf; |
| 229 | err = mtd_read_oob(mtd, addr, &ops); | 229 | err = mtd_read_oob(mtd, addr, &ops); |
| 230 | if (err || ops.oobretlen != mtd->ecclayout->oobavail) { | 230 | if (err || ops.oobretlen != mtd->oobavail) { |
| 231 | pr_err("error: readoob failed at %#llx\n", | 231 | pr_err("error: readoob failed at %#llx\n", |
| 232 | (long long)addr); | 232 | (long long)addr); |
| 233 | errcnt += 1; | 233 | errcnt += 1; |
| @@ -244,7 +244,7 @@ static int verify_eraseblock(int ebnum) | |||
| 244 | /* verify post-(use_offset + use_len) area for 0xff */ | 244 | /* verify post-(use_offset + use_len) area for 0xff */ |
| 245 | k = use_offset + use_len; | 245 | k = use_offset + use_len; |
| 246 | bitflips += memffshow(addr, k, readbuf + k, | 246 | bitflips += memffshow(addr, k, readbuf + k, |
| 247 | mtd->ecclayout->oobavail - k); | 247 | mtd->oobavail - k); |
| 248 | 248 | ||
| 249 | if (bitflips > bitflip_limit) { | 249 | if (bitflips > bitflip_limit) { |
| 250 | pr_err("error: verify failed at %#llx\n", | 250 | pr_err("error: verify failed at %#llx\n", |
| @@ -269,8 +269,8 @@ static int verify_eraseblock_in_one_go(int ebnum) | |||
| 269 | struct mtd_oob_ops ops; | 269 | struct mtd_oob_ops ops; |
| 270 | int err = 0; | 270 | int err = 0; |
| 271 | loff_t addr = (loff_t)ebnum * mtd->erasesize; | 271 | loff_t addr = (loff_t)ebnum * mtd->erasesize; |
| 272 | size_t len = mtd->ecclayout->oobavail * pgcnt; | 272 | size_t len = mtd->oobavail * pgcnt; |
| 273 | size_t oobavail = mtd->ecclayout->oobavail; | 273 | size_t oobavail = mtd->oobavail; |
| 274 | size_t bitflips; | 274 | size_t bitflips; |
| 275 | int i; | 275 | int i; |
| 276 | 276 | ||
| @@ -394,8 +394,8 @@ static int __init mtd_oobtest_init(void) | |||
| 394 | goto out; | 394 | goto out; |
| 395 | 395 | ||
| 396 | use_offset = 0; | 396 | use_offset = 0; |
| 397 | use_len = mtd->ecclayout->oobavail; | 397 | use_len = mtd->oobavail; |
| 398 | use_len_max = mtd->ecclayout->oobavail; | 398 | use_len_max = mtd->oobavail; |
| 399 | vary_offset = 0; | 399 | vary_offset = 0; |
| 400 | 400 | ||
| 401 | /* First test: write all OOB, read it back and verify */ | 401 | /* First test: write all OOB, read it back and verify */ |
| @@ -460,8 +460,8 @@ static int __init mtd_oobtest_init(void) | |||
| 460 | 460 | ||
| 461 | /* Write all eraseblocks */ | 461 | /* Write all eraseblocks */ |
| 462 | use_offset = 0; | 462 | use_offset = 0; |
| 463 | use_len = mtd->ecclayout->oobavail; | 463 | use_len = mtd->oobavail; |
| 464 | use_len_max = mtd->ecclayout->oobavail; | 464 | use_len_max = mtd->oobavail; |
| 465 | vary_offset = 1; | 465 | vary_offset = 1; |
| 466 | prandom_seed_state(&rnd_state, 5); | 466 | prandom_seed_state(&rnd_state, 5); |
| 467 | 467 | ||
| @@ -471,8 +471,8 @@ static int __init mtd_oobtest_init(void) | |||
| 471 | 471 | ||
| 472 | /* Check all eraseblocks */ | 472 | /* Check all eraseblocks */ |
| 473 | use_offset = 0; | 473 | use_offset = 0; |
| 474 | use_len = mtd->ecclayout->oobavail; | 474 | use_len = mtd->oobavail; |
| 475 | use_len_max = mtd->ecclayout->oobavail; | 475 | use_len_max = mtd->oobavail; |
| 476 | vary_offset = 1; | 476 | vary_offset = 1; |
| 477 | prandom_seed_state(&rnd_state, 5); | 477 | prandom_seed_state(&rnd_state, 5); |
| 478 | err = verify_all_eraseblocks(); | 478 | err = verify_all_eraseblocks(); |
| @@ -480,8 +480,8 @@ static int __init mtd_oobtest_init(void) | |||
| 480 | goto out; | 480 | goto out; |
| 481 | 481 | ||
| 482 | use_offset = 0; | 482 | use_offset = 0; |
| 483 | use_len = mtd->ecclayout->oobavail; | 483 | use_len = mtd->oobavail; |
| 484 | use_len_max = mtd->ecclayout->oobavail; | 484 | use_len_max = mtd->oobavail; |
| 485 | vary_offset = 0; | 485 | vary_offset = 0; |
| 486 | 486 | ||
| 487 | /* Fourth test: try to write off end of device */ | 487 | /* Fourth test: try to write off end of device */ |
| @@ -501,7 +501,7 @@ static int __init mtd_oobtest_init(void) | |||
| 501 | ops.retlen = 0; | 501 | ops.retlen = 0; |
| 502 | ops.ooblen = 1; | 502 | ops.ooblen = 1; |
| 503 | ops.oobretlen = 0; | 503 | ops.oobretlen = 0; |
| 504 | ops.ooboffs = mtd->ecclayout->oobavail; | 504 | ops.ooboffs = mtd->oobavail; |
| 505 | ops.datbuf = NULL; | 505 | ops.datbuf = NULL; |
| 506 | ops.oobbuf = writebuf; | 506 | ops.oobbuf = writebuf; |
| 507 | pr_info("attempting to start write past end of OOB\n"); | 507 | pr_info("attempting to start write past end of OOB\n"); |
| @@ -521,7 +521,7 @@ static int __init mtd_oobtest_init(void) | |||
| 521 | ops.retlen = 0; | 521 | ops.retlen = 0; |
| 522 | ops.ooblen = 1; | 522 | ops.ooblen = 1; |
| 523 | ops.oobretlen = 0; | 523 | ops.oobretlen = 0; |
| 524 | ops.ooboffs = mtd->ecclayout->oobavail; | 524 | ops.ooboffs = mtd->oobavail; |
| 525 | ops.datbuf = NULL; | 525 | ops.datbuf = NULL; |
| 526 | ops.oobbuf = readbuf; | 526 | ops.oobbuf = readbuf; |
| 527 | pr_info("attempting to start read past end of OOB\n"); | 527 | pr_info("attempting to start read past end of OOB\n"); |
| @@ -543,7 +543,7 @@ static int __init mtd_oobtest_init(void) | |||
| 543 | ops.mode = MTD_OPS_AUTO_OOB; | 543 | ops.mode = MTD_OPS_AUTO_OOB; |
| 544 | ops.len = 0; | 544 | ops.len = 0; |
| 545 | ops.retlen = 0; | 545 | ops.retlen = 0; |
| 546 | ops.ooblen = mtd->ecclayout->oobavail + 1; | 546 | ops.ooblen = mtd->oobavail + 1; |
| 547 | ops.oobretlen = 0; | 547 | ops.oobretlen = 0; |
| 548 | ops.ooboffs = 0; | 548 | ops.ooboffs = 0; |
| 549 | ops.datbuf = NULL; | 549 | ops.datbuf = NULL; |
| @@ -563,7 +563,7 @@ static int __init mtd_oobtest_init(void) | |||
| 563 | ops.mode = MTD_OPS_AUTO_OOB; | 563 | ops.mode = MTD_OPS_AUTO_OOB; |
| 564 | ops.len = 0; | 564 | ops.len = 0; |
| 565 | ops.retlen = 0; | 565 | ops.retlen = 0; |
| 566 | ops.ooblen = mtd->ecclayout->oobavail + 1; | 566 | ops.ooblen = mtd->oobavail + 1; |
| 567 | ops.oobretlen = 0; | 567 | ops.oobretlen = 0; |
| 568 | ops.ooboffs = 0; | 568 | ops.ooboffs = 0; |
| 569 | ops.datbuf = NULL; | 569 | ops.datbuf = NULL; |
| @@ -587,7 +587,7 @@ static int __init mtd_oobtest_init(void) | |||
| 587 | ops.mode = MTD_OPS_AUTO_OOB; | 587 | ops.mode = MTD_OPS_AUTO_OOB; |
| 588 | ops.len = 0; | 588 | ops.len = 0; |
| 589 | ops.retlen = 0; | 589 | ops.retlen = 0; |
| 590 | ops.ooblen = mtd->ecclayout->oobavail; | 590 | ops.ooblen = mtd->oobavail; |
| 591 | ops.oobretlen = 0; | 591 | ops.oobretlen = 0; |
| 592 | ops.ooboffs = 1; | 592 | ops.ooboffs = 1; |
| 593 | ops.datbuf = NULL; | 593 | ops.datbuf = NULL; |
| @@ -607,7 +607,7 @@ static int __init mtd_oobtest_init(void) | |||
| 607 | ops.mode = MTD_OPS_AUTO_OOB; | 607 | ops.mode = MTD_OPS_AUTO_OOB; |
| 608 | ops.len = 0; | 608 | ops.len = 0; |
| 609 | ops.retlen = 0; | 609 | ops.retlen = 0; |
| 610 | ops.ooblen = mtd->ecclayout->oobavail; | 610 | ops.ooblen = mtd->oobavail; |
| 611 | ops.oobretlen = 0; | 611 | ops.oobretlen = 0; |
| 612 | ops.ooboffs = 1; | 612 | ops.ooboffs = 1; |
| 613 | ops.datbuf = NULL; | 613 | ops.datbuf = NULL; |
| @@ -638,7 +638,7 @@ static int __init mtd_oobtest_init(void) | |||
| 638 | for (i = 0; i < ebcnt - 1; ++i) { | 638 | for (i = 0; i < ebcnt - 1; ++i) { |
| 639 | int cnt = 2; | 639 | int cnt = 2; |
| 640 | int pg; | 640 | int pg; |
| 641 | size_t sz = mtd->ecclayout->oobavail; | 641 | size_t sz = mtd->oobavail; |
| 642 | if (bbt[i] || bbt[i + 1]) | 642 | if (bbt[i] || bbt[i + 1]) |
| 643 | continue; | 643 | continue; |
| 644 | addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; | 644 | addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; |
| @@ -673,13 +673,12 @@ static int __init mtd_oobtest_init(void) | |||
| 673 | for (i = 0; i < ebcnt - 1; ++i) { | 673 | for (i = 0; i < ebcnt - 1; ++i) { |
| 674 | if (bbt[i] || bbt[i + 1]) | 674 | if (bbt[i] || bbt[i + 1]) |
| 675 | continue; | 675 | continue; |
| 676 | prandom_bytes_state(&rnd_state, writebuf, | 676 | prandom_bytes_state(&rnd_state, writebuf, mtd->oobavail * 2); |
| 677 | mtd->ecclayout->oobavail * 2); | ||
| 678 | addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; | 677 | addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; |
| 679 | ops.mode = MTD_OPS_AUTO_OOB; | 678 | ops.mode = MTD_OPS_AUTO_OOB; |
| 680 | ops.len = 0; | 679 | ops.len = 0; |
| 681 | ops.retlen = 0; | 680 | ops.retlen = 0; |
| 682 | ops.ooblen = mtd->ecclayout->oobavail * 2; | 681 | ops.ooblen = mtd->oobavail * 2; |
| 683 | ops.oobretlen = 0; | 682 | ops.oobretlen = 0; |
| 684 | ops.ooboffs = 0; | 683 | ops.ooboffs = 0; |
| 685 | ops.datbuf = NULL; | 684 | ops.datbuf = NULL; |
| @@ -688,7 +687,7 @@ static int __init mtd_oobtest_init(void) | |||
| 688 | if (err) | 687 | if (err) |
| 689 | goto out; | 688 | goto out; |
| 690 | if (memcmpshow(addr, readbuf, writebuf, | 689 | if (memcmpshow(addr, readbuf, writebuf, |
| 691 | mtd->ecclayout->oobavail * 2)) { | 690 | mtd->oobavail * 2)) { |
| 692 | pr_err("error: verify failed at %#llx\n", | 691 | pr_err("error: verify failed at %#llx\n", |
| 693 | (long long)addr); | 692 | (long long)addr); |
| 694 | errcnt += 1; | 693 | errcnt += 1; |
