xref: /openbmc/u-boot/post/lib_powerpc/fpu/fpu.c (revision d3e19cf9195e7308c6333bbbbc12f8db8fa2d079)
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  
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