1
2
3
4
5
6
7
8 #include <asm/asm.h>
9 #include <asm/regdef.h>
10
11 #define CVMSEG_BASE -32768
12 #define CVMSEG_SIZE 6912
13 #define SAVE_REG(r) sd $r, CVMSEG_BASE + CVMSEG_SIZE - ((32 - r) * 8)($0)
14
15 NESTED(octeon_wdt_nmi_stage2, 0, sp)
16 .set push
17 .set noreorder
18 .set noat
19
20 cache 1,0($0)
21
22 dmfc0 k0, $11, 7
23
24 dins k0, $0, 0, 6
25
26 ori k0, k0, 0x1c0 | 54
27
28 dmtc0 k0, $11, 7
29
30
31
32
33 dmfc0 k0, $31
34
35
36
37
38
39
40 SAVE_REG(0)
41 SAVE_REG(1)
42 SAVE_REG(2)
43 SAVE_REG(3)
44 SAVE_REG(4)
45 SAVE_REG(5)
46 SAVE_REG(6)
47 SAVE_REG(7)
48 SAVE_REG(8)
49 SAVE_REG(9)
50 SAVE_REG(10)
51 SAVE_REG(11)
52 SAVE_REG(12)
53 SAVE_REG(13)
54 SAVE_REG(14)
55 SAVE_REG(15)
56 SAVE_REG(16)
57 SAVE_REG(17)
58 SAVE_REG(18)
59 SAVE_REG(19)
60 SAVE_REG(20)
61 SAVE_REG(21)
62 SAVE_REG(22)
63 SAVE_REG(23)
64 SAVE_REG(24)
65 SAVE_REG(25)
66 SAVE_REG(26)
67 SAVE_REG(27)
68 SAVE_REG(28)
69 SAVE_REG(29)
70 SAVE_REG(30)
71 SAVE_REG(31)
72
73 dli a0, CVMSEG_SIZE - (33 * 8)
74 1: sd zero, CVMSEG_BASE(a0)
75 daddiu a0, a0, -8
76 bgez a0, 1b
77 nop
78
79 dli sp, CVMSEG_BASE + CVMSEG_SIZE - (32 * 8)
80
81 dla $25, octeon_wdt_nmi_stage3
82
83 jal $25
84
85 move a0, sp
86
87 2: b 2b
88 nop
89 .set pop
90 END(octeon_wdt_nmi_stage2)