xref: /rk3399_rockchip-uboot/arch/sh/lib/start.S (revision 3500581ef3461c7cf5ca6fef7b45dd2dee0df28e)
1*3500581eSVladimir Zapolskiy/*
2*3500581eSVladimir Zapolskiy * Copyright (C) 2016 Vladimir Zapolskiy <vz@mleia.com>
3*3500581eSVladimir Zapolskiy * Copyright (C) 2007, 2010 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
4*3500581eSVladimir Zapolskiy *
5*3500581eSVladimir Zapolskiy * SPDX-License-Identifier:	GPL-2.0+
6*3500581eSVladimir Zapolskiy */
7*3500581eSVladimir Zapolskiy
8*3500581eSVladimir Zapolskiy#include <asm-offsets.h>
9*3500581eSVladimir Zapolskiy#include <config.h>
10*3500581eSVladimir Zapolskiy
11*3500581eSVladimir Zapolskiy	.text
12*3500581eSVladimir Zapolskiy	.align	2
13*3500581eSVladimir Zapolskiy
14*3500581eSVladimir Zapolskiy	.global	_start
15*3500581eSVladimir Zapolskiy_start:
16*3500581eSVladimir Zapolskiy#ifdef CONFIG_CPU_SH2
17*3500581eSVladimir Zapolskiy	.long 0x00000010        /* Ppower ON reset PC*/
18*3500581eSVladimir Zapolskiy	.long 0x00000000
19*3500581eSVladimir Zapolskiy	.long 0x00000010        /* Manual reset PC */
20*3500581eSVladimir Zapolskiy	.long 0x00000000
21*3500581eSVladimir Zapolskiy#endif
22*3500581eSVladimir Zapolskiy	mov.l	._lowlevel_init, r0
23*3500581eSVladimir Zapolskiy100:	bsrf	r0
24*3500581eSVladimir Zapolskiy	nop
25*3500581eSVladimir Zapolskiy
26*3500581eSVladimir Zapolskiy	bsr	1f
27*3500581eSVladimir Zapolskiy	nop
28*3500581eSVladimir Zapolskiy1:	sts	pr, r5
29*3500581eSVladimir Zapolskiy	mov.l	._reloc_dst, r4
30*3500581eSVladimir Zapolskiy	add	#(_start-1b), r5
31*3500581eSVladimir Zapolskiy	mov.l	._reloc_dst_end, r6
32*3500581eSVladimir Zapolskiy
33*3500581eSVladimir Zapolskiy2:	mov.l	@r5+, r1
34*3500581eSVladimir Zapolskiy	mov.l	r1, @r4
35*3500581eSVladimir Zapolskiy	add	#4, r4
36*3500581eSVladimir Zapolskiy	cmp/hs	r6, r4
37*3500581eSVladimir Zapolskiy	bf	2b
38*3500581eSVladimir Zapolskiy
39*3500581eSVladimir Zapolskiy	mov.l	._bss_start, r4
40*3500581eSVladimir Zapolskiy	mov.l	._bss_end, r5
41*3500581eSVladimir Zapolskiy	mov	#0, r1
42*3500581eSVladimir Zapolskiy
43*3500581eSVladimir Zapolskiy3:	mov.l	r1, @r4			/* bss clear */
44*3500581eSVladimir Zapolskiy	add	#4, r4
45*3500581eSVladimir Zapolskiy	cmp/hs	r5, r4
46*3500581eSVladimir Zapolskiy	bf	3b
47*3500581eSVladimir Zapolskiy
48*3500581eSVladimir Zapolskiy	mov.l	._gd_init, r13		/* global data */
49*3500581eSVladimir Zapolskiy	mov.l	._stack_init, r15	/* stack */
50*3500581eSVladimir Zapolskiy
51*3500581eSVladimir Zapolskiy	mov.l	._sh_generic_init, r0
52*3500581eSVladimir Zapolskiy	jsr	@r0
53*3500581eSVladimir Zapolskiy	mov     #0, r4
54*3500581eSVladimir Zapolskiy
55*3500581eSVladimir Zapolskiyloop:
56*3500581eSVladimir Zapolskiy	bra	loop
57*3500581eSVladimir Zapolskiy
58*3500581eSVladimir Zapolskiy	.align	2
59*3500581eSVladimir Zapolskiy
60*3500581eSVladimir Zapolskiy._lowlevel_init:	.long	(lowlevel_init - (100b + 4))
61*3500581eSVladimir Zapolskiy._reloc_dst:		.long	_start
62*3500581eSVladimir Zapolskiy._reloc_dst_end:	.long	reloc_dst_end
63*3500581eSVladimir Zapolskiy._bss_start:		.long	bss_start
64*3500581eSVladimir Zapolskiy._bss_end:		.long	bss_end
65*3500581eSVladimir Zapolskiy._gd_init:		.long	(_start - GENERATED_GBL_DATA_SIZE)
66*3500581eSVladimir Zapolskiy._stack_init:		.long	(_start - GENERATED_GBL_DATA_SIZE - CONFIG_SYS_MALLOC_LEN - 16)
67*3500581eSVladimir Zapolskiy._sh_generic_init:	.long	board_init_f
68