source: trunk/loader/ixus800_sd700/resetcode/main.c @ 515

Revision 515, 1.8 KB checked in by reyalp, 5 years ago (diff)

set svn:eol-style and fix files that had mixed line endings. See http://chdk.setepontos.com/index.php/topic,2145.15.html

  • Property svn:eol-style set to native
Line 
1
2/*
3 * Operating system has died. Known functions will be killed
4 * after memmove.
5 *
6 * Make sure stack is not used.
7 */
8
9void __attribute__((noreturn)) copy_and_restart(void *dst_void, const void *src_void, long length)
10{
11{
12  char *dst = dst_void;
13  const char *src = src_void;
14
15  if (src < dst && dst < src + length)
16    {
17      /* Have to copy backwards */
18      src += length;
19      dst += length;
20      while (length--)
21        {
22          *--dst = *--src;
23        }
24    }
25  else
26    {
27      while (length--)
28        {
29          *dst++ = *src++;
30        }
31    }
32}
33
34    asm volatile(
35        "MRS     R1, CPSR\n"
36        "BIC     R1, R1, #0x3F\n"
37        "ORR     R1, R1, #0xD3\n"
38        "MSR     CPSR_cf, R1\n"
39
40        "LDR     R2, =0xC0200000\n"
41        "MOV     R1, #0xFFFFFFFF\n"
42        "STR     R1, [R2,#0x10C]\n"
43        "STR     R1, [R2,#0xC]\n"
44        "STR     R1, [R2,#0x1C]\n"
45        "STR     R1, [R2,#0x2C]\n"
46        "STR     R1, [R2,#0x3C]\n"
47        "STR     R1, [R2,#0x4C]\n"
48        "STR     R1, [R2,#0x5C]\n"
49        "STR     R1, [R2,#0x6C]\n"
50        "STR     R1, [R2,#0x7C]\n"
51        "STR     R1, [R2,#0x8C]\n"
52        "STR     R1, [R2,#0x9C]\n"
53        "STR     R1, [R2,#0xAC]\n"
54        "STR     R1, [R2,#0xBC]\n"
55        "STR     R1, [R2,#0xCC]\n"
56        "STR     R1, [R2,#0xDC]\n"
57        "STR     R1, [R2,#0xEC]\n"
58        "STR     R1, [R2,#0xFC]\n"
59
60        "MOV     R1, #0x78\n"
61        "MCR     p15, 0, R1,c1,c0\n"
62        "MOV     R1, #0\n"
63        "MCR     p15, 0, R1,c7,c10, 4\n"
64        "MCR     p15, 0, R1,c7,c5\n"
65        "MCR     p15, 0, R1,c7,c6\n"
66        "MOV     R2, #0x40000000\n"
67        "ORR     R1, R2, #6\n"
68        "MCR     p15, 0, R1,c9,c1\n"
69        "ORR     R1, R1, #6\n"
70        "MCR     p15, 0, R1,c9,c1, 1\n"
71        "MRC     p15, 0, R1,c1,c0\n"
72        "ORR     R1, R1, #0x50000\n"
73        "MCR     p15, 0, R1,c1,c0\n"
74
75        "MOV     R3, #0xFF0\n"
76        "LDR     R1, =0x12345678\n"
77        "ADD     R3, R3, #0x4000000C\n"
78        "STR     R1, [R3]\n"
79
80        "MOV     SP, #0x1900\n"
81        "MOV     LR, PC\n"
82        "MOV     PC, %0\n"
83    : : "r"(dst_void) : "memory","r1","r2","r3");
84
85    while(1);
86}
Note: See TracBrowser for help on using the repository browser.