summaryrefslogtreecommitdiff
path: root/cpu/sh3/start.S
diff options
context:
space:
mode:
authorWolfgang Denk <wd@denx.de>2008-01-16 22:11:08 +0100
committerWolfgang Denk <wd@denx.de>2008-01-16 22:11:08 +0100
commite715888010768d1ac313bc0416854e8a941370aa (patch)
treec9dce6c79b28aab85b7973eda454ba44e178cad8 /cpu/sh3/start.S
parent4c9e98ace78e7de972adf7da7135a46ec0a4ee7e (diff)
parentf91d7ae5ca89acf9fa1ed1015dc078cf29581607 (diff)
downloadu-boot-imx-e715888010768d1ac313bc0416854e8a941370aa.zip
u-boot-imx-e715888010768d1ac313bc0416854e8a941370aa.tar.gz
u-boot-imx-e715888010768d1ac313bc0416854e8a941370aa.tar.bz2
Merge branch 'master' of git://www.denx.de/git/u-boot-sh
Diffstat (limited to 'cpu/sh3/start.S')
-rw-r--r--cpu/sh3/start.S77
1 files changed, 77 insertions, 0 deletions
diff --git a/cpu/sh3/start.S b/cpu/sh3/start.S
new file mode 100644
index 0000000..ee0bcdf
--- /dev/null
+++ b/cpu/sh3/start.S
@@ -0,0 +1,77 @@
+/*
+ * (C) Copyright 2007
+ * Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
+ *
+ * (C) Copyright 2007
+ * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <version.h>
+
+ .text
+ .align 2
+
+ .global _start
+_start:
+ mov.l ._lowlevel_init, r0
+100: bsrf r0
+ nop
+
+ bsr 1f
+ nop
+1: sts pr, r5
+ mov.l ._reloc_dst, r4
+ add #(_start-1b), r5
+ mov.l ._reloc_dst_end, r6
+
+2: mov.l @r5+, r1
+ mov.l r1, @r4
+ add #4, r4
+ cmp/hs r6, r4
+ bf 2b
+
+ mov.l ._bss_start, r4
+ mov.l ._bss_end, r5
+ mov #0, r1
+
+3: mov.l r1, @r4 /* bss clear */
+ add #4, r4
+ cmp/hs r5, r4
+ bf 3b
+
+ mov.l ._gd_init, r13 /* global data */
+ mov.l ._stack_init, r15 /* stack */
+
+ mov.l ._sh_generic_init, r0
+ jsr @r0
+ nop
+
+loop:
+ bra loop
+
+ .align 2
+
+._lowlevel_init: .long (lowlevel_init - (100b + 4))
+._reloc_dst: .long reloc_dst
+._reloc_dst_end: .long reloc_dst_end
+._bss_start: .long bss_start
+._bss_end: .long bss_end
+._gd_init: .long (_start - CFG_GBL_DATA_SIZE)
+._stack_init: .long (_start - CFG_GBL_DATA_SIZE - CFG_MALLOC_LEN - 16)
+._sh_generic_init: .long sh_generic_init