blob: 59109f71e36a36e60df9a4b381fa01b175bb815c [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Sergei Poselenov3190dbe2007-07-05 08:17:37 +02002/*
3 * Copyright (C) 2007
4 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5 *
6 * Author: Sergei Poselenov <sposelenov@emcraft.com>
Sergei Poselenov3190dbe2007-07-05 08:17:37 +02007 */
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
Sergei Poselenov3190dbe2007-07-05 08:17:37 +020020#include <post.h>
21
Kumar Galafe6555b2011-01-25 03:00:08 -060022GNU_FPOST_ATTR
23
Tom Rini3dd5d4a2022-12-04 10:14:17 -050024#if CFG_POST & CFG_SYS_POST_FPU
Sergei Poselenov3190dbe2007-07-05 08:17:37 +020025
26#include <watchdog.h>
27
28extern int fpu_status (void);
29extern void fpu_enable (void);
30extern void fpu_disable (void);
31
32extern int fpu_post_test_math1 (void);
33extern int fpu_post_test_math2 (void);
34extern int fpu_post_test_math3 (void);
35extern int fpu_post_test_math4 (void);
36extern int fpu_post_test_math5 (void);
37extern int fpu_post_test_math6 (void);
38extern int fpu_post_test_math7 (void);
39
40int fpu_post_test (int flags)
41{
42 int fpu = fpu_status ();
43
44 int ret = 0;
45
Stefan Roese80877fa2022-09-02 14:10:46 +020046 schedule();
Sergei Poselenov3190dbe2007-07-05 08:17:37 +020047
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
Stefan Roese80877fa2022-09-02 14:10:46 +020069 schedule();
Sergei Poselenov3190dbe2007-07-05 08:17:37 +020070
71 return ret;
72}
73
Tom Rini3dd5d4a2022-12-04 10:14:17 -050074#endif /* CFG_POST & CFG_SYS_POST_FPU */