57 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu>
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2007-2009 PetaLogix
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2006 Atmark Techno, Inc.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This file is subject to the terms and conditions of the GNU General Public
							 | 
						||
| 
								 | 
							
								 * License. See the file "COPYING" in the main directory of this archive
							 | 
						||
| 
								 | 
							
								 * for more details.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <linux/linkage.h>
							 | 
						||
| 
								 | 
							
								#include <asm/thread_info.h>
							 | 
						||
| 
								 | 
							
								#include <asm/page.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									.text
							 | 
						||
| 
								 | 
							
								ENTRY(_start)
							 | 
						||
| 
								 | 
							
									mfs	r1, rmsr
							 | 
						||
| 
								 | 
							
									andi	r1, r1, ~2
							 | 
						||
| 
								 | 
							
									mts	rmsr, r1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* save fdt to kernel location */
							 | 
						||
| 
								 | 
							
								/* r7 stores pointer to fdt blob */
							 | 
						||
| 
								 | 
							
									beqi	r7, no_fdt_arg
							 | 
						||
| 
								 | 
							
									or	r11, r0, r0 /* incremment */
							 | 
						||
| 
								 | 
							
									ori	r4, r0, TOPHYS(_fdt_start) /* save bram context */
							 | 
						||
| 
								 | 
							
									ori	r3, r0, (0x4000 - 4)
							 | 
						||
| 
								 | 
							
								_copy_fdt:
							 | 
						||
| 
								 | 
							
									lw	r12, r7, r11 /* r12 = r7 + r11 */
							 | 
						||
| 
								 | 
							
									sw	r12, r4, r11 /* addr[r4 + r11] = r12 */
							 | 
						||
| 
								 | 
							
									addik	r11, r11, 4 /* increment counting */
							 | 
						||
| 
								 | 
							
									bgtid	r3, _copy_fdt /* loop for all entries */
							 | 
						||
| 
								 | 
							
									addik	r3, r3, -4 /* descrement loop */
							 | 
						||
| 
								 | 
							
								no_fdt_arg:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Initialize small data anchors */
							 | 
						||
| 
								 | 
							
									la	r13, r0, _KERNEL_SDA_BASE_
							 | 
						||
| 
								 | 
							
									la	r2, r0, _KERNEL_SDA2_BASE_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Initialize stack pointer */
							 | 
						||
| 
								 | 
							
									la	r1, r0, init_thread_union + THREAD_SIZE - 4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Initialize r31 with current task address */
							 | 
						||
| 
								 | 
							
									la	r31, r0, init_task
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/*
							 | 
						||
| 
								 | 
							
									 * Call platform dependent initialize function.
							 | 
						||
| 
								 | 
							
									 * Please see $(ARCH)/mach-$(SUBARCH)/setup.c for
							 | 
						||
| 
								 | 
							
									 * the function.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									la	r8, r0, machine_early_init
							 | 
						||
| 
								 | 
							
									brald	r15, r8
							 | 
						||
| 
								 | 
							
									nop
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									la	r15, r0, machine_halt
							 | 
						||
| 
								 | 
							
									braid	start_kernel
							 | 
						||
| 
								 | 
							
									nop
							 |