46 lines
		
	
	
		
			817 B
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			817 B
		
	
	
	
		
			ArmAsm
		
	
	
	
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
 | 
						|
/*
 | 
						|
 * Copyright (c) 2018 Microsemi Corporation
 | 
						|
 */
 | 
						|
 | 
						|
#include <asm/asm.h>
 | 
						|
#include <asm/regdef.h>
 | 
						|
 | 
						|
    .set noreorder
 | 
						|
    .extern     vcoreiii_tlb_init
 | 
						|
    .extern     vcoreiii_ddr_init
 | 
						|
#ifdef CONFIG_SOC_LUTON
 | 
						|
    .extern     pll_init
 | 
						|
#endif
 | 
						|
 | 
						|
LEAF(lowlevel_init)
 | 
						|
	/*
 | 
						|
	 * As we have no stack yet, we can assume the restricted
 | 
						|
	 * luxury of the sX-registers without saving them
 | 
						|
	 */
 | 
						|
 | 
						|
	/* Modify ra/s0 such we return to physical NOR location */
 | 
						|
	li	t0, 0x0fffffff
 | 
						|
	li	t1, CONFIG_SYS_TEXT_BASE
 | 
						|
	and	s0, ra, t0
 | 
						|
	add	s0, s0, t1
 | 
						|
 | 
						|
	jal	vcoreiii_tlb_init
 | 
						|
	 nop
 | 
						|
 | 
						|
#ifdef CONFIG_SOC_LUTON
 | 
						|
	jal	pll_init
 | 
						|
	 nop
 | 
						|
#endif
 | 
						|
 | 
						|
	/* Initialize DDR controller to enable stack/gd/heap */
 | 
						|
0:
 | 
						|
	jal	vcoreiii_ddr_init
 | 
						|
	 nop
 | 
						|
	bnez	v0, 0b		/* Retry on error */
 | 
						|
	 nop
 | 
						|
 | 
						|
	jr	s0
 | 
						|
	 nop
 | 
						|
	END(lowlevel_init)
 |