| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /* | 
					
						
							|  |  |  |  * Copyright (C) 1998-2003 Hewlett-Packard Co | 
					
						
							|  |  |  |  *	David Mosberger-Tang <davidm@hpl.hp.com>
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <asm/asmmacro.h> | 
					
						
							| 
									
										
										
										
											2005-08-24 17:13:00 -07:00
										 |  |  | #include <asm/pal.h> | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	.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 | 
					
						
							| 
									
										
										
										
											2005-08-22 17:50:00 -07:00
										 |  |  | 	movl sp = stack_mem+16384-16 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	bsw.1 | 
					
						
							|  |  |  | 	br.call.sptk.many rp=start_bootloader | 
					
						
							| 
									
										
										
										
											2007-08-09 16:54:27 -06:00
										 |  |  | 0:	nop 0		  /* dummy nop to make unwinding work */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 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) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-08-24 17:13:00 -07:00
										 |  |  | /* | 
					
						
							|  |  |  |  * r28 contains the index of the PAL function | 
					
						
							|  |  |  |  * r29--31 the args | 
					
						
							|  |  |  |  * Return values in ret0--3 (r8--11) | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 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 | 
					
						
							|  |  |  | 	;;
 | 
					
						
							| 
									
										
										
										
											2005-08-24 17:13:00 -07:00
										 |  |  | static:	cmp.eq p6,p7=PAL_PTCE_INFO,r28 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | (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 | 
					
						
							| 
									
										
										
										
											2005-08-24 17:13:00 -07:00
										 |  |  | 1:	cmp.eq p6,p7=PAL_FREQ_RATIOS,r28 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | (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) */ | 
					
						
							|  |  |  | 	;;
 | 
					
						
							| 
									
										
										
										
											2005-08-24 17:13:00 -07:00
										 |  |  | 1:	cmp.eq p6,p7=PAL_RSE_INFO,r28 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | (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 | 
					
						
							| 
									
										
										
										
											2005-08-24 17:13:00 -07:00
										 |  |  | 1:	cmp.eq p6,p7=PAL_CACHE_FLUSH,r28		/* PAL_CACHE_FLUSH */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | (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 | 
					
						
							|  |  |  | 	;;
 | 
					
						
							| 
									
										
										
										
											2005-08-24 17:13:00 -07:00
										 |  |  | 1:	cmp.eq p6,p7=PAL_PERF_MON_INFO,r28 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | (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  */ | 
					
						
							|  |  |  | 	;;
 | 
					
						
							| 
									
										
										
										
											2005-08-24 17:13:00 -07:00
										 |  |  | 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 */ | 
					
						
							|  |  |  | 	;;
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 1:	br.cond.sptk.few rp | 
					
						
							|  |  |  | stacked: | 
					
						
							|  |  |  | 	br.ret.sptk.few rp | 
					
						
							|  |  |  | END(pal_emulator_static) |