1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * (C) Copyright 2002 4 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 5 */ 6 7 #include <common.h> 8 9 /* 10 * CPU test 11 * Load/store multiple word instructions: lmw, stmw 12 * 13 * 27 consecutive words are loaded from a source memory buffer 14 * into GPRs r5 through r31. After that, 27 consecutive words are stored 15 * from the GPRs r5 through r31 into a target memory buffer. The contents 16 * of the source and target buffers are then compared. 17 */ 18 19 #include <post.h> 20 #include "cpu_asm.h" 21 22 #if CONFIG_POST & CONFIG_SYS_POST_CPU 23 24 extern void cpu_post_exec_02(ulong *code, ulong op1, ulong op2); 25 26 int cpu_post_test_multi(void) 27 { 28 int ret = 0; 29 unsigned int i; 30 ulong src[27], dst[27]; 31 int flag = disable_interrupts(); 32 33 ulong code[] = { 34 ASM_LMW(5, 3, 0), /* lmw r5, 0(r3) */ 35 ASM_STMW(5, 4, 0), /* stmr r5, 0(r4) */ 36 ASM_BLR, /* blr */ 37 }; 38 39 for (i = 0; i < ARRAY_SIZE(src); ++i) { 40 src[i] = i; 41 dst[i] = 0; 42 } 43 44 cpu_post_exec_02(code, (ulong) src, (ulong) dst); 45 46 ret = memcmp(src, dst, sizeof(dst)) == 0 ? 0 : -1; 47 48 if (ret != 0) 49 post_log("Error at multi test !\n"); 50 51 if (flag) 52 enable_interrupts(); 53 54 return ret; 55 } 56 57 #endif 58