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