annotate packages/io/nand/current/tests/nand_eccequiv.c @ 3381:0928a0a0c30f

io/nand: Some trivial cleanups, partly to work with gcc 4.7, and partly as I noticed them. Details: * src/nand_bbt.c (LOCK_PAGEBUF, UNLOCK_PAGEBUF, bbti_incorporate_one, bbti_write_one_table): Remove all uses of i_locked variable as it wasn't really used. * tests/nand_eccequiv.c (cyg_user_start): Don't use CYG_ASSERTC checks, which only tests for debug builds. Use MUST instead. * tests/nand_readwrite.c (cyg_user_start): Ditto. * tests/nand_sweccwalk.c (cyg_user_start): Ditto.
author Jonathan Larmour <jifl@eCosCentric.com>
date Fri, 06 Sep 2013 23:01:15 +0100
parents 84277d0be0b2
children 9b8c245fbdef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3017
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
1 //=============================================================================
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
2 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
3 // eccequiv.c
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
4 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
5 // Given two software ECC algorithms, confirms their equivalence.
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
6 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
7 //=============================================================================
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
8 // ####ECOSGPLCOPYRIGHTBEGIN####
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
9 // -------------------------------------------
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
3377
84277d0be0b2 Use correct format for FAIL output when using diag_printf to construct
Jonathan Larmour <jifl@eCosCentric.com>
parents: 3017
diff changeset
11 // Copyright (C) 2009, 2011 eCosCentric Limited.
3017
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
12 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
14 // the terms of the GNU General Public License as published by the Free
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
16 // version.
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
17 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
21 // for more details.
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
22 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
23 // You should have received a copy of the GNU General Public License
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
24 // along with eCos; if not, write to the Free Software Foundation, Inc.,
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
26 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
27 // As a special exception, if other files instantiate templates or use
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
28 // macros or inline functions from this file, or you compile this file
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
29 // and link it with other works to produce a work based on this file,
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
30 // this file does not by itself cause the resulting work to be covered by
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
31 // the GNU General Public License. However the source code for this file
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
32 // must still be made available in accordance with section (3) of the GNU
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
33 // General Public License v2.
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
34 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
35 // This exception does not invalidate any other reasons why a work based
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
36 // on this file might be covered by the GNU General Public License.
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
37 // -------------------------------------------
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
38 // ####ECOSGPLCOPYRIGHTEND####
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
39 //=============================================================================
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
40 //#####DESCRIPTIONBEGIN####
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
41 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
42 // Author(s): wry
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
43 // Date: 2009-11-06
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
44 //
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
45 //####DESCRIPTIONEND####
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
46 //=============================================================================
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
47
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
48 #include <cyg/infra/cyg_ass.h>
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
49 #include <cyg/infra/testcase.h>
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
50 #include <cyg/nand/nand.h>
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
51 #include <cyg/nand/nand_devtab.h>
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
52 #include <cyg/nand/util.h>
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
53 #include <cyg/infra/diag.h>
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
54 #include <stdio.h>
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
55 #include <string.h>
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
56 #include "ar4prng.inl"
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
57
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
58 #define MUST(what) do { CYG_TEST_CHECK((what), #what); } while(0)
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
59
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
60 __externC cyg_nand_ecc_t linux_mtd_ecc;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
61
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
62 static CYG_NAND_DEVICE(fakenand, 0, 0, 0, &linux_mtd_ecc, 0);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
63 static CYG_NAND_DEVICE(fakenand2, 0, 0, 0, &mtd_ecc256_fast, 0);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
64
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
65 void init_fakenand(void)
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
66 {
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
67 if (fakenand.is_inited)
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
68 return;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
69
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
70 fakenand.is_inited = 1;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
71 fakenand.pf = diag_printf;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
72 fakenand.page_bits = 11; // 2048 byte test pattern.
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
73 fakenand.oob = &nand_mtd_oob_64;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
74
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
75 fakenand2.is_inited = 1;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
76 fakenand2.pf = diag_printf;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
77 fakenand2.page_bits = 11; // 2048 byte test pattern.
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
78 fakenand2.oob = &nand_mtd_oob_64;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
79 }
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
80
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
81
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
82 void ecc(cyg_nand_device *dev, const CYG_BYTE *data, CYG_BYTE *out)
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
83 {
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
84 if (dev->ecc->init)
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
85 dev->ecc->init(dev);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
86 dev->ecc->calc_wr(dev, data, out);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
87 }
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
88
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
89 const char msg[]="ECC equivalence check";
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
90
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
91 #define ECC_BUFFER_SIZE 10
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
92 CYG_BYTE buf[CYGNUM_NAND_PAGEBUFFER];
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
93 CYG_BYTE ecc1[ECC_BUFFER_SIZE], ecc2[ECC_BUFFER_SIZE];
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
94
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
95 ar4ctx rng;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
96 extern unsigned char _stext[], _etext[];
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
97
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
98 int cyg_user_start(void)
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
99 {
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
100 cyg_nand_device *dev = &fakenand, *dev2 = &fakenand2;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
101 int i, fails=0;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
102
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
103 CYG_TEST_INIT();
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
104 CYG_TEST_INFO(msg);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
105
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
106 #define datasize (fakenand.ecc->data_size)
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
107 #define eccsize (fakenand.ecc->ecc_size)
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
108
3381
0928a0a0c30f io/nand: Some trivial cleanups, partly to work with gcc 4.7, and partly as I noticed them. Details:
Jonathan Larmour <jifl@eCosCentric.com>
parents: 3377
diff changeset
109 MUST(fakenand.ecc->data_size == fakenand2.ecc->data_size);
0928a0a0c30f io/nand: Some trivial cleanups, partly to work with gcc 4.7, and partly as I noticed them. Details:
Jonathan Larmour <jifl@eCosCentric.com>
parents: 3377
diff changeset
110 MUST(fakenand.ecc->ecc_size == fakenand2.ecc->ecc_size);
3017
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
111
3381
0928a0a0c30f io/nand: Some trivial cleanups, partly to work with gcc 4.7, and partly as I noticed them. Details:
Jonathan Larmour <jifl@eCosCentric.com>
parents: 3377
diff changeset
112 MUST(datasize <= CYGNUM_NAND_PAGEBUFFER);
0928a0a0c30f io/nand: Some trivial cleanups, partly to work with gcc 4.7, and partly as I noticed them. Details:
Jonathan Larmour <jifl@eCosCentric.com>
parents: 3377
diff changeset
113 MUST(eccsize <= ECC_BUFFER_SIZE);
3017
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
114
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
115 diag_printf("ECC sizes: data %d, ecc %d\n", datasize, eccsize);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
116
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
117 ar4prng_init(&rng,_stext, _etext-_stext);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
118
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
119 #define N_RUNS 10000
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
120
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
121 for (i=0; i<N_RUNS; i++) {
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
122 ar4prng_many(&rng, buf, datasize);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
123 ecc(dev, buf, ecc1);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
124 ecc(dev2, buf, ecc2);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
125 if (0 != memcmp(ecc1, ecc2, eccsize)) {
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
126 ++fails;
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
127 }
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
128 }
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
129
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
130 if (fails) {
3377
84277d0be0b2 Use correct format for FAIL output when using diag_printf to construct
Jonathan Larmour <jifl@eCosCentric.com>
parents: 3017
diff changeset
131 diag_printf("FAIL:<%d mismatches>\n", fails);
3017
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
132 CYG_TEST_FAIL_FINISH(msg);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
133 } else
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
134 CYG_TEST_PASS_FINISH(msg);
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
135 }
8502a048ad17 Update NAND to latest
Ross Younger <wry@ecoscentric.com>
parents:
diff changeset
136