aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/tests
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-03-24 22:57:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-03-24 22:57:15 -0400
commit8f40842e4260f73792c156aded004197a19135ee (patch)
treeb192ed354a34839a8c1607883d1ebc09b06a76c0 /drivers/mtd/tests
parent88875667ebbcb95da3f93a4cf657d5dad7db9673 (diff)
parent6871c1b96de88d3576d935b528fd1b0ec70e81f5 (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.c49
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;