xref: /rk3399_rockchip-uboot/cmd/ddr_tool/stressapptest/stressapptest.h (revision 9bf9a700c88f8fafafed7d71fef827e52c5548e8)
1*9bf9a700SWesley Yao /* Copyright 2006 Google Inc. All Rights Reserved. */
2*9bf9a700SWesley Yao /* Licensed under the Apache License, Version 2.0 (the "License");
3*9bf9a700SWesley Yao  * you may not use this file except in compliance with the License.
4*9bf9a700SWesley Yao  * You may obtain a copy of the License at
5*9bf9a700SWesley Yao  *
6*9bf9a700SWesley Yao  *	http://www.apache.org/licenses/LICENSE-2.0
7*9bf9a700SWesley Yao  *
8*9bf9a700SWesley Yao  * Unless required by applicable law or agreed to in writing, software
9*9bf9a700SWesley Yao  * distributed under the License is distributed on an "AS IS" BASIS,
10*9bf9a700SWesley Yao  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11*9bf9a700SWesley Yao  * See the License for the specific language governing permissions and
12*9bf9a700SWesley Yao  * limitations under the License.
13*9bf9a700SWesley Yao  */
14*9bf9a700SWesley Yao 
15*9bf9a700SWesley Yao /* This is stressapptest for Rockchip platform in U-Boot, the design idea and
16*9bf9a700SWesley Yao  * the patterns are from code.google.com/p/stressapptest.
17*9bf9a700SWesley Yao  */
18*9bf9a700SWesley Yao 
19*9bf9a700SWesley Yao #ifndef __CMD_DDR_TOOL_STRESSAPPTEST_STRESSAPPTEST_H
20*9bf9a700SWesley Yao #define __CMD_DDR_TOOL_STRESSAPPTEST_STRESSAPPTEST_H
21*9bf9a700SWesley Yao 
22*9bf9a700SWesley Yao struct stressapptest_params {
23*9bf9a700SWesley Yao 	ulong total_test_size_mb;
24*9bf9a700SWesley Yao 	/* total_test_size = page_size * page_num */
25*9bf9a700SWesley Yao 	ulong page_size_byte;
26*9bf9a700SWesley Yao 	u32 page_num;
27*9bf9a700SWesley Yao 	/* page_size = block_size * block_num */
28*9bf9a700SWesley Yao 	u32 block_size_byte;
29*9bf9a700SWesley Yao 	u32 block_num;
30*9bf9a700SWesley Yao 
31*9bf9a700SWesley Yao 	u32 weight_count;
32*9bf9a700SWesley Yao 
33*9bf9a700SWesley Yao 	u8 cpu_num;
34*9bf9a700SWesley Yao } sat;
35*9bf9a700SWesley Yao 
36*9bf9a700SWesley Yao struct pat {
37*9bf9a700SWesley Yao 	const char *name;
38*9bf9a700SWesley Yao 	const unsigned int *data_array;
39*9bf9a700SWesley Yao 	/* mask = size - 1, So data_array[index & mask] is always valid. */
40*9bf9a700SWesley Yao 	const unsigned int mask;
41*9bf9a700SWesley Yao 	const unsigned int weight[4];	/* Weighted frequency of this pattern. */
42*9bf9a700SWesley Yao };
43*9bf9a700SWesley Yao 
44*9bf9a700SWesley Yao struct adler_sum {
45*9bf9a700SWesley Yao 	u64 a1;
46*9bf9a700SWesley Yao 	u64 b1;
47*9bf9a700SWesley Yao 	u64 a2;
48*9bf9a700SWesley Yao 	u64 b2;
49*9bf9a700SWesley Yao };
50*9bf9a700SWesley Yao 
51*9bf9a700SWesley Yao struct pattern {
52*9bf9a700SWesley Yao 	struct pat *pat;
53*9bf9a700SWesley Yao 	bool inv;
54*9bf9a700SWesley Yao 	u32 repeat;
55*9bf9a700SWesley Yao 	u32 weight;
56*9bf9a700SWesley Yao 	struct adler_sum adler_sum;
57*9bf9a700SWesley Yao };
58*9bf9a700SWesley Yao 
59*9bf9a700SWesley Yao struct page {
60*9bf9a700SWesley Yao 	void *base_addr;
61*9bf9a700SWesley Yao 	struct pattern *pattern;
62*9bf9a700SWesley Yao 	bool valid;	/* 1: valid, 0: empty */
63*9bf9a700SWesley Yao } *page_list;
64*9bf9a700SWesley Yao 
65*9bf9a700SWesley Yao extern void secondary_init(void);
66*9bf9a700SWesley Yao extern void lock_byte_mutex(u32 *flag);
67*9bf9a700SWesley Yao extern u32 unlock_byte_mutex(u32 *flag);
68*9bf9a700SWesley Yao extern u32 get_cpu_id(void);
69*9bf9a700SWesley Yao 
70*9bf9a700SWesley Yao #endif /* __CMD_DDR_TOOL_STRESSAPPTEST_STRESSAPPTEST_H */
71