]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - arch/ia64/hp/sim/boot/boot_head.S
Linux-2.6.12-rc2
[mirror_ubuntu-artful-kernel.git] / arch / ia64 / hp / sim / boot / boot_head.S
1 /*
2 * Copyright (C) 1998-2003 Hewlett-Packard Co
3 * David Mosberger-Tang <davidm@hpl.hp.com>
4 */
5
6 #include <asm/asmmacro.h>
7
8 .bss
9 .align 16
10 stack_mem:
11 .skip 16834
12
13 .text
14
15 /* This needs to be defined because lib/string.c:strlcat() calls it in case of error... */
16 GLOBAL_ENTRY(printk)
17 break 0
18 END(printk)
19
20 GLOBAL_ENTRY(_start)
21 .prologue
22 .save rp, r0
23 .body
24 movl gp = __gp
25 movl sp = stack_mem
26 bsw.1
27 br.call.sptk.many rp=start_bootloader
28 END(_start)
29
30 /*
31 * Set a break point on this function so that symbols are available to set breakpoints in
32 * the kernel being debugged.
33 */
34 GLOBAL_ENTRY(debug_break)
35 br.ret.sptk.many b0
36 END(debug_break)
37
38 GLOBAL_ENTRY(ssc)
39 .regstk 5,0,0,0
40 mov r15=in4
41 break 0x80001
42 br.ret.sptk.many b0
43 END(ssc)
44
45 GLOBAL_ENTRY(jmp_to_kernel)
46 .regstk 2,0,0,0
47 mov r28=in0
48 mov b7=in1
49 br.sptk.few b7
50 END(jmp_to_kernel)
51
52
53 GLOBAL_ENTRY(pal_emulator_static)
54 mov r8=-1
55 mov r9=256
56 ;;
57 cmp.gtu p6,p7=r9,r28 /* r28 <= 255? */
58 (p6) br.cond.sptk.few static
59 ;;
60 mov r9=512
61 ;;
62 cmp.gtu p6,p7=r9,r28
63 (p6) br.cond.sptk.few stacked
64 ;;
65 static: cmp.eq p6,p7=6,r28 /* PAL_PTCE_INFO */
66 (p7) br.cond.sptk.few 1f
67 ;;
68 mov r8=0 /* status = 0 */
69 movl r9=0x100000000 /* tc.base */
70 movl r10=0x0000000200000003 /* count[0], count[1] */
71 movl r11=0x1000000000002000 /* stride[0], stride[1] */
72 br.cond.sptk.few rp
73 1: cmp.eq p6,p7=14,r28 /* PAL_FREQ_RATIOS */
74 (p7) br.cond.sptk.few 1f
75 mov r8=0 /* status = 0 */
76 movl r9 =0x100000064 /* proc_ratio (1/100) */
77 movl r10=0x100000100 /* bus_ratio<<32 (1/256) */
78 movl r11=0x100000064 /* itc_ratio<<32 (1/100) */
79 ;;
80 1: cmp.eq p6,p7=19,r28 /* PAL_RSE_INFO */
81 (p7) br.cond.sptk.few 1f
82 mov r8=0 /* status = 0 */
83 mov r9=96 /* num phys stacked */
84 mov r10=0 /* hints */
85 mov r11=0
86 br.cond.sptk.few rp
87 1: cmp.eq p6,p7=1,r28 /* PAL_CACHE_FLUSH */
88 (p7) br.cond.sptk.few 1f
89 mov r9=ar.lc
90 movl r8=524288 /* flush 512k million cache lines (16MB) */
91 ;;
92 mov ar.lc=r8
93 movl r8=0xe000000000000000
94 ;;
95 .loop: fc r8
96 add r8=32,r8
97 br.cloop.sptk.few .loop
98 sync.i
99 ;;
100 srlz.i
101 ;;
102 mov ar.lc=r9
103 mov r8=r0
104 ;;
105 1: cmp.eq p6,p7=15,r28 /* PAL_PERF_MON_INFO */
106 (p7) br.cond.sptk.few 1f
107 mov r8=0 /* status = 0 */
108 movl r9 =0x08122f04 /* generic=4 width=47 retired=8 cycles=18 */
109 mov r10=0 /* reserved */
110 mov r11=0 /* reserved */
111 mov r16=0xffff /* implemented PMC */
112 mov r17=0x3ffff /* implemented PMD */
113 add r18=8,r29 /* second index */
114 ;;
115 st8 [r29]=r16,16 /* store implemented PMC */
116 st8 [r18]=r0,16 /* clear remaining bits */
117 ;;
118 st8 [r29]=r0,16 /* clear remaining bits */
119 st8 [r18]=r0,16 /* clear remaining bits */
120 ;;
121 st8 [r29]=r17,16 /* store implemented PMD */
122 st8 [r18]=r0,16 /* clear remaining bits */
123 mov r16=0xf0 /* cycles count capable PMC */
124 ;;
125 st8 [r29]=r0,16 /* clear remaining bits */
126 st8 [r18]=r0,16 /* clear remaining bits */
127 mov r17=0xf0 /* retired bundles capable PMC */
128 ;;
129 st8 [r29]=r16,16 /* store cycles capable */
130 st8 [r18]=r0,16 /* clear remaining bits */
131 ;;
132 st8 [r29]=r0,16 /* clear remaining bits */
133 st8 [r18]=r0,16 /* clear remaining bits */
134 ;;
135 st8 [r29]=r17,16 /* store retired bundle 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 1: br.cond.sptk.few rp
142 stacked:
143 br.ret.sptk.few rp
144 END(pal_emulator_static)