1 /******************************************************************************
4 * (c) Copyright 2009 Xilinx, Inc. All rights reserved.
6 * This file contains confidential and proprietary information of Xilinx, Inc.
7 * and is protected under U.S. and international copyright and other
8 * intellectual property laws.
11 * This disclaimer is not a license and does not grant any rights to the
12 * materials distributed herewith. Except as otherwise provided in a valid
13 * license issued to you by Xilinx, and to the maximum extent permitted by
14 * applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL
15 * FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS,
16 * IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
17 * MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE;
18 * and (2) Xilinx shall not be liable (whether in contract or tort, including
19 * negligence, or under any other theory of liability) for any loss or damage
20 * of any kind or nature related to, arising under or in connection with these
21 * materials, including for any direct, or any indirect, special, incidental,
22 * or consequential loss or damage (including loss of data, profits, goodwill,
23 * or any type of loss or damage suffered as a result of any action brought by
24 * a third party) even if such damage or loss was reasonably foreseeable or
25 * Xilinx had been advised of the possibility of the same.
27 * CRITICAL APPLICATIONS
28 * Xilinx products are not designed or intended to be fail-safe, or for use in
29 * any application requiring fail-safe performance, such as life-support or
30 * safety devices or systems, Class III medical devices, nuclear facilities,
31 * applications related to the deployment of airbags, or any other applications
32 * that could lead to death, personal injury, or severe property or
33 * environmental damage (individually and collectively, "Critical
34 * Applications"). Customer assumes the sole risk and liability of any use of
35 * Xilinx products in Critical Applications, subject only to applicable laws
36 * and regulations governing limitations on product liability.
38 * THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE
42 ******************************************************************************/
43 /*****************************************************************************/
48 * This file contains utility functions to test memory.
50 * <b>Memory test description</b>
52 * A subset of the memory tests can be selected or all of the tests can be run
53 * in order. If there is an error detected by a subtest, the test stops and the
54 * failure code is returned. Further tests are not run even if all of the tests
57 * Subtest descriptions:
59 * XIL_TESTMEM_ALLMEMTESTS:
60 * Runs all of the following tests
62 * XIL_TESTMEM_INCREMENT:
63 * Incrementing Value Test.
64 * This test starts at 'XIL_TESTMEM_INIT_VALUE' and uses the
65 * incrementing value as the test value for memory.
67 * XIL_TESTMEM_WALKONES:
69 * This test uses a walking '1' as the test value for memory.
70 * location 1 = 0x00000001
71 * location 2 = 0x00000002
74 * XIL_TESTMEM_WALKZEROS:
75 * Walking Zero's Test.
76 * This test uses the inverse value of the walking ones test
77 * as the test value for memory.
78 * location 1 = 0xFFFFFFFE
79 * location 2 = 0xFFFFFFFD
82 * XIL_TESTMEM_INVERSEADDR:
83 * Inverse Address Test.
84 * This test uses the inverse of the address of the location under test
85 * as the test value for memory.
87 * XIL_TESTMEM_FIXEDPATTERN:
89 * This test uses the provided patters as the test value for memory.
90 * If zero is provided as the pattern the test uses '0xDEADBEEF".
95 * The tests are <b>DESTRUCTIVE</b>. Run before any initialized memory spaces
98 * The address provided to the memory tests is not checked for
99 * validity except for the NULL case. It is possible to provide a code-space
100 * pointer for this test to start with and ultimately destroy executable code
101 * causing random failures.
105 * Used for spaces where the address range of the region is smaller than
106 * the data width. If the memory range is greater than 2 ** width,
107 * the patterns used in XIL_TESTMEM_WALKONES and XIL_TESTMEM_WALKZEROS will
108 * repeat on a boundry of a power of two making it more difficult to detect
109 * addressing errors. The XIL_TESTMEM_INCREMENT and XIL_TESTMEM_INVERSEADDR
110 * tests suffer the same problem. Ideally, if large blocks of memory are to be
111 * tested, break them up into smaller regions of memory to allow the test
112 * patterns used not to repeat over the region tested.
115 * MODIFICATION HISTORY:
117 * Ver Who Date Changes
118 * ----- ---- -------- -----------------------------------------------
119 * 1.00a hbm 08/25/09 First release
122 ******************************************************************************/
124 #ifndef XIL_TESTMEM_H /* prevent circular inclusions */
125 #define XIL_TESTMEM_H /* by using protection macros */
131 /***************************** Include Files *********************************/
132 #include "xil_types.h"
134 /************************** Constant Definitions *****************************/
137 /**************************** Type Definitions *******************************/
139 /* xutil_memtest defines */
141 #define XIL_TESTMEM_INIT_VALUE 1
143 /** @name Memory subtests
147 * See the detailed description of the subtests in the file description.
149 #define XIL_TESTMEM_ALLMEMTESTS 0
150 #define XIL_TESTMEM_INCREMENT 1
151 #define XIL_TESTMEM_WALKONES 2
152 #define XIL_TESTMEM_WALKZEROS 3
153 #define XIL_TESTMEM_INVERSEADDR 4
154 #define XIL_TESTMEM_FIXEDPATTERN 5
155 #define XIL_TESTMEM_MAXTEST XIL_TESTMEM_FIXEDPATTERN
158 /***************** Macros (Inline Functions) Definitions *********************/
161 /************************** Function Prototypes ******************************/
163 /* xutil_testmem prototypes */
165 extern int Xil_TestMem32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest);
166 extern int Xil_TestMem16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest);
167 extern int Xil_TestMem8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest);
173 #endif /* end of protection macro */