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#include <asm/pal.h> 8 9 .bss 10 .align 16 11stack_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... */ 17GLOBAL_ENTRY(printk) 18 break 0 19END(printk) 20 21GLOBAL_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 290: nop 0 /* dummy nop to make unwinding work */ 30END(_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 */ 36GLOBAL_ENTRY(debug_break) 37 br.ret.sptk.many b0 38END(debug_break) 39 40GLOBAL_ENTRY(ssc) 41 .regstk 5,0,0,0 42 mov r15=in4 43 break 0x80001 44 br.ret.sptk.many b0 45END(ssc) 46 47GLOBAL_ENTRY(jmp_to_kernel) 48 .regstk 2,0,0,0 49 mov r28=in0 50 mov b7=in1 51 br.sptk.few b7 52END(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 */ 59GLOBAL_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 ;; 71static: 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 791: 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 ;; 861: 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 931: 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 ;; 1111: 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 ;; 1471: 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 ;; 1561: 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 ;; 1611: br.cond.sptk.few rp 162stacked: 163 br.ret.sptk.few rp 164END(pal_emulator_static) 165