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