1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2007
4  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5  *
6  * Author: Sergei Poselenov <sposelenov@emcraft.com>
7  */
8 
9 #include <common.h>
10 
11 /*
12  * FPU test
13  *
14  * This test checks the arithmetic logic unit (ALU) of CPU.
15  * It tests independently various groups of instructions using
16  * run-time modification of the code to reduce the memory footprint.
17  * For more details refer to post/cpu/ *.c files.
18  */
19 
20 #include <post.h>
21 
22 GNU_FPOST_ATTR
23 
24 #if CONFIG_POST & CONFIG_SYS_POST_FPU
25 
26 #include <watchdog.h>
27 
28 extern int fpu_status (void);
29 extern void fpu_enable (void);
30 extern void fpu_disable (void);
31 
32 extern int fpu_post_test_math1 (void);
33 extern int fpu_post_test_math2 (void);
34 extern int fpu_post_test_math3 (void);
35 extern int fpu_post_test_math4 (void);
36 extern int fpu_post_test_math5 (void);
37 extern int fpu_post_test_math6 (void);
38 extern int fpu_post_test_math7 (void);
39 
fpu_post_test(int flags)40 int fpu_post_test (int flags)
41 {
42 	int fpu = fpu_status ();
43 
44 	int ret = 0;
45 
46 	WATCHDOG_RESET ();
47 
48 	if (!fpu)
49 		fpu_enable ();
50 
51 	if (ret == 0)
52 		ret = fpu_post_test_math1 ();
53 	if (ret == 0)
54 		ret = fpu_post_test_math2 ();
55 	if (ret == 0)
56 		ret = fpu_post_test_math3 ();
57 	if (ret == 0)
58 		ret = fpu_post_test_math4 ();
59 	if (ret == 0)
60 		ret = fpu_post_test_math5 ();
61 	if (ret == 0)
62 		ret = fpu_post_test_math6 ();
63 	if (ret == 0)
64 		ret = fpu_post_test_math7 ();
65 
66 	if (!fpu)
67 		fpu_disable ();
68 
69 	WATCHDOG_RESET ();
70 
71 	return ret;
72 }
73 
74 #endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */
75