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