summaryrefslogtreecommitdiff
path: root/arch/mips/mach-mscc/lowlevel_init.S
blob: 91f29ae252cc55308f1c0a3dec32fcb08131e617 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/* 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)