Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/ia64/hp/sim/boot/boot_head.S
15159 views
1
/*
2
* Copyright (C) 1998-2003 Hewlett-Packard Co
3
* David Mosberger-Tang <[email protected]>
4
*/
5
6
#include <asm/asmmacro.h>
7
#include <asm/pal.h>
8
9
.bss
10
.align 16
11
stack_mem:
12
.skip 16834
13
14
.text
15
16
/* This needs to be defined because lib/string.c:strlcat() calls it in case of error... */
17
GLOBAL_ENTRY(printk)
18
break 0
19
END(printk)
20
21
GLOBAL_ENTRY(_start)
22
.prologue
23
.save rp, r0
24
.body
25
movl gp = __gp
26
movl sp = stack_mem+16384-16
27
bsw.1
28
br.call.sptk.many rp=start_bootloader
29
0: nop 0 /* dummy nop to make unwinding work */
30
END(_start)
31
32
/*
33
* Set a break point on this function so that symbols are available to set breakpoints in
34
* the kernel being debugged.
35
*/
36
GLOBAL_ENTRY(debug_break)
37
br.ret.sptk.many b0
38
END(debug_break)
39
40
GLOBAL_ENTRY(ssc)
41
.regstk 5,0,0,0
42
mov r15=in4
43
break 0x80001
44
br.ret.sptk.many b0
45
END(ssc)
46
47
GLOBAL_ENTRY(jmp_to_kernel)
48
.regstk 2,0,0,0
49
mov r28=in0
50
mov b7=in1
51
br.sptk.few b7
52
END(jmp_to_kernel)
53
54
/*
55
* r28 contains the index of the PAL function
56
* r29--31 the args
57
* Return values in ret0--3 (r8--11)
58
*/
59
GLOBAL_ENTRY(pal_emulator_static)
60
mov r8=-1
61
mov r9=256
62
;;
63
cmp.gtu p6,p7=r9,r28 /* r28 <= 255? */
64
(p6) br.cond.sptk.few static
65
;;
66
mov r9=512
67
;;
68
cmp.gtu p6,p7=r9,r28
69
(p6) br.cond.sptk.few stacked
70
;;
71
static: cmp.eq p6,p7=PAL_PTCE_INFO,r28
72
(p7) br.cond.sptk.few 1f
73
;;
74
mov r8=0 /* status = 0 */
75
movl r9=0x100000000 /* tc.base */
76
movl r10=0x0000000200000003 /* count[0], count[1] */
77
movl r11=0x1000000000002000 /* stride[0], stride[1] */
78
br.cond.sptk.few rp
79
1: cmp.eq p6,p7=PAL_FREQ_RATIOS,r28
80
(p7) br.cond.sptk.few 1f
81
mov r8=0 /* status = 0 */
82
movl r9 =0x100000064 /* proc_ratio (1/100) */
83
movl r10=0x100000100 /* bus_ratio<<32 (1/256) */
84
movl r11=0x100000064 /* itc_ratio<<32 (1/100) */
85
;;
86
1: cmp.eq p6,p7=PAL_RSE_INFO,r28
87
(p7) br.cond.sptk.few 1f
88
mov r8=0 /* status = 0 */
89
mov r9=96 /* num phys stacked */
90
mov r10=0 /* hints */
91
mov r11=0
92
br.cond.sptk.few rp
93
1: cmp.eq p6,p7=PAL_CACHE_FLUSH,r28 /* PAL_CACHE_FLUSH */
94
(p7) br.cond.sptk.few 1f
95
mov r9=ar.lc
96
movl r8=524288 /* flush 512k million cache lines (16MB) */
97
;;
98
mov ar.lc=r8
99
movl r8=0xe000000000000000
100
;;
101
.loop: fc r8
102
add r8=32,r8
103
br.cloop.sptk.few .loop
104
sync.i
105
;;
106
srlz.i
107
;;
108
mov ar.lc=r9
109
mov r8=r0
110
;;
111
1: cmp.eq p6,p7=PAL_PERF_MON_INFO,r28
112
(p7) br.cond.sptk.few 1f
113
mov r8=0 /* status = 0 */
114
movl r9 =0x08122f04 /* generic=4 width=47 retired=8 cycles=18 */
115
mov r10=0 /* reserved */
116
mov r11=0 /* reserved */
117
mov r16=0xffff /* implemented PMC */
118
mov r17=0x3ffff /* implemented PMD */
119
add r18=8,r29 /* second index */
120
;;
121
st8 [r29]=r16,16 /* store implemented PMC */
122
st8 [r18]=r0,16 /* clear remaining bits */
123
;;
124
st8 [r29]=r0,16 /* clear remaining bits */
125
st8 [r18]=r0,16 /* clear remaining bits */
126
;;
127
st8 [r29]=r17,16 /* store implemented PMD */
128
st8 [r18]=r0,16 /* clear remaining bits */
129
mov r16=0xf0 /* cycles count capable PMC */
130
;;
131
st8 [r29]=r0,16 /* clear remaining bits */
132
st8 [r18]=r0,16 /* clear remaining bits */
133
mov r17=0xf0 /* retired bundles capable PMC */
134
;;
135
st8 [r29]=r16,16 /* store cycles capable */
136
st8 [r18]=r0,16 /* clear remaining bits */
137
;;
138
st8 [r29]=r0,16 /* clear remaining bits */
139
st8 [r18]=r0,16 /* clear remaining bits */
140
;;
141
st8 [r29]=r17,16 /* store retired bundle capable */
142
st8 [r18]=r0,16 /* clear remaining bits */
143
;;
144
st8 [r29]=r0,16 /* clear remaining bits */
145
st8 [r18]=r0,16 /* clear remaining bits */
146
;;
147
1: cmp.eq p6,p7=PAL_VM_SUMMARY,r28
148
(p7) br.cond.sptk.few 1f
149
mov r8=0 /* status = 0 */
150
movl r9=0x2044040020F1865 /* num_tc_levels=2, num_unique_tcs=4 */
151
/* max_itr_entry=64, max_dtr_entry=64 */
152
/* hash_tag_id=2, max_pkr=15 */
153
/* key_size=24, phys_add_size=50, vw=1 */
154
movl r10=0x183C /* rid_size=24, impl_va_msb=60 */
155
;;
156
1: cmp.eq p6,p7=PAL_MEM_ATTRIB,r28
157
(p7) br.cond.sptk.few 1f
158
mov r8=0 /* status = 0 */
159
mov r9=0x80|0x01 /* NatPage|WB */
160
;;
161
1: br.cond.sptk.few rp
162
stacked:
163
br.ret.sptk.few rp
164
END(pal_emulator_static)
165
166