/* * Copyright (C) 1998-2003 Hewlett-Packard Co * David Mosberger-Tang */ #include .bss .align 16 stack_mem: .skip 16834 .text /* This needs to be defined because lib/string.c:strlcat() calls it in case of error... */ GLOBAL_ENTRY(printk) break 0 END(printk) GLOBAL_ENTRY(_start) .prologue .save rp, r0 .body movl gp = __gp movl sp = stack_mem bsw.1 br.call.sptk.many rp=start_bootloader END(_start) /* * Set a break point on this function so that symbols are available to set breakpoints in * the kernel being debugged. */ GLOBAL_ENTRY(debug_break) br.ret.sptk.many b0 END(debug_break) GLOBAL_ENTRY(ssc) .regstk 5,0,0,0 mov r15=in4 break 0x80001 br.ret.sptk.many b0 END(ssc) GLOBAL_ENTRY(jmp_to_kernel) .regstk 2,0,0,0 mov r28=in0 mov b7=in1 br.sptk.few b7 END(jmp_to_kernel) GLOBAL_ENTRY(pal_emulator_static) mov r8=-1 mov r9=256 ;; cmp.gtu p6,p7=r9,r28 /* r28 <= 255? */ (p6) br.cond.sptk.few static ;; mov r9=512 ;; cmp.gtu p6,p7=r9,r28 (p6) br.cond.sptk.few stacked ;; static: cmp.eq p6,p7=6,r28 /* PAL_PTCE_INFO */ (p7) br.cond.sptk.few 1f ;; mov r8=0 /* status = 0 */ movl r9=0x100000000 /* tc.base */ movl r10=0x0000000200000003 /* count[0], count[1] */ movl r11=0x1000000000002000 /* stride[0], stride[1] */ br.cond.sptk.few rp 1: cmp.eq p6,p7=14,r28 /* PAL_FREQ_RATIOS */ (p7) br.cond.sptk.few 1f mov r8=0 /* status = 0 */ movl r9 =0x100000064 /* proc_ratio (1/100) */ movl r10=0x100000100 /* bus_ratio<<32 (1/256) */ movl r11=0x100000064 /* itc_ratio<<32 (1/100) */ ;; 1: cmp.eq p6,p7=19,r28 /* PAL_RSE_INFO */ (p7) br.cond.sptk.few 1f mov r8=0 /* status = 0 */ mov r9=96 /* num phys stacked */ mov r10=0 /* hints */ mov r11=0 br.cond.sptk.few rp 1: cmp.eq p6,p7=1,r28 /* PAL_CACHE_FLUSH */ (p7) br.cond.sptk.few 1f mov r9=ar.lc movl r8=524288 /* flush 512k million cache lines (16MB) */ ;; mov ar.lc=r8 movl r8=0xe000000000000000 ;; .loop: fc r8 add r8=32,r8 br.cloop.sptk.few .loop sync.i ;; srlz.i ;; mov ar.lc=r9 mov r8=r0 ;; 1: cmp.eq p6,p7=15,r28 /* PAL_PERF_MON_INFO */ (p7) br.cond.sptk.few 1f mov r8=0 /* status = 0 */ movl r9 =0x08122f04 /* generic=4 width=47 retired=8 cycles=18 */ mov r10=0 /* reserved */ mov r11=0 /* reserved */ mov r16=0xffff /* implemented PMC */ mov r17=0x3ffff /* implemented PMD */ add r18=8,r29 /* second index */ ;; st8 [r29]=r16,16 /* store implemented PMC */ st8 [r18]=r0,16 /* clear remaining bits */ ;; st8 [r29]=r0,16 /* clear remaining bits */ st8 [r18]=r0,16 /* clear remaining bits */ ;; st8 [r29]=r17,16 /* store implemented PMD */ st8 [r18]=r0,16 /* clear remaining bits */ mov r16=0xf0 /* cycles count capable PMC */ ;; st8 [r29]=r0,16 /* clear remaining bits */ st8 [r18]=r0,16 /* clear remaining bits */ mov r17=0xf0 /* retired bundles capable PMC */ ;; st8 [r29]=r16,16 /* store cycles capable */ st8 [r18]=r0,16 /* clear remaining bits */ ;; st8 [r29]=r0,16 /* clear remaining bits */ st8 [r18]=r0,16 /* clear remaining bits */ ;; st8 [r29]=r17,16 /* store retired bundle capable */ st8 [r18]=r0,16 /* clear remaining bits */ ;; st8 [r29]=r0,16 /* clear remaining bits */ st8 [r18]=r0,16 /* clear remaining bits */ ;; 1: br.cond.sptk.few rp stacked: br.ret.sptk.few rp END(pal_emulator_static)