Blame view

drivers/watchdog/octeon-wdt-nmi.S 1.34 KB
4c076fb41   David Daney   WATCHDOG: Add wat...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
  /*
   * This file is subject to the terms and conditions of the GNU General Public
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
   *
   * Copyright (C) 2007 Cavium Networks
   */
  #include <asm/asm.h>
  #include <asm/regdef.h>
  
  #define SAVE_REG(r)	sd $r, -32768+6912-(32-r)*8($0)
  
          NESTED(octeon_wdt_nmi_stage2, 0, sp)
  	.set 	push
  	.set 	noreorder
  	.set 	noat
  	/* Save all registers to the top CVMSEG. This shouldn't
  	 * corrupt any state used by the kernel. Also all registers
  	 * should have the value right before the NMI. */
  	SAVE_REG(0)
  	SAVE_REG(1)
  	SAVE_REG(2)
  	SAVE_REG(3)
  	SAVE_REG(4)
  	SAVE_REG(5)
  	SAVE_REG(6)
  	SAVE_REG(7)
  	SAVE_REG(8)
  	SAVE_REG(9)
  	SAVE_REG(10)
  	SAVE_REG(11)
  	SAVE_REG(12)
  	SAVE_REG(13)
  	SAVE_REG(14)
  	SAVE_REG(15)
  	SAVE_REG(16)
  	SAVE_REG(17)
  	SAVE_REG(18)
  	SAVE_REG(19)
  	SAVE_REG(20)
  	SAVE_REG(21)
  	SAVE_REG(22)
  	SAVE_REG(23)
  	SAVE_REG(24)
  	SAVE_REG(25)
  	SAVE_REG(26)
  	SAVE_REG(27)
  	SAVE_REG(28)
  	SAVE_REG(29)
  	SAVE_REG(30)
  	SAVE_REG(31)
  	/* Set the stack to begin right below the registers */
  	li	sp, -32768+6912-32*8
  	/* Load the address of the third stage handler */
  	dla	a0, octeon_wdt_nmi_stage3
  	/* Call the third stage handler */
  	jal	a0
  	/* a0 is the address of the saved registers */
  	 move	a0, sp
  	/* Loop forvever if we get here. */
  1:	b	1b
  	nop
  	.set pop
  	END(octeon_wdt_nmi_stage2)