Blame view

post/lib_powerpc/string.c 1.62 KB
ad5bb451a   Wolfgang Denk   Restructure POST ...
1
2
3
4
  /*
   * (C) Copyright 2002
   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
5
   * SPDX-License-Identifier:	GPL-2.0+
ad5bb451a   Wolfgang Denk   Restructure POST ...
6
7
8
9
10
11
12
13
14
15
16
17
18
   */
  
  #include <common.h>
  
  /*
   * CPU test
   * Load/store string instructions:	lswi, stswi, lswx, stswx
   *
   * Several consecutive bytes from a source memory buffer are loaded
   * left to right into GPRs. After that, the bytes are stored
   * from the GPRs into a target memory buffer. The contents
   * of the source and target buffers are then compared.
   */
ad5bb451a   Wolfgang Denk   Restructure POST ...
19
20
  #include <post.h>
  #include "cpu_asm.h"
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
21
  #if CONFIG_POST & CONFIG_SYS_POST_CPU
ad5bb451a   Wolfgang Denk   Restructure POST ...
22
23
24
25
26
27
28
29
30
31
  
  extern void cpu_post_exec_02 (ulong *code, ulong op1, ulong op2);
  extern void cpu_post_exec_04 (ulong *code, ulong op1, ulong op2, ulong op3,
      ulong op4);
  
  #include <bedbug/regs.h>
  int cpu_post_test_string (void)
  {
      int ret = 0;
      unsigned int i;
f2302d443   Stefan Roese   Fix merge problems
32
      int flag = disable_interrupts();
ad5bb451a   Wolfgang Denk   Restructure POST ...
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  
      if (ret == 0)
      {
  	char src [31], dst [31];
  
  	ulong code[] =
  	{
  	    ASM_LSWI(5, 3, 31),
  	    ASM_STSWI(5, 4, 31),
  	    ASM_BLR,
  	};
  
  	for (i = 0; i < sizeof(src); i ++)
  	{
  	    src[i] = (char) i;
  	    dst[i] = 0;
  	}
  
  	cpu_post_exec_02(code, (ulong)src, (ulong)dst);
  
  	ret = memcmp(src, dst, sizeof(dst)) == 0 ? 0 : -1;
      }
  
      if (ret == 0)
      {
  	char src [95], dst [95];
  
  	ulong code[] =
  	{
  	    ASM_LSWX(8, 3, 5),
  	    ASM_STSWX(8, 4, 5),
  	    ASM_BLR,
  	};
  
  	for (i = 0; i < sizeof(src); i ++)
  	{
  	    src[i] = (char) i;
  	    dst[i] = 0;
  	}
  
  	cpu_post_exec_04(code, (ulong)src, (ulong)dst, 0, sizeof(src));
  
  	ret = memcmp(src, dst, sizeof(dst)) == 0 ? 0 : -1;
      }
  
      if (ret != 0)
      {
  	post_log ("Error at string test !
  ");
      }
f2302d443   Stefan Roese   Fix merge problems
83
84
      if (flag)
  	enable_interrupts();
ad5bb451a   Wolfgang Denk   Restructure POST ...
85
86
87
88
      return ret;
  }
  
  #endif