OSDN Git Service

2011-12-15 Konrad Eisele <konrad@gaisler.com>
[pf3gnuchains/pf3gnuchains4x.git] / libgloss / sparc_leon / locore_svt_reset.S
1 /*
2  * Copyright (c) 2011 Aeroflex Gaisler
3  *
4  * BSD license:
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24
25
26 #include <asm-leon/head.h>
27                 
28         .section .text
29         /* ------- */
30         .weak   _hardreset_svt
31         .set    _hardreset_svt, __hardreset_svt
32         /* ------- */
33         .global _hardreset, _hardreset_svt_real
34         
35 ! reset entry point for single vector trapping. Try enable svt 
36 _hardreset_svt_real:
37         nop
38 __hardreset_svt:
39         mov     %psr, %l3
40         srl     %l3, 24, %g5
41         and     %g5, 3, %g5
42         subcc   %g5, 3, %g0             ! leon2: 0 or 2, leon3: 3
43         bne     .L2
44         nop
45         
46         mov     %asr17, %g5             ! set svt
47         set     1<<13,%g1
48         or      %g5,%g1,%g5
49         mov     %g5, %asr17
50         nop;  nop; nop
51         mov     %asr17,%g5              ! check svt
52         andcc   %g5, %g1, %g0
53         beq     .L2
54          nop
55
56         set _hardreset,%l3
57         jmp %l3
58          nop
59         
60 .L2:    ta    0x0                       ! no svt implemented (ether leon2 or svt != 1)
61         nop
62