Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / ia64 / hp / sim / boot / boot_head.S
diff --git a/kernel/arch/ia64/hp/sim/boot/boot_head.S b/kernel/arch/ia64/hp/sim/boot/boot_head.S
new file mode 100644 (file)
index 0000000..8808565
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 1998-2003 Hewlett-Packard Co
+ *     David Mosberger-Tang <davidm@hpl.hp.com>
+ */
+
+#include <asm/asmmacro.h>
+#include <asm/pal.h>
+
+       .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+16384-16
+       bsw.1
+       br.call.sptk.many rp=start_bootloader
+0:     nop 0             /* dummy nop to make unwinding work */
+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)
+
+/*
+ * r28 contains the index of the PAL function
+ * r29--31 the args
+ * Return values in ret0--3 (r8--11)
+ */
+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=PAL_PTCE_INFO,r28
+(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=PAL_FREQ_RATIOS,r28
+(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=PAL_RSE_INFO,r28
+(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=PAL_CACHE_FLUSH,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=PAL_PERF_MON_INFO,r28
+(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:     cmp.eq p6,p7=PAL_VM_SUMMARY,r28
+(p7)   br.cond.sptk.few 1f
+       mov     r8=0                    /* status = 0  */
+       movl    r9=0x2044040020F1865    /* num_tc_levels=2, num_unique_tcs=4 */
+                                       /* max_itr_entry=64, max_dtr_entry=64 */
+                                       /* hash_tag_id=2, max_pkr=15 */
+                                       /* key_size=24, phys_add_size=50, vw=1 */
+       movl    r10=0x183C              /* rid_size=24, impl_va_msb=60 */
+       ;;
+1:     cmp.eq p6,p7=PAL_MEM_ATTRIB,r28
+(p7)   br.cond.sptk.few 1f
+       mov     r8=0                    /* status = 0 */
+       mov     r9=0x80|0x01            /* NatPage|WB */
+       ;;
+1:     br.cond.sptk.few rp
+stacked:
+       br.ret.sptk.few rp
+END(pal_emulator_static)