xref: /OK3568_Linux_fs/kernel/arch/h8300/kernel/head_ram.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun#include <linux/sys.h>
4*4882a593Smuzhiyun#include <linux/init.h>
5*4882a593Smuzhiyun#include <asm/unistd.h>
6*4882a593Smuzhiyun#include <asm/setup.h>
7*4882a593Smuzhiyun#include <asm/segment.h>
8*4882a593Smuzhiyun#include <asm/linkage.h>
9*4882a593Smuzhiyun#include <asm/asm-offsets.h>
10*4882a593Smuzhiyun#include <asm/thread_info.h>
11*4882a593Smuzhiyun#include <asm/errno.h>
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun#if defined(CONFIG_CPU_H8300H)
14*4882a593Smuzhiyun	.h8300h
15*4882a593Smuzhiyun#define SYSCR 0xfee012
16*4882a593Smuzhiyun#define IRAMTOP 0xffff20
17*4882a593Smuzhiyun#endif
18*4882a593Smuzhiyun#if defined(CONFIG_CPU_H8S)
19*4882a593Smuzhiyun	.h8300s
20*4882a593Smuzhiyun#define INTCR 0xffff31
21*4882a593Smuzhiyun#define IRAMTOP 0xffc000
22*4882a593Smuzhiyun#endif
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun	__HEAD
25*4882a593Smuzhiyun	.global	_start
26*4882a593Smuzhiyun_start:
27*4882a593Smuzhiyun	mov.l	#IRAMTOP,sp
28*4882a593Smuzhiyun	/* .bss clear */
29*4882a593Smuzhiyun	mov.l	#_sbss,er5
30*4882a593Smuzhiyun	mov.l	#_ebss,er4
31*4882a593Smuzhiyun	sub.l	er5,er4
32*4882a593Smuzhiyun	shlr	er4
33*4882a593Smuzhiyun	shlr	er4
34*4882a593Smuzhiyun	sub.l	er2,er2
35*4882a593Smuzhiyun1:
36*4882a593Smuzhiyun	mov.l	er2,@er5
37*4882a593Smuzhiyun	adds	#4,er5
38*4882a593Smuzhiyun	dec.l	#1,er4
39*4882a593Smuzhiyun	bne	1b
40*4882a593Smuzhiyun	jsr	@h8300_fdt_init
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun	/* linux kernel start */
43*4882a593Smuzhiyun#if defined(CONFIG_CPU_H8300H)
44*4882a593Smuzhiyun	ldc	#0xd0,ccr	/* running kernel */
45*4882a593Smuzhiyun	mov.l	#SYSCR,er0
46*4882a593Smuzhiyun	bclr	#3,@er0
47*4882a593Smuzhiyun#endif
48*4882a593Smuzhiyun#if defined(CONFIG_CPU_H8S)
49*4882a593Smuzhiyun	ldc	#0x07,exr
50*4882a593Smuzhiyun	bclr	#4,@INTCR:8
51*4882a593Smuzhiyun	bset	#5,@INTCR:8	/* Interrupt mode 2 */
52*4882a593Smuzhiyun	ldc	#0x90,ccr	/* running kernel */
53*4882a593Smuzhiyun#endif
54*4882a593Smuzhiyun	mov.l	#init_thread_union,sp
55*4882a593Smuzhiyun	add.l	#0x2000,sp
56*4882a593Smuzhiyun	jsr	@start_kernel
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun1:
59*4882a593Smuzhiyun	bra	1b
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun	.end
62